--- title: "Round 3 Notes — Planet-Down Cascade Workshop" author: qatux workshop: planet-down-cascade round: 3 created: 2026-05-01 --- # Round 3 Notes — Planet-Down Cascade Workshop Compiled from five Round 3 agent files: Gestalt, Tyre, Paula, Burnelli-Sheldon, Ozzie. --- ## 1. Resolution of All Round 2 Open Items ### Q1 — Mismatch Flag Threshold: RESOLVED (Lead Decision) **Lead decision:** Two-tier system. | Tier | Threshold | Behavior | |------|-----------|----------| | Soft (`MismatchSeverity::Soft`) | score < 0.35 | Logged to generation log; placement proceeds | | Hard (`MismatchSeverity::Hard`) | score < 0.15 | Assignment overridden to `Synthetic { reason: PoliticalDecision }`; city placed at Province centroid; `FoundingOrientation = AdminFacing`; generation proceeds without panic | **Implementation detail (Tyre):** Hard mismatch is a policy decision, not a generation failure. The city exists but was placed politically rather than geographically. The flag surfaces in developer tooling. **Validation (Burnelli-Sheldon):** Thresholds validated against real systems.db body types. Representative cases: - agricultural + Defensible (score 2/10 = 0.20): Warning. Farming at a defensible site — unusual but real. Warning is correct. - agricultural + NaturalBarrier (score 0): Error. Impossible. Correct. - extraction + MountainPass (score 5/10 = 0.50): No flag. Valid. Correct. **Paula's integration:** HQ-constrained reservations (`corp_id IS NOT NULL` with active trade routes) escalate one tier: Warning → Error. A misplaced HQ with active supply chain dependencies is a more serious data quality problem. --- ### Q2 — founding_age → layout_mode: RESOLVED (All Agents Adopted) All agents adopted the principle. The implementation converges on a new field on `DistrictSkeleton`, orthogonal to `layout_mode` (which governs archetype macro-geometry and stays fixed). **Tyre's enum (the stored field):** ```rust enum BlockIrregularity { Grid, // Regular 64m × 64m; planned geometry SlightlyWorn, // ~10% deviation from grid Irregular, // ~25% deviation; multiple planning generations visible Organic, // No regular grid; emerged rather than planned } ``` Derivation (`from_age_and_archetype`): reference step size varies by archetype — CompanyTown 40 years/tier, AdminCapital 100, FreePort 60, Contested 35, OrganicGrowth 20. Each tier of `founding_age_years / step` advances one enum value. **Gestalt's complementary weighting:** Within each `BlockIrregularity` tier, the age organic bonus shifts block-edge probability distributions. CompanyTown Industrial districts resist age influence (age_resistance = 0.9); FreePort districts absorb it fully (0.0). Ancient AdminCapitals maintain planned cores while outer rings grow organic. **Ozzie's minimum floor:** `irregularity_factor` minimum 0.05 even for brand-new cities — construction variance means no city is a perfect simulation artifact. **Paula's per-archetype rules:** - CompanyTown: spine always grid (corporate planning maintained); age deepens character tags not geometry - AdminCapital: core Administrative always planned; outer rings accumulate irregularity - FreePort: node centers planned; between-node fill organic with age - Contested: each faction's half uses its archetype's rules; boundary zone always irregular (0.7+) - OrganicGrowth: fixed at 0.8 irregularity; age has no additional effect (already maximally irregular) **Field placement:** `block_irregularity: BlockIrregularity` added to `DistrictSkeleton`. Set at Layer 3. Consumed at Layer 4. No effect on Phase 2-3 deliverables. --- ### Q3 — Province Boundary Legibility: RESOLVED **Principle agreed by all agents:** Province boundaries ARE watershed/ridgeline features produced by D8 drainage. They render as terrain, not political overlays. **Technical solution (Tyre):** Pre-computed at build time by Python (`generate_atlas.py` watershed extraction), stored as float32 UV-space polylines in `atlas_province_boundaries` table. Renderer loads directly; zero dependency on Rust generation status. **New schema (ARCH-5):** ```sql CREATE TABLE atlas_province_boundaries ( body_id INTEGER NOT NULL REFERENCES bodies(id), province_x INTEGER NOT NULL, province_y INTEGER NOT NULL, boundary BLOB NOT NULL, -- float32 pairs [u0,v0, u1,v1, ...] in atlas UV space (0.0..1.0) PRIMARY KEY (body_id, province_x, province_y) ); CREATE INDEX idx_province_bounds_body ON atlas_province_boundaries(body_id); ``` Storage: ~82KB/body → ~32MB for 400 bodies. **Map UI specification (Ozzie, Paula):** - Province boundary = thin watershed/ridgeline rendering from polyline data (not thick colored borders) - TerritorialStatus = Province fill color/texture (subtle, readable at glance) - CoreTerritory: dense settlement markers, road lines visible - FrontierTerritory: scattered markers, road lines thin toward Province edge - ExtractiveZone: industrial tinting, road lines heavy toward resource sites - ContestZone: contested visual treatment (two-color or cross-hatched) - WildernessBuffer: empty, natural terrain only - AbandonedZone: reduced markers, ruins indicator **This is a player experience requirement (Ozzie):** Province boundary legibility is non-negotiable for TerritorialStatus to communicate to the player. Filed as a Phase 3 map implementation requirement. --- ### Q4 — atlas_city_names Population Path: RESOLVED **Two-tier authorship (Tyre, Paula, Gestalt all aligned):** | Tier | Source | `reserved` flag | Who authors | |------|--------|-----------------|-------------| | Authored | `wiki/worlds/{body_slug}.toml` → `[[cities]]` | `true` | Miri (wiki authors) | | Generated | `import_economics.py` from brand files, corp HQ data | `false` | Generator | **Authoring format:** ```toml # wiki/worlds/nova-kassel.toml [[cities]] name = "Port Cassidy" corp_slug = "meridian-transit" # nullable tier_hint = 3 # nullable reserved = true ``` **Import pipeline:** `import_economics.py` reads wiki TOMLs, preserves `reserved = true` rows across reruns, deletes and regenerates `reserved = false` rows each run. Paula's Stage 0–3 fulfillment operates on both tiers at runtime. **Paula's schema extension flags:** Tyre's ARCH-3 schema is missing `population` and `economic_role` columns, both required for attractor priority sorting and compatibility scoring. These must be added. The `reserved` column's purpose is clarified: it means "wiki-authored canonical name" — not equivalent to `corp_id IS NOT NULL`. --- ### Q5 / Q6 — Full Multiplier Table and Logistics Column: RESOLVED (D-194 Authoritative) Burnelli-Sheldon's D-194 (real claimed ID) is the authoritative table. It has 10 economic roles × 9 district types. Tyre's table from Round 2 notes (8×8) and Tyre's Round 3 addition of Logistics are superseded by D-194. **D-194 district type columns:** Residential, Commercial, Industrial, Administrative, Logistics, Entertainment, Mixed, Transit, Specialized (9 types) **Burnelli-Sheldon's political archetype modifiers (locked in D-194):** | political_archetype | Modifiers | |--------------------|-----------| | CompanyTown | Adm −10, Ind +10, Log +5, Res +5 | | AdminCapital | Adm +20, Ent +5, Spe +5, Ind −15 | | FreePort | Com +15, Trn +10, Mix +5, Adm −15 | | Contested | No modifier (competing forces cancel) | | OrganicGrowth | Mix +15, Res +10, Ind −10, Adm −5 | Floor at 3 applied after all modifiers. Paula's FreePort/Administrative flag: FreePort modifier Adm −15 on Transit/Port base Adm = 5 → net −10 → floor applies → value = 3. Correct; floor must be applied after all modifiers are stacked. **Ozzie's new proposal:** `SyntheticPlacementReason` should inform default political archetype when no geographic trigger exists: `CorpExpansion` → CompanyTown, `PoliticalDecision` → AdminCapital, `PopulationOverflow` → OrganicGrowth. Filed for Phase 3 design. --- ## 2. D-Record Consolidation Six real D-record IDs were claimed by Burnelli-Sheldon via the decision CLI. All other agents used placeholder numbering (D-C-XX, ARCH-N, GEN-N, D-C-NAME). Real IDs take precedence where topics overlap. ### Real D-Records (Claimed, D-194 through D-199) | ID | Title | Agent | Overlap with placeholders | |----|-------|-------|--------------------------| | **D-194** | Three-Component District Mix Algorithm | Burnelli-Sheldon | Supersedes D-C28, GEN-3 | | **D-195** | Attractor-Matching Compatibility Matrix | Burnelli-Sheldon | Sub-component of D-C25/GEN-2 (D-C25 covers the full five-phase pipeline; D-195 is the scoring matrix) | | **D-196** | SettlementClass Enum and Active/Ghost Logic | Burnelli-Sheldon | Supersedes D-C26, GEN-6 | | **D-197** | prosperity_baseline Derivation Formula | Burnelli-Sheldon | Referenced in D-C28 body but not a separate record in other agents' lists | | **D-198** | Economic Simulation Independence from Layer 1-2 | Burnelli-Sheldon | Implicit in D-C18 (three-tier model) but not separately named | | **D-199** | 6-Field Minimum Economic Read Set | Burnelli-Sheldon | Extends prior workshop's D-C17; updates CityGenerationContext struct | ### Placeholder D-Records Still Needing Real IDs These are ready to claim via `tooling/db/decision claim D "title"`. Grouped by domain: **Architecture (build-time and data model):** | Placeholder | Title | Ready to claim | |-------------|-------|----------------| | D-C18 | Three-Tier Execution Model | Yes | | D-C21 | Spatial Hierarchy — Eight Tiers with Locked Dimensions | Yes | | D-C33 / ARCH-1 | Heightmap BLOB Storage Schema (atlas_body_heightmaps) | Yes | | ARCH-2 / D-C34 | BodyWorldState Bevy Resource + LRU Cache | Yes | | ARCH-4 | body_radius_km Column on bodies | Yes | | ARCH-5 | Province Boundary Pre-Computation (atlas_province_boundaries) | Yes — new this round | | GEN-9 | atlas_feature_names Schema | Yes | **Generation algorithms (runtime):** | Placeholder | Title | Ready to claim | |-------------|-------|----------------| | D-C19 / GEN-7 | Background Generation Priority Queue + Rayon Infrastructure | Yes | | D-C20 | Fully Generative Placement (Amendment 3) | Yes | | D-C22 / GEN-1 | D8 Priority-Flood Drainage Routing | Yes | | D-C23 | Geographic Feature Tag Extraction (7 tags) | Yes | | D-C24 | Sub-Biome Variant Classification | Yes | | D-C25 / GEN-2 | Attractor-Matching Five-Phase Pipeline (references D-195 for matrix) | Yes | | D-C27 / GEN-5 | TerritorialStatus Priority-Ordered Derivation | Yes | | D-C29 / D-C-FO / D-C-AA | FoundingOrientation Enum + AttractorAssignment Enum | Yes (may split) | | D-C30 / D-C-SA | Five Explicit Political Archetype Spatial Patterns | Yes | | D-C31 / GEN-4 | BlockIrregularity from founding_age (Tyre's enum) | Yes | | D-C32 | Tile Condition Threshold Values (0.63/0.43/0.23) | Yes | | GEN-8 | WorldTier Enum Bug Fix | Yes — critical, claim first | **Narrative (naming and content):** | Placeholder | Title | Ready to claim | |-------------|-------|----------------| | D-C-NL | Naming Registers Lookup Table (Paula) | Yes | --- ## 3. Pre-Implementation Blockers — Data Quality Flags (Burnelli-Sheldon) Three data gaps in systems.db that will block implementation immediately. **These must be addressed before Phase 3 begins.** ### Blocker 1: `bodies.founding_age_years` NULL for All 273 Inhabited Bodies Component 3 of D-194 depends on this field. It is entirely unpopulated. Phase 1 implementation will run on fallback values only. **Fallback (Burnelli-Sheldon):** Derive from `system_history.settlement_wave`: | settlement_wave | founding_age_years (approx) | Age bracket | |----------------|-----------------------------|-------------| | origin | 500+ | mature | | wave_1 | 350 | mature | | wave_2 | 250 | established | | wave_3 | 150 | established | | wave_4 | 75 | young | | wave_5 | 30 | nascent | | unsettled | N/A | not inhabited | **Action required:** Populate `bodies.founding_age_years` from wiki content as part of wiki/content work. Every inhabited body should have an approximate founding year. ### Blocker 2: `system_economy.economic_tier` and `distribution_index` NULL for 97% of Systems 290 of 300 `system_economy` rows have NULL for both fields. D-197 (prosperity_baseline formula) depends on `economic_tier`. **Fallback (Burnelli-Sheldon):** ``` economic_tier_derived: population >= 5B → 5 population >= 1B → 4 population >= 100M → 3 population >= 10M → 2 else → 1 distribution_index fallback: "moderate" (NULL → moderate is the baseline) ``` **Action required:** Either populate `system_economy` fields from wiki data, or formally document the fallback derivation as canonical (which removes the need for authored data for most systems). The fallback is economically sound; the lead should decide if it's sufficient for release. ### Blocker 3: `economic_role` Values Not Normalized in bodies Table Inconsistent values that break the D-194 weight table lookup: | Raw value | Canonical | Bodies affected | |-----------|-----------|----------------| | `"agriculture"` | `"agricultural"` | 16 bodies | | `"resource_extraction"` | `"extraction"` | 1 body | | `"coordination"` | `"service_mixed"` | 2 bodies (including Bunbury pop 800M) | | `"mixed-agriculture"` | `"agricultural"` | 1 body | | NULL | `"service_mixed"` | 1 body | **Action required:** Add normalization step to `import_economics.py` as a data validation pass. Run on `make regen-db`. This is a schema migration, not a source data authoring task. --- ## 4. Paula's Schema Consistency Flags ### Flag 1: atlas_city_names Missing Required Columns Tyre's locked ARCH-3 schema lacks `population` and `economic_role` columns. Both are required by the Stage 2 name fulfillment pipeline: - `population`: needed to sort named cities for attractor assignment priority (largest first within Tier B/C) - `economic_role`: needed for compatibility scoring (hard constraints H1-H4 + soft constraint table) **Resolution:** Add both columns to ARCH-3 schema. Paula's D-C-NR has the extended schema. The `reserved` column is clarified as "wiki-authored canonical name" (not redundant with `corp_id`). ### Flag 2: Paula's Agricultural Commercial Weight Concern Paula flagged the Round 2 table's Agricultural Commercial weight of 18 as too high. **Resolved by D-194:** Burnelli-Sheldon's real table sets Agricultural Commercial = 12. Paula's concern is addressed. ### Flag 3: FreePort Modifier Floor Interaction FreePort modifier on Administrative: −15 (D-194). For Transit/Port economic_role, Administrative base weight = 5. After modifier: 5 − 15 = −10 → floor at 3. **Confirmed:** floor must be applied after all modifiers are stacked, not before. ### Flag 4: Contested Archetype Weight Modifier Paula flagged this as missing. **Resolved by D-194:** Contested = no modifier ("competing forces cancel"). This is the most narratively coherent answer — two competing planning authorities produce a district mix that reflects neither faction's priorities. ### Flag 5: corporate_presence_score Derivation Undefined Burnelli-Sheldon flagged this in their own document: `corporate_presence_score` is used by TerritorialStatus but its derivation formula is not specified. Proposed: `sum(health_metric for corps in province) / corp_count`. Zero corps = score of 0. **Tyre must confirm in implementation spec.** --- ## 5. Complete Ticket Dependency Chain Consolidated from Gestalt's and Tyre's Round 3 tickets. Tyre's more granular breakdown takes precedence. ### Tier 0 — Prerequisites (No Dependencies; All Can Start Immediately in Parallel) | Ticket | Work | Effort | |--------|------|--------| | BUG-WorldTier | Fix `WorldTier` enum: `Peripheral\|Connected\|Core` → `Epicenter\|Regional\|Backwater\|Passage\|Waypoint`; update all match arms | 0.5d | | SCHEMA-bodies | `body_radius_km REAL` column on bodies | 0.25d | | SCHEMA-heightmaps | `atlas_body_heightmaps` DDL | 0.25d | | SCHEMA-city-names | `atlas_city_names` DDL + index (extended schema with population, economic_role) | 0.25d | | SCHEMA-feature-names | `atlas_feature_names` DDL + index | 0.25d | | SCHEMA-province-bounds | `atlas_province_boundaries` DDL + index | 0.25d | All SCHEMA-* tickets can be grouped into a single migration PR. **BUG-WorldTier is a hard prerequisite blocker for every generation implementation ticket.** ### Tier 1 — Python Pipeline (Depends on Tier 0 Schemas) | Ticket | Work | Effort | Depends on | |--------|------|--------|------------| | PY-heightmap-import | `generate_atlas.py`: BLOB-pack elevation float32; INSERT into `atlas_body_heightmaps` | 1d | SCHEMA-heightmaps | | PY-province-bounds | `generate_atlas.py`: watershed extraction from DEM; store boundary polylines | 2d | SCHEMA-province-bounds, PY-heightmap-import | | PY-city-names-authored | `import_economics.py`: read `wiki/worlds/*.toml` `[[cities]]`; INSERT reserved=true | 1d | SCHEMA-city-names | | PY-city-names-corp | `import_economics.py`: generate corp-derived name rows for under-quota bodies | 1d | PY-city-names-authored | | PY-body-radius | `import_economics.py`: populate `body_radius_km` | 0.5d | SCHEMA-bodies | | PY-economic-role-normalize | `import_economics.py`: add economic_role normalization validation step (blocker 3) | 0.5d | — | ### Tier 2 — Rust Type Definitions (Depends on Tier 0) | Ticket | Work | Effort | Depends on | |--------|------|--------|------------| | RS-types-worldtier | Fix WorldTier enum in Rust; update all match arms | 0.5d | BUG-WorldTier | | RS-types-settlement | `SettlementClass`, `MismatchSeverity`, `AttractorAssignment`, `SyntheticPlacementReason` | 0.5d | RS-types-worldtier | | RS-types-district | Add `BlockIrregularity` to `DistrictSkeleton`; `SpatialArchetype`, `EconomicRole`, updated `DistrictType` enum | 0.5d | — | | RS-types-territorial | `TerritorialStatus` with correct variants | 0.5d | — | | RS-types-city-ctx | Finalize `CityGenerationContext` with all new fields (see D-199) | 1d | RS-types-settlement, RS-types-territorial | ### Tier 3 — Rust Core (Depends on Tier 1 + Tier 2) | Ticket | Work | Effort | Depends on | |--------|------|--------|------------| | RS-heightmap-load | `load_heightmap()` via bytemuck; integration into BodyWorldState init | 0.5d | PY-heightmap-import, RS-types-city-ctx | | RS-body-state | `BodyWorldState` struct + `GenerationCache` Bevy Resource + LRU(50) | 1.5d | RS-heightmap-load | | RS-drainage | D8 priority-flood drainage; attractor extraction; RiverNetwork construction | 3d | RS-body-state | | RS-attractor-types | `GeographicAttractor`, `AttractorType`, `CompatibilityMatrix` | 0.5d | RS-types-settlement | ### Tier 4 — Generation Algorithms (Depends on Tier 3) | Ticket | Work | Effort | Depends on | |--------|------|--------|------------| | RS-attractor-assign | Five-phase attractor assignment + D-195 compatibility matrix + Hungarian + synthetic overflow + mismatch flags | 4d | RS-drainage, RS-attractor-types, PY-city-names-authored | | RS-district-mix | D-194 three-component district mix + locked multiplier table + archetype modifiers (floor-after-modifiers) | 3d | RS-attractor-assign, RS-types-district | | RS-territorial | TerritorialStatus priority-ordered derivation; ProvinceWorldState population | 2d | RS-attractor-assign | | RS-block-irregularity | `BlockIrregularity::from_age_and_archetype()` + DistrictSkeleton integration | 1d | RS-district-mix | | RS-tile-conditions | Threshold cache with 0.63/0.43/0.23 invalidation for tile conditions | 1.5d | RS-district-mix | ### Tier 5 — Background + UI (Depends on Tier 4) | Ticket | Work | Effort | Depends on | |--------|------|--------|------------| | RS-bg-queue | `GenerationQueue` + rayon thread pool + priority ordering | 2d | RS-body-state | | RS-aho-corasick | `SystemNameIndex` + text scanning → generation trigger | 1d | RS-bg-queue | | UI-province-bounds | Godot planetary map: load `atlas_province_boundaries`; render as natural polylines + TerritorialStatus fill | 2d | PY-province-bounds | ### Dependency Graph (Critical Path) ``` SCHEMA-heightmaps → PY-heightmap-import → RS-heightmap-load → RS-body-state → RS-drainage → RS-attractor-assign → RS-district-mix → RS-tile-conditions ``` **Critical path effort:** 0.25 + 1 + 0.5 + 1.5 + 3 + 4 + 3 + 1.5 = **14.75 dev-days** **Total effort (all tiers, parallel where possible):** ~33 dev-days **Parallel acceleration (two-agent split — Python team / Rust team):** calendar time ~20 days --- ## 6. New Items Introduced in Round 3 ### Province Boundary Pre-Computation (ARCH-5 — New) Not in prior rounds. Tyre introduced the `atlas_province_boundaries` table and the build-time Python extraction approach. This is a new schema ticket (SCHEMA-province-bounds) and a new Python ticket (PY-province-bounds) that was not in any Round 1-2 discussion. ### Naming Registers Lookup Table (Paula — New) Paula's D-C-NL introduces the full naming architecture: seven registers (Geographic, Functional, Commemorative, Aspirational, Folk, Corporate, Dual), a lookup table by (DistrictType, WorldTier), and political archetype overrides. Names themselves are content work (Mellanie's domain); the register selection architecture is a locking decision. ### SyntheticPlacementReason → Political Archetype Mapping (Ozzie — New Proposal) Ozzie proposes that when a settlement lacks a geographic trigger, `SyntheticPlacementReason` should determine its default political archetype: `CorpExpansion` → CompanyTown, `PoliticalDecision` → AdminCapital, `PopulationOverflow` → OrganicGrowth. This is a proposal; not yet locked. ### economic_role Normalization Ticket (Burnelli-Sheldon — New) PY-economic-role-normalize is a new ticket not identified in prior rounds. It is a pre-implementation blocker. --- ## 7. Open Items After Round 3 ### For Lead Resolution | Item | What's needed | |------|--------------| | `corporate_presence_score` derivation | Confirm formula: `sum(health_metric for corps in province) / corp_count` | | `SyntheticPlacementReason` → political archetype (Ozzie proposal) | Lock or defer to Phase 3 design | | L3-Q7 (port/station direction) | Paula designed mechanism; Ozzie formally requested for Phase 4 scope; Gestalt classified deferred; lead final call | | Province watershed algorithm detail spec | Before PY-province-bounds ticket begins; brief technical sidequest recommended | | Q4 orbital station type | `SpatialArchetype::SpaceStation` as sixth variant? Deferred; lead disposition | | Populate `bodies.founding_age_years` | Content work; wiki authors (Miri domain) | | Confirm `system_economy` fallback is sufficient for release | Formal acknowledgment that 97% NULL is acceptable with fallback derivation | | Contested/OrganicGrowth archetype modifiers | D-194 is locked (Contested = no modifier, OrganicGrowth = Mix+15/Res+10/Ind-10/Adm-5). This is resolved. | ### For Implementation Tickets - BUG-WorldTier: claim and file immediately (hard prerequisite for everything) - All placeholder D-records: claim real IDs before `decisions/` domain files are written - Extended `atlas_city_names` schema: add `population` and `economic_role` before PY-city-names-authored begins ### Items Confirmed Closed — No Further Discussion | Item | Closed by | |------|----------| | Mismatch flag threshold | Lead two-tier decision | | founding_age → BlockIrregularity | All agents adopted; Tyre's enum is the stored field | | Province boundary legibility | ARCH-5 + map UI spec | | atlas_city_names population path | Two-tier authorship, both via import_economics.py | | Full multiplier table | D-194 authoritative (10 roles × 9 types) | | Contested archetype modifier | D-194: no modifier | | OrganicGrowth archetype modifier | D-194: Mix +15, Res +10, Ind −10, Adm −5 | | prosperity_baseline vs. prosperity_current field naming | D-197 locks both names; delta is always derived | | Self-contained district generation | Confirmed D-194 | | SeedChain (FNV-1a) | Carried from generation-cascade workshop (D-010) | --- ## 8. Agent Positions Summary — Round 3 | Item | Gestalt | Tyre | Paula | Burnelli-Sheldon | Ozzie | |---|---|---|---|---|---| | Q1 (mismatch threshold) | Lead decision absorbed | Two-tier with Synthetic override on Hard | Integration with name pipeline | Validated against real data | Accepted | | Q2 (founding_age) | Probability weighting | BlockIrregularity enum (stored field) | Per-archetype layout_irregularity rules | Age bracket affects character_class | Minimum 0.05 floor; archetype age_weight | | Q3 (Province boundaries) | Already satisfied by terrain | ARCH-5 pre-computed polylines | Rendering chain specified | Confirmed correct | Map UI spec | | Q4 (city names path) | Wiki import pipeline | Two-tier authorship TOML+corp | Stage 0-3 pipeline, extended schema | Fallback derivations for missing data | Accepted | | Full multiplier table | Confirmed (ref Burnelli-Sheldon) | 8×8 table + Logistics (superseded by D-194) | Flag on Agricultural Commercial weight | **D-194: 10×9 authoritative table** | Accepted | | Ticket chain | 11 tickets, 13.5d critical path | 22 tickets, 14.75d critical path | Data quality flags | Data quality blockers | PX requirements | --- *Round 3 complete. All Round 2 open questions resolved. Six real D-records (D-194 through D-199). Three data quality pre-implementation blockers identified. Ticket chain: 22+ tickets, 14.75-day critical path. Workshop outcomes document follows.*