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>
30 KiB
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:
- Block fill (Phase 4+) — which functional building-type tags appear in civic district blocks. A
scholarlysystem gets research institutes and archives; aninstitutionalsystem gets commission offices and courts. - NPC character distributions (Phase 6) — what NPCs populate social spaces (academics, bureaucrats, entertainers, traders).
- 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:
-
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). -
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 separatedominant_production_scalecolumn. -
Fork 2 resolved:
dominant_factionauthored 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.toml → import_economics.py → system_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.