feat(simulation): brand layer schema and import pipeline (#827)

Adds the brand layer per D-189 §5:
- Schema: brand_products, brand_inputs, system_fiscal, corp_financial_state,
  corp_lifecycle_events (+ 5 indexes).
- Importer: reads wiki/economics/corporations/brands.toml, populates the
  new tables, validates V-B01–V-B05 structural rules, and derives
  system_fiscal for inhabited systems.
- Data: 8 brand_products, 16 brand_inputs, 301 system_fiscal rows.

Brand products are demand nodes — they consume commodities; they are not
commodities themselves (D-185). Depends on copy PR #127 for the corp
records referenced by brands.toml.
This commit is contained in:
2026-04-14 17:24:51 +02:00
parent 826b6fe1c7
commit 03e0d1c022
4 changed files with 620 additions and 10 deletions
+276
View File
@@ -0,0 +1,276 @@
# ==========================================================================
# Settled Reach — Brand Product Records (Phase 2 Demand Stubs)
# Source of truth for brand_products and brand_inputs tables.
# Compiled to systems.db via `make economy-db`.
#
# These 4 canonical brand corps register as commodity demand nodes in the
# tâtonnement simulation (D-185: brands consume commodities, not the reverse).
# Pricing model and cultural premium curves are Phase 3+ deliverables (D-189).
#
# Fields per [[brand_products]] entry:
# brand_product_id Unique slug (corp_id + product slug)
# corp_id Must match a slug in wiki/corporations/
# product_name Display name
# brand_category terroir|heritage_craft|tech_premium|cultural|
# service_premium|commodity_branded|design_heritage|platform_catalogue
# value_trajectory appreciating|depreciating|timeless
# scarcity_class capped|constrained|scalable|unlimited
# product_subcategory Readable product type descriptor
# base_premium_multiplier Multiplier over raw commodity input cost (Phase 3 pricing)
# premium_floor Minimum administered price floor (Phase 3 pricing)
# origin_system GJ catalog ID — must match star_systems.system_id
# terroir_locked true: production cannot move from origin_system
# currency_denomination tractus|mark|mixed|sol_adjacent
# shadow_viable true: circulates in shadow economy
# brand_tier halo|volume
# halo_brand_id For volume tiers: brand_product_id of parent halo product
#
# Fields per [[brand_inputs]] entry:
# brand_product_id References a brand_products entry above
# commodity_id Must match commodities.toml
# quantity Demand coefficient (annual units consumed per production run)
#
# Decisions: D-185 (brands as demand nodes), D-189 (brand layer architecture),
# D-190 (volume calibration), D-182 (TOML pipeline)
# ==========================================================================
# ==========================================================================
# CALLOWAY DISTILLERY (north_reach — terroir, appreciating)
# Eleven distilleries, 400 years of production. GJ 3325.
# Inputs: grain (agricultural_produce) + water for single malt whisky.
# ==========================================================================
[[brand_products]]
brand_product_id = "calloway-single-malt-halo"
corp_id = "calloway-distillery"
product_name = "Calloway Single Malt 25yr"
brand_category = "terroir"
value_trajectory = "appreciating"
scarcity_class = "capped"
product_subcategory = "aged_spirits"
base_premium_multiplier = 18.0
premium_floor = 0.85
origin_system = "GJ 3325"
terroir_locked = true
currency_denomination = "tractus"
shadow_viable = true
brand_tier = "halo"
[[brand_inputs]]
brand_product_id = "calloway-single-malt-halo"
commodity_id = "agricultural_produce"
quantity = 0.12 # grain — ~12% of annual produce demand per distillery output unit
[[brand_inputs]]
brand_product_id = "calloway-single-malt-halo"
commodity_id = "water"
quantity = 0.08 # distillation water
[[brand_products]]
brand_product_id = "calloway-reserve-volume"
corp_id = "calloway-distillery"
product_name = "Calloway Reserve"
brand_category = "terroir"
value_trajectory = "appreciating"
scarcity_class = "constrained"
product_subcategory = "aged_spirits"
base_premium_multiplier = 4.5
premium_floor = 0.30
origin_system = "GJ 3325"
terroir_locked = true
currency_denomination = "tractus"
shadow_viable = true
brand_tier = "volume"
halo_brand_id = "calloway-single-malt-halo"
[[brand_inputs]]
brand_product_id = "calloway-reserve-volume"
commodity_id = "agricultural_produce"
quantity = 0.55 # larger grain demand — volume tier drives commodity draw
[[brand_inputs]]
brand_product_id = "calloway-reserve-volume"
commodity_id = "water"
quantity = 0.35
# ==========================================================================
# VINS DE GRAND VIDE (west_reach — terroir, appreciating / timeless)
# Négociant cooperative, GJ 395. Wine production from châteaux network.
# Inputs: agricultural_produce (grapes) + water.
# ==========================================================================
[[brand_products]]
brand_product_id = "vgv-premier-cru-halo"
corp_id = "vins-de-grand-vide"
product_name = "Grand Vide Premier Cru"
brand_category = "terroir"
value_trajectory = "appreciating"
scarcity_class = "capped"
product_subcategory = "fine_wine"
base_premium_multiplier = 12.0
premium_floor = 0.70
origin_system = "GJ 395"
terroir_locked = true
currency_denomination = "tractus"
shadow_viable = true
brand_tier = "halo"
[[brand_inputs]]
brand_product_id = "vgv-premier-cru-halo"
commodity_id = "agricultural_produce"
quantity = 0.18 # estate grapes — limited châteaux harvest
[[brand_inputs]]
brand_product_id = "vgv-premier-cru-halo"
commodity_id = "water"
quantity = 0.04
[[brand_products]]
brand_product_id = "vgv-standard-volume"
corp_id = "vins-de-grand-vide"
product_name = "Grand Vide Standard"
brand_category = "terroir"
value_trajectory = "timeless"
scarcity_class = "scalable"
product_subcategory = "wine"
base_premium_multiplier = 2.2
premium_floor = 0.15
origin_system = "GJ 395"
terroir_locked = false
currency_denomination = "tractus"
shadow_viable = false
brand_tier = "volume"
halo_brand_id = "vgv-premier-cru-halo"
[[brand_inputs]]
brand_product_id = "vgv-standard-volume"
commodity_id = "agricultural_produce"
quantity = 0.80 # négociant aggregation — largest agricultural demand node
[[brand_inputs]]
brand_product_id = "vgv-standard-volume"
commodity_id = "water"
quantity = 0.20
# ==========================================================================
# THRDS (north_reach — heritage_craft, timeless)
# Cold-weather technical clothing cooperative, GJ 475.
# Inputs: textiles (brach fiber) + organic_compounds (dye, finish).
# ==========================================================================
[[brand_products]]
brand_product_id = "thrds-origin-halo"
corp_id = "thrds"
product_name = "thrds Origin"
brand_category = "heritage_craft"
value_trajectory = "timeless"
scarcity_class = "constrained"
product_subcategory = "technical_clothing"
base_premium_multiplier = 6.0
premium_floor = 0.50
origin_system = "GJ 475"
terroir_locked = true
currency_denomination = "tractus"
shadow_viable = false
brand_tier = "halo"
[[brand_inputs]]
brand_product_id = "thrds-origin-halo"
commodity_id = "textiles"
quantity = 0.30 # brach fiber — origin-specific weave
[[brand_inputs]]
brand_product_id = "thrds-origin-halo"
commodity_id = "organic_compounds"
quantity = 0.08 # plant-derived dyes and finishing compounds
[[brand_products]]
brand_product_id = "thrds-standard-volume"
corp_id = "thrds"
product_name = "thrds Standard"
brand_category = "heritage_craft"
value_trajectory = "timeless"
scarcity_class = "scalable"
product_subcategory = "technical_clothing"
base_premium_multiplier = 2.8
premium_floor = 0.20
origin_system = "GJ 475"
terroir_locked = false
currency_denomination = "tractus"
shadow_viable = false
brand_tier = "volume"
halo_brand_id = "thrds-origin-halo"
[[brand_inputs]]
brand_product_id = "thrds-standard-volume"
commodity_id = "textiles"
quantity = 1.20 # primary textile demand driver (volume tier production)
[[brand_inputs]]
brand_product_id = "thrds-standard-volume"
commodity_id = "organic_compounds"
quantity = 0.25
# ==========================================================================
# BÍFRÖST MARMOR (Compact / north_reach — terroir, appreciating)
# Kvitfjell moon marble quarry, Nyrheim (GJ 3737). Nyrheim Cooperative subsidiary.
# Inputs: stone (raw marble) + chemicals (polishing, finishing agents).
# Shadow viable: Compact-adjacent, some Sol trade on interior luxury markets.
# ==========================================================================
[[brand_products]]
brand_product_id = "bifrost-grade-a-halo"
corp_id = "bifrost-marmor"
product_name = "Kvitfjell Grade A"
brand_category = "terroir"
value_trajectory = "appreciating"
scarcity_class = "capped"
product_subcategory = "architectural_stone"
base_premium_multiplier = 22.0
premium_floor = 1.20
origin_system = "GJ 3737"
terroir_locked = true
currency_denomination = "mark"
shadow_viable = true
brand_tier = "halo"
[[brand_inputs]]
brand_product_id = "bifrost-grade-a-halo"
commodity_id = "stone"
quantity = 0.40 # high-purity calcite marble extraction — geological scarcity
[[brand_inputs]]
brand_product_id = "bifrost-grade-a-halo"
commodity_id = "chemicals"
quantity = 0.10 # precision polishing compounds
[[brand_products]]
brand_product_id = "bifrost-commercial-volume"
corp_id = "bifrost-marmor"
product_name = "Kvitfjell Commercial"
brand_category = "terroir"
value_trajectory = "appreciating"
scarcity_class = "constrained"
product_subcategory = "architectural_stone"
base_premium_multiplier = 5.5
premium_floor = 0.40
origin_system = "GJ 3737"
terroir_locked = true
currency_denomination = "mixed"
shadow_viable = true
brand_tier = "volume"
halo_brand_id = "bifrost-grade-a-halo"
[[brand_inputs]]
brand_product_id = "bifrost-commercial-volume"
commodity_id = "stone"
quantity = 1.50 # commercial-grade quarrying — volume demand node
[[brand_inputs]]
brand_product_id = "bifrost-commercial-volume"
commodity_id = "chemicals"
quantity = 0.30