Four-round workshop (Gestalt, Tyre, Paula, Burnelli-Sheldon, Miri) mapping the full generation pipeline from planetary heightmap to walkable tile. 25 D-records produced. Ticket dependency chain for Tier 0-4 implementation identified. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
397 lines
31 KiB
Markdown
397 lines
31 KiB
Markdown
---
|
||
title: "Round 3 Notes — Generation Cascade Workshop"
|
||
description: "Compiled Round 3 outputs: Phase 3 spatial pipeline architecture, tooling/runtime split consensus, layer alignment, Paula's political signals, Burnelli-Sheldon's economics bridge, D-record candidates, and open questions"
|
||
type: workshop
|
||
status: active
|
||
workshop: generation-cascade
|
||
agent: qatux
|
||
round: 3
|
||
created: 2026-04-30
|
||
---
|
||
|
||
# Generation Cascade Workshop — Round 3 Notes
|
||
|
||
**Compiled by:** Qatux
|
||
**Source files:**
|
||
- `docs/workshops/generation-cascade/gestalt-round3.md`
|
||
- `docs/workshops/generation-cascade/tyre-round3.md`
|
||
- `docs/workshops/generation-cascade/paula-round3.md`
|
||
- `docs/workshops/generation-cascade/burnelli-sheldon-round3.md`
|
||
|
||
**Scope:** Phase 3 spatial pipeline — regional maps, city footprints, road networks, biome grids, station topology, settlement hierarchy. NOT Phase 5 tile generation.
|
||
|
||
---
|
||
|
||
## Summary
|
||
|
||
Round 3 achieved structural consensus on the most important architectural question: Phase 3 is tooling (Python, offline, committed to systems.db), Phase 5 is runtime (Rust, seed-derived). Both are fully parallelizable during development. The layer inventories from Gestalt and Tyre are substantially aligned but not identical — Gestalt has six named layers (A–F), Tyre has five (A–E). The principal gap is that Tyre's schema and struct definitions omit `TerritorialStatus`, `FoundingOrientation`, `MaintenanceAuthority`, and the sub-settlement / `PoliticalTether` architecture that Gestalt accepts and accommodates from Paula. Burnelli-Sheldon provides concrete economic field mappings, a 10×9 district type weight table, a minimum six-field read set, and three real-body case studies demonstrating differentiation. Effort estimates diverge (~7d Tyre vs. ~9.5d Gestalt) for quantifiable reasons. All seven Round 2 open questions are now resolved.
|
||
|
||
---
|
||
|
||
## Out-of-Scope References — Flagged
|
||
|
||
1. **Paula §5 — name pool population:** Paula's naming strata section describes when `common_name` is populated as a spatial/political trigger condition (in scope), but notes "names drawn from culture pool" for the seeded generation content. The trigger logic and struct (`RegionalFeatureName`) are spatial decisions and captured here. The name pools themselves are cultural territory — out of scope for this workshop, same boundary established in Round 2.
|
||
|
||
2. **Burnelli-Sheldon §3 — `shadow_economy_access` and `collection_efficiency`:** These economics fields drive a MixedUse fringe district placement with specific prosperity floor and perimeter treatment. This is district *classification* (Phase 3/Phase 5 Stage 1), not tile generation. Within scope as far as district type assignment goes. The MixedUse fringe is a district-level output, not a tile layout.
|
||
|
||
3. **No Phase 5 tile generation crept back in.** All four participants maintain a clean boundary. Burnelli-Sheldon's building archetype signals (bulk_class → building type vocabulary) describe *what kinds* of buildings populate a district, which is Phase 5 input classification, not tile grid generation. Tyre explicitly: "Phase 3 lives entirely in Python tooling and systems.db. It does not add Rust runtime code."
|
||
|
||
---
|
||
|
||
## Consensus Points
|
||
|
||
### 1. Phase 3 is tooling; Phase 5 is runtime — fully parallelizable
|
||
|
||
All four participants independently frame the same boundary:
|
||
|
||
- **Phase 3:** Python generator (`generate_regional.py`), offline computation, output committed to systems.db. No Rust runtime code. No game-session dependency.
|
||
- **Phase 5:** Rust, seed-derived, computed at runtime when the player enters range of a city. Never stored except as world_seed + ChunkMutations.
|
||
|
||
The two phases do not block each other during development. Phase 5 develops against a stubbed `CityGenerationContext`; Phase 3 produces the real values; a wiring ticket connects them when both are ready.
|
||
|
||
- **Gestalt:** "Phase 3 is a tooling phase that enriches systems.db... The Rust server reads it at startup; no Phase 3 computation runs at game time."
|
||
- **Tyre:** "Phase 3 lives entirely in Python tooling and systems.db... Phase 3 and Phase 5 are parallel workstreams."
|
||
- **Paula:** Treats Phase 3 outputs as stored inputs to Phase 5 throughout.
|
||
- **Burnelli-Sheldon:** "These are pre-generation queries, not feedback dependencies."
|
||
|
||
### 2. `generate_regional.py` is a new generator in the `make regen-db` pipeline
|
||
|
||
Tyre and Gestalt agree on pipeline order and integration:
|
||
|
||
```
|
||
1. import_economics.py (existing)
|
||
2. generate_atlas.py (existing)
|
||
3. generate_regional.py (NEW — Phase 3 enrichment)
|
||
```
|
||
|
||
`generate_regional.py` follows the same meta stamp convention as existing generators: writes a stamp to the `meta` table, is listed in `tooling/check-systems-db-stamp`'s `GENERATOR_SOURCES`, and is watched by the `/pr-push` source-file list. Supports `--body`, `--force`, `--dry-run` flags matching `generate_atlas.py` convention.
|
||
|
||
### 3. `CityGenerationContext` Rust struct is the Phase 3 → Phase 5 handoff
|
||
|
||
Both Gestalt and Tyre propose the same struct concept. Gestalt's version includes more fields (see Disagreement 1 below). Points of agreement:
|
||
|
||
- Populated from systems.db at game startup (read-only query path)
|
||
- Contains at minimum: `city_id`, `political_archetype`, `prosperity_index`, `surrounding_biome`, `road_entry_directions`, `footprint_radius_km`
|
||
- Can be stubbed during Phase 5 development; wired to real data when Phase 3 is complete
|
||
|
||
### 4. All Round 2 open questions resolved
|
||
|
||
All seven OQ-R2 items have converged answers from three or more participants in Round 3. See the Open Questions table at the end of this document.
|
||
|
||
### 5. `prosperity_index` and `perimeter_treatment` belong on DistrictSkeleton before Phase 2
|
||
|
||
All four participants agree. The cost of inclusion is trivial (derived fields with inputs already available at Stage 1 classification); the cost of retrofit is a Phase 2 rewrite.
|
||
|
||
- **Tyre:** "Not adding it means Phase 2 tile generation produces identical spatial character regardless of district wealth — then retrofitting it is a Phase 2 rewrite."
|
||
- **Burnelli-Sheldon:** "The cost of deferral is not 'decorative refinement later' — it is 'all districts look equally prosperous until a retrofit pass.'"
|
||
- **Gestalt:** "Include before Phase 2 is implemented. Retrofit cost > add-now cost."
|
||
- **Paula (Round 2):** Original proposal. Not revisited — treated as settled.
|
||
|
||
### 6. `political_archetype` is a formal derived field with an override slot
|
||
|
||
All three technical participants converge: formal column on `atlas_cities`, derived from `economic_role` by Python tooling, with a `political_archetype_override` column for named city corrections.
|
||
|
||
- **Gestalt:** Derives from `economic_role` mapping. Override slot (`political_archetype_override`) allows wiki authors to correct counterintuitive results.
|
||
- **Tyre:** Same derivation. `COALESCE(political_archetype_override, <derived>)` at query time.
|
||
- **Burnelli-Sheldon:** Derives from `corp_presence` Monopolist share + `governance_type` + `economic_role = transit` + fault-line activity. More granular than Gestalt/Tyre's simple `economic_role` mapping — uses corp behavioral data where available. Starting position: trust the derivation.
|
||
|
||
Note: Burnelli-Sheldon's derivation is more nuanced than Gestalt/Tyre's direct `economic_role → archetype` mapping. They do not contradict; Burnelli-Sheldon's is a refinement using additional signals.
|
||
|
||
### 7. Minimum Phase 3 for Phase 5 to proceed: Layers A + B + C
|
||
|
||
Gestalt explicitly identifies this subset:
|
||
|
||
> "Layer A: City classification (political_archetype + prosperity_index + founding_orientation). Layer C: Road graph (road_entry_directions per city). Layer B: Regional biome grid (surrounding biome context). Layers D, E, F enrich Phase 5 and the Atlas UI but are not required for the first walkable district."
|
||
|
||
This gives a sequencing option: ship the minimum Phase 3 subset to unblock Phase 5, then complete the remaining layers in parallel with Phase 5 development.
|
||
|
||
### 8. Stored-vs-derived boundary extension to Phase 3
|
||
|
||
Tyre provides the full boundary argument for Phase 3 data belonging in systems.db:
|
||
1. Authoring coupling — Phase 3 data derives from wiki-authored bodies data
|
||
2. UI dependency — Atlas of the Reach app must display before any game session
|
||
3. Generation cost — planet_simulation.py compute time warrants caching at regional resolution
|
||
4. Determinism alone does not justify runtime generation
|
||
|
||
The boundary from Round 2 (atlas markers = last stored layer) extends: Phase 3 data is also stored (committed by `generate_regional.py`). The new inner boundary: DistrictSkeleton and everything below is seed-derived.
|
||
|
||
---
|
||
|
||
## Gestalt–Tyre Layer Alignment
|
||
|
||
Both participants name a Phase 3 layer sequence starting with city classification and ending with wilderness/countryside annotation. The layers map, but not one-to-one. Canonical comparison:
|
||
|
||
| Canonical | Gestalt label | Tyre label | Content match | Discrepancy |
|
||
|-----------|--------------|------------|---------------|-------------|
|
||
| Layer A | City Classification + Footprint | Layer A — City Classification | Matched | Tyre omits `founding_orientation` from outputs and CityGenerationContext |
|
||
| Layer B | Regional Biome Grid | Layer B — Regional Biome Grid | Full match | None — algorithm, table schema, and Phase 5 consumption are consistent |
|
||
| Layer C | Road Network Graph | Layer C — Road Network Graph | Partial match | Tyre's `atlas_road_edges` schema omits `maintenance_authority` column. Gestalt includes it as a Layer C output. |
|
||
| Layer D | TerritorialStatus Zones | *(not a distinct layer)* | **Gap** | Tyre has no Layer D equivalent. TerritorialStatus is not in Tyre's CityGenerationContext struct. |
|
||
| Layer E | Station Module Topology | Layer D — Station Module Topology | Full match | Same algorithm, same template structure, same tables. Different letter only. |
|
||
| Layer F | Wilderness + Settlement Hierarchy | Layer E — Wilderness + Countryside Annotation | Partial match | Tyre's Layer E covers `land_use` annotation only. Gestalt's Layer F adds: `atlas_sub_settlements` table, `PoliticalTether` derivation, `DualNaming` conditions, ruins classification. These are absent from Tyre's schema. |
|
||
|
||
### CityGenerationContext struct comparison
|
||
|
||
| Field | Tyre | Gestalt |
|
||
|-------|------|---------|
|
||
| `city_id: String` | ✓ | ✓ |
|
||
| `political_archetype: PoliticalArchetype` | ✓ | ✓ |
|
||
| `prosperity_index: f32` | ✓ | ✓ |
|
||
| `surrounding_biome: BiomeClass` | ✓ | ✓ |
|
||
| `road_entry_directions: Vec<CardinalDirection>` | ✓ | ✓ |
|
||
| `footprint_radius_km: f32` | ✓ | ✓ |
|
||
| `founding_orientation: FoundingOrientation` | absent | ✓ |
|
||
| `surrounding_territorial_status: TerritorialStatus` | absent | ✓ |
|
||
| `district_count: u8` | absent (noted in OQ-R2-4 answer) | ✓ |
|
||
|
||
The three fields Tyre omits correspond directly to: Paula's `FoundingOrientation` proposal (accommodated by Gestalt, not by Tyre), Gestalt's dedicated TerritorialStatus layer (not in Tyre's design), and Tyre's own statement that `district_count: u8` is needed "to prevent a data model migration later."
|
||
|
||
---
|
||
|
||
## Paula's Proposals — Coverage by Other Participants
|
||
|
||
Paula introduced six new fields/concepts in Round 3. Coverage by Gestalt and Tyre/Burnelli-Sheldon:
|
||
|
||
| Paula Proposal | Gestalt | Tyre | Burnelli-Sheldon | Status |
|
||
|---------------|---------|------|-----------------|--------|
|
||
| `TerritorialStatus` enum (6 values) | Full — dedicated Layer D with derivation algorithm | Not addressed | Partial — body-level signals support derivation (economic_role, corp_presence); TerritorialStatus not named | Adopted by Gestalt; not resolved by Tyre |
|
||
| `FoundingOrientation` enum (5 values) | Full — Layer A output, in CityGenerationContext, drives district layout direction | Not addressed | Not addressed | Adopted by Gestalt only |
|
||
| `MaintenanceAuthority` on road segments (5 values) | Full — Layer C output, in `atlas_road_edges` | Absent from `atlas_road_edges` schema | Not addressed | Gestalt adopts; Tyre's Layer C schema gap |
|
||
| `PoliticalTether` struct (city_id + TetherRelationship) | Full — Layer F output, `atlas_sub_settlements` table | Not addressed | Dynamic settlements concept is parallel; doesn't use PoliticalTether terminology | Adopted by Gestalt; not in Tyre's schema |
|
||
| `DualNaming` / `RegionalFeatureName` | Full — Layer F output, ContestZone trigger condition | Not addressed | Not addressed | Adopted by Gestalt; not in Tyre's design |
|
||
| Settlement hierarchy (town/outpost/waypoint/ruin tiers) | Full — `atlas_sub_settlements` table, Layer F | Not addressed | Parallel — "dynamic settlements" (off-atlas mining camps, waypoints, shadow nodes) uses similar placement logic with different framing | Convergent intent; different schema paths |
|
||
|
||
**Burnelli-Sheldon's "dynamic settlements" vs. Paula/Gestalt's sub-settlement hierarchy:**
|
||
|
||
The two designs converge on the same need from different angles. Burnelli-Sheldon derives settlement placement from economic trigger conditions (mining camps from corp_presence, waypoints from road length, agricultural nodes from settlement_pattern). Paula/Gestalt derives it from political relationship to nearest city (PoliticalTether). These are not competing designs — Burnelli-Sheldon's trigger conditions provide the *placement logic* while Paula's `PoliticalTether` provides the *relationship classification* once placed. They are compatible layers of the same feature. Neither resolves the schema question (what table, what fields) alone.
|
||
|
||
---
|
||
|
||
## Burnelli-Sheldon's Economics Bridge — Key Findings
|
||
|
||
### The minimum viable read set is 6 fields
|
||
|
||
Burnelli-Sheldon identifies that a spatially differentiated Phase 1 district skeleton requires exactly 6 systems.db queries per city:
|
||
|
||
1. `bodies.economic_role` — district type distribution
|
||
2. `bodies.settlement_pattern` — district layout and density mode
|
||
3. `system_economy.economic_tier` — infrastructure quality and wealth floor
|
||
4. `system_economy.distribution_index` — prosperity gradient shape
|
||
5. `corp_presence` count at this body — corporate district intensity
|
||
6. `corporations.headquarters_system` match — HQ landmark flag
|
||
|
||
Everything else (behavioral_archetype, shadow economy, bulk_class, brand premiums, currency zone) is Phase 2 enrichment — not required for the minimum walkable world.
|
||
|
||
### The 10×9 economic_role → DistrictType weight matrix
|
||
|
||
Burnelli-Sheldon provides a concrete probability weight table mapping all 10 `economic_role` values to all 9 DistrictType values (Residential, Commercial, Industrial, Administrative, LogisticsHub, Entertainment, MixedUse, Transit, Specialized). This is proposed as D-C10 — a locked canonical default from which corp-presence modifiers are applied.
|
||
|
||
Key examples:
|
||
- `manufacturing`: 35% Industrial / 20% LogisticsHub / 25% Residential
|
||
- `extraction`: 30% Industrial / 30% LogisticsHub / 20% Residential / 0% Entertainment
|
||
- `research`: 35% Specialized / 20% Administrative / 20% Residential / 0% Transit
|
||
- `transit`: 25% LogisticsHub / 20% Commercial / 15% MixedUse / 10% Transit
|
||
|
||
### Three concrete differentiation cases
|
||
|
||
Burnelli-Sheldon demonstrates how the same DistrictType (Industrial) produces different spatial character depending on economic fields:
|
||
|
||
- **Tributarium (GJ251c) — Manufacturing Capital:** `bulk_class = precision` → clean-room buildings, not open yards. Gate Corp Monopolist → uniform industrial district with consistent building footprint. Stratified distribution → executive district at prosperity 0.9 adjacent to worker housing at 0.15.
|
||
- **Bluebank (GJ3522c) — Extraction Capital:** `bulk_class = bulk` → open pits, conveyor structures, slag heaps. DSMC Monopolist → single employer city, uniform company housing. No Entertainment districts.
|
||
- **Strata (GJ280Ad) — Service Mixed Capital:** `bulk_class = non_physical` → office towers, no loading docks. Two reach-wide HQ corps → two landmark buildings. Stratified distribution produces gentrified commercial (0.75) adjacent to mid-tier residential (0.45).
|
||
|
||
**Burnelli-Sheldon's explicit finding:** "The aesthetic difference is entirely derivable from `production_ubiquity` and `bulk_class`." The generator produces spatial differentiation without explicit authored instructions for each city.
|
||
|
||
### Economic data quality caveats
|
||
|
||
Burnelli-Sheldon flags two data quality issues in systems.db that the generator must handle gracefully:
|
||
- `behavioral_archetype` on corporations is mostly NULL. Fallback chain: `behavioral_archetype` → `supply_chain_role` → commodity tier derivation.
|
||
- `scope` field on corporations is mixed-type (some text prose, not enum values). Null handling required.
|
||
|
||
### Simulation feedback requirements (narrow)
|
||
|
||
Burnelli-Sheldon identifies three fields that genuinely require post-generation reporting back to the economics simulation. All other simulation needs are pre-generation derivable from systems.db alone:
|
||
|
||
1. **Effective port tile count** — physical district layout determines actual cargo throughput
|
||
2. **Corp district allocation** — which DistrictType a corp occupies, post district assignment
|
||
3. **Shadow economy footprint** — whether shadow zone generated, and its prosperity floor
|
||
|
||
---
|
||
|
||
## Disagreements
|
||
|
||
### Disagreement 1: TerritorialStatus layer — dedicated layer or absent?
|
||
|
||
| Participant | Position |
|
||
|-------------|----------|
|
||
| **Gestalt** | Dedicated Layer D between road graph and wilderness annotation. Derivation algorithm provided: proximity × WorldTier weight + corporate presence + historical tether state. Feeds into CityGenerationContext as `surrounding_territorial_status`. |
|
||
| **Tyre** | No dedicated layer. Wilderness annotation (Layer E) classifies land use but does not produce a `TerritorialStatus` enum. `CityGenerationContext` does not include `surrounding_territorial_status`. |
|
||
| **Paula** | Proposes `TerritorialStatus` (independent of Gestalt — same enum, same derivation logic). Gestalt accommodates it. Tyre does not address it. |
|
||
| **Burnelli-Sheldon** | Does not name `TerritorialStatus` but provides the economic inputs that would support its derivation. No position on the layer structure question. |
|
||
|
||
The gap is not definitional — all participants who address it agree on the enum values and the derivation logic. The gap is whether `TerritorialStatus` is a Phase 3 stored output (Gestalt's view) or absent from Phase 3 scope (Tyre's implicit omission). This must be decided before Phase 3 schemas are finalized.
|
||
|
||
### Disagreement 2: Effort estimates (~7d Tyre vs. ~9.5d Gestalt)
|
||
|
||
| Source | Estimate | Scope difference |
|
||
|--------|----------|-----------------|
|
||
| **Tyre** | ~7 dev-days | 5 layers: A (1.5d) + B (1.5d) + C (1d) + D/stations (1.5d) + E/wilderness (0.5d) + plumbing (0.5d) + Rust read path (0.5d) |
|
||
| **Gestalt** | ~9.5d total / ~5.5d critical path | 6 layers: scaffolding (0.5d) + A (1.5d) + B (1.5d) + C (1d) + D/TerritorialStatus (1d) + E/stations (1.5d) + F/wilderness+settlements (1.5d) + CityGenerationContext (0.5d) + Phase 5 wiring (0.5d) |
|
||
|
||
Identifiable sources of the ~2.5d gap:
|
||
1. Gestalt has a TerritorialStatus layer (1d) absent from Tyre's design
|
||
2. Gestalt's wilderness/settlement layer (1.5d) includes sub-settlement placement, PoliticalTether, and DualNaming; Tyre's wilderness annotation (0.5d) is land-use only
|
||
3. Gestalt separates CityGenerationContext Rust struct (0.5d) and Phase 5 wiring (0.5d) into distinct tickets; Tyre bundles them as "Rust read path" (0.5d)
|
||
|
||
If TerritorialStatus, PoliticalTether, and sub-settlements are confirmed in scope, Gestalt's ~9.5d is the correct estimate. If those three are deferred, Tyre's ~7d applies.
|
||
|
||
### Disagreement 3: `MaintenanceAuthority` in road schema
|
||
|
||
Gestalt's `atlas_road_edges` schema includes a `maintenance_authority` column. Tyre's `atlas_road_edges` schema does not. Paula proposes `MaintenanceAuthority` as a required field. Tyre does not address this proposal at all. The road graph schema as specified by Tyre cannot support the `MaintenanceAuthority` signal without a schema modification.
|
||
|
||
### Disagreement 4: Scope of sub-settlement Layer F
|
||
|
||
Gestalt: Layer F introduces `atlas_sub_settlements` as a new systems.db table with fields per sub-settlement, PoliticalTether derivation, and DualNaming conditions flagged per cell. This is a significant data model addition.
|
||
|
||
Tyre: Layer E (wilderness) adds only a `land_use` column to `atlas_regional_biomes`. No sub-settlement table. No PoliticalTether. No DualNaming.
|
||
|
||
Burnelli-Sheldon's "dynamic settlements" placement logic could feed a sub-settlement table without requiring full PoliticalTether classification — but neither participant provides a schema for that middle path.
|
||
|
||
---
|
||
|
||
## D-Record Candidates
|
||
|
||
All candidates from Round 3 source files. Sources attributed.
|
||
|
||
### D-C11 (proposed by Gestalt and Tyre): Phase 3 layer sequence and tooling architecture
|
||
|
||
Phase 3 consists of a new generator (`generate_regional.py`) running third in the `make regen-db` pipeline. It enriches systems.db with classification, regional biome data, road graph, station topology, and optionally sub-settlement hierarchy. All Phase 3 computation is offline; no Phase 3 logic runs at game time. `generate_regional.py` follows the same meta stamp and pre-push hook conventions as existing generators.
|
||
|
||
Minimum confirmed layers: A (City Classification), B (Regional Biome Grid), C (Road Network Graph), D/E (Station Module Topology). Layers for TerritorialStatus and sub-settlements are pending lead decision.
|
||
|
||
### D-C12 (proposed by Gestalt and Tyre): `CityGenerationContext` as Phase 3 → Phase 5 handoff struct
|
||
|
||
A Rust struct populated from systems.db at game startup is the handoff point from Phase 3 to Phase 5 district generation. Minimum agreed fields:
|
||
|
||
```rust
|
||
pub struct CityGenerationContext {
|
||
pub city_id: String,
|
||
pub political_archetype: PoliticalArchetype,
|
||
pub prosperity_index: f32,
|
||
pub surrounding_biome: BiomeClass,
|
||
pub road_entry_directions: Vec<CardinalDirection>,
|
||
pub footprint_radius_km: f32,
|
||
}
|
||
```
|
||
|
||
Gestalt adds: `founding_orientation: FoundingOrientation`, `surrounding_territorial_status: TerritorialStatus`, `district_count: u8`. These are conditional on the lead decision regarding TerritorialStatus and FoundingOrientation scope.
|
||
|
||
### D-C13 (proposed by Gestalt): Phase 3 LoD cascade — stored boundary extended
|
||
|
||
Phase 3 data is stored (committed by `generate_regional.py`). The stored/seed-derived boundary from Round 2 (D-C2) extends: everything at Phase 3 layers (city classification, biome grid, road graph, station topology, optionally sub-settlements) is stored. Everything at Phase 5 (DistrictSkeleton, ChunkData, building footprints) is seed-derived.
|
||
|
||
### D-C14 (proposed by Tyre): `generate_regional.py` pipeline integration rules
|
||
|
||
`generate_regional.py` must:
|
||
- Write a meta stamp row (generator_name, schema_version, generator_sha)
|
||
- Be listed in `tooling/check-systems-db-stamp`'s `GENERATOR_SOURCES` dict
|
||
- Be included in the `/pr-push` skill's source-file watch list
|
||
- Support `--body <id>`, `--force`, `--dry-run` flags
|
||
- Run third (after `import_economics.py` and `generate_atlas.py`) in `make regen-db`
|
||
|
||
### D-C15 (proposed by Paula and Gestalt): `TerritorialStatus` enum definition
|
||
|
||
Six-value enum for regional political classification:
|
||
`CoreTerritory | FrontierTerritory | ExtractiveZone | ContestZone | WildernessBuffer | AbandonedZone`
|
||
|
||
Derivation: proximity to cities × WorldTier weight + corporation active presence + historical tether state. WorldTier weights (Gestalt): Epicenter 5×, Regional 3×, Backwater 1×, Passage 1.5×, Waypoint 0.5×.
|
||
|
||
**Note:** This D-record is proposed by Paula and accommodated by Gestalt. Tyre has not reviewed or accepted it. Requires lead decision before inclusion in Phase 3 schema.
|
||
|
||
### D-C16 (proposed by Paula and Gestalt): `FoundingOrientation` enum
|
||
|
||
Five-value enum for city-level derivation:
|
||
`PortFacing | RailHeadFacing | ResourceFacing | DefenseFacing | AdminFacing`
|
||
|
||
Derivation: `settlement_pattern` + `economic_role`. Drives direction of district prosperity gradient and oldest/newest district placement in Phase 5. Stored as a column on `atlas_cities`.
|
||
|
||
**Note:** Accommodated by Gestalt; not in Tyre's layer design. Requires lead decision.
|
||
|
||
### D-C17 (proposed by Paula and Gestalt): `MaintenanceAuthority` on road segments
|
||
|
||
Five-value enum for road edge classification:
|
||
`Administrative | Corporate | Communal | Trade | Abandoned`
|
||
|
||
Derivation: road endpoint types + economics data (same corporation at both ends → Corporate; high trade flow → Trade; no active tether → Abandoned). Stored as a column on `atlas_road_edges`.
|
||
|
||
**Note:** Absent from Tyre's `atlas_road_edges` schema. Gestalt's Layer C includes it. Requires schema alignment before Layer C is implemented.
|
||
|
||
### D-C9 (proposed by Burnelli-Sheldon): Economic fields → generator parameter mapping
|
||
|
||
The spatial generator's minimum read set at generation time: 3 SQL queries (city economic context, system-level modifiers, corporate presence at body). This data is sufficient to derive DistrictType distribution weights, prosperity_index, CorpPresenceTier, political_archetype, perimeter_treatment, and infrastructure quality parameters.
|
||
|
||
### D-C10 (proposed by Burnelli-Sheldon): `economic_role` → DistrictType weight table
|
||
|
||
Canonical 10×9 probability weight matrix mapping `economic_role` values to DistrictType values. Proposed as a Rust `const` array keyed by `EconomicRole` enum. Corp-presence modifiers apply on top. Tunable, but locked canonical default prevents per-sprint renegotiation.
|
||
|
||
---
|
||
|
||
## Open Questions
|
||
|
||
### Round 2 questions — now resolved
|
||
|
||
| ID | Question | Resolution | Resolved by |
|
||
|----|----------|-----------|-------------|
|
||
| OQ-R2-1 | `prosperity_index` and `perimeter_treatment` in minimum Phase 5 slice? | **YES.** Include before Phase 2. Retrofit cost exceeds add-now cost. | All four |
|
||
| OQ-R2-2 | `political_archetype` — formal field or implicit? | **Formal field in `atlas_cities`.** Derived by default. Override column allowed. | Tyre, Gestalt, Burnelli-Sheldon |
|
||
| OQ-R2-3 | Phase 2 tile algorithm — door-per-block-edge vs. density-driven rectangles? | **Both, sequenced.** Street skeleton first (door-per-block-edge), then building fill (density-driven rectangles within skeleton). | Tyre, Gestalt |
|
||
| OQ-R2-4 | Step 2b (full N-district layout) — minimum slice or follow-on? | **Follow-on.** Data model must support N districts from day 1. `district_count: u8` on CityGenerationContext prevents later migration. | Tyre, Gestalt |
|
||
| OQ-R2-5 | Naming register lookup table — before Phase 2 or post-walkable? | **Post-walkable.** Text overlay, not a tile-generation prerequisite. | Tyre, Burnelli-Sheldon |
|
||
| OQ-R2-6 | `prosperity_index` for named cities — authored or derived? | **Derived by default.** `prosperity_override REAL` column (NULL = derived) for wiki authors. | Tyre, Gestalt, Burnelli-Sheldon |
|
||
| OQ-R2-7 | Naming register table ownership? | Paula taxonomy → Mellanie populates name pools → Tyre reviews spatial constraints → lead locks as D-record. | Tyre |
|
||
|
||
### New open questions from Round 3
|
||
|
||
| ID | Question | Source | Priority |
|
||
|----|----------|--------|----------|
|
||
| OQ-R3-1 | TerritorialStatus as a Phase 3 layer: include in scope (Gestalt/Paula position) or defer beyond Phase 3 minimum (implied by Tyre's omission)? Determines whether Layer D is in scope, whether `surrounding_territorial_status` is in CityGenerationContext, and whether the effort estimate is ~7d or ~9.5d. | Gestalt vs. Tyre | **LEAD DECISION** |
|
||
| OQ-R3-2 | `FoundingOrientation`: include in Phase 3 Layer A output and CityGenerationContext (Gestalt/Paula position) or defer (implied by Tyre's omission)? | Paula / Gestalt vs. Tyre | **HIGH** |
|
||
| OQ-R3-3 | Sub-settlement hierarchy (Layer F): include `atlas_sub_settlements` table with PoliticalTether in Phase 3 (Gestalt/Paula), or scope Phase 3 to land-use annotation only (Tyre)? | Gestalt/Paula vs. Tyre | **HIGH** |
|
||
| OQ-R3-4 | `MaintenanceAuthority` column on `atlas_road_edges`: include in Phase 3 Layer C (Gestalt/Paula position) or absent from schema (Tyre's current design)? This is a concrete schema gap requiring alignment. | Paula / Gestalt vs. Tyre | **HIGH** |
|
||
| OQ-R3-5 | Paula OQ-R3-P3 — `DualNaming` / `common_name`: generator output (seeded from territorial conflict conditions) or authored layer only for named locations? | Paula | MEDIUM |
|
||
| OQ-R3-6 | Paula OQ-R3-P6 — `TerritorialStatus` zones storage: polygon/voronoi regions in a new table, or tags on the regional biome grid cells? Gestalt implies tagging `atlas_regional_biomes` cells; Paula raises the polygon alternative. | Paula / Gestalt | MEDIUM |
|
||
| OQ-R3-7 | Burnelli-Sheldon's `economic_role → DistrictType` weight table (D-C10): proposed as a const Rust array. Is the Round 3 table confirmed as the canonical default, or does it require a tuning pass against real body data before locking? | Burnelli-Sheldon | MEDIUM |
|
||
| OQ-R3-8 | Gestalt OQ-R3-G1: Is `corp_presence` granularity body-level sufficient for `TerritorialStatus` ExtractiveZone derivation, or is sub-body geography needed? Burnelli-Sheldon implies body-level is sufficient but does not address sub-body geography explicitly. | Gestalt / Burnelli-Sheldon | MEDIUM |
|
||
| OQ-R3-9 | Paula OQ-R3-P5 / Gestalt OQ-R3-G5 — AbandonedZone reclassification: derivable when a corporation's economic presence ends (both participants suggest yes), or does it require an explicit authored flag? Who triggers the reclassification? | Paula / Gestalt / Burnelli-Sheldon | LOW |
|
||
|
||
---
|
||
|
||
## Effort Summary
|
||
|
||
| Scope | Tyre estimate | Gestalt estimate | Difference |
|
||
|-------|--------------|-----------------|------------|
|
||
| Phase 3 minimum (A + B + C + stations + wilderness) | ~7d | ~7.5d (excl. TerritorialStatus and Layer F richness) | ~0.5d |
|
||
| Phase 3 full (as Gestalt / Paula scoped) | — | ~9.5d | ~2.5d gap from TerritorialStatus + rich Layer F |
|
||
| Critical path (sequential only) | ~5d (A → C → stations) | ~5.5d (scaffolding → A → C → D → F → struct) | ~0.5d |
|
||
| Phase 5 (from Round 2) | ~6d | ~6d | — |
|
||
| Phase 3 + Phase 5 minimum total (parallel) | ~7d | ~7.5d | — |
|
||
|
||
The 2.5d gap is not estimating error — it is a scope question. If OQ-R3-1 through OQ-R3-4 are resolved in favor of inclusion, ~9.5d is correct. If deferred, ~7d applies.
|
||
|
||
---
|
||
|
||
## For Lead Decision Before Proceeding
|
||
|
||
The four highest-priority open questions are lead decisions, not design questions. The design work has been done by the participants; the options are clear:
|
||
|
||
1. **OQ-R3-1:** Is `TerritorialStatus` in Phase 3 scope? (Determines Layer D, 1d, and `surrounding_territorial_status` in CityGenerationContext)
|
||
2. **OQ-R3-2:** Is `FoundingOrientation` in Phase 3 Layer A output? (Adds `founding_orientation` to CityGenerationContext and atlas_cities schema)
|
||
3. **OQ-R3-3:** Does Phase 3 include sub-settlement hierarchy? (Adds `atlas_sub_settlements` table and PoliticalTether derivation, ~1d)
|
||
4. **OQ-R3-4:** Does `atlas_road_edges` include `maintenance_authority`? (Paula/Gestalt schema vs. Tyre current schema)
|
||
|
||
All four are architectural choices that shape the Phase 3 schema and the CityGenerationContext struct. They cannot be deferred past the point where `generate_regional.py` scaffolding begins without risking a data model migration.
|
||
|
||
---
|
||
|
||
*Notes compiled by Qatux from Round 3 source files. All positions attributed to source participant. No editorial opinions added.*
|