Files
settled-reach/docs/workshops/system-economic-specialization/burnelli-sheldon-round2.md
T
jpmschweitzerandClaude Opus 4.8 33c083f0ef docs(workshops): system-economic-specialization rounds + outcomes
Three-round design workshop (Miri, Burnelli-Sheldon, Paula; documented by
Qatux, ticketed by SI) that produced D-237. Includes per-agent round
outputs, round notes, the independent scout critique, and the final
workshop-outcomes.md with the consolidated schema, 27-value economic
vocabulary, cultural + faction vocabularies, deterministic-varied fallback
spec, must-pin table, and CI guardrails.

Clerk-Skip: workshop discussion docs, no D-record surface (D-237 filed separately)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 18:40:08 +02:00

30 KiB
Raw Blame History

Round 2 — Burnelli-Sheldon

System Economic-Specialization Workshop

Lens: economics/mapping/credibility — two-axis design, enriched vocabulary, field-count justification, CI guardrails.

Operating within the user checkpoint decisions: two orthogonal axes preserved; no separate dominant_production_scale column (encode scale in vocabulary value instead); dominant_faction authored for named systems this pass.


Q1 — Two-Axis Mapping: Separability and Concrete Design

Are the axes truly separable?

Yes, with qualification. The economic and cultural axes are mostly orthogonal — they share some inputs but drive different generator outputs. They can diverge significantly:

System Economic specialization Cultural specialization Why they diverge
Ran breadbasket → Perishable, Specialist agrarian Ran's built form is dense agricultural infrastructure; its social character is conservative, syndic-controlled, five-century food production culture
Cygni B shipbuilding → BulkSolid, Common industrial_heritage Built form: competing shipyards, metallic asteroid extraction. Social character: labor collectives, industrial heritage, worker cooperative identity
Groombridge clearing_house → NonPhysical, MonopolySource financial_technocratic Built form: dense exchange floors, data archives. Social character: numerical thinking, information asymmetry culture, "expensive restraint" architecture
Prometheus longevity_monopoly → NonPhysical, MonopolySource medical_elite Built form: dense institutional facilities, controlled access. Social character: bioethics institutes, longevity research culture, restricted access norms
Keid biosphere_tourism → NonPhysical, MonopolySource ecological Built form: Conservancy control infrastructure, restricted visitor facilities. Social character: conservation ethics, Veil Institute research, nature-centered
Parallax media_center → NonPhysical, Specialist artistic Built form: production studios, news infrastructure. Social character: celebrity culture, reputation management, creative industry identity
Gateway transit_hub → NonPhysical, Common cosmopolitan Built form: customs offices, diplomatic facilities distributed throughout. Social character: transient mixed population, no single cultural dominance

The economic axis (BulkClass × ProductionUbiquity) is a capital structure signal — it answers what the settlement's production infrastructure looks like and how concentrated it is. The cultural axis is a social program signal — it answers what appears in the settlement's civic and social spaces.

The partial correlation: they're not independent. A longevity monopoly (economic) creates a medical-elite cultural character as a near-necessary consequence. A media center (economic) produces an artistic cultural character. The cultural axis carries marginal additional information beyond the economic axis, but for the ~25-30 systems where it genuinely diverges, that information matters.

The design boundary: economic axis feeds D-233 (block fill vocabulary + coverage fraction). Cultural axis feeds what TYPE of civic buildings appear in civic/social districts — museums vs. research institutes vs. courts vs. entertainment venues. This is consumed by the Phase 4+ block fill for civic district types (D-194) and Phase 6 NPC/room grammar generators.

Mapping: Economic Axis → D-233

The economic axis maps through the curated specialization vocabulary to (commodity_id, ProductionUbiquity), which then projects to (BulkClass, ProductionUbiquity) per the D-233/commodity catalog tables.

Full mapping table: Q2 below.

Mapping: Cultural Axis → Civic Building Program

The cultural axis drives what type of civic institutions appear in civic/social districts. It is consumed by:

  1. Block fill (Phase 4+) — which functional building-type tags appear in civic district blocks. A scholarly system gets research institutes and archives; an institutional system gets commission offices and courts.
  2. NPC character distributions (Phase 6) — what NPCs populate social spaces (academics, bureaucrats, entertainers, traders).
  3. Room grammar (Phase 6) — what the interiors of civic buildings contain.

Cultural axis → civic institution type mapping:

cultural_specialization Primary civic institution types Secondary civic institutions Example systems
scholarly Research institutes, archives, universities Observatories, rare materials libraries Tessera, Keid (partial)
artistic Production studios, galleries, performance venues Media syndicates, reputation management Parallax
institutional Commission offices, courts, assembly halls Diplomatic facilities, regulatory bodies Sirius, ACB, Bastion (administrative)
commercial Trading floors, hospitality clusters, mixed markets Bond warehouses, logistics offices Altmark, Gateway
agrarian Cooperative halls, grain exchanges, agricultural heritage Land record offices, food culture venues Ran, Ostmark, Calloway Reach
industrial_heritage Labor cooperative halls, industrial museums Worker memorial spaces, union halls Cygni B, Sindri
medical_elite Longevity centers, bioethics institutes, medical research High-security access control Prometheus
ecological Conservation facilities, nature monitoring arrays Research stations, restricted-access control Keid
military Command centers, strategic planning, memorial halls Readiness infrastructure Bastion
financial_technocratic Exchange floors, actuarial institutes, data centers Risk management facilities Groombridge
cosmopolitan Mixed/diverse — no single dominant type The absence of a dominant civic character Generic transit hubs
compact_cooperative Community halls, cooperative banks, mutual aid Self-reliance cultural institutions All Compact member systems

Heuristic fallback (when cultural_specialization = NULL):

The fallback derives from dominant_faction + economic_specialization:

if dominant_faction = 'concord_assembly': → 'institutional'
if dominant_faction = 'compact' or 'compact_sympathetic': → 'compact_cooperative'
if dominant_faction = 'veil_institute': → 'scholarly'
if dominant_faction = 'syndic_dominant': → 'commercial'
if economic_specialization in ['media_center', 'entertainment_hub']: → 'artistic'
if economic_specialization in ['breadbasket', 'terroir_*', 'estate_farming']: → 'agrarian'
if economic_specialization in ['general_manufacturing', 'shipbuilding', 'company_mining']: → 'industrial_heritage'
else: → 'cosmopolitan'

This fallback is good enough for unnamed, generic systems. It fails for edge cases (Prometheus: faction=independent + economic=longevity_monopoly → falls through to 'cosmopolitan', wrong). Named hero systems should be pinned.


Q2 — Enriched Economic Vocabulary

Design decision: a curated specialization vocabulary

The user resolved Fork 3 as: no separate dominant_production_scale column — encode scale in the vocabulary value instead.

My implementation: a specialization_vocabulary table compiled from wiki/economics/specialization_vocabulary.toml. Each entry maps a human-authored specialization name to (commodity_id, production_ubiquity_override). The commodity catalog stays at 36 entries (D-184 preserved, no expansion). Authors pick from the vocabulary, not from 36 commodity IDs.

Key constraint (Miri's equal-or-higher rule): production_ubiquity_override may only be set equal to or higher concentration than the catalog default. This is a CI hard error.

Why not expand the commodity catalog? The commodity catalog is the tâtonnement simulation's production graph. Adding "breadbasket" as a commodity would require production chains, elasticity classes, and market dynamics for what is simply "agricultural_produce produced at higher concentration." That's not an economic distinction — it's a settlement identity distinction. The vocabulary layer above the catalog is the right home.

The economic specialization vocabulary (complete first draft)

Source file: wiki/economics/specialization_vocabulary.toml

Each entry: commodity_id (FK → commodities), production_ubiquity_override (optional; if null, catalog default applies), description (human-readable), d177_constrained (boolean — D-177 lore ceiling applies).

Agricultural cluster

economic_specialization commodity_id ubiquity_override BulkClass D-233 ProductionUbiquity Representative system
estate_farming agricultural_produce null (→ ubiquitous) Perishable Ubiquitous Arbour — scattered estate agriculture, correct
breadbasket agricultural_produce concentrated Perishable Specialist Ran — THE food exporter, dense agricultural district
terroir_agriculture agricultural_produce monopolistic Perishable MonopolySource VGV system — F8V spectral lock, D-177
food_processing_hub processed_food common BulkSolid Common Standard processing world
terroir_spirits processed_food monopolistic BulkSolid MonopolySource Calloway Reach — distillery identity, D-177
marine_farming organic_compounds concentrated BulkSolid Specialist Dagat — deep ocean kelp monopoly
terroir_organics organic_compounds monopolistic BulkSolid MonopolySource Braemar — brach fiber, D-177

Extraction cluster

economic_specialization commodity_id ubiquity_override BulkClass D-233 ProductionUbiquity Representative system
ore_extraction metallic_ore null (→ common) BulkSolid Common Generic mining world
company_mining metallic_ore concentrated BulkSolid Specialist Sindri — DSMC dominance, company-town character
rare_mineral_extraction rare_minerals concentrated PrecisionDense Specialist Specialist rare-mineral world
rare_mineral_monopoly rare_minerals monopolistic PrecisionDense MonopolySource Monopoly rare-mineral source
lattice_material_source lattice_grade_material null (→ monopolistic) PrecisionDense MonopolySource East reach lattice anchor — catalog already monopolistic
stone_quarry stone null (→ common) BulkSolid Common Generic quarrying world
marble_monopoly stone monopolistic BulkSolid MonopolySource Nyrheim — Kvitfjell marble, D-177 geological ceiling

Energy cluster

economic_specialization commodity_id ubiquity_override BulkClass D-233 ProductionUbiquity Representative system
fuel_production fusion_fuel null (→ common) BulkLiquid Common Standard fuel refinery world
geothermal_hub fusion_fuel concentrated BulkLiquid Specialist Vuurkloof — geothermal identity dominates settlement character

Manufacturing cluster

economic_specialization commodity_id ubiquity_override BulkClass D-233 ProductionUbiquity Representative system
general_manufacturing refined_metals null (→ common) BulkSolid Common Generic industrial world
alloy_hub advanced_alloys concentrated BulkSolid Specialist High-performance alloy producer
shipbuilding freight_haulers common BulkSolid Common Cygni B — 7 competing combines, NOT monopoly
vehicle_production transport_vehicles concentrated BulkSolid Specialist Nova Roma — MVG identity
gate_fabrication gate_components monopolistic BulkSolid MonopolySource Renaissance — Gate Corp monopoly
consumer_goods_bazaar consumer_goods concentrated BulkSolid Specialist Lu Ban — 300 competing workshops
military_production heavy_equipment concentrated BulkSolid Specialist Bastion — fleet yards, maintenance bays

High-tech cluster

economic_specialization commodity_id ubiquity_override BulkClass D-233 ProductionUbiquity Representative system
electronics_hub electronics null (→ regional/→Common) PrecisionDense Common Electronics fabrication
precision_tech electronics concentrated PrecisionDense Specialist High-concentration electronics cluster
lattice_fabrication lattice_substrate concentrated PrecisionDense Specialist Lattice substrate production hub

Services cluster

economic_specialization commodity_id ubiquity_override BulkClass D-233 ProductionUbiquity Representative system
financial_hub financial_services concentrated NonPhysical Specialist Groombridge (main financial district character)
clearing_house financial_services monopolistic NonPhysical MonopolySource Groombridge as the ONLY clearing house
governance_center commission_certification concentrated NonPhysical Specialist Sirius — Assembly IS the system
transit_hub commission_certification null (→ common) NonPhysical Common Gateway, Wolf 359 — customs/transit diffuse throughout
legal_archive legal_services concentrated NonPhysical Specialist Tessera — Interpretive Registry
longevity_monopoly medical_services monopolistic NonPhysical MonopolySource Prometheus — only legitimate longevity facility
regional_healthcare medical_services null (→ regional/→Common) NonPhysical Common Standard medical hub
biosphere_tourism tourism monopolistic NonPhysical MonopolySource Keid — one biosphere, Conservancy-controlled
media_center entertainment concentrated NonPhysical Specialist Parallax — news syndicates, cultural production
military_station heavy_equipment concentrated BulkSolid Specialist Bastion — fleet infrastructure IS the settlement

Note on governance_center vs transit_hub: These both resolve to NonPhysical BulkClass but at different ProductionUbiquity (Specialist vs Common). This is the correct built-form distinction: Sirius reads as a concentrated institutional complex (dense commission offices, Assembly halls); Gateway reads as institutional infrastructure distributed throughout a transit settlement (customs offices everywhere, not a central commission district). The character distinction Paula noted between these two is captured by the ubiquity level, not by D-232 templates alone.

Note on military_station vs military_production: Both exist in the vocabulary. Bastion is fleet-maintenance focused (primary built form: drydocks, maintenance bays, weapons depots → military_production, heavy_equipment, concentrated). A Compact military world that manufactures weapons systems might also use military_production. The CULTURAL axis (military) applies to both.

Vocabulary size: 33 values. This is the right order of magnitude — larger than Paula's 9-value enum (captures more economic nuance) but far smaller than the full 36-commodity catalog (manageable for authors, legible by non-economists).

How authors use this vocabulary

Authors do not need to know commodity_id or production_ubiquity. They see:

  • A vocabulary list of 33 named values
  • A short description for each (e.g., "breadbasket: THE food exporter of a corridor or region — agricultural infrastructure dominates, concentrated processing and storage district")
  • Example systems for each value

The CI validates the chosen value against the vocabulary table. The generator resolves commodity_id and ProductionUbiquity from the vocabulary table. Authors think in system identity; the mapping is the CI layer's concern.

TOML format for system_specialization.toml

# wiki/economics/system_specialization.toml
# Decisions: D-233 (re-amended by this workshop), D-184

[GJ-144]  # Ran
economic_specialization = "breadbasket"
cultural_specialization = "agrarian"
dominant_faction = "concord_assembly"

[GJ-380]  # Groombridge
economic_specialization = "clearing_house"
cultural_specialization = "financial_technocratic"
dominant_faction = "syndic_dominant"

[GJ-702B]  # Prometheus
economic_specialization = "longevity_monopoly"
cultural_specialization = "medical_elite"
dominant_faction = "independent"

[GJ-166A]  # Keid
economic_specialization = "biosphere_tourism"
cultural_specialization = "ecological"
dominant_faction = "independent"

[GJ-820B]  # Cygni B
economic_specialization = "shipbuilding"
cultural_specialization = "industrial_heritage"
dominant_faction = "concord_assembly"

[GJ-251]  # Renaissance
economic_specialization = "gate_fabrication"
cultural_specialization = "institutional"
dominant_faction = "syndic_dominant"

[GJ-570A]  # Bastion
economic_specialization = "military_station"
cultural_specialization = "military"
dominant_faction = "lattice_commission"

[GJ-280A]  # Parallax
economic_specialization = "media_center"
cultural_specialization = "artistic"
dominant_faction = "independent"

[GJ-601A]  # Ostmark
economic_specialization = "breadbasket"
cultural_specialization = "compact_cooperative"
dominant_faction = "compact"

[GJ-3737]  # Nyrheim
economic_specialization = "marble_monopoly"
cultural_specialization = "compact_cooperative"
dominant_faction = "compact"

Q3 — Field-Count Justification

The anti-scope-creep test (from the brief): "only fields that genuinely change how a system reads earn a slot, and each must degrade to a heuristic/default for unauthored systems."

Field 1: economic_specialization (new column on system_economy)

Changes how a system reads? YES — the entire D-233 block fill vocabulary, coverage fraction, and operations surface derive from this. Ran with breadbasket generates a dense agricultural processing district. Ran with estate_farming (catalog default) generates scattered farm plots in mixed-use. These are completely different settlements. This is the whole point of the workshop.

Degrades to heuristic? YES — for unnamed systems, the heuristic (economic_role + planet_class + corp HQ → vocabulary lookup) produces a plausible specialization value. The heuristic is now expressed as a vocabulary lookup rather than a direct commodity selection, but the fallback logic is unchanged from Round 1's weighted draw.

Verdict: IN. Primary deliverable.

Field 2: cultural_specialization (new column on system_economy)

Changes how a system reads? YES — determines what TYPE of civic buildings appear. Two systems with identical economic specialization can have completely different civic character. Cygni B (shipbuilding) and Nova Roma (vehicle_production) both have BulkSolid/Specialist built form. Their civic programs differ: labor cooperative halls vs. MVG institutional architecture. That civic program difference is what makes the systems feel like different places to inhabit.

Degrades to heuristic? YES — the fallback from dominant_faction + economic_specialization is solid for most generic systems (Compact members → compact_cooperative, Assembly systems → institutional, etc.). The cases where it fails are the edge cases that get pinned anyway.

Authoring burden: ~30-40 pinned entries (hero systems). The other ~260 systems run the heuristic. This is not 300 entries — it's the same hero-body coverage as the trait pin. Non-hero systems get a reasonable fallback.

Does it duplicate system_culture? No. system_culture.primary_archetype is a different signal for NPC dialogue and the storyteller — it's the GTTR narrative voice. cultural_specialization is the physical generator's civic-building-program input. They're consumed by different systems. However, to avoid confusion: system_culture.primary_archetype stays on its own wiki_sync.py pathway; cultural_specialization lives on system_economy via import_economics.py. Different consumers, different pipelines, no write conflict.

Verdict: IN — but only author for hero systems (~30-40 entries). Fallback covers the rest.

Field 3: dominant_faction (existing system_factions.dominant_faction — POPULATE, not add)

This is not a new field. Paula correctly identifies that authoring it during this pass is necessary. The D-199 read-set already requires it; D-214 (PoliticalArchetype) and D-232 (template weights) already consume it. The problem is that its VALUES are currently derived by heuristic (hop distance, currency zone) rather than authored.

Changes how a system reads? YES — dominant_faction feeds PoliticalArchetype (D-214), which determines whether settlements have radial-core Commission layout vs. corporate campus grid vs. cooperative distributed plan. Groombridge's syndic_dominant vs. concord_assembly distinction changes the spatial form of the entire settlement, not just individual buildings.

Degrades to heuristic? YES — the existing derivation (Commission presence → concord_assembly, Compact membership from currency zone → compact, etc.) serves as the fallback for unnamed systems.

Verdict: IN — author for named systems this pass (~40-60 entries). Same pass, same TOML file.

Fields I explicitly reject

economy_size — unchanged from Round 1: OUT. Redundant with population × prosperity_baseline.

Any fourth authored field — the three fields above cover: what the settlement PRODUCES (economic), what it FEELS LIKE socially (cultural), and who GOVERNS it (faction). These are genuinely orthogonal and each changes how a system reads. A fourth field would need to clear a very high bar. Nothing clears it.

atlas_body_trait_bias hero pins — these are NOT a system-level field. They're per-body entries in an existing table (D-232). They belong in this pass as a co-authoring activity (Miri + Araminta), but they're not a "field" in the economic schema sense. Include in the content-pass checklist, not in the schema.

Summary: the minimal viable field set

Field Column Table Authoring burden Earns slot?
economic_specialization New system_economy ~60-80 pins + heuristic for rest YES — primary deliverable
cultural_specialization New system_economy ~30-40 pins + fallback for rest YES — civic program input
dominant_faction value Existing (populate it) system_factions ~40-60 named systems YES — spatial layout input
economy_size 300 entries NO — redundant
Any 4th field 300 entries NO — nothing clears the bar

Q4 — CI Guardrails for All Three Fields

Schema additions

-- system_economy (in systems-schema.sql, via COLUMN_MIGRATIONS in import_economics.py)
ALTER TABLE system_economy ADD COLUMN economic_specialization TEXT;
ALTER TABLE system_economy ADD COLUMN cultural_specialization TEXT;

-- specialization_vocabulary (new — compiled from wiki/economics/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
    cultural_hint TEXT,  -- suggested cultural_specialization (advisory only)
    d177_constrained INTEGER NOT NULL DEFAULT 0,
    description TEXT NOT NULL
);

Hard errors (build aborts)

ID Field Rule Rationale
V-ES-01 economic_specialization Must be in specialization_vocabulary vocabulary Typo protection; vocabulary is the constraint
V-ES-02 economic_specialization Every inhabited system (population > 0) MUST have a non-null value after the pass is declared complete Generator requires this field for D-233
V-ES-03 economic_specialization If production_ubiquity_override is set, it must map to equal or higher concentration than catalog default (ubiquitous < common ≈ regional < concentrated < monopolistic) Miri's rule: can only increase local concentration, never decrease
V-CS-01 cultural_specialization Must be in the 12-value vocabulary when present Typo protection
V-DF-01 dominant_faction Must be in vocabulary: `concord_assembly compact

Soft warnings (build succeeds, prints)

ID Field(s) Rule Rationale
W-ES-01 economic_specialization monopolistic ubiquity systems: print list Monopoly pins load-bearing; human review required
W-ES-02 economic_specialization Distribution: > 25% of systems in same BulkClass OR > 30% in same ProductionUbiquity → warn Healthy economy requires variety
W-ES-03 economic_specialization + prose System where economic_base_primary text doesn't match vocabulary entry description → flag Contradiction detection
W-CS-01 cultural_specialization Named systems (wiki entry exists) without cultural_specialization → list Hero systems need explicit authoring
W-DF-01 dominant_faction + currency_zone dominant_faction = compact AND currency_zone = tractus_primary → flag D-172: Compact membership implies mark_primary or mixed
W-DF-02 dominant_faction + economic_specialization dominant_faction = compact AND economic_specialization resolves to MonopolySource extraction → flag Compact self-sufficiency doctrine contradicts monoeconomy extraction dependency
W-DF-03 dominant_faction + cultural_specialization dominant_faction = veil_institute AND cultural_specialization NOT IN (scholarly, ecological) → flag Veil Institute presence strongly implies these cultural characters
W-DF-04 dominant_faction Named systems without dominant_faction authored → list Generator uses it; heuristic fails for politically complex systems

Coverage report (extended from Round 1)

system_specialization coverage:
  economic authored: NNN / MMM inhabited systems (NN%)
  cultural authored: NNN / MMM named systems (NN%)
  faction authored: NNN / MMM named systems (NN%)
  
  economic by BulkClass: BulkSolid=NN, BulkLiquid=NN, Perishable=NN, PrecisionDense=NN, NonPhysical=NN
  economic by ProductionUbiquity: Ubiquitous=NN, Common=NN, Specialist=NN, MonopolySource=NN
  MonopolySource systems [REVIEW REQUIRED]: [list]
  
  D-172 faction/currency mismatches [REVIEW REQUIRED]: [list]
  Compact monoeconomy flags [REVIEW REQUIRED]: [list]

D-172 compliance check (new, flags gap Paula identified)

# In import_system_specialization():
# Cross-check faction pin against currency_zone
for system_id, faction, currency_zone in authored_systems:
    if faction == 'compact' and currency_zone == 'tractus_primary':
        warnings.append(f"W-DF-01: {system_id}: compact faction but tractus_primary currency zone")
    if faction == 'compact_sympathetic' and currency_zone not in ('mixed', 'mark_primary'):
        warnings.append(f"W-DF-01: {system_id}: compact_sympathetic faction expects mixed/mark_primary")

Remaining open questions after Round 2

Two concrete questions the user should resolve before the D-record is written:

OQ-1 — Groombridge: financial_hub or clearing_house?

The vocabulary has both. financial_hub (financial_services, concentrated, Specialist) and clearing_house (financial_services, monopolistic, MonopolySource). MonopolySource gives the D-233 concentration rule: "MonopolySource concentrates contiguous block groups — the mine IS the settlement, everything else is support." Is Groombridge's clearing house SO dominant that everything else is support? Or does Groombridge have a dense financial district alongside other settlement life? My instinct: clearing_house (MonopolySource) — the GTTR says "where the money lives" and that level of concentration is correct. But Miri should confirm.

OQ-2 — Keid: biosphere_tourism (economic) vs. research_station cultural character?

My design has Keid economic=biosphere_tourism (tourism, monopolistic → NonPhysical, MonopolySource) and cultural=ecological. Paula wanted Keid economic=research_station. But research_station doesn't appear in my economic vocabulary because research isn't an economic commodity — it's a cultural program. The built form of Keid is access-control infrastructure (Conservancy), visitor facilities, and Veil Institute research stations. The economic characterization (biosphere_tourism) drives that built form. The research character is captured by cultural=ecological. Is this the right split, or does the Veil Institute's presence give Keid a genuinely distinct economic built form from tourism? If yes, we need research_station in the economic vocabulary pointing to an appropriate commodity.


Summary

The design resolves all three user checkpoint decisions:

  1. Both axes preserved: economic_specialization → D-233 (BulkClass × ProductionUbiquity, block fill); cultural_specialization → civic building program (what types of institutions appear in civic/social districts).

  2. Fork 3 resolved in vocabulary: the curated 33-value specialization vocabulary encodes both commodity identity AND local concentration scale (e.g., breadbasket = agricultural_produce at concentrated, overriding the catalog's ubiquitous default). No separate dominant_production_scale column.

  3. Fork 2 resolved: dominant_faction authored for named systems in this same pass, same TOML file. Vocabulary: 8 values. CI guardrails include D-172 currency-zone alignment checks.

Source: wiki/economics/system_specialization.toml + wiki/economics/specialization_vocabulary.tomlimport_economics.pysystem_economy.economic_specialization, system_economy.cultural_specialization, system_factions.dominant_faction.

Total new authored entries for hero systems: ~60-80 economic pins + ~30-40 cultural pins + ~40-60 faction pins. The substantial majority of ~300 systems run heuristic fallbacks. The content pass is a three-field-per-hero-system exercise, not a 300-system full-authoring pass.