Files
settled-reach/docs/workshops/economic-built-world-coverage-map.md
jpmschweitzerandClaude Opus 4.7 1a23739742 docs(workshops): economic-built-world brief + round-1 coverage map
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>
2026-05-25 22:37:54 +02:00

5.2 KiB
Raw Permalink Blame History

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-212216), 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: CityGenerationContext gains morphology zone + the per-body cultural profile (D-199 "more fields permitted").

The round-2 design target: the FILL SEAM (Steps 23)

  1. 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.)
  2. 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).
  3. Building-property-tag schema — replace the String stubs with a real schema: what-the-building-is (wire the 31 zone-types), architecture_flavor ref, floor/basement extent, access tier, era. This tag is the seed for the lazy Step-4 interior (the door-open trigger reads it).
  4. Cultural flavor + heritage→corridor resolution — the architecture_flavor frontmatter + 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.