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>
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
# 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:** `CityGenerationContext` gains **morphology zone** + the
|
||||
**per-body cultural profile** (D-199 "more fields permitted").
|
||||
|
||||
## The round-2 design target: the FILL SEAM (Steps 2–3)
|
||||
|
||||
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.
|
||||
@@ -0,0 +1,102 @@
|
||||
# Workshop — The economic & built world (Stage 2)
|
||||
|
||||
*Second workshop in the world-derivation arc. The first (D-227 / D-228) settled the
|
||||
**natural** substrate. This one is Stage 2: the **economic & built** world.*
|
||||
|
||||
## Premise & the order
|
||||
|
||||
The world is built in three stages, **all frozen in amber** — the goal right now
|
||||
is a deterministic **starting state** we can look at through the Atlas, not a
|
||||
running simulation:
|
||||
|
||||
1. **Natural world tiles** — terrain / water / vegetation / geology *(done:
|
||||
D-227 derive-don't-store world model, D-228 composite tile schema)*
|
||||
2. **Economic world tiles → architecture + infrastructure** ← **this workshop**
|
||||
3. **Living sim** — NPCs, clutter, the lived-in feel *(deferred — "NPCs follow
|
||||
the world when it's there"; complicated; later)*
|
||||
|
||||
So: **built structures are IN scope; NPCs / creatures / clutter are OUT.**
|
||||
|
||||
## The load-bearing caveat (pin this)
|
||||
|
||||
> **Settlement, architecture, and infrastructure placement derive from the
|
||||
> economy's *initial* state + seed — NEVER the *rolling* economy.**
|
||||
|
||||
Rolling-economy placement would make the built world un-re-derivable: a city's
|
||||
existence or layout would drift as prices move, and you could no longer rebuild
|
||||
it from `seed`. The physical world is pinned to the economy's **starting
|
||||
snapshot**. (Persistence model, D-227: the rolling economy is *saved sim-state*
|
||||
with cache-eviction; it never feeds the derivation of physical form.)
|
||||
|
||||
## What this workshop must produce (→ D-records + tickets)
|
||||
|
||||
Three threads. We do **not** close until they're resolved in records — convergence
|
||||
on one is not "done" (lesson from Workshop 1).
|
||||
|
||||
- **Q1 — Economy → placement.** How does the *initial* economic state (+ seed +
|
||||
the natural world from Stage 1) decide **where** settlements, economic
|
||||
activity, and infrastructure sit? Ports at harbours (D-228 morphology zones),
|
||||
farms on alluvial plains, mines at lithology/ore, hubs at trade-corridor
|
||||
confluence. The initial-economics caveat lives here.
|
||||
- **Q2 — Placement → built form.** How does a placement become actual
|
||||
architecture / roads / rail / districts occupying voxels (D-227)? This must
|
||||
**connect to the existing generator-architecture work**, not restart it —
|
||||
height tiers, z-levels, block/chunk skeletons, cultural room grammar all
|
||||
already have decisions. The open seam is the *economic → architectural*
|
||||
hand-off and how built structures sit in the voxel/floor model (D-227).
|
||||
- **Q3 — Frozen-amber coherence.** Natural (Stage 1) + economic/built (Stage 2)
|
||||
must compose into **one deterministic starting state** the Atlas can render —
|
||||
re-derivable from `initial-economics + seed`, no rolling-state dependency, no
|
||||
squaring, coherent with the baked reliefmap (which is a deterministic *input*,
|
||||
Q-100).
|
||||
|
||||
## Build on what exists (don't restart)
|
||||
|
||||
- **Natural substrate (Stage 1):** D-227, D-228.
|
||||
- **Economics:** D-176 (productivity seeding), D-178 (economic model), D-184
|
||||
(commodity catalogue), D-199 (economic read-set for city generation), D-189
|
||||
(brand layer). Burnelli owns these.
|
||||
- **Settlement / provinces:** D-191 (Atlas / settlement), D-205 (province
|
||||
boundaries), D-220 (settlement density — tile scale, density classes, vertical
|
||||
pressure).
|
||||
- **Architecture / generator:** D-106 / D-108 (height tiers, rooftop clause),
|
||||
D-200 / D-201 / D-203 (three-tier execution, region, LRU cache), D-110 (signed
|
||||
z-levels), D-222 (subtile → district hierarchy), `server/src/.../skeleton_gen.rs`
|
||||
(Layer-4 block placement), and the prior **`docs/workshops/generator-architecture/`**
|
||||
rounds.
|
||||
|
||||
## Team & angles (Sonnet-pinned)
|
||||
|
||||
- **Burnelli** — the initial-economic-state → placement driver: what economic
|
||||
signals (commodity production, trade corridors, harbour quality, agricultural
|
||||
potential) determine where things go, at what scale, frozen at t=0.
|
||||
- **Tyre** — the derivation architecture: `initial-economy + seed + natural-world
|
||||
→ settlement → built form`, deterministically; how built structures occupy the
|
||||
voxel/floor model (D-227); the economic→architectural hand-off seam.
|
||||
- **Miri** — settlement & cultural architecture: how heritage/culture shapes the
|
||||
built form on top of the economic skeleton (she led the generator-arch
|
||||
worldbuilding); keeping it coherent with the Reach's setting.
|
||||
- **Gestalt** — systems meaning: what built form *does* (movement, access,
|
||||
chokepoints, asymmetric-info), and what a tile/structure must carry for it.
|
||||
- **Nigel** — variety: do two economically-similar bodies produce
|
||||
*categorically* different cities, or same-y grids? Where does sameness creep in?
|
||||
- **Araminta** — visual architecture grammar: where the visual/render grammar
|
||||
plugs into the derived built form (lighter touch; structural derivation leads).
|
||||
|
||||
## Round 1 task (each)
|
||||
|
||||
Read this brief + the pointed decisions/code for your angle. Post an **opening
|
||||
position**: (1) your contribution to Q1/Q2/Q3 from your lens, (2) the key forks /
|
||||
risks, (3) anything in existing decisions that constrains or contradicts the
|
||||
approach (especially the initial-economics caveat). Investigation + position,
|
||||
**not** final design. Flag blockers early.
|
||||
|
||||
## Process
|
||||
|
||||
Round-based. Lead **consolidates** each round (no raw cross-talk dumped at the
|
||||
principal) and pulls Jeroen in. **Close only when D-records + tickets exist AND
|
||||
Jeroen confirms the whole problem — not one thread — is resolved.** Teammates
|
||||
edit nothing; the lead does all git.
|
||||
|
||||
**Heartbeat:** if stuck >15 min on one thing without progress, message the lead
|
||||
with the blocker — don't silently retry.
|
||||
Reference in New Issue
Block a user