--- title: "Workshop Outcomes: system-economic-specialization" type: workshop workshop: system-economic-specialization status: archived decision_refs: [D-010, D-172, D-174, D-177, D-184, D-197, D-199, D-214, D-220, D-222, D-232, D-233, D-237, D-238] --- # Workshop Outcomes — System Economic-Specialization *Workshop: `system-economic-specialization` | Date: 2026-05-31* *Participants: Miri, Burnelli-Sheldon, Paula | Documenter: Qatux* **Status: FILED — D-237 added to `decisions/architecture.md` (2026-05-31); D-233 re-amended. Human approved at final wrap-up checkpoint.** --- ## 1. Summary: The Three-Field Authored Specialization Layer Every inhabited named star system carries three authored fields sourced from a single TOML file. These fields are: - **Static, t=0** — read at build time, never runtime state - **Deterministic (D-010 compliant)** — same source files + world_seed = same result every run - **Authored lore wins** — heuristic is fallback only for unnamed/unspecified systems - **No PressureState, no tâtonnement, no save-state** ### The three fields | Field | Column | Table | What it drives | Default for unautored | |---|---|---|---|---| | `economic_specialization` | New | `system_economy` | D-233: BulkClass × ProductionUbiquity → block fill, coverage, operations surface | Seed-hashed weighted draw over vocabulary (deterministic-varied) | | `cultural_specialization` | New | `system_economy` | D-232: template pool selection (corridor or divergent-heritage override) | Corridor assignment (D-232 existing algorithm) | | `dominant_faction` | Existing (populate) | `system_factions` | D-214 (PoliticalArchetype), D-232 (template weights), D-174 (shadow economy), D-172 (currency zone validation) | Commission presence + currency zone derivation (existing) | ### Source and pipeline ``` wiki/economics/system_specialization.toml ─┐ wiki/economics/specialization_vocabulary.toml ─┤ import_economics.py → systems.db └─┘ ↓ system_economy.economic_specialization system_economy.cultural_specialization system_factions.dominant_faction (UPSERT — column already exists) ``` ### TOML format (one stanza per system) ```toml # wiki/economics/system_specialization.toml # NULL = absent = heuristic fallback runs # Decisions: D-[236] (this workshop) [GJ-144] # Ran economic_specialization = "breadbasket" cultural_specialization = "agrarian" dominant_faction = "concord_assembly" [GJ-380] # Groombridge economic_specialization = "financial_hub" cultural_specialization = "financial_technocratic" dominant_faction = "syndic_dominant" ``` ### Schema changes ```sql -- In systems-schema.sql; via COLUMN_MIGRATIONS in import_economics.py (idempotent) ALTER TABLE system_economy ADD COLUMN economic_specialization TEXT; ALTER TABLE system_economy ADD COLUMN cultural_specialization TEXT; -- New vocabulary reference table (compiled from specialization_vocabulary.toml) CREATE TABLE IF NOT EXISTS specialization_vocabulary ( specialization_id TEXT PRIMARY KEY, commodity_id TEXT NOT NULL REFERENCES commodities(commodity_id), production_ubiquity_override TEXT, -- NULL = use catalog default bulk_class_projected TEXT NOT NULL, -- pre-computed BulkClass for D-233 production_ubiquity_projected TEXT NOT NULL, -- pre-computed ProductionUbiquity for D-233 description TEXT NOT NULL ); ``` --- ## 2. Economic Specialization Vocabulary (27 values) Each value maps to `(commodity_id, production_ubiquity_override_or_null)`, which projects to `(BulkClass, ProductionUbiquity)` per D-233. Scale is encoded in the value — no separate scale column. **Equal-or-higher rule (Miri):** `production_ubiquity_override` may only be equal or higher concentration than the commodity catalog's global `production_ubiquity`. CI hard error V-SES-03 enforces this. ### Agricultural cluster (5 values) | `economic_specialization` | `commodity_id` | `ubiquity_override` | BulkClass | ProductionUbiquity | Example system | |---|---|---|---|---|---| | `estate_farming` | `agricultural_produce` | null → Ubiquitous | Perishable | Ubiquitous | Arbour — scattered amenity agriculture | | `breadbasket` | `agricultural_produce` | `concentrated` | Perishable | Specialist | Ran — dense agricultural processing district | | `terroir_agriculture` | `agricultural_produce` | `monopolistic` | Perishable | MonopolySource | VGV/Confluent — F8V spectral lock, D-177 | | `terroir_spirits` | `processed_food` | `monopolistic` | BulkSolid | MonopolySource | Calloway Reach — distillery terroir, D-177 | | `terroir_organics` | `organic_compounds` | `monopolistic` | BulkSolid | MonopolySource | Braemar (brach fiber), Dagat (kelp/Blue dye), D-177 | ### Energy cluster (2 values) | `economic_specialization` | `commodity_id` | `ubiquity_override` | BulkClass | ProductionUbiquity | Example system | |---|---|---|---|---|---| | `fuel_production` | `fusion_fuel` | null → Common | BulkLiquid | Common | Generic fuel refinery world | | `geothermal_hub` | `fusion_fuel` | `concentrated` | BulkLiquid | Specialist | Vuurkloof — settlement built on thermal infrastructure | ### Extraction cluster (5 values) | `economic_specialization` | `commodity_id` | `ubiquity_override` | BulkClass | ProductionUbiquity | Example system | |---|---|---|---|---|---| | `ore_extraction` | `metallic_ore` | null → Common | BulkSolid | Common | Generic mining world | | `company_mining` | `metallic_ore` | `concentrated` | BulkSolid | Specialist | Sindri — DSMC company town | | `marble_monopoly` | `stone` | `monopolistic` | BulkSolid | MonopolySource | Nyrheim — Kvitfjell marble, D-177 | | `rare_mineral_extraction` | `rare_minerals` | null → Concentrated | PrecisionDense | Specialist | Specialist rare-mineral world | | `lattice_material_source` | `lattice_grade_material` | null → Monopolistic | PrecisionDense | MonopolySource | East reach lattice anchor (catalog already monopolistic) | ### Manufacturing cluster (6 values) | `economic_specialization` | `commodity_id` | `ubiquity_override` | BulkClass | ProductionUbiquity | Example system | |---|---|---|---|---|---| | `general_industrial` | `refined_metals` | null → Common | BulkSolid | Common | Generic manufacturing world | | `shipbuilding` | `freight_haulers` | `common` | BulkSolid | Common | Cygni B — 7 competing combines, NOT MonopolySource | | `vehicle_production` | `transport_vehicles` | `concentrated` | BulkSolid | Specialist | Nova Roma — MVG identity | | `consumer_goods_bazaar` | `consumer_goods` | `concentrated` | BulkSolid | Specialist | Lu Ban — 300 competing workshops | | `gate_fabrication` | `gate_components` | null → Monopolistic | BulkSolid | MonopolySource | Renaissance — Gate Corp | | `military_industrial` | `heavy_equipment` | `concentrated` | BulkSolid | Specialist | Bastion — fleet yards, depots | *Note: `military_industrial` merges `military_production` + `military_station` — same (BulkClass, ProductionUbiquity, cultural character).* ### High-tech cluster (2 values) | `economic_specialization` | `commodity_id` | `ubiquity_override` | BulkClass | ProductionUbiquity | Example system | |---|---|---|---|---|---| | `precision_tech` | `electronics` | `concentrated` | PrecisionDense | Specialist | Zenzele — hardening components, expertise-based | | `marine_farming` | `organic_compounds` | `concentrated` | BulkSolid | Specialist | Dagat (when not monopolistic) — absorbed into `terroir_organics` for confirmed D-177 cases | ### Services cluster (7 values) | `economic_specialization` | `commodity_id` | `ubiquity_override` | BulkClass | ProductionUbiquity | Example system | |---|---|---|---|---|---| | `financial_hub` | `financial_services` | `concentrated` | NonPhysical | Specialist | Groombridge — dense financial cluster + GSH landmark | | `governance_center` | `commission_certification` | `concentrated` | NonPhysical | Specialist | Sirius, ACB | | `transit_hub` | `commission_certification` | null → Common | NonPhysical | Common | Gateway, Wolf 359, Dài Lộ, Altmark | | `research_station` | `commission_certification` | `concentrated` | NonPhysical | Specialist | Keid — research access, Conservancy biosphere *(Miri addition)* | | `legal_archive` | `legal_services` | `concentrated` | NonPhysical | Specialist | Tessera — Assembly Interpretive Registry | | `media_center` | `entertainment` | `concentrated` | NonPhysical | Specialist | Parallax — news syndicates, cultural production | | `longevity_monopoly` | `medical_services` | `monopolistic` | NonPhysical | MonopolySource | Prometheus — only longevity facility in the Reach | **Total: 27 values.** Three edge-case values (`rare_mineral_extraction`, `marine_farming`, `legal_archive`) have no confirmed hero system anchor; retain for the content pass and retire after 300-system review if unused. --- ## 3. Groombridge: Cluster + Singular Landmark Encoding **Economic specialization: `financial_hub` (NonPhysical × Specialist)** This produces a dense cluster of financial buildings throughout the settlement: exchange floors, actuarial institutes, data centers, credit facilities. GTTR confirmation: *"financial houses...for four centuries...architecture understated in the way that communicates expense."* Multiple institutions, not a single monopoly compound. Specialist is correct. **The GSH landmark:** The Groombridge Settling House is a MonopolySource-class institution (the Reach's primary clearing house) but exists WITHIN the Specialist financial cluster — not as the organizing principle of the entire settlement. It is expressed via: 1. **D-222 multi-block reservation** — reserved block at generation time for a singular named institution 2. **D-232 `atlas_body_trait_bias` hero pin** — forces a `clearing_house_landmark` template onto the reserved block This is NOT a fourth field and NOT a composite vocabulary value. The vocabulary expresses district-level built form; landmark-level identity is the D-232/D-222 mechanism. --- ## 4. Cultural Specialization Vocabulary `cultural_specialization` carries two value types in a single field. Heritage-type values take precedence when both activity and heritage apply. ### Activity/character values (12 — from Burnelli-Sheldon) These apply when the system's cultural character is defined by what it DOES, not by a divergent founding heritage. | Value | D-232 template direction | Example systems | |---|---|---| | `scholarly` | Research institutes, archives | Tessera, Keid | | `artistic` | Studios, galleries, media infrastructure | Parallax | | `institutional` | Commission offices, courts, assembly halls | Sirius, ACB, Wolf 359, Prometheus, Renaissance | | `financial_technocratic` | Exchange floors, data centers, private character | Groombridge | | `commercial` | Trading floors, mixed markets, hospitality | Altmark, Gateway | | `agrarian` | Cooperative halls, grain exchanges, harvest infrastructure | Ran, Arbour, Ostmark | | `industrial_heritage` | Labor cooperative halls, fabrication museums, occupational pride | Cygni B, Sindri, Renaissance, Bastion (adj.) | | `medical_elite` | Longevity centers, bioethics institutes | Prometheus | | `ecological` | Conservation infrastructure, nature monitoring | Keid | | `military` | Command centers, strategic infrastructure, memorial halls | Bastion | | `cosmopolitan` | Mixed/diverse; no single dominant civic type | Gateway, Altmark, Dài Lộ | | `compact_cooperative` | Community halls, cooperative banks, self-reliance institutions | All Compact member systems | ### Heritage-type values (GTTR-confirmed at time of workshop — expandable in content pass) These apply when a system's founding heritage diverges from its corridor baseline. The corridor would produce wrong D-232 templates without the pin. | Value | Corridor it overrides | GTTR-confirmed systems | GTTR evidence | |---|---|---|---| | `scottish` | north_reach (British/Australian) | Calloway Reach (GJ-3325), Braemar (GJ-475) | Braemar = Scottish Highland village; Calloway terroir Highland whisky tradition | | `french_provencal` | west_reach (German/Dutch/Nordic) | Confluent/VGV (GJ-395) | "founding families Loire viticulture tradition"; Société Chimique (French) | | `vietnamese` | east_reach (Korean/Japanese) | Dài Lộ (GJ-136) | GTTR explicit: "Vietnamese is the dominant cultural substrate...four centuries" | | `afrikaans_cape` | south_reach (Portuguese/Swahili) | Vuurkloof (GJ-35) | GTTR explicit: "Afrikaner and Cape Coloured families predominate in the oldest established lineages" | | `zulu` | south_reach (Portuguese/Swahili) | Zenzele (GJ-1111) | GTTR explicit: "chartered...by wave 3 Zulu-heritage emigrants...maintained through language instruction, naming convention" | | `chinese` | east_reach (Korean/Japanese) | Lu Ban (GJ-15A) | GTTR explicit: "name honors the patron of craftsmen in the Chinese tradition carried by the founding workforce" | | `italian_northern` | west_reach (German/Dutch/Nordic) | Nova Roma (GJ-764) | Mastroianni family, MVG = Manifattura Veicoli Gherardi; "Nova Roma" as deliberate Italian cultural claim | | `tagalog` | east_reach (Korean/Japanese) | Dagat (GJ-482A) | "Dagat" = sea in Filipino/Tagalog; Blue Collective; Pacific maritime heritage | | `norse_compact` | west_reach (German/Dutch/Nordic) | Nyrheim (GJ-3737) | Bífröst Marmor (Norse mythological bridge); "Nyrheim" = Norwegian for "new home" | **Content pass scope:** ~60-100 GTTR-named systems. Authoring criterion: "GTTR entry names a founding community whose heritage diverges from the corridor baseline." Triage method: (1) system name language, (2) corp/institution name language, (3) GTTR founding community mention, (4) corridor default if none. See Miri's Round 3 §2 for full triage protocol. --- ## 5. `dominant_faction` Vocabulary (8 values, final) `lattice_commission` dropped. `mixed` replaces it for multi-polar systems. ``` concord_assembly — governed by or strongly Assembly-affiliated compact — formal Compact of Westphalia signatory compact_sympathetic — Compact-aligned but not formal signatories syndic_dominant — Syndic interests functionally govern veil_institute — Institute has effective overriding authority independent — self-governing non-affiliated disputed — contested or fractured governance mixed — multiple significant factions, no single dominant ``` **Heuristic fallback for unnamed systems:** - Hop 0–5, any corridor → `concord_assembly` - Hop 6+, west_reach, `MARK_PRIMARY` currency → `compact` - Hop 5–6, west_reach, `MIXED` currency → `compact_sympathetic` - Hop 7+, any other corridor → `independent` - Tier-1 monopolist corp sole HQ → `syndic_dominant` (flag for confirmation) - Institute-claimed facility → `veil_institute` (flag for confirmation) --- ## 6. Deterministic-Varied Fallback (Economic Axis) For unnamed systems, `economic_specialization` is derived via a seed-hashed weighted draw. NOT a flat one-to-one mapping — the noise term prevents all unnamed agricultural worlds from being identical. **Algorithm (all weights integer basis-points, D-010 compliant):** ``` // Weights W_ROLE_PRIMARY = 8_000 // dominant signal from system_economy.economic_role W_ROLE_SECONDARY = 3_000 // secondary role signals W_CORP = 5_000 // corp HQ primary operation W_NOISE = 400 // small weight to EVERY vocabulary value (variety term) // Seed derivation seed = SeedChain::root(world_seed) .derive(SeedDomain::Layer1System, fnv1a_64(system_id)) .seed() rng = AtlasRng::new(splitmix64(seed)) ``` **Role → candidate mapping:** | `economic_role` | Primary (W=8,000) | Secondary (W=3,000) | |---|---|---| | `agricultural` | `breadbasket` | `estate_farming`, `terroir_agriculture` | | `extraction` | `ore_extraction` | `company_mining`, `fuel_production` | | `manufacturing` | `general_industrial` | `shipbuilding`, `vehicle_production` | | `financial` | `financial_hub` | `governance_center` | | `service_mixed` | `transit_hub` | `governance_center` | | `research` | `research_station` | `precision_tech` | | `transit_hub` | `transit_hub` | `governance_center` | | `institutional` | `governance_center` | `legal_archive` | | `military` | `military_industrial` | `governance_center` | | `residential` | `estate_farming` | `general_industrial` | **Distribution outcome:** Primary candidate wins ~90% for clear cases, ~60-70% for mixed signals. ~5-10% draw off-primary values. D-233 output varies across 200 unnamed systems instead of clustering identically. **Cultural and faction fallback:** Corridor assignment (D-232 existing) for `cultural_specialization`; Commission/currency derivation for `dominant_faction`. No noise term — these are stable, not varied. --- ## 7. Full Must-Pin Table All confirmed by lore/GTTR verification from Miri (economic + cultural) and Paula (faction). 27 named systems. | System | GJ ID | `economic_specialization` | `cultural_specialization` | `dominant_faction` | |---|---|---|---|---| | Ran | GJ-144 | `breadbasket` | `agrarian` | `concord_assembly` | | Cygni B | GJ-820B | `shipbuilding` | `industrial_heritage` | `concord_assembly` | | Sindri | GJ-3522 | `company_mining` | `industrial_heritage` | `syndic_dominant` | | Nova Roma | GJ-764 | `vehicle_production` | `italian_northern` | `concord_assembly` | | Renaissance | GJ-251 | `gate_fabrication` | `industrial_heritage` | `syndic_dominant` | | Groombridge | GJ-380 | `financial_hub` | `financial_technocratic` | `syndic_dominant` | | Prometheus | GJ-702B | `longevity_monopoly` | `medical_elite` | `independent` | | ACB | GJ-559B | `governance_center` | `institutional` | `concord_assembly` | | Tessera | GJ-3877 | `legal_archive` | `scholarly` | `concord_assembly` | | Sirius | GJ-244A | `governance_center` | `institutional` | `concord_assembly` | | Parallax | GJ-280A | `media_center` | `artistic` | `independent` | | Gateway | GJ-71 | `transit_hub` | `cosmopolitan` | `mixed` | | Wolf 359 | GJ-406 | `transit_hub` | `institutional` | `concord_assembly` | | Vuurkloof | GJ-35 | `geothermal_hub` | `afrikaans_cape` | `independent` | | Keid | GJ-166A | `research_station` | `scholarly` | `independent` | | Bastion | GJ-570A | `military_industrial` | `military` | `concord_assembly` | | Arbour | GJ-338B | `estate_farming` | `agrarian` | `concord_assembly` | | Lu Ban | GJ-15A | `consumer_goods_bazaar` | `chinese` | `independent` | | Calloway Reach | GJ-3325 | `terroir_spirits` | `scottish` | `independent` | | Confluent/VGV | GJ-395 | `terroir_agriculture` | `french_provencal` | `compact_sympathetic` | | Braemar | GJ-475 | `terroir_organics` | `scottish` | `independent` | | Nyrheim | GJ-3737 | `marble_monopoly` | `norse_compact` | `compact` | | Ostmark | GJ-601A | `breadbasket` | `compact_cooperative` | `compact` | | Dagat | GJ-482A | `terroir_organics` | `tagalog` | `independent` | | Altmark | GJ-357 | `transit_hub` | `cosmopolitan` | `independent` | | Dài Lộ | GJ-136 | `transit_hub` | `vietnamese` | `independent` | | Zenzele | GJ-1111 | `precision_tech` | `zulu` | `independent` | **Additional Paula faction pins** (not in Miri's table but needed): | System | GJ ID | `dominant_faction` | Notes | |---|---|---|---| | Sol | GJ 0 | `disputed` | Post-Secession; no settled governance | | Struve | GJ 725B | `disputed` | Dormant gate; jurisdictional unsettled | | Barnard's Star | GJ 699 | `concord_assembly` | Cygni B commuter suburb | | Freiholt | GJ 453 | `compact` | Compact co-drafter | | Groenland | GJ 3333 | `compact` | Trade economics motivated | | Echternach | GJ 127B | `compact` | Medical supply dependency | | Changwon | GJ 860B | `independent` | Bicameral self-governing junction | | All ~30-40 formal Compact west_reach members | various | `compact` | Apply self-sufficiency review rule | --- ## 8. CI Guardrails ### Hard errors (build aborts) | ID | Field | Rule | |---|---|---| | V-SES-01 | `economic_specialization` | Must be in `specialization_vocabulary` when present | | V-SES-02 | `economic_specialization` | Inhabited systems (population > 0): must have non-null authored value OR fallback must successfully derive one | | V-SES-03 | `economic_specialization` | `production_ubiquity_override` must be ≥ catalog default concentration (cannot claim lower concentration than globally true) | | V-SES-04 | `cultural_specialization` | Must be in the combined activity+heritage vocabulary when present | | V-SES-05 | `dominant_faction` | Must be in the 8-value vocabulary when present | | V-SES-06 | FK | `specialization_vocabulary.commodity_id` must exist in `commodities(commodity_id)` | ### Soft warnings (build succeeds, prints) | ID | Field(s) | Rule | |---|---|---| | W-SES-01 | `economic_specialization` | Resolved MonopolySource systems: print list for human review (D-177 check) | | W-SES-02 | `economic_specialization` | >25% of inhabited systems resolve to same vocabulary value | | W-SES-03 | `economic_specialization` + prose | `economic_base_primary` text doesn't mention commodity/sector from vocabulary | | W-SES-04 | `dominant_faction` + `currency_zone` | `compact` + `tractus_primary` currency → D-172 violation | | W-SES-05 | `dominant_faction` + `economic_specialization` | `compact` + MonopolySource resolved (except D-177 terroir/geological values) | | W-SES-06 | `dominant_faction` + `cultural_specialization` | `compact` + `cultural_specialization` authored without Compact-doctrine reference | | W-SES-07 | `dominant_faction` | Named systems (GTTR entry) without authored `dominant_faction` → list | | W-SES-08 | `economic_specialization` | `estate_farming` + `population > 5_000_000` → likely should be `breadbasket` | ### Coverage report output ``` system_specialization pass coverage: economic: NNN / MMM inhabited systems authored (NN%); NNN on fallback cultural: NNN / MMM named systems authored (NN%); NNN on corridor default faction: NNN / MMM named systems authored (NN%); NNN on derivation economic BulkClass: BulkSolid=NN | BulkLiquid=NN | Perishable=NN | PrecisionDense=NN | NonPhysical=NN economic ProductionUbiquity: Ubiquitous=NN | Common=NN | Specialist=NN | MonopolySource=NN MonopolySource systems [D-177 REVIEW]: [list] D-172 faction/currency mismatches [REVIEW]: [list] Compact monoeconomy flags [REVIEW]: [list] ``` --- ## 9. Content Pass Summary | Author | Scope | Count estimate | |---|---|---| | Miri | `economic_specialization` + `cultural_specialization` for named/hero systems + all D-177 terroir pins | ~80-100 economic; ~60-100 cultural (divergent-heritage scope) | | Paula | `dominant_faction` for all Compact members + political capitals + contested systems | ~40-60 faction pins | | Burnelli-Sheldon | Economic credibility review of all ~300 entries; fallback algorithm validation; distribution balance | Review only (no new authoring) | | All three | `atlas_body_trait_bias` hero pins (~30-40 bodies) as co-authoring — separate from this pass | ~30-40 D-232 entries | --- ## 10. Draft D-Records **D-237 filed to `decisions/architecture.md` 2026-05-31. D-233 re-amended same date. D-238 (stray duplicate) deleted from DB.** --- ### D-237: Authored System Specialization Layer *(Filed to `decisions/architecture.md` 2026-05-31 — see that file for the canonical record.)* - **Date:** 2026-05-31 - **Decision:** Each inhabited star system carries three authored per-system identity fields, statically compiled from `wiki/economics/system_specialization.toml` at build time via `import_economics.py`. These fields constitute the lore-authored identity layer above the heuristic and are the primary source for D-233/D-232/D-214 generator inputs for named systems. **Three fields:** **(1) `system_economy.economic_specialization TEXT` (new column)** A 27-value curated vocabulary compiled from `wiki/economics/specialization_vocabulary.toml` into the `specialization_vocabulary` DB table. Each value maps to `(commodity_id, production_ubiquity_override_or_null)` → `(BulkClass, ProductionUbiquity)` for D-233. Scale is encoded in the vocabulary value — no separate scale column. The vocabulary respects the equal-or-higher concentration rule: an override may only assign equal or higher concentration than the commodity's global `production_ubiquity`. Authored for ~80-100 named systems; heuristic fallback for ~200 unnamed (deterministic-varied weighted draw — see below). **(2) `system_economy.cultural_specialization TEXT` (new column)** A combined vocabulary directing D-232's template pool when a system's cultural character diverges from corridor baseline. Two value subtypes co-exist in one field: *activity/character values* (what the system does culturally — `agrarian`, `industrial_heritage`, `institutional`, etc.) and *heritage-type values* (founding ethnic heritage that overrides corridor defaults — `scottish`, `vietnamese`, `tagalog`, `zulu`, `afrikaans_cape`, `chinese`, `italian_northern`, `french_provencal`, `norse_compact`, etc.). Heritage values take precedence when both apply. `NULL` = use corridor default (D-232's existing algorithm). Authored for ~60-100 systems where corridor default would produce wrong architectural templates for Phase 4 correctness, not merely Phase 6 enrichment. Does NOT replace `system_culture.cultural_register` (prose/NPC/narrative voice consumed by dialogue generators); this field is consumed by the physical generator (D-232) only. **(3) `system_factions.dominant_faction TEXT` — populated, not added** Column already exists (D-199 field 4); VALUES for named systems are authored in this pass. 8-value vocabulary: `concord_assembly | compact | compact_sympathetic | syndic_dominant | veil_institute | independent | disputed | mixed`. `lattice_commission` is dropped — Commission is a regulatory body, not a governing faction; ACB and Bastion are `concord_assembly`. Authored for ~40-60 named systems; existing derivation (Commission presence + currency zone) serves as fallback. **Heuristic fallback (economic axis, deterministic-varied):** For unnamed systems, `economic_specialization` is derived via a seed-hashed weighted draw over the vocabulary. Weight table: `economic_role` primary signal (W=8,000 bps), corp HQ specialization (W=5,000 bps), noise term W=400 to every vocabulary value. The noise term ensures ~5-10% of unnamed systems draw an off-primary value — preventing all unnamed agricultural worlds from being identical. Deterministic: `SeedChain(world_seed).derive(Layer1System, fnv1a_64(system_id))` produces the same value run-to-run. **Groombridge landmark mechanism:** Where a system's authored identity includes a singular MonopolySource-class institution within a Specialist-scale district (Groombridge: `financial_hub`/Specialist + GSH clearing house as landmark), the district character is encoded as Specialist in the vocabulary. The singular landmark is expressed via D-222 multi-block reservation + D-232 `atlas_body_trait_bias` hero pin. The vocabulary expresses district-level character; landmark-level identity is the D-232/D-222 mechanism. **CI:** 6 hard errors (vocabulary FK integrity, inhabitance coverage, production_ubiquity monotonicity, vocabulary constraint for all three fields), 8 soft warnings (MonopolySource review, distribution balance, prose/field divergence, D-172 faction/currency alignment, Compact monoeconomy flag, authoring gap lists). Full spec in CI guardrails section of this workshop document. - **Rationale:** The pre-existing D-233 heuristic (economic_role + corp HQ + planet_class → dominant commodity) fails predictably for: (1) output-vs-input confusions (Cygni B: heuristic sees ore inputs, not freight_hauler outputs); (2) political mandates (Groombridge: financial infrastructure is an institutional choice, not geographic necessity); (3) terroir-locked production (D-177 systems: catalog defaults are globally-ubiquitous, not locally-monopolistic); (4) service economies (Prometheus, Keid: no heuristic path from available signals). The three-field authored layer resolves all four failure modes. The three-field minimum is justified: economic (D-233 block fill), cultural (D-232 template selection), faction (D-214 political archetype). No field is redundant; each changes how a system reads in Phase 4. The `cultural_specialization` field was argued on quality grounds (Paula addendum): without it, systems with founding heritage diverging from corridor baseline produce wrong D-232 architectural draws in Phase 4 — not a thin Phase 6 concern. - **Raised by:** System economic-specialization workshop, 2026-05-31. Burnelli-Sheldon (schema, vocabulary, mapping, CI, fallback algorithm), Miri (must-pin list, scale gap, D-177 terroir pins, cultural heritage vocabulary), Paula (faction vocabulary, Compact rules, heritage-divergence cultural scope, D-172 compliance), human checkpoint (dual-axis design, no separate scale column, faction authored, quality-first field count, deterministic-varied fallback, Groombridge landmark mechanism). - **Dissent:** None. - **Cross-reference:** D-233 (re-amended — see below), D-184 (commodity catalog), D-199 (CityGenerationContext read-set, extended), D-232 (template draw — consumes `cultural_specialization`), D-214 (PoliticalArchetype — consumes `dominant_faction`), D-172 (currency zone alignment), D-174 (shadow economy intensity), D-177 (productivity constraints — informs monopolistic pins), D-220 (density), D-197 (prosperity) --- ### D-233 RE-AMENDMENT *(Filed to existing D-233 record in `decisions/architecture.md` 2026-05-31 — see that file for the canonical record.)* **Re-amended 2026-05-31 (D-237 — authored specialization layer):** The settlement's `dominant_bulk_class` and `dominant_production_ubiquity` are now sourced from the authored specialization layer (D-237) rather than derived directly from the highest-output production chain. Derivation chain: 1. If `system_economy.economic_specialization` is authored → resolve via `specialization_vocabulary(economic_specialization)` → `(commodity_id, production_ubiquity_override)` → `(BulkClass, ProductionUbiquity)`. Use the vocabulary-specified `ProductionUbiquity` (which may override the catalog default per the equal-or-higher rule). 2. If `economic_specialization` is NULL → run the deterministic-varied heuristic (D-237 §fallback: seed-hashed weighted draw over the vocabulary using `economic_role` + corp HQ signals + noise term) → same projection. In both cases, the resolved `(BulkClass, ProductionUbiquity)` populates `CityGenerationContext.dominant_bulk_class` and `CityGenerationContext.dominant_production_ubiquity`. The frozen-amber constraint is unchanged: `fill_chunk(ctx, seed)` holds no `PressureState` reference. Within-system body variation (weighted draw over body-level candidates anchored to system commodity) remains seed-hashed. **Groombridge clarification (landmark vs. district):** The vocabulary expresses district-level character. Singular MonopolySource-class landmarks within a Specialist district are expressed via D-222 multi-block reservation + D-232 hero-element pin, not via composite vocabulary values. --- ## 11. Implementation Notes (for the lead + SI) **New source files:** - `wiki/economics/system_specialization.toml` — per-system authored entries (~300 stanzas for the full pass) - `wiki/economics/specialization_vocabulary.toml` — vocabulary definition (27 values) **Both added to `IMPORT_ECONOMICS_SOURCES` in `tooling/check-systems-db-stamp` for meta stamp tracking.** **DB schema changes:** - `server/data/systems-schema.sql`: add `economic_specialization TEXT` and `cultural_specialization TEXT` to `system_economy`; add `specialization_vocabulary` table DDL - `MIGRATION_SQL` in `import_economics.py`: idempotent `ALTER TABLE system_economy ADD COLUMN` for both **Code changes:** - `import_economics.py`: new `import_system_specialization()` step; compile `specialization_vocabulary`; 6 hard-error validations; 8 soft warnings; coverage report - `server/src/bridge/city_context_reader.rs`: replace `#982 design-blocked` stubs with vocabulary lookup + fallback draw algorithm **`system_factions.dominant_faction`** is an existing column; `import_economics.py` UPSERTs values from the TOML. System_factions rows must already exist (created by `wiki_sync.py` or atlas import). Does NOT add a new column. --- *Workshop outcomes document complete. Pre-filing — D-records require ID assignment (`tooling/db/decision claim`) and human approval before writing to `decisions/architecture.md`.* *Source files: `miri-round3.md`, `burnelli-sheldon-round3.md`, `paula-round3.md` (all rounds read).* *Qatux — 2026-05-31*