Dev mode (DEV_DEFAULT = true for now, backtick toggles it at runtime) unlocks
Explore mode, stratum browsing and the inspector panel. Without it the map
screen always opens in Walk mode and Tab and i are inert. The minimap now
lives in the lower part of the inspector panel; the player's own map will be
a different thing later.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Review findings: a district backbone anchored at a server inside a building
got no lanes because lane endpoints keyed on the node's own building; the
endpoint now resolves the construct the node stands in. Construct gates
preferred any open tile, including dead-end alleys; they now prefer the
largest open-grid component. City::validate gains GateSealed: every
construct gate must reach its district backbone over walkable Net tiles.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The game is called cyberpunk; the city generator is its first subsystem,
not the project. The citygen library keeps its name. README reframed
around the game.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- screen transitions snapshot the previous frame (ratatui swaps buffers
after draw, so the old snapshot was always blank); frame loop extracted
into a testable Runner
- .city loading rejects structurally inconsistent files: Grid deserialize
checks size vs data, load_city checks header vs body and runs
City::validate (now also checks Net link endpoints)
- saving from the map hands the live map screen back instead of a fresh
explore screen
- signage glyphs covered by the unicode-width test
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- README with run instructions and key reference
- lift the crate-level dead_code allowance; scope it to the anim library surface
- render paths tolerate a city that is still generating (district/building ids
without entries), found by driving the app through a pty
- status messages show in the status bar, not only inside the inspector
- buffered JSON export (26 s -> 0.4 s for a large city)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- arterials merge onto existing roads and keep distance otherwise
- isolated strata components get a drop-in public connector
- blockless districts fall back to the largest clean rectangle
- sliver districts merge into neighbours (district count is a maximum)
- dressing removes blocking features that cut tiles off the street
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Also guarantees one building per district and repairs interiors split
by crossing partitions, both found by the new validation.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Blocks now keep a one-tile margin from water, the map edge and other
districts and get an alley ring; lots are cut as back-to-back rows so
every building has an outdoor-facing wall for its door.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Also makes block fitting recursive so irregular district regions split
into several clean blocks instead of being dropped.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>