Workshop -> decision provenance was prose-only. Adds a `decision_refs:` YAML frontmatter list (the confirmed D-records each workshop-outcomes.md touches, filtered against the governance decision set) to all 17 workshop outcomes; the two that lacked frontmatter (commodity-catalog, system-economic-specialization) get a minimal block. pql indexes the list and `SELECT fm.decision_refs` round-trips it, so "which workshops touch D-NNN" is answerable via SELECT + filter or `pql search`. decision_refs is a relevance signal (decisions a workshop discusses/produces), not a strict authorship claim — historical bare refs aren't disambiguated. Generated wiki read-only sections are left untouched. Noted in pql-requirements #5: 1.6.2 has no working DSL operator for frontmatter list-membership (`~`/`contains` error, `in` matches nothing), so membership queries need a client-side filter for now. Reproducible via tooling/pql-migrate/add_workshop_provenance.py (idempotent). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
32 KiB
title, type, workshop, status, decision_refs
| title | type | workshop | status | decision_refs | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Workshop Outcomes: system-economic-specialization | workshop | system-economic-specialization | archived |
|
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)
# 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
-- 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:
- D-222 multi-block reservation — reserved block at generation time for a singular named institution
- D-232
atlas_body_trait_biashero pin — forces aclearing_house_landmarktemplate 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_PRIMARYcurrency →compact - Hop 5–6, west_reach,
MIXEDcurrency →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.tomlat build time viaimport_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 fromwiki/economics/specialization_vocabulary.tomlinto thespecialization_vocabularyDB 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 globalproduction_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 replacesystem_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_commissionis dropped — Commission is a regulatory body, not a governing faction; ACB and Bastion areconcord_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_specializationis derived via a seed-hashed weighted draw over the vocabulary. Weight table:economic_roleprimary 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-232atlas_body_trait_biashero 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_specializationfield 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 — consumesdominant_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:
-
If
system_economy.economic_specializationis authored → resolve viaspecialization_vocabulary(economic_specialization)→(commodity_id, production_ubiquity_override)→(BulkClass, ProductionUbiquity). Use the vocabulary-specifiedProductionUbiquity(which may override the catalog default per the equal-or-higher rule). -
If
economic_specializationis NULL → run the deterministic-varied heuristic (D-237 §fallback: seed-hashed weighted draw over the vocabulary usingeconomic_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: addeconomic_specialization TEXTandcultural_specialization TEXTtosystem_economy; addspecialization_vocabularytable DDLMIGRATION_SQLinimport_economics.py: idempotentALTER TABLE system_economy ADD COLUMNfor both
Code changes:
import_economics.py: newimport_system_specialization()step; compilespecialization_vocabulary; 6 hard-error validations; 8 soft warnings; coverage reportserver/src/bridge/city_context_reader.rs: replace#982 design-blockedstubs 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