Skip to content

docs: reconcile the GDD, README and TODO with the code - #18

Merged
vetr0s merged 1 commit into
mainfrom
docs/reconcile-with-code
Jul 12, 2026
Merged

docs: reconcile the GDD, README and TODO with the code#18
vetr0s merged 1 commit into
mainfrom
docs/reconcile-with-code

Conversation

@vetr0s

@vetr0s vetr0s commented Jul 12, 2026

Copy link
Copy Markdown
Owner

The GDD is the design source of truth and it had drifted. Every claim below was verified against the code, not guessed at. Docs only, no code changes, so this is independent of #16 and #17 and can merge in any order.

GDD (docs/VERSION 0.4.0 -> 0.5.0, PDF regenerated)

claim truth
dead-end ore falls over FALL_TICKS via item_begin_fall / world_update_falls none of the three symbols exist. The sim kills the ore the tick it dead-ends and emits a World_Event; the renderer turns that into a real-time Effect. That sim/visual split was a deliberate decision the doc never recorded, so it is written down now
real sprites ship for the machines and the ore assets/sprites/ is empty. The pipeline shipped (a PNG dropped in is baked into the binary, and the ore already falls back to the procedural diamond). Everything draws as a block today
the region starts at 2x2 it starts at 4x4 and caps at 128x128. The 2x2 example was dead on its own terms: the starter chain is 3 cells wide
money buys tiers along "three axes today", including belts two. Belt speed is still the one global sim tick, so a belt cannot have a tier until the per-entity cadence rework lands
four object types (color, visual design, tick lists) five, since the splitter. The GDD already described the splitter correctly elsewhere; these lists were never updated
save format is "binary or simple text, human-editable", with "periodic auto-save" a versioned binary blob, and there is no auto-save
keys 1-5, Escape quits 1-6, plus T, E, -/=, K, L, backtick. Escape pauses; it only quits from the title screen
shop shows cost on hover; ghost is green/red costs are always on screen (greyed when unaffordable), and the ghost has a third state (affordable-but-broke)
Milestone 3 in progress; Milestone 4 lists save/load + culling as future all three shipped

Also recorded the two invariants the audit made real: every running total saturates rather than wrapping i64, and "once per distinct upgrader" is a per-ore bitmap whose width is the cap on upgraders in the world.

README

Esc pauses (it said Quit). The controls table was missing 6, T, E, -/=, K and L. The Entity_Upgrader and World samples no longer matched the structs (the upgrader one would not even compile). The source tree omitted effects, sprites, menu and save. "Everything else lives behind the debug overlay" was false. And "Playing with it" never mentioned money, the shop, expansion, the splitter, save/load or the menus, while telling you to build a loop that, without a splitter, jams.

TODO / CHANGELOG

UPGRADER_MULT never existed; the overlay is backtick, not F3; the GDD is v0.5.0, not v0.2.0; interactive UI, the menu's Continue and viewport culling are done; and the Docs item described an SDL3 stack fix that had already happened. The CHANGELOG's one factual error (F3) is corrected, which the file already contradicted a section later.

Verification

Grepped the docs for every stale symbol and number and checked each against the source: PLAYABLE_START_SIDE = 4 vs "starts at 4x4", PLAYABLE_MAX_SIDE = 128 vs "128x128 cap", zero PNGs in assets/sprites/. typst compile clean. Game VERSION deliberately untouched at 0.7.0; only docs/VERSION (the GDD's own) moves.

The GDD is the design source of truth and it had drifted from the build. Every
claim below was checked against the code, not guessed at.

GDD (docs/VERSION 0.4.0 -> 0.5.0):

- Dead-end ore cited FALL_TICKS, item_begin_fall and world_update_falls. None of
  the three exist. The sim kills the ore on the tick it dead-ends and emits a
  World_Event; the renderer turns that into a real-time Effect. That sim/visual
  split was a deliberate design decision the doc never recorded, so it is written
  down now.
- Claimed real sprites ship for the machines and the ore. assets/sprites/ is
  empty. What shipped is the pipeline: a PNG dropped in is baked into the binary,
  and the ore already asks for its sprite and falls back to the procedural
  diamond. Everything draws as a block today.
- Said the region starts at 2x2. It starts at 4x4 and caps at 128x128. The 2x2
  example was dead on its own terms: the starter chain is 3 cells wide.
- Sold belt tiers as one of "three axes today". There are two. Belt speed is
  still the one global sim tick, so a belt cannot have a tier until the per-entity
  cadence rework lands.
- Listed four object types in the color, visual-design and tick sections. The
  splitter makes five. (The GDD did already describe the splitter correctly
  elsewhere; these lists were just never updated.)
- Said the save format was "binary or simple text, human-editable" with
  "periodic auto-save". It is a versioned binary blob, and there is no auto-save.
- Controls listed keys 1-5. They are 1-6, plus T, E, -/=, K, L and backtick, and
  Escape pauses rather than quitting.
- Shop costs are always on screen, not shown on hover, and the placement ghost has
  a third state (affordable-but-broke). Delete is a tool, not a click gesture.
- Milestone 3 was still "in progress" and Milestone 4 still listed save/load and
  viewport culling as future work. All three shipped.
- Recorded the two invariants the audit made real: every running total saturates
  rather than wrapping i64, and "once per distinct upgrader" is a per-ore bitmap
  whose width is the cap on upgraders in the world.

README: Esc pauses (it said Quit); the controls table was missing 6, T, E, -/=,
K and L; the Entity_Upgrader and World samples no longer matched the structs (the
upgrader sample did not even compile); the source tree omitted effects, sprites,
menu and save; "everything else lives behind the debug overlay" was false; and
"Playing with it" never mentioned money, the shop, expansion, the splitter, saving
or the menus, while telling you to build a loop that without a splitter jams.

TODO: UPGRADER_MULT never existed; the debug overlay is backtick, not F3; the GDD
is v0.5.0, not v0.2.0; interactive UI, Continue and viewport culling are done; and
the Docs item described a stack fix (SDL3) that had already happened.

CHANGELOG: one factual error, F3 -> backtick, which the file already contradicted
one section later.
@vetr0s
vetr0s merged commit 350775c into main Jul 12, 2026
3 checks passed
@vetr0s
vetr0s deleted the docs/reconcile-with-code branch July 12, 2026 20:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant