Status: active working process for the graybox phase. This document exists so implementation cadence, verification standards, and commit policy stay explicit instead of drifting between chat turns.
Each milestone should follow the same order:
- inspect the current code and content shape before changing behavior
- update the active plan when the next milestone is clear
- make simulation-domain changes first when a rule or state model is involved
- keep the Bevy client as a consumer of simulation state, not a second rules engine
- run formatting, tests, and clippy before calling a milestone stable
- update docs and only then cut a commit
This keeps the repository deterministic-first and prevents UI work from silently redefining the game rules.
A milestone is not considered stable until all of the following are true:
cargo fmt --allpassescargo testpasses for the full workspacecargo clippy --workspace --all-targets -- -D warningspassescargo run -p app_headlessis launch-checked for no-GPU environmentscargo run -p app_bevyis launch-checked as far as the current environment allows
If runtime launch is blocked by the environment, that limitation should be documented in the implementation plan and close-out.
When a feature touches any of these, it belongs in sim_core first:
- placement legality
- support rules
- port compatibility
- routing/network derivation
- contamination behavior
- objective evaluation
- save/load semantics
- deterministic command behavior
The client may visualize or inspect these rules, but it should not become the authoritative source for them.
The repository should be updated alongside the code when milestone scope changes:
- Implementation Plan: current completion state and next tasks
- First Slice: intended prototype defaults
- Decision Log: locked vs provisional decisions
README.md: brief operator-facing notes such as scenario selection or controls when they materially change
If the implementation diverges from the docs, either the code or the docs are wrong. Resolve it immediately rather than leaving it implicit.
Scenario additions need one more requirement:
- add or update a scripted victory-path test in
sim_core - document any new startup/scenario-selection behavior in
README.md
Save/load changes need the same discipline:
- rebuild derived state from authoritative fields on load when possible
- add a regression test for continued deterministic behavior after load
- reject invalid snapshots rather than silently accepting inconsistent derived data
Commits should happen at stable milestone boundaries, not after every tiny edit.
Good commit boundaries:
- a sim rule plus its tests
- a client readability batch plus its documentation updates
- a scenario/content expansion plus golden-path validation
Do not commit code that has not cleared the verification standard above.
The current graybox milestone order is:
- deterministic simulation foundation
- basic playable client shell
- diagnostics and connectivity readability
- contamination/support overlays and objective flexibility
- scenario breadth and internal playtest hardening
The next milestones should continue reducing playtest ambiguity before adding broad new content families.