The Stage-2 workshop brief and the consolidated three-scan coverage map (per-step decided-vs-open across the 4-step built-world pipeline) that became round 2's foundation. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.2 KiB
Coverage Map — Economic & Built World (round-1 scan result)
Three repo scans (decisions / workshop outcomes / docs+code) folded into one map. This is round 2's foundation: extend what's decided, build the fill seam, don't re-derive. Pipeline steps: 1 districts/streets · 2 footprints+interstitial · 3 building property tags · 4 interiors (lazy, door-triggered).
The headline
The district skeleton is implemented (skeleton_gen.rs + district_mix.rs +
block_irregularity.rs — deterministic, tested): district → 4×4 block grid with
layout mode, district-type mix, political archetype, founding orientation,
density, reservations. Everything below the skeleton is stubbed or absent.
Per-step status
| Step | Decided + built | Contract exists, fill is a stub | Genuinely open (round 2) |
|---|---|---|---|
| 1 districts/streets | hierarchy (D-094/222), layout mode (D-096), district-mix (D-194), archetypes (D-212–216), density (D-220), orientation (D-213), world-tier (D-218), execution tiers (D-200/206), provinces (D-205), seed (D-224) | chunk_layout, corridors, access_points, guarantee_audit — String/empty stubs on the skeleton |
street/corridor geometry algorithm; guarantee-audit engine (D-097/103) |
| 2 footprints/interstitial | data structs only (MultiBlockReservation, BlockPlacement) |
— | chunk fill is entirely unbuilt (FillChunk = no-op; ChunkGenWorker returns nothing): footprint subdivision within a block, parks/lots/gardens, building shapes, chunk tessellation |
| 3 building tags | zone-type taxonomy (31 RON files, D-142); tile condition (D-217); subbiome (D-210) | era, society_profile, zone_palette String stubs; zone-types not wired to the generator |
building-property-tag schema; cultural flavor (architecture_flavor); era-of-construction assignment |
| 4 interiors | — | floor_zones/vertical_corridors always empty; ZLevelLoadState::Ungenerated never fires |
deliberate Phase-6 void — door-open fill, room/hallway/utility grammar. NOT this workshop. Q-104 (floor↔voxel-z) gates it. |
The one real design conflict — resolve in round 2 (Step 3)
Abstract heritage roots (generator-architecture: Frost/Stone/…, D-104/D-105/ D-READY-9/10 — fully specified, what Miri used in round 1) vs the corridor cultural system (D-167 + world-generation — declared canonical, supersedes the roots, but the corridor→grammar mapping was left unbuilt). No migration exists.
Resolution (Jeroen): the architecture_flavor per-body profile — an array in
the body's wiki frontmatter, filled by Gemma (extending the D-223 naming
cluster), each entry a short architectural/cultural flavor with allowed and
blocked deviation elements; cultural_corridor is only a coarse backdrop.
Round 2 formally retires the abstract-roots grammar in favour of this.
Frozen-amber + lazy interiors is already canon
The planet-down-cascade brief states it verbatim: "Door-per-edge as boundary. Descriptor + catalog of what's behind the door. No spatial rendering of building interiors until player crosses threshold." Step 4 is established + Phase-6-deferred — we are not designing it here. "Frozen" = seed-locked geometry; condition / overlays / mutators write over it (D-100 DamageOverlay, D-217 condition).
Locked from the decision walk (inherit, don't reopen)
- Seed variance: economic strength authored-fixed (narrative inviolate); locations seed-varied; natural geography heightmap-fixed; names = pool (Sol exempt). (D-167/D-223/D-227)
- Frozen-amber enforcement: hard compile-time wall on structural derivation (no rolling-economy read); a condition/vitality overlay is the sanctioned reader of rolling state (derelict/abandoned/overgrown paint over frozen bones). Needs a D-198 precision amendment.
- Generator inputs:
CityGenerationContextgains morphology zone + the per-body cultural profile (D-199 "more fields permitted").
The round-2 design target: the FILL SEAM (Steps 2–3)
- Street/corridor geometry — turn the Step-1 stubs (
chunk_layout,corridors,access_points) into a real algorithm; wire D-215 arrangement patterns; street network within/between blocks. (No curves — ±45° pathfinding cap.) - Building-footprint + interstitial placement — the Step-2 chunk-fill void: subdivide a block into footprints + open space (parks/lots/gardens), tessellate the chunk grid, respect density (D-220).
- Building-property-tag schema — replace the String stubs with a real schema:
what-the-building-is (wire the 31 zone-types),
architecture_flavorref, floor/basement extent, access tier, era. This tag is the seed for the lazy Step-4 interior (the door-open trigger reads it). - Cultural flavor + heritage→corridor resolution — the
architecture_flavorfrontmatter + Gemma distillation; formally retire the abstract-roots grammar.
Implementation blockers (→ cleanup tickets, not design)
founding_age_years NULL on all 273 inhabited bodies; economic_tier NULL
~97%; economic_role has 5 spellings; behavioral_archetype mostly NULL;
GenerateSkeleton/FillChunk queue items are no-op stubs; D-222 code rename
pending.