Files
jpmschweitzerandClaude Opus 4.6 4a3febbe29 refactor(schema): rename commission_certified to commission_certifiable
The flag is a susceptibility marker, not an absolute state — Commission
certification only applies when trading in TRACTUS_PRIMARY zones.
Compact-internal trade ignores it entirely. Renamed across all TOML
source files, schema docs, workshop outputs, and D-184.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 23:32:18 +02:00

24 KiB
Raw Permalink Blame History

Gestalt — #801 Commodity Catalog Validation Report

Files validated:

  • docs/workshops/commodity-catalog/commodities-final.toml (38 commodities)
  • docs/workshops/commodity-catalog/production-chains-final.toml (21 chains)
  • docs/workshops/commodity-catalog/schema-final.md (schema + validation rules)

Date: 2026-04-05


1. Chain Graph Completeness

1a. All chain inputs reference valid commodity IDs

Cross-checked every inputs[].commodity value against the commodity list:

Input referenced Exists in catalog?
metallic_ore
rare_minerals
lattice_grade_material
water
agricultural_produce
organic_compounds
stone
chemical_feedstock
timber
refined_metals
advanced_alloys
electronics
chemicals
processed_food
textiles
structural_panels
drive_cores
lattice_substrate

Result: PASS — no dangling references.

1b. Every non-service commodity appears as chain input or output

Raws (9) — checked as chain inputs:

Commodity Appears in chain inputs?
metallic_ore ✓ (smelt_ore, alloy_fabrication)
rare_minerals ✓ (alloy_fabrication, electronics_fabrication, drive_core_assembly)
lattice_grade_material ✓ (lattice_processing)
timber ✓ (panel_from_timber)
agricultural_produce ✓ (food_processing)
water ✓ (fuel_refining, food_processing, chemical_processing, chemical_from_organics)
organic_compounds ✓ (chemical_from_organics, textile_production)
stone ✓ (panel_from_stone)
chemical_feedstock ✓ (chemical_processing)

Result: PASS — all raws consumed in chains.

Intermediates (10) — checked as chain outputs AND inputs:

Commodity As chain output As chain input
refined_metals ✓ (smelt_ore) ✓ (electronics_fabrication, panel_from_timber, panel_from_stone, heavy_equipment_assembly, freight_hauler_construction, rail_construction)
advanced_alloys ✓ (alloy_fabrication) ✓ (drive_core_assembly, vehicle_manufacturing, medical_goods_production, gate_component_assembly)
fusion_fuel ✓ (fuel_refining) ⚠ NOT FOUND AS CHAIN INPUT
processed_food ✓ (food_processing) ✓ (consumer_goods_assembly)
electronics ✓ (electronics_fabrication) ✓ (8 of 9 finals + lattice_processing uses chemicals which uses feedstock)
chemicals ✓ (chemical_processing, chemical_from_organics) ✓ (textile_production, lattice_processing, implant_fabrication, medical_goods_production, habitat_module_assembly)
textiles ✓ (textile_production) ✓ (consumer_goods_assembly)
structural_panels ✓ (panel_from_timber, panel_from_stone) ✓ (habitat_module_assembly, rail_construction)
drive_cores ✓ (drive_core_assembly) ✓ (heavy_equipment_assembly, vehicle_manufacturing, freight_hauler_construction, gate_component_assembly)
lattice_substrate ✓ (lattice_processing) ✓ (implant_fabrication, gate_component_assembly)

Result: PASS with one design-decision flag on fusion_fuel (see §1c below).

Finals (9) — checked as chain outputs only (must not appear as inputs):

All 9 finals (heavy_equipment, transport_vehicles, freight_haulers, consumer_goods, implant_hardware, medical_goods, gate_components, habitat_modules, rail_infrastructure) appear as chain outputs and do NOT appear as any chain input.

Result: PASS — finals are correctly end-of-chain.

1c. ⚠ Fusion Fuel — Design Decision Flag

fusion_fuel is produced by fuel_refining but does not appear as an input in any production chain. Its consumption is handled entirely by demand_model = utility (exogenous population/station consumption) and panic_threshold_weeks = 2.

This is not a bug — it is an intentional architectural decision. Fusion fuel is not a manufacturing input; it is consumed as operational overhead by every active node. The Leontief matrix has zero entries for fusion_fuel as a chain input; demand comes from the utility model.

The sim must handle this explicitly: without a utility demand injection mechanism, fusion_fuel's price will collapse to equilibrium-at-zero-demand (no buyers in the Leontief matrix). The demand_model = utility field is the signal to the sim that these commodities require a separate exogenous demand floor calculation.

Recommend documenting this in the server team's simulation implementation notes: utility commodities (water, fusion_fuel, agricultural_produce, processed_food) have demand floors generated outside the Leontief matrix, driven by node population × per-capita consumption rate.

Water also has this property, but water at least appears in 4 chain inputs — so it has BOTH Leontief chain demand AND utility demand. Fusion_fuel has ONLY utility demand.

1d. No Circular Dependencies

The chain graph is a strict DAG: Raw → Intermediate → Final. No intermediate produces a raw; no final feeds back to an intermediate. The only multi-level intermediate dependency is:

metallic_ore + rare_minerals → advanced_alloys → drive_cores
                rare_minerals ──────────────────────────────↗

rare_minerals feeds advanced_alloys which feeds drive_cores which feeds advanced_alloysWAIT. Does drive_core_assembly use advanced_alloys as input? Let me verify:

[drive_core_assembly]
inputs = [
    { commodity = "rare_minerals", quantity = 0.4 },
    { commodity = "advanced_alloys", quantity = 0.8 },
]

And alloy_fabrication uses metallic_ore + rare_minerals — not drive_cores. So the chain is:

  • metallic_ore + rare_minerals → advanced_alloys
  • rare_minerals + advanced_alloys → drive_cores

No cycle: advanced_alloys does NOT depend on drive_cores. ✓

Result: PASS — the chain graph is a valid DAG with no circular dependencies.


2. Cascade Analysis

The Three Chokepoints

Chokepoint 1: lattice_grade_material → lattice_substrate → implant_hardware + gate_components

Status: INTACT AND STRENGTHENED.

New addition versus Round 2: lattice_processing now takes chemicals (0.3) as a second input alongside lattice_grade_material (1.0). This means the lattice chain now has a second upstream dependency — a chemicals disruption also cascades to lattice_substrate.

Cascade path:

lattice_grade_material (monopolistic, cert required, shadow viable)
    ↓ lattice_processing (also needs chemicals)
lattice_substrate (concentrated, cert required, shadow viable)
    ↓ implant_fabrication     ↓ gate_component_assembly
implant_hardware              gate_components
(cert+contested+shadow)       (cert+contested+shadow, monopolistic)

Both terminals are commission_certifiable + compact_contested + shadow_viable. A lattice_grade_material shortage disrupts both at once. The chemicals dependency adds a second, less geographic chokepoint.

Politically, this means: the Compact's shadow market for implant_hardware is structurally linked to the lattice_grade_material supply chain, which is east-reach anchored. Disrupting east-reach exports affects the formal market everywhere and the shadow market in the Compact zone.

Chokepoint 2: rare_minerals → electronics + advanced_alloys + drive_cores → nearly all finals

Status: INTACT.

Rare_minerals feeds 3 intermediates directly:

  • → electronics (via electronics_fabrication)
  • → advanced_alloys (via alloy_fabrication, with metallic_ore)
  • → drive_cores (via drive_core_assembly, with advanced_alloys — DOUBLE rare_minerals dependency)

Downstream impact:

  • electronics → 8 of 9 finals (all except gate_components)
  • advanced_alloys → transport_vehicles, medical_goods, gate_components
  • drive_cores → heavy_equipment, transport_vehicles, freight_haulers, gate_components

gate_components is the only final without direct electronics dependency, but has TRIPLE rare_minerals exposure (direct via drive_cores, via advanced_alloys, via drive_cores-through-advanced_alloys).

A rare_minerals shortage cascades to the ENTIRE manufacturing sector. This is correctly the dominant structural chokepoint.

Chokepoint 3: water → fusion_fuel (8:1) + processed_food + chemicals

Status: INTACT, BROADER THAN NOTED IN schema-final.md.

Water feeds 4 chains:

  • fuel_refining (8.0 water → 1.0 fuel) — 8:1 ratio means water disruption = 8x amplified fuel shortage
  • food_processing (0.2 water) — utility demand, inelastic
  • chemical_processing (0.5 water) — primary chemicals route
  • chemical_from_organics (0.3 water) — secondary chemicals route

schema-final.md lists only the water→fuel cascade. The chemicals cascade through water is equally important: chemicals feeds textile_production, lattice_processing, implant_fabrication, medical_goods_production, habitat_module_assembly. A severe water shortage disrupts BOTH food AND fuel AND the chemicals supply chain.

Water is the most widely consumed raw in the chain graph — 4 chain inputs. Combined with panic_threshold_weeks = 1 (the shortest threshold, life-or-death hoarding), water disruption is the single most catastrophic event possible in the simulation.

rail_infrastructure Analysis

rail_construction inputs: structural_panels (1.5), electronics (0.3), refined_metals (1.0)

Sensible inputs:

  • structural_panels → track foundations, station structures, tunnels
  • electronics → signaling, control systems, communications
  • refined_metals → rail, brackets, structural fittings

Interesting supply chain dependencies created:

  1. rail competes with habitat_modules for structural_panels. Both finals depend heavily on structural_panels:

    • habitat_modules: 1.2 structural_panels
    • rail_infrastructure: 1.5 structural_panels A timber shortage (D-177: 40-60y recovery) forces a choice: build homes or build transit. This is a genuine resource allocation tension without any scripting.
  2. rail touches the electronics bottleneck. A rare_minerals shortage cascades to rail signaling systems, not just ships and implants. Every major planetary transit project competes with shipbuilding and implant manufacturing for rare_minerals.

  3. rail is non-Commission-certified and non-compact_contested. Unlike vehicles and freight_haulers, rail_infrastructure has no political friction. It's a neutral good — both Assembly and Compact systems build rail. This creates an interesting gap: a Compact world can build its own transit infrastructure without Assembly approval, reducing its dependency on certified vehicles.

One note: rail_infrastructure is unit_elastic and oversized. The oversized bulk class (2.0x multiplier, 16%/hop) means that once rails are manufactured, shipping them between systems is extremely expensive. This correctly implies that rail is built near source materials — planetary transit is a local-production affair.

Verdict: rail_infrastructure is a clean addition. It creates genuine panel competition with habitat_modules, touches the electronics chokepoint, and has a meaningful political identity (neutral, non-certified, accessible to both blocs).


3. D-175 Archetype Coverage

28 Lore-Taxonomy Archetypes

Extraction (5):

Archetype Commodity slot
Ore mining metallic_ore ✓
Gas extraction chemical_feedstock ✓
Quarrying stone ✓, lattice_grade_material ✓
Deep ocean fishery organic_compounds ✓ (marine biological feedstock)
Maritime salvage metallic_ore ✓ (salvaged metals)

Agriculture (6):

Archetype Commodity slot
Grain agricultural_produce ✓
Livestock agricultural_produce ✓
Viticulture agricultural_produce ✓ (grapes are agricultural produce; brand layer handles VGV)
Whisky distilling agricultural_produce ✓ (grain), timber ✓ (cooperage wood)
Biomass farming organic_compounds ✓
Fermentation cooperative agricultural_produce ✓ (fermentation inputs)

Manufacturing (6):

Archetype Commodity slot
Heavy industry heavy_equipment ✓
Shipbuilding transport_vehicles ✓, freight_haulers ✓
Precision instruments electronics ✓, drive_cores ✓, lattice_substrate ✓
Textile/craft guild textiles ✓
Implant manufacturing implant_hardware ✓
Pharmaceuticals medical_goods ✓, chemicals ✓

Trade/logistics (4):

Archetype Commodity slot
Freight freight_haulers ✓
Gate operations gate_components ✓
Distribution transport_vehicles ✓, consumer_goods ✓
Broker commercial_intelligence ✓, financial_services ✓

Services (6):

Archetype Commodity slot
Legal legal_services ✓
Banking financial_services ✓
Insurance insurance ✓
Logistics management ⚠ commercial_intelligence ✓ (partial fit; no dedicated service)
Information brokerage commercial_intelligence ✓
Cultural experience tourism ✓, entertainment ✓, hospitality ✓

Intelligence (1):

Archetype Commodity slot
Commercial intelligence commercial_intelligence ✓

5 East-reach archetypes: All 5 (maritime salvage, precision instruments, fermentation cooperative, maritime fishery, textile/craft guild) have commodity slots — covered under Extraction and Manufacturing above.

⚠ Logistics Management — Minor Gap

The "logistics management" archetype has no dedicated service commodity. Per the team's decision, logistics management was removed as redundant with the transport cost model. Logistics corporations (Sova and equivalents) can operate on commercial_intelligence (route optimization, buffer stock management) and transport_vehicles/freight_haulers (fleet operations). This is an acceptable fit — the archetype can operate, just without a dedicated commodity slot.

This is a design choice, not an error. Worth documenting for the corporation data authoring phase.

6 Behavioral Archetypes

Archetype Commodity mapping
Monopolist Gate Corp → gate_components; Bifröst Marmor → stone; lattice producers → lattice_grade_material
Distributor Sova → freight_haulers + commercial_intelligence
Producer Stalownia → heavy_equipment; generic manufacturers
Specialist Brand layer corporations buying raws (Calloway → agricultural_produce + timber)
Cooperative East reach → organic_compounds / agricultural_produce; brach fiber → organic_compounds
Intermediary Mercado → commercial_intelligence; Groombridge clearing house → financial_services

Result: PASS — all 28 lore-taxonomy archetypes and all 6 behavioral archetypes have commodity slots.


4. D-131 Verb Coverage

Verb Backing commodity or service Status
buy All 19 physical commodities
sell All 19 physical commodities
hire legal_services, commercial_intelligence, medical_services
rent habitation_berths (explicitly designed for this verb)
contract insurance, commission_certification, legal_services
inspect Signal vocabulary D-181: price_current, price_trend, trade_flow_volume, corporate_presence, stockpile_weeks, production_vs_baseline, official_coverage_ratio ✓ — inspect is backed by the signal system, not a single commodity
negotiate Any transaction; cross-zone currency friction creates negotiation space
invest financial_services; heavy_equipment, gate_components, rail_infrastructure as capital goods ✓ (thin for Phase 2; Phase 3+ will need capital allocation mechanics)

Result: PASS — all D-131 verbs have backing.

Note on invest: The verb is covered but the mechanics are thin until the player layer (Phase 3+). For Phase 2, invest is implicitly modeled through corporate agent behavior (corporations expand production chains when returns justify it). No player verb needed for Phase 2 simulation.


5. Service Demand Multipliers

Services don't participate in production chains but create demand-side pressure on physical commodities. Each service should have a clear goods-demand effect:

Service Physical goods consumed Mechanism Strength
legal_services electronics (office equipment), fusion_fuel (power) Indirect; pulls from node-level general consumption Weak
financial_services None direct Tractus velocity; reduces cross-zone trade friction → increases overall trade volume Indirect
medical_services chemicals (direct), electronics (direct), medical_goods (direct consumption) Hospitals consume medical_goods, chemicals for pharmaceuticals, electronics for diagnostic equipment Strong
insurance None direct Risk pricing affects which trade routes are used; boosts trade volume on insured routes Indirect
commercial_intelligence None direct Improves official_coverage_ratio signal; better market visibility → more efficient commodity allocation Signal effect
commission_certification None direct Tractus sink; certification costs pull Tractus from cross-zone commerce → increases formal goods demand relative to shadow goods Financial effect
habitation_berths consumer_goods (residents' daily needs), processed_food (food service), water (life support), fusion_fuel (power) Population occupying berths generates continuous commodity demand at node level Strong
tourism consumer_goods (visitors' spending), hospitality chain inputs (agricultural_produce, processed_food) Pulls consumer_goods demand; indirectly pulls agricultural_produce via hospitality Strong (indirect)
entertainment electronics (production hardware for content creation), fusion_fuel (power) Content production infrastructure pulls electronics demand Moderate
hospitality agricultural_produce (kitchen inputs, direct), processed_food (direct), chemicals (cleaning, preservation) Direct physical commodity consumption at the service node Strong

Summary:

  • Strongest goods-demand services: habitation_berths, medical_services, hospitality
  • Moderate: tourism (indirect via hospitality), entertainment (electronics pull)
  • Signal/financial effects only: financial_services, insurance, commercial_intelligence, commission_certification, legal_services

Design note: The three services with no direct physical goods demand (financial_services, insurance, commercial_intelligence) affect the simulation through price signal quality and trade volume, not commodity consumption. This is mechanically correct — these are information/financial services — but it means their presence at a node creates less traceable emergence. A high-financial_services node attracts trade; a high-hospitality node pulls food supply. Both are valuable interactions but the latter is more legible.

Recommendation: The sim should implement service demand multipliers as node-level modifiers on commodity consumption rates, not as production chain entries. Suggested multipliers (per unit of service throughput per tick):

Service Commodity Multiplier
habitation_berths consumer_goods +0.3 units/contract
habitation_berths processed_food +0.2 units/contract
habitation_berths water +0.1 units/contract
medical_services medical_goods +0.4 units/contract
medical_services chemicals +0.2 units/contract
medical_services electronics +0.1 units/contract
hospitality agricultural_produce +0.5 units/contract
hospitality processed_food +0.3 units/contract
tourism consumer_goods +0.4 units/contract
entertainment electronics +0.1 units/contract
entertainment fusion_fuel +0.05 units/contract

These are calibration-quality estimates; Burnelli-Sheldon should validate the coefficient magnitudes.


6. Findings Summary

Passes

Check Result
All chain inputs reference valid commodity IDs ✓ PASS
All raws consumed in at least one chain ✓ PASS
All intermediates appear as both chain inputs and outputs (except fusion_fuel — see below) ✓ PASS with flag
All finals are chain outputs only (not consumed by other chains) ✓ PASS
No circular dependencies in chain graph ✓ PASS
Three chokepoints intact in final TOML ✓ PASS
rail_infrastructure sensible inputs and creates competition with habitat_modules ✓ PASS
All 28 D-175 lore-taxonomy archetypes have commodity slots ✓ PASS
All 6 D-175 behavioral archetypes have commodity slots ✓ PASS
All D-131 economic verbs have backing ✓ PASS
All services have defined goods-demand effects ✓ PASS

Issues Requiring Action

[DESIGN FLAG — ACTION REQUIRED] F-01: fusion_fuel has zero Leontief chain demand. fusion_fuel is produced by fuel_refining but is not an input to any production chain. Its entire demand must come from the demand_model = utility exogenous mechanism. If the sim implements demand only from the Leontief matrix, fusion_fuel will have no buyers and its price will collapse.

Required action for server team: Implement a utility consumption mechanism separate from the Leontief chain demand. All commodities with demand_model = utility require a population × per-capita consumption rate multiplier applied at each active node, independent of chain inputs. Document this in the simulation architecture. This is not a data error — it is a simulation requirement flagged by the schema design.


Minor Observations (no action required)

O-01: Elasticity reduced from 5 to 4 classes. The schema-final.md elasticity enum has 4 values (perfectly_inelastic, inelastic, unit_elastic, elastic). D-173 specified 5 categories. The 5th class (highly_elastic) was applicable primarily to luxury_goods, which was removed per lead directive (f). With luxury_goods gone, 4 classes cover the catalog adequately. No action required, but the D-173 record may need a minor note that the 5th class was merged into elastic with luxury_goods' removal.

O-02: Logistics management archetype has no dedicated service commodity. Minor coverage gap per D-175. The archetype can operate on commercial_intelligence. Acceptable design choice; document during corporation authoring.

O-03: Water generates both Leontief demand AND utility demand. Unlike fusion_fuel (utility-only), water has both chain demand (fuel_refining, food_processing, chemical_processing, chemical_from_organics) AND utility demand (drinking, life support). The sim should sum both demand signals for water, not choose between them. This is the intended behavior but worth explicit documentation.

O-04: Chokepoint 3 is broader than schema-final.md describes. schema-final.md describes water chokepoint as "water → fusion_fuel (8:1)." The full scope is: water disruption also cascades through chemical_processing → chemicals → textiles, lattice_substrate, implant_hardware, habitat_modules. A severe water shortage is a civilization-ending event, not just an energy crisis. The sim should model this correctly given the chain structure — this observation is just to ensure the cascade documentation reflects the full graph.


Validation complete. Files are internally consistent and structurally sound. One design-flag issue (F-01: fusion_fuel Leontief demand) requires explicit handling in simulation implementation.