# Burnelli-Sheldon: Economics Validation Validated against `commodities-final.toml` (38 commodities: 9R + 10I + 9F + 7S_prof + 3S_lux) and `production-chains-final.toml` (21 chains: 12 R→I incl. 2 substitution, 9 I→F). --- ## 1. Price Formation Sanity ### Raw → Intermediate Margins | Chain | Inputs (cost) | Output (price) | Margin | Verdict | |-------|--------------|----------------|--------|---------| | `smelt_ore` | 2.0 ore (20T) | refined_metals (30T) | 50% | ✓ Bulk processing | | `alloy_fabrication` | 1.5 ore + 0.3 rare_min (39T) | advanced_alloys (100T) | 156% | ✓ High-tech value-add | | `fuel_refining` | 8.0 water (16T) | fusion_fuel (20T) | **25%** | ⚠ See FLAG-1 | | `food_processing` | 1.5 agri + 0.2 water (7.9T) | processed_food (15T) | 90% | ✓ | | `electronics_fabrication` | 0.5 rare_min + 0.3 ref_met (49T) | electronics (120T) | 145% | ✓ Fab value-add | | `chemical_processing` | 2.0 feedstock + 0.5 water (25T) | chemicals (60T) | 140% | ✓ | | `chemical_from_organics` | 1.0 organics + 0.3 water (35.6T) | 0.8× chemicals (48T rev) | 35% eff | ✓ Substitution penalty correct | | `textile_production` | 0.8 organics + 0.2 chemicals (40T) | textiles (50T) | 25% | ⚠ Thin — see FLAG-2 | | `panel_from_timber` | 1.0 timber + 0.5 ref_met (30T) | structural_panels (45T) | 50% | ✓ | | `panel_from_stone` | 1.5 stone + 0.5 ref_met (27T) | 0.8× panels (36T rev) | 33% eff | ✓ Substitution viable but inferior | | `drive_core_assembly` | 0.4 rare_min + 0.8 alloys (112T) | drive_cores (200T) | 79% | ✓ | | `lattice_processing` | 1.0 lattice_mat + 0.3 chem (138T) | lattice_substrate (180T) | 30% | ✓ Strategic, thin margin is realistic | ### Intermediate → Final Margins | Chain | Inputs (cost) | Output (price) | Margin | Verdict | |-------|--------------|----------------|--------|---------| | `heavy_equipment_assembly` | 1.0 ref_met + 0.3 elec + 0.2 cores (106T) | heavy_equip (250T) | 136% | ✓ | | `vehicle_manufacturing` | 0.8 alloys + 0.3 elec + 0.3 cores (176T) | transport_vehicles (350T) | 99% | ✓ | | `freight_hauler_construction` | 1.5 ref_met + 0.5 cores + 0.3 elec (181T) | freight_haulers (300T) | 66% | ✓ | | `consumer_goods_assembly` | 0.3 food + 0.3 textiles + 0.2 elec (43.5T) | consumer_goods (80T) | 84% | ✓ | | `implant_fabrication` | 0.5 elec + 0.3 chem + 0.4 latt_sub (150T) | implant_hardware (400T) | 167% | ✓ Political premium | | `medical_goods_production` | 0.4 chem + 0.3 elec + 0.2 alloys (80T) | medical_goods (200T) | 150% | ✓ | | `gate_component_assembly` | 1.0 alloys + 0.5 cores + 0.3 latt_sub (254T) | gate_components (800T) | 215% | ✓ Monopoly — below 300% flag | | `habitat_module_assembly` | 1.2 panels + 0.3 elec + 0.2 chem (102T) | habitat_modules (150T) | 47% | ✓ Thin — commoditized construction | | `rail_construction` | 1.5 panels + 0.3 elec + 1.0 ref_met (133.5T) | rail_infrastructure (180T) | 35% | ✓ Infrastructure margin | ### Summary - **No negative margins.** ✓ - **No margins above 300%.** ✓ (Highest: gate_components at 215%) - **Substitution routes correctly penalized.** Stone panels yield 0.8x; organic chemicals yield 0.8x. Primary routes preferred, substitutions viable fallback. ### FLAGS **FLAG-1: Fusion fuel margin is 25%.** Input cost 16T, price 20T. At nodes importing water over 3+ hops (water at ~2.7T), fuel input cost rises to 21.6T — margin goes NEGATIVE. Only nodes with local water can sustain fuel refining profitably. - **Assessment:** This might be INTENDED — creates the geographic fuel production pattern (refining at water-rich sites only). But the tâtonnement may struggle to converge if many nodes have negative-margin fuel production. Recommend either: - (a) Raise fuel base_price to 25T (56% margin, what I proposed in Round 2), OR - (b) Accept 20T and let the sim discover that only water-local refineries are viable (more emergent, but convergence risk) **FLAG-2: Textiles margin is 25%.** Organic compounds at 35T are expensive inputs. If organics prices rise 15% (to 40T), textile input cost hits 44T against a 50T price — 14% margin. Textiles become a fragile industry sensitive to organic compound price movements. - **Assessment:** This creates interesting geographic behavior — textile production clusters near biosphere worlds where organic compounds are cheap. Acceptable if intentional. But a combined organic shortage + chemical price spike could make textiles unprofitable, cascading to consumer_goods. --- ## 2. Transport Cost Geography Using bulk class multipliers (my Round 2 values — these are sim parameters, not in the TOML): | Bulk class | Multiplier | Eff. cost/hop (8% base) | |------------|----------|------------------------| | bulk | 1.2× | 9.6% | | liquid | 1.3× | 10.4% | | standard | 1.0× | 8.0% | | compact | 0.8× | 6.4% | | precision | 0.6× | 4.8% | | oversized | 2.5× | 20.0% | ### Price at distance (base × compound transport, 8% avg gate rate) | Commodity | Base | Bulk | 5 hops | 10 hops | 15 hops | Ratio 0→15 | |-----------|------|------|--------|---------|---------|------------| | metallic_ore | 10T | bulk | 15.8T | 25.0T | 40.2T | 4.0× | | water | 2T | liquid | 3.3T | 5.4T | 8.9T | 4.5× | | rare_minerals | 80T | precision | 101T | 128T | 161T | 2.0× | | lattice_mat | 120T | precision | 151T | 192T | 241T | 2.0× | | refined_metals | 30T | standard | 44T | 65T | 95T | 3.2× | | electronics | 120T | compact | 163T | 223T | 302T | 2.5× | | fusion_fuel | 20T | liquid | 33T | 54T | 89T | 4.5× | | heavy_equip | 250T | oversized | 622T | 1,548T | 3,853T | **15.4×** | | gate_comp | 800T | oversized | 1,991T | 4,954T | 12,326T | **15.4×** | | consumer_goods | 80T | compact | 109T | 149T | 202T | 2.5× | | implant_hw | 400T | precision | 504T | 640T | 805T | 2.0× | ### Geographic specialization verdict - **Raws and liquids (3-4.5× over 15 hops):** Strong geographic gradients. Systems far from sources pay 3-4× for ore, water, fuel. Creates extraction economy clusters. ✓ - **Standard intermediates (3.2× over 15 hops):** Moderate gradient. Processing locates near raw sources. ✓ - **Compact/precision goods (2.0-2.5× over 15 hops):** Shallow gradient. Electronics, implants worth shipping far. Inter-system trade backbone. ✓ - **Oversized finals (15.4× over 15 hops):** Extreme gradient. Manufacturing MUST be regional. Rigs, ships, gates, rail built where they're needed. Durable hubs. ✓ ### FLAG-3: Oversized dominance in finals 6 of 9 finals are oversized: heavy_equipment, transport_vehicles, freight_haulers, gate_components, habitat_modules, rail_infrastructure. Only consumer_goods (compact), implant_hardware (precision), and medical_goods (compact) flow through inter-system trade at the final tier. - **Assessment:** This means inter-system trade is dominated by raws and intermediates. Finals are produced regionally from imported inputs. This is realistic (mirrors real-world trade patterns where most international trade is intermediate goods). But it means the final-goods price signals in the tâtonnement are very local — a price spike in heavy_equipment at one node barely propagates 3 hops away. - **Recommendation:** Acceptable. The trade volume and price signals that matter (raws, intermediates) flow freely. Finals are correctly localized. ### FLAG-4: No perishable bulk class Agricultural produce (`bulk` at 1.2×) ships at the same rate as ore. My Round 2 proposed `perishable` at 1.8×, creating steeper food price gradients and stronger local food production incentives. - **Impact:** Without perishable, food prices equalize more quickly across the network. Frontier stations importing food over 10 hops pay 2.5× (bulk) instead of 5.2× (perishable). The incentive for local food production is halved. - **Recommendation:** Consider adding `perishable` as a bulk class (1.8×) for agricultural_produce and organic_compounds. These are time-sensitive goods — spoilage and refrigeration costs make them more expensive to ship than inert ore. Without this, the geographic food economy is flatter than it should be. --- ## 3. Scarcity Cascade Verification ### Cascade map (raw → affected finals) | Raw shortage | Direct intermediates | Downstream finals | Severity | |--------------|---------------------|-------------------|----------| | **metallic_ore** | refined_metals, advanced_alloys | heavy_equip, freight_haulers, rail_infra (via metals); vehicles, gate_comp, medical (via alloys); + drive_cores cascade | **BROAD** — 7/9 finals. Spares consumer_goods, implant_hw | | **rare_minerals** | advanced_alloys, electronics, drive_cores | ALL 9 finals (electronics is input to every final chain) | **MAXIMUM** — total economy hit | | **lattice_grade_material** | lattice_substrate | implant_hardware, gate_components | **NARROW/POLITICAL** — 2 finals, both politically charged | | **timber** | structural_panels (timber path) | habitat_modules, rail_infrastructure | **NARROW** — 2 finals. Stone substitution softens. But no new stations = political crisis | | **agricultural_produce** | processed_food | consumer_goods | **NARROW/HIGH PRICE** — 2 finals, but food is inelastic → massive price spike | | **water** | fusion_fuel, processed_food, chemicals (both paths) | consumer_goods (via food); implant_hw, medical, habitat_mod, gate_comp (via chemicals); fuel utility disruption | **DEEP** — 5+ finals + utility. Deepest cascade in the model | | **organic_compounds** | chemicals (organics path), textiles | consumer_goods (via textiles); IF feedstock available, chemical cascade buffered | **LOW if feedstock OK** — substitution buffers the hit | | **stone** | structural_panels (stone path) | habitat_modules, rail_infra (only if timber also scarce) | **MINIMAL** — pure substitution input | | **chemical_feedstock** | chemicals (primary path) | implant_hw, medical, habitat_mod, gate_comp, textiles→consumer_goods (via chemicals) | **MODERATE-HIGH** — 5 finals. Organics substitution softens | ### Cascade richness assessment - **Three strategic chokepoints confirmed:** 1. Rare minerals → everything (broadest) 2. Lattice material → implant + gate (narrowest, most political) 3. Water → fuel + food + chemicals (deepest chain) - **Two buffered cascades** (organic_compounds, stone) demonstrate D-173 substitution working correctly — both have alternative routes that soften disruptions - **One concern:** See FLAG-5 below ### FLAG-5: Fusion fuel has NO production chain cascade Fuel is `demand_model = "utility"` and consumed at every node, but it appears as an INPUT to ZERO production chains. A fuel shortage: - Spikes prices (perfectly_inelastic) - Increases station operating costs - Does NOT cascade through manufacturing In my Round 2, fuel was an input to smelting, alloys, and electronics. That created a deep cascade: fuel ↓ → metals ↓ → everything. Tyre removed this. - **Impact:** Fuel disruptions are dramatic for living costs but don't cascade to industry. A fuel crisis feels severe (price spikes) but doesn't halt manufacturing. This is economically questionable — real factories shut down during energy crises. - **Recommendation:** Add fuel as an input to at least `smelt_ore` (smelting is energy-intensive). Even a small coefficient (0.2 fuel per unit refined_metals) creates the cascade: fuel ↓ → metals ↓ → panels/equipment/haulers/rail. This makes fuel disruptions industrially consequential, not just a cost-of-living shock. --- ## 4. Brand-Layer Demand Modeling ### Proposed interface Brand corporations appear as **fixed-rate demand agents** at their production node. Their commodity purchases are REAL demand in the tâtonnement — indistinguishable from other demand sources. ``` BrandDemand { corporation_id: CorporityId, node_id: NodeId, demands: [{ commodity: CommodityId, base_rate: f64, // units consumed per tick at equilibrium price_ceiling: f64, // price above which demand reduces reduction_slope: f64, // demand reduction per unit price above ceiling }], } ``` ### Behavior - **Below ceiling:** Brand consumes `base_rate` units/tick. Appears as constant demand in tâtonnement. - **Above ceiling:** Demand reduces linearly: `actual_rate = base_rate - reduction_slope × (price - ceiling)`. Production slowdown. - **At zero demand:** Brand halts production entirely. Commodity demand from this brand drops to zero. - **Revenue:** Brand revenue = f(brand_value, production_volume). NOT modeled in the commodity tâtonnement. Shows up in node GDP separately. ### Example: Calloway Distillery at GJ 3325 ```toml [[brand_demand]] corporation_id = "calloway-distillery" node_id = "gj3325-calloway-reach" demands = [ { commodity = "agricultural_produce", base_rate = 5.0, price_ceiling = 12.0, reduction_slope = 1.0 }, { commodity = "water", base_rate = 2.0, price_ceiling = 5.0, reduction_slope = 0.5 }, ] ``` At equilibrium (agri @ 5T): Calloway buys 5 units/tick of agricultural produce. If agri price rises to 12T (price ceiling), Calloway starts reducing. At 17T, Calloway halts distilling. ### Why this works - Brand demand is **visible to the tâtonnement** — solves the stone demand thinness problem. Bífröst's stone purchases create real demand for stone at Nyrheim. - Brand demand is **price-responsive** — brands don't buy at any price. This creates realistic supply-demand interaction: raw material price spikes reduce brand output, which reduces brand revenue, which affects node GDP. - Brand demand is **authorable** — the `base_rate` and `price_ceiling` are per-corporation TOML data, not hardcoded. Content team can tune brand economics alongside corporation profiles. - Brand revenue is **separate** — the commodity sim doesn't need to model what brands sell. Only what they buy. --- ## 5. Stability Implications ### Does the reduced set (no luxury_goods) still produce interesting dynamics? **Yes.** Assessment by D-179 criteria: | Criterion | Assessment | |-----------|-----------| | **Cold-start convergence (±5% in 100 days)** | 28 physical commodities with 21+2 chains is a well-connected graph. Electronics (input to 7/9 finals) and chemicals (input to 6 chains) provide strong cross-commodity coupling. Convergence should be faster than with luxury_goods, not slower — fewer nodes to equilibrate. **PASS expected.** | | **Long-run stability (±2% over 1000 days, no events)** | Two thin-margin chains (fuel 25%, textiles 25%) could oscillate near breakeven. But α=0.03 damping should prevent cobweb oscillation. **PASS expected, monitor fuel and textiles.** | | **Shock response (recovery in 200 ticks)** | Rare minerals cascade (all 9 finals) is the stress test. With fixed-coefficient Leontief, a 20% rare mineral drop cascades to a 20% electronics drop which cascades to proportional drops in all electronics-dependent finals. Recovery depends on rare mineral supply restoration. The cascade is wide but proportional — no amplification. **PASS expected.** | | **Cross-zone trade balance (re-stabilize in 50 ticks)** | 3% Mark/Tractus conversion friction (D-172) applies to cross-zone commodity flows. With 28 physical commodities flowing across zones, the exchange rate adjustment has enough trade volume to work with. **PASS expected.** | ### What gets less interesting without luxury_goods - **Stone's commodity-chain role is thin.** Only the substitution route for panels. Brand-layer demand (Bífröst) is the primary demand driver. If brand demand is invisible to the tâtonnement, stone prices flatline. **Brand demand visibility is CRITICAL (see section 4).** - **Agricultural produce loses its premium channel.** Beverage brands (Calloway, VGV) were the high-margin consumers. Without luxury_goods, agri demand comes only from processed_food (low-margin, high-volume). Agri produce becomes a boring utility commodity unless brand demand is visible. - **Terroir is invisible at the commodity level.** The sim can't distinguish "Calloway Reach agri produce is special" from "generic grain." Terroir differentiation lives entirely in the brand layer. This is correct per directive (f) but means Phase 2 sim testing can't verify terroir dynamics. ### What stays interesting - Rare minerals as the universal chokepoint (all 9 finals) - Lattice material as the political chokepoint (implant + gate) - Water as the deepest cascade trigger (fuel + food + chemicals) - Oversized bulk creating durable manufacturing hubs - Chemical feedstock vs organic compounds substitution dynamics - 3-currency cross-zone friction on all trade flows --- ## Summary of Flags | # | Issue | Severity | Recommendation | |---|-------|----------|---------------| | FLAG-1 | Fuel margin 25% — negative at non-local-water nodes | Medium | Raise base_price to 25T, or accept as emergent geographic constraint | | FLAG-2 | Textiles margin 25% — fragile to organic price movements | Low | Acceptable — creates geographic clustering near biospheres | | FLAG-3 | 6/9 finals are oversized — inter-system final goods trade is thin | Low | Acceptable — mirrors real trade patterns (intermediates dominate) | | FLAG-4 | No perishable bulk class — food gradient is flat | Medium | Add perishable class (1.8×) for agri_produce and organic_compounds | | FLAG-5 | Fuel not a production chain input — no industrial cascade | **High** | Add fuel as input to `smelt_ore` (e.g., 0.2 fuel). Creates fuel→metals→industry cascade |