data(content): core architecture-flavor trait-template catalog (#1005)

The D-232 core hand-curated catalog (28 templates) the architecture-flavor
draw reads from, baked into trait_templates (#993):

- Cross-corridor pool (10): economic-function templates gated by BulkClass
  (extraction/industrial/cold-chain/precision/information/civic) + universal
  baselines + the foreign-import swerve. Guarantees the CI floor.
- Per-corridor baseline (8): each corridor's default cohesive look — core
  cosmopolitan, north anglo-frontier, south lusophone, west germanic +
  compact-cooperative, east dense-utilitarian, deep-frontier surname +
  hardscrabble.
- Heritage sub-pools (10): deep-history callbacks tied to the D-237 heritage
  taxonomy (scottish highland, west-african compound, iberian hacienda,
  atlantic creole, nordic timber, central-european blok, east-asian temple,
  vietnamese water village, afrikaans kraal, arab oasis).

Each template = holistic bundle: two-tier eligibility (hard gates
bulk_class/ubiquity/prosperity_bps + soft weight mods), zone_affinity over
the real DistrictType enum, allow/block tags from a shared ObjectTag
palette, and a D-235 visual_bundle with generic fallback parents. All
numerics integer basis-points (D-010).

Adds the D-232 CI guardrails to the baker (V-TT-01: >=5 templates eligible
per BulkClass; V-TT-02: no template >60% of pool weight) — both pass with
margin (23-24 eligible/class, 5% max share). Catalog can grow via the
bounded Gemma pass (#992); hero pins are #1017.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-03 11:04:43 +02:00
co-authored by Claude Opus 4.8
parent a133b6416e
commit 375d04a29d
3 changed files with 458 additions and 58 deletions
Binary file not shown.
+27
View File
@@ -2126,6 +2126,33 @@ def populate_trait_templates(conn: sqlite3.Connection, dry_run: bool) -> int:
for e in errors:
print(f" - {e}")
raise _ImportAborted()
# CI guardrails (D-232, Nigel): >=5 templates eligible per BulkClass (a
# template with no bulk_class_gate is eligible for all); no single template
# may exceed 60% of its eligible pool's base weight. Skipped when the catalog
# is empty (the bootstrap/absent-source case). Integer math (no float).
if templates:
gerrors = []
for bc in ("BulkSolid", "BulkLiquid", "PrecisionDense", "Perishable", "NonPhysical"):
elig = [t for t in templates.values()
if not t.get("bulk_class_gate") or bc in t["bulk_class_gate"]]
if len(elig) < 5:
gerrors.append(
f"V-TT-01: only {len(elig)} template(s) eligible for BulkClass "
f"{bc} (need >=5)"
)
total = sum(int(t.get("base_weight", 10000)) for t in elig)
for t in elig:
w = int(t.get("base_weight", 10000))
if total and w * 5 > total * 3: # w/total > 0.60
gerrors.append(
f"V-TT-02: template '{t.get('label')}' is "
f"{w * 100 // total}% of the {bc} pool weight (>60%)"
)
if gerrors:
print(f" TRAIT TEMPLATE GUARDRAIL FAILURES ({len(gerrors)}):")
for e in gerrors:
print(f" - {e}")
raise _ImportAborted()
conn.executemany(
"""INSERT INTO trait_templates
(tag, label, cultural_description, corridor_pool, geographic_sector,
+431 -58
View File
@@ -1,84 +1,457 @@
# ==========================================================================
# Architecture-flavor trait-template catalog (D-232)
# Source of truth for the `trait_templates` baked table (import_economics.py).
# Architecture-flavor trait-template catalog (D-232) — core hand-curated set (#1005)
# Source of truth for the `trait_templates` baked table (import_economics.py, #993).
#
# Each template is a HOLISTIC bundle (a coherent relationship between its axes),
# never decomposed per-axis. The draw (D-232, three phases) hard-gates the pool
# by economics, weights it by modifiers + wiki bias, then seed-draws K templates
# per body (K = complexity_tier: Full 5 / Moderate 3 / Minimal 1 / Empty 0).
# Each template is a HOLISTIC bundle a coherent relationship between its axes,
# never decomposed per-axis (no stone-walls-with-glass-curtain scrambles). The
# draw (D-232, three phases) hard-gates the pool by economics, weights it by
# soft modifiers + per-body wiki bias (#1017), then seed-draws K templates per
# body (K = complexity_tier: Full 5 / Moderate 3 / Minimal 1 / Empty 0),
# coverage-aware over the body's district mix.
#
# Channel separation (D-233): economics decides WHAT a building is; this catalog
# decides only HOW it is characterized. `geographic_sector`/corridor is ALWAYS a
# soft weight, never a hard gate ("corridors are tendencies, not borders").
# CHANNEL SEPARATION (D-233): economics decides WHAT a building is; this catalog
# decides only HOW it is characterized. `geographic_sector` is ALWAYS a soft
# weight, never a hard gate ("corridors are tendencies, not borders").
# All numeric eligibility is INTEGER BASIS-POINTS (10000 = 1.0x) — D-010.
#
# All numeric eligibility is INTEGER BASIS-POINTS (10000 = 1.0x), never f32
# (D-010 determinism; save-critical under D-227).
# THREE POOLS (corridor_pool):
# cross_corridor shared economic-function + foreign-import pool (geographic_sector omitted).
# These guarantee the CI floor (>=5 eligible templates per BulkClass).
# baseline a corridor's default cohesive look (geographic_sector set).
# heritage a corridor's deep-history callback sub-pool, drawn up by the
# remoteness/conservatism dial (the cut-off world reaching back).
#
# SCOPE NOTE (#993 vs #1005): this file is the BAKE SOURCE. #993 builds the
# table + baker + the bootstrap seed below. The full ~35-template catalog
# (40-45 target; baseline + heritage sub-pool per corridor + a shared
# cross-corridor pool; CI guardrails >=5 eligible per economic class, no
# template >60% pool weight) is authored in #1005 by Miri (cultural/eligibility)
# + Araminta (visual_bundle). The seed entries below are minimal bootstraps to
# prove the pipeline end-to-end — expand/replace them in #1005.
# CANONICAL ENUMS (use these exact strings):
# BulkClass (hard gate, bulk_class_gate): BulkSolid BulkLiquid PrecisionDense Perishable NonPhysical
# ProductionUbiquity (hard gate, production_ubiquity_gate): Ubiquitous Common Specialist MonopolySource
# DistrictType (zone_affinity keys): LogisticsHub Residential Commercial Industrial
# Administrative Entertainment MixedUse Transit Specialized
# geographic_sector: core north_reach south_reach west_reach east_reach deep_frontier
# weight_mods dimensions: economic_role | dominant_faction | founding_age | geographic_sector | morphology_zone
#
# Stanza: [templates.<tag>] (tag = stable id, referenced by atlas_body_trait_bias)
# Fields:
# label human label (required)
# cultural_description Miri's cultural meaning
# corridor_pool baseline | heritage | cross_corridor
# geographic_sector corridor this belongs to (omit for cross_corridor)
# bulk_class_gate list of eligible BulkClass (omit = any) — HARD gate
# production_ubiquity_gate list of eligible ProductionUbiquity (omit = any) — HARD gate
# min_prosperity_bps hard gate (basis points)
# base_weight draw weight (basis points; 10000 = 1.0)
# weight_mods {dimension = {value = multiplier_bps}} — SOFT weights
# dimensions: economic_role | dominant_faction |
# founding_age | geographic_sector | morphology_zone
# zone_affinity {DistrictType = weight_bps} — district-dominant draw
# allow_tags / block_tags ObjectTag allow/block lists
# era_scope era applicability (era = maintenance/wear, not tech)
# visual_bundle D-235 bundle (wall/roof/facade/street + colors + fallback parents)
# SHARED MATERIAL PALETTE (ObjectTag — keep allow/block/visual_bundle consistent;
# every specific tag degrades to a generic parent via visual_bundle.fallback, D-235):
# walls : concrete_wall steel_frame brick_wall rendered_wall stone_wall timber_wall
# stucco_wall glass_curtain_wall composite_panel rammed_earth_wall
# roofs : flat_roof pitched_roof corrugated_roof clay_tile_roof terraced_roof vaulted_roof green_roof
# facade: regular_facade ornamental_facade industrial_glazing arcade_facade shuttered_facade
# screen_facade colonnade lattice_screen
# street: paved cobble packed_earth canal_way elevated_walkway heavy_haul boardwalk
# generic parents (fallback targets, always-present placeholders): generic_wall generic_roof
# generic_facade generic_street
#
# SCOPE: #1005 is the core hand-curated set (Miri cultural/eligibility +
# Araminta visual bundles). The bounded Gemma corpus-distillation pass (#992)
# proposes additions under human review. Per-body hero pins are #1017.
# ==========================================================================
# --- BOOTSTRAP SEED (#993) — expand/replace in #1005 -----------------------
# ==========================================================================
# A. CROSS-CORRIDOR POOL — economic-function + universal + foreign-import.
# Guarantees the CI floor: >=5 eligible templates per BulkClass.
# (Un-gated templates are eligible for ALL classes.)
# ==========================================================================
[templates.generic_baseline]
label = "Generic Baseline"
cultural_description = "The cohesive default look of a settlement with no divergent founding heritage — functional, unremarkable, corridor-neutral. The fallback the draw can always reach."
corridor_pool = "baseline"
cultural_description = "The cohesive default of a settlement with no divergent founding heritage — functional, unremarkable, corridor-neutral. The fallback the draw can always reach."
corridor_pool = "cross_corridor"
min_prosperity_bps = 0
base_weight = 10000
zone_affinity = { residential = 10000, commercial = 10000, civic = 10000, industrial = 10000 }
base_weight = 8000
zone_affinity = { Residential = 10000, Commercial = 10000, Administrative = 9000, MixedUse = 11000, Industrial = 9000 }
allow_tags = ["concrete_wall", "flat_roof", "regular_facade"]
block_tags = []
era_scope = "any"
visual_bundle = { wall = ["concrete_wall"], roof = ["flat_roof"], facade = ["regular_facade"], street = ["paved"], color_register = "neutral_grey", fallback = {} }
visual_bundle = { wall = ["concrete_wall"], roof = ["flat_roof"], facade = ["regular_facade"], street = ["paved"], color_register = "neutral_grey", fallback = { concrete_wall = "generic_wall", flat_roof = "generic_roof", regular_facade = "generic_facade", paved = "generic_street" } }
[templates.mixed_market_vernacular]
label = "Mixed-Market Vernacular"
cultural_description = "The organically-grown commercial townscape — ground-floor trade, dwellings above, signage layered over decades. Universal wherever people buy and sell at street level."
corridor_pool = "cross_corridor"
min_prosperity_bps = 0
base_weight = 9000
zone_affinity = { Commercial = 16000, MixedUse = 14000, Residential = 9000 }
allow_tags = ["brick_wall", "pitched_roof", "arcade_facade"]
block_tags = []
era_scope = "any"
visual_bundle = { wall = ["brick_wall", "rendered_wall"], roof = ["pitched_roof"], facade = ["arcade_facade"], street = ["cobble", "paved"], color_register = "mixed_warm", fallback = { brick_wall = "generic_wall", arcade_facade = "generic_facade", cobble = "generic_street" } }
[templates.speculative_boomtown]
label = "Speculative Boomtown"
cultural_description = "Thrown up fast around a new opportunity — provisional structures hardening into permanence unevenly, ambition outrunning planning. The look of a 40-year-old settlement still deciding what it is."
corridor_pool = "cross_corridor"
min_prosperity_bps = 0
base_weight = 8000
weight_mods = { founding_age = { recent = 18000, ancient = 4000 } }
zone_affinity = { Commercial = 13000, MixedUse = 13000, LogisticsHub = 11000 }
allow_tags = ["composite_panel", "corrugated_roof", "regular_facade"]
block_tags = ["ornamental_facade", "colonnade"]
era_scope = "recent"
visual_bundle = { wall = ["composite_panel", "steel_frame"], roof = ["corrugated_roof", "flat_roof"], facade = ["regular_facade"], street = ["packed_earth", "paved"], color_register = "raw_provisional", fallback = { composite_panel = "generic_wall", corrugated_roof = "generic_roof", packed_earth = "generic_street" } }
[templates.extraction_camp]
label = "Extraction Camp"
cultural_description = "Built around the resource and nothing else — head-works, conveyors, worker blocks in the shadow of the operation. The mine, the rig, the well IS the town."
corridor_pool = "cross_corridor"
bulk_class_gate = ["BulkSolid", "BulkLiquid"]
production_ubiquity_gate = ["MonopolySource", "Specialist"]
min_prosperity_bps = 0
base_weight = 12000
weight_mods = { economic_role = { mining = 20000, fuel_extraction = 18000 }, dominant_faction = { syndic_dominant = 13000 } }
zone_affinity = { Industrial = 20000, LogisticsHub = 13000, Residential = 8000 }
allow_tags = ["steel_frame", "corrugated_roof", "industrial_glazing"]
block_tags = ["ornamental_facade", "colonnade", "clay_tile_roof"]
era_scope = "any"
visual_bundle = { wall = ["steel_frame", "concrete_wall"], roof = ["corrugated_roof"], facade = ["industrial_glazing"], street = ["heavy_haul"], color_register = "oxide_and_dust", fallback = { steel_frame = "generic_wall", corrugated_roof = "generic_roof", industrial_glazing = "generic_facade", heavy_haul = "generic_street" } }
[templates.industrial_utilitarian]
label = "Industrial Utilitarian"
cultural_description = "Heavy-industry vernacular — large-span sheds, exposed structure, infrastructure-as-aesthetic. Reads as a place that makes things at scale."
corridor_pool = "baseline"
cultural_description = "Heavy-process vernacular — large-span sheds, tank farms, exposed structure, infrastructure as aesthetic. A place that transforms matter at scale."
corridor_pool = "cross_corridor"
bulk_class_gate = ["BulkSolid", "BulkLiquid"]
min_prosperity_bps = 0
base_weight = 12000
weight_mods = { economic_role = { mining = 18000, manufacturing = 16000 }, dominant_faction = { syndic_dominant = 13000 } }
zone_affinity = { industrial = 18000, commercial = 8000 }
allow_tags = ["steel_frame", "corrugated_roof", "gantry"]
block_tags = ["ornamental_cornice"]
base_weight = 11000
weight_mods = { economic_role = { manufacturing = 16000, refining = 16000 }, dominant_faction = { syndic_dominant = 12000 } }
zone_affinity = { Industrial = 18000, LogisticsHub = 12000, Commercial = 7000 }
allow_tags = ["steel_frame", "corrugated_roof", "industrial_glazing"]
block_tags = ["ornamental_facade"]
era_scope = "any"
visual_bundle = { wall = ["steel_frame", "brick_infill"], roof = ["corrugated_roof"], facade = ["industrial_glazing"], street = ["heavy_haul"], color_register = "oxide_and_steel", fallback = { steel_frame = "generic_wall" } }
visual_bundle = { wall = ["steel_frame", "brick_wall"], roof = ["corrugated_roof", "flat_roof"], facade = ["industrial_glazing"], street = ["heavy_haul", "paved"], color_register = "oxide_and_steel", fallback = { steel_frame = "generic_wall", corrugated_roof = "generic_roof", industrial_glazing = "generic_facade", heavy_haul = "generic_street" } }
[templates.terraced_agrarian]
label = "Terraced Agrarian"
cultural_description = "A farming-community register — low, clustered dwellings around shared harvest infrastructure, oriented to the land rather than the street. Common where agriculture founds the settlement."
corridor_pool = "baseline"
bulk_class_gate = ["Perishable", "BulkSolid"]
[templates.cold_chain_works]
label = "Cold-Chain Works"
cultural_description = "The processing-and-preservation register — field sheds, cold stores, packing halls oriented to throughput of things that spoil. Food, pharma, biologics."
corridor_pool = "cross_corridor"
bulk_class_gate = ["Perishable"]
min_prosperity_bps = 0
base_weight = 11000
weight_mods = { economic_role = { agricultural = 18000 }, morphology_zone = { lowland_plain = 13000 } }
zone_affinity = { residential = 14000, civic = 9000 }
allow_tags = ["rendered_wall", "pitched_roof", "courtyard"]
weight_mods = { economic_role = { agricultural = 16000, pharma = 15000 } }
zone_affinity = { Industrial = 15000, LogisticsHub = 14000, MixedUse = 8000 }
allow_tags = ["composite_panel", "flat_roof", "industrial_glazing"]
block_tags = ["ornamental_facade"]
era_scope = "any"
visual_bundle = { wall = ["composite_panel", "concrete_wall"], roof = ["flat_roof"], facade = ["industrial_glazing"], street = ["paved", "heavy_haul"], color_register = "clean_pale", fallback = { composite_panel = "generic_wall", flat_roof = "generic_roof", industrial_glazing = "generic_facade", paved = "generic_street" } }
[templates.precision_arcology]
label = "Precision Arcology"
cultural_description = "High-value, high-density fabrication — cleanrooms, assembly bays and QC labs folded into dense vertical fabric. Quiet, controlled, expensive."
corridor_pool = "cross_corridor"
bulk_class_gate = ["PrecisionDense"]
min_prosperity_bps = 3000
base_weight = 12000
weight_mods = { economic_role = { manufacturing = 16000, research = 14000 }, geographic_sector = { east_reach = 13000 } }
zone_affinity = { Specialized = 18000, Industrial = 13000, Commercial = 9000 }
allow_tags = ["glass_curtain_wall", "flat_roof", "screen_facade"]
block_tags = ["packed_earth", "corrugated_roof"]
era_scope = "any"
visual_bundle = { wall = ["glass_curtain_wall", "composite_panel"], roof = ["flat_roof", "green_roof"], facade = ["screen_facade"], street = ["elevated_walkway", "paved"], color_register = "cool_clean", fallback = { glass_curtain_wall = "generic_wall", screen_facade = "generic_facade", elevated_walkway = "generic_street" } }
[templates.information_spire]
label = "Information Spire"
cultural_description = "The non-physical economy made visible — office towers, data halls, civic seats. Density and verticality stand in for an economy you cannot see in a freight container."
corridor_pool = "cross_corridor"
bulk_class_gate = ["NonPhysical"]
min_prosperity_bps = 4000
base_weight = 12000
weight_mods = { economic_role = { financial = 18000, governance = 16000, media = 14000 }, dominant_faction = { concord_assembly = 12000 } }
zone_affinity = { Administrative = 17000, Commercial = 14000, Specialized = 12000 }
allow_tags = ["glass_curtain_wall", "flat_roof", "screen_facade"]
block_tags = ["packed_earth", "corrugated_roof", "rammed_earth_wall"]
era_scope = "any"
visual_bundle = { wall = ["glass_curtain_wall"], roof = ["flat_roof"], facade = ["screen_facade", "regular_facade"], street = ["elevated_walkway", "paved"], color_register = "glass_and_light", fallback = { glass_curtain_wall = "generic_wall", screen_facade = "generic_facade", elevated_walkway = "generic_street" } }
[templates.civic_monumental]
label = "Civic Monumental"
cultural_description = "Institutional gravitas — colonnades, plazas, deliberate symmetry that says authority lives here. The architecture of governance and ceremony."
corridor_pool = "cross_corridor"
bulk_class_gate = ["NonPhysical"]
min_prosperity_bps = 4000
base_weight = 9000
weight_mods = { economic_role = { governance = 18000 }, dominant_faction = { concord_assembly = 16000 }, founding_age = { ancient = 13000 } }
zone_affinity = { Administrative = 20000, Specialized = 10000 }
allow_tags = ["stone_wall", "vaulted_roof", "colonnade"]
block_tags = ["corrugated_roof", "composite_panel"]
era_scope = "any"
visual_bundle = { wall = ["stone_wall", "concrete_wall"], roof = ["vaulted_roof", "flat_roof"], facade = ["colonnade", "ornamental_facade"], street = ["paved", "cobble"], color_register = "pale_stone", fallback = { stone_wall = "generic_wall", vaulted_roof = "generic_roof", colonnade = "generic_facade" } }
[templates.foreign_quarter]
label = "Foreign Quarter (Import Swerve)"
cultural_description = "A coherent transplant — a whole building grammar carried from another corridor and dropped intact (the Shinto temple in Amsterdam). Drawn up by cosmopolitanism, centrality, and transit; the foreign-import deviation source."
corridor_pool = "cross_corridor"
min_prosperity_bps = 2000
base_weight = 5000
weight_mods = { economic_role = { transit = 16000 }, geographic_sector = { core = 14000 }, dominant_faction = { mixed = 13000 } }
zone_affinity = { MixedUse = 13000, Commercial = 12000, Entertainment = 11000 }
allow_tags = ["timber_wall", "clay_tile_roof", "screen_facade"]
block_tags = []
era_scope = "any"
visual_bundle = { wall = ["timber_wall", "stucco_wall"], roof = ["clay_tile_roof", "vaulted_roof"], facade = ["screen_facade", "lattice_screen"], street = ["cobble"], color_register = "imported_accent", fallback = { timber_wall = "generic_wall", clay_tile_roof = "generic_roof", screen_facade = "generic_facade", cobble = "generic_street" } }
# ==========================================================================
# B. PER-CORRIDOR BASELINE POOLS — the default cohesive look of each corridor.
# ==========================================================================
# ---- core ----
[templates.core_cosmopolitan]
label = "Core Cosmopolitan"
cultural_description = "The settled-heart look — layered, plural, centuries-deep, no single grammar dominant. Old infrastructure carrying new uses; the architecture of a place everyone passes through."
corridor_pool = "baseline"
geographic_sector = "core"
min_prosperity_bps = 3000
base_weight = 11000
zone_affinity = { MixedUse = 15000, Commercial = 13000, Residential = 10000, Administrative = 10000 }
allow_tags = ["brick_wall", "flat_roof", "ornamental_facade"]
block_tags = []
era_scope = "any"
visual_bundle = { wall = ["brick_wall", "stone_wall", "glass_curtain_wall"], roof = ["flat_roof", "pitched_roof"], facade = ["ornamental_facade", "regular_facade"], street = ["paved", "cobble"], color_register = "layered_patina", fallback = { brick_wall = "generic_wall", ornamental_facade = "generic_facade" } }
# ---- north_reach (baseline heritage: anglo) ----
[templates.north_anglo_frontier]
label = "North Anglo Frontier"
cultural_description = "Commonwealth-frontier pragmatism — orderly grids, weatherboard and brick, civic restraint. The default of the northern corridor's English/Australian/Canadian founding stock."
corridor_pool = "baseline"
geographic_sector = "north_reach"
min_prosperity_bps = 0
base_weight = 11000
zone_affinity = { Residential = 14000, Commercial = 12000, Administrative = 10000 }
allow_tags = ["timber_wall", "pitched_roof", "regular_facade"]
block_tags = ["lattice_screen", "vaulted_roof"]
era_scope = "any"
visual_bundle = { wall = ["timber_wall", "brick_wall"], roof = ["pitched_roof", "corrugated_roof"], facade = ["regular_facade", "shuttered_facade"], street = ["paved", "packed_earth"], color_register = "muted_practical", fallback = { timber_wall = "generic_wall", pitched_roof = "generic_roof" } }
# ---- south_reach (baseline heritage: portuguese) ----
[templates.south_lusophone]
label = "South Lusophone"
cultural_description = "The southern corridor's Portuguese baseline — whitewashed render, tile roofs, shuttered facades around a praça. Warm, communal, oriented to the shared square."
corridor_pool = "baseline"
geographic_sector = "south_reach"
min_prosperity_bps = 0
base_weight = 11000
zone_affinity = { Residential = 14000, Commercial = 12000, MixedUse = 11000 }
allow_tags = ["stucco_wall", "clay_tile_roof", "shuttered_facade"]
block_tags = ["glass_curtain_wall", "corrugated_roof"]
era_scope = "any"
visual_bundle = { wall = ["stucco_wall", "rendered_wall"], roof = ["clay_tile_roof"], facade = ["shuttered_facade", "arcade_facade"], street = ["cobble", "paved"], color_register = "whitewash_and_azulejo", fallback = { stucco_wall = "generic_wall", clay_tile_roof = "generic_roof", shuttered_facade = "generic_facade", cobble = "generic_street" } }
# ---- west_reach (baseline heritage: german) ----
[templates.west_germanic_ordered]
label = "West Germanic Ordered"
cultural_description = "The western corridor's Germanic baseline — disciplined massing, steep roofs, engineered tidiness. Everything has its place and shows it."
corridor_pool = "baseline"
geographic_sector = "west_reach"
min_prosperity_bps = 0
base_weight = 11000
zone_affinity = { Residential = 13000, Administrative = 12000, Industrial = 10000, Commercial = 10000 }
allow_tags = ["rendered_wall", "pitched_roof", "regular_facade"]
block_tags = ["lattice_screen"]
era_scope = "any"
visual_bundle = { wall = ["rendered_wall", "brick_wall"], roof = ["pitched_roof"], facade = ["regular_facade"], street = ["cobble", "paved"], color_register = "ordered_earth", fallback = { rendered_wall = "generic_wall", pitched_roof = "generic_roof" } }
[templates.west_compact_cooperative]
label = "Compact Cooperative"
cultural_description = "The architecture of the Compact's cooperative republics — shared halls, common stores, civic infrastructure outsized for the population. Built to be held in common, legible to its members."
corridor_pool = "baseline"
geographic_sector = "west_reach"
min_prosperity_bps = 0
base_weight = 9000
weight_mods = { dominant_faction = { compact = 18000, compact_sympathetic = 13000 } }
zone_affinity = { Administrative = 15000, MixedUse = 12000, Residential = 11000 }
allow_tags = ["rendered_wall", "pitched_roof", "colonnade"]
block_tags = ["glass_curtain_wall"]
era_scope = "any"
visual_bundle = { wall = ["rendered_wall"], roof = ["pitched_roof", "clay_tile"], facade = ["shuttered_window"], street = ["packed_earth", "cobble"], color_register = "warm_earth", fallback = { rendered_wall = "generic_wall" } }
visual_bundle = { wall = ["rendered_wall", "timber_wall"], roof = ["pitched_roof", "green_roof"], facade = ["colonnade", "regular_facade"], street = ["paved", "cobble"], color_register = "communal_warm", fallback = { rendered_wall = "generic_wall", colonnade = "generic_facade" } }
# ---- east_reach (baseline heritage: chinese/korean/japanese) ----
[templates.east_dense_utilitarian]
label = "East Dense Utilitarian"
cultural_description = "The eastern corridor's high-density baseline — stacked, signage-saturated, vertical living over street-level industry. Cyberpunk density as the default, not the exception."
corridor_pool = "baseline"
geographic_sector = "east_reach"
min_prosperity_bps = 0
base_weight = 12000
zone_affinity = { MixedUse = 16000, Residential = 13000, Commercial = 13000, Industrial = 10000 }
allow_tags = ["composite_panel", "flat_roof", "screen_facade"]
block_tags = ["clay_tile_roof", "colonnade"]
era_scope = "any"
visual_bundle = { wall = ["composite_panel", "concrete_wall"], roof = ["flat_roof"], facade = ["screen_facade", "lattice_screen"], street = ["elevated_walkway", "paved"], color_register = "neon_over_grey", fallback = { composite_panel = "generic_wall", screen_facade = "generic_facade", elevated_walkway = "generic_street" } }
# ---- deep_frontier (no single baseline — founder-surname settlement) ----
[templates.frontier_surname_settlement]
label = "Frontier Surname Settlement"
cultural_description = "The deep-frontier default — a settlement named for its founder, built from what the world offered, holding a single community's stamp across centuries. Self-reliant, closed, coherent."
corridor_pool = "baseline"
geographic_sector = "deep_frontier"
min_prosperity_bps = 0
base_weight = 11000
zone_affinity = { Residential = 14000, MixedUse = 11000, Administrative = 9000 }
allow_tags = ["rammed_earth_wall", "pitched_roof", "shuttered_facade"]
block_tags = ["glass_curtain_wall"]
era_scope = "any"
visual_bundle = { wall = ["rammed_earth_wall", "rendered_wall", "stone_wall"], roof = ["pitched_roof", "flat_roof"], facade = ["shuttered_facade", "regular_facade"], street = ["packed_earth", "cobble"], color_register = "local_stone", fallback = { rammed_earth_wall = "generic_wall", shuttered_facade = "generic_facade", packed_earth = "generic_street" } }
[templates.frontier_hardscrabble]
label = "Frontier Hardscrabble"
cultural_description = "The marginal-world register — hardened against a hostile primary, built low and dense around life support, minimal exposed surface. Survival expressed as form."
corridor_pool = "baseline"
geographic_sector = "deep_frontier"
min_prosperity_bps = 0
base_weight = 9000
weight_mods = { morphology_zone = { highland = 12000, arid = 13000 } }
zone_affinity = { Residential = 13000, Industrial = 11000, LogisticsHub = 10000 }
allow_tags = ["concrete_wall", "flat_roof", "regular_facade"]
block_tags = ["glass_curtain_wall", "ornamental_facade", "colonnade"]
era_scope = "any"
visual_bundle = { wall = ["concrete_wall", "rammed_earth_wall"], roof = ["flat_roof"], facade = ["regular_facade"], street = ["packed_earth"], color_register = "hardened_earth", fallback = { concrete_wall = "generic_wall", flat_roof = "generic_roof", packed_earth = "generic_street" } }
# ==========================================================================
# C. HERITAGE SUB-POOLS — deep-history callbacks, drawn up by remoteness /
# isolation / conservatism (the cut-off world reaching back to its roots).
# Tagged to a corridor; tie to the D-237 cultural_specialization heritage values.
# ==========================================================================
# ---- north_reach heritage ----
[templates.scottish_highland_vernacular]
label = "Scottish Highland Vernacular"
cultural_description = "Drystone and slate against weather — low, thick-walled, built to last centuries in a hard climate. The callback of the corridor's Scottish founding communities."
corridor_pool = "heritage"
geographic_sector = "north_reach"
min_prosperity_bps = 0
base_weight = 8000
weight_mods = { founding_age = { ancient = 14000 }, morphology_zone = { highland = 14000 } }
zone_affinity = { Residential = 14000, MixedUse = 9000 }
allow_tags = ["stone_wall", "pitched_roof", "shuttered_facade"]
block_tags = ["glass_curtain_wall", "screen_facade"]
era_scope = "any"
visual_bundle = { wall = ["stone_wall"], roof = ["pitched_roof", "clay_tile_roof"], facade = ["shuttered_facade"], street = ["cobble", "packed_earth"], color_register = "grey_stone_heather", fallback = { stone_wall = "generic_wall", shuttered_facade = "generic_facade", cobble = "generic_street" } }
[templates.west_african_compound]
label = "West African Compound"
cultural_description = "The family-compound grammar — walled clusters of dwellings around shared courtyards, social structure made spatial. The callback of the corridor's Igbo/Yoruba/Akan founders."
corridor_pool = "heritage"
geographic_sector = "north_reach"
min_prosperity_bps = 0
base_weight = 8000
weight_mods = { founding_age = { ancient = 12000 } }
zone_affinity = { Residential = 16000, MixedUse = 10000 }
allow_tags = ["rendered_wall", "flat_roof", "arcade_facade"]
block_tags = ["glass_curtain_wall"]
era_scope = "any"
visual_bundle = { wall = ["rendered_wall", "rammed_earth_wall"], roof = ["flat_roof", "corrugated_roof"], facade = ["arcade_facade", "shuttered_facade"], street = ["packed_earth", "cobble"], color_register = "warm_ochre", fallback = { rendered_wall = "generic_wall", arcade_facade = "generic_facade", packed_earth = "generic_street" } }
# ---- south_reach heritage ----
[templates.iberian_hacienda]
label = "Iberian Hacienda"
cultural_description = "The colonial-revival estate grammar — thick stucco walls around interior courtyards, arcaded verandas, deep shade. The callback of the south's Spanish/Latin founders."
corridor_pool = "heritage"
geographic_sector = "south_reach"
min_prosperity_bps = 0
base_weight = 8000
weight_mods = { founding_age = { ancient = 14000 }, economic_role = { agricultural = 13000 } }
zone_affinity = { Residential = 14000, Administrative = 10000, MixedUse = 9000 }
allow_tags = ["stucco_wall", "clay_tile_roof", "arcade_facade"]
block_tags = ["glass_curtain_wall", "corrugated_roof"]
era_scope = "any"
visual_bundle = { wall = ["stucco_wall", "stone_wall"], roof = ["clay_tile_roof"], facade = ["arcade_facade", "colonnade"], street = ["cobble"], color_register = "terracotta_and_lime", fallback = { stucco_wall = "generic_wall", clay_tile_roof = "generic_roof", arcade_facade = "generic_facade", cobble = "generic_street" } }
[templates.atlantic_creole_maritime]
label = "Atlantic Creole Maritime"
cultural_description = "The Cape-Verdean / Afro-Atlantic coastal register — bright-painted timber and render, deep porches, oriented to sea and song. The callback of the corridor's Atlantic-island and Afro-Brazilian founders."
corridor_pool = "heritage"
geographic_sector = "south_reach"
min_prosperity_bps = 0
base_weight = 7000
weight_mods = { morphology_zone = { coastal = 15000 } }
zone_affinity = { Residential = 14000, Commercial = 10000, Entertainment = 10000 }
allow_tags = ["timber_wall", "pitched_roof", "shuttered_facade"]
block_tags = ["glass_curtain_wall"]
era_scope = "any"
visual_bundle = { wall = ["timber_wall", "rendered_wall"], roof = ["pitched_roof", "corrugated_roof"], facade = ["shuttered_facade", "arcade_facade"], street = ["boardwalk", "cobble"], color_register = "bright_painted", fallback = { timber_wall = "generic_wall", shuttered_facade = "generic_facade", boardwalk = "generic_street" } }
# ---- west_reach heritage ----
[templates.nordic_timber]
label = "Nordic Timber"
cultural_description = "The Scandinavian callback — tarred timber, steep roofs shedding snow, restraint warmed by craft. Drawn up in the western corridor's Norwegian/Swedish/Finnish enclaves."
corridor_pool = "heritage"
geographic_sector = "west_reach"
min_prosperity_bps = 0
base_weight = 8000
weight_mods = { morphology_zone = { highland = 12000, coastal = 11000 }, founding_age = { ancient = 12000 } }
zone_affinity = { Residential = 15000, MixedUse = 9000 }
allow_tags = ["timber_wall", "pitched_roof", "regular_facade"]
block_tags = ["glass_curtain_wall", "stucco_wall"]
era_scope = "any"
visual_bundle = { wall = ["timber_wall"], roof = ["pitched_roof", "green_roof"], facade = ["regular_facade", "shuttered_facade"], street = ["cobble", "boardwalk"], color_register = "falu_red_and_pine", fallback = { timber_wall = "generic_wall", pitched_roof = "generic_roof", boardwalk = "generic_street" } }
[templates.central_european_blok]
label = "Central European Blok"
cultural_description = "The Polish/Czech callback — masonry perimeter blocks around courtyards, civic solidity, ornament held in reserve. The western corridor's Central-European founders reaching back."
corridor_pool = "heritage"
geographic_sector = "west_reach"
min_prosperity_bps = 0
base_weight = 7000
weight_mods = { founding_age = { ancient = 12000 } }
zone_affinity = { Residential = 14000, Administrative = 11000, MixedUse = 10000 }
allow_tags = ["brick_wall", "pitched_roof", "ornamental_facade"]
block_tags = ["glass_curtain_wall", "corrugated_roof"]
era_scope = "any"
visual_bundle = { wall = ["brick_wall", "rendered_wall"], roof = ["pitched_roof"], facade = ["ornamental_facade", "regular_facade"], street = ["cobble", "paved"], color_register = "sober_masonry", fallback = { brick_wall = "generic_wall", ornamental_facade = "generic_facade", cobble = "generic_street" } }
# ---- east_reach heritage ----
[templates.east_asian_temple_enclave]
label = "East Asian Temple Enclave"
cultural_description = "The CJK deep-history callback — timber-frame halls, tiled sweeping roofs, courtyard precincts. The temple/old-town quarter the eastern corridor's Chinese/Korean/Japanese founders preserve."
corridor_pool = "heritage"
geographic_sector = "east_reach"
min_prosperity_bps = 0
base_weight = 8000
weight_mods = { founding_age = { ancient = 15000 } }
zone_affinity = { Administrative = 12000, Entertainment = 12000, Residential = 11000, Specialized = 9000 }
allow_tags = ["timber_wall", "clay_tile_roof", "lattice_screen"]
block_tags = ["glass_curtain_wall", "industrial_glazing"]
era_scope = "any"
visual_bundle = { wall = ["timber_wall", "rendered_wall"], roof = ["clay_tile_roof", "vaulted_roof"], facade = ["lattice_screen", "colonnade"], street = ["cobble", "paved"], color_register = "lacquer_and_timber", fallback = { timber_wall = "generic_wall", clay_tile_roof = "generic_roof", lattice_screen = "generic_facade", cobble = "generic_street" } }
[templates.vietnamese_water_village]
label = "Vietnamese Water Village"
cultural_description = "The SE-Asian water-oriented callback — narrow tube-houses, canalside frontage, shade and ventilation engineered for heat and water. The eastern corridor's Vietnamese/Tagalog founders reaching back."
corridor_pool = "heritage"
geographic_sector = "east_reach"
min_prosperity_bps = 0
base_weight = 7000
weight_mods = { morphology_zone = { coastal = 15000, lowland_plain = 12000 } }
zone_affinity = { Residential = 14000, Commercial = 11000, MixedUse = 11000 }
allow_tags = ["rendered_wall", "pitched_roof", "shuttered_facade"]
block_tags = ["glass_curtain_wall"]
era_scope = "any"
visual_bundle = { wall = ["rendered_wall", "timber_wall"], roof = ["pitched_roof", "corrugated_roof"], facade = ["shuttered_facade", "lattice_screen"], street = ["canal_way", "boardwalk"], color_register = "weathered_pastel", fallback = { rendered_wall = "generic_wall", shuttered_facade = "generic_facade", canal_way = "generic_street" } }
# ---- deep_frontier heritage ----
[templates.afrikaans_kraal]
label = "Afrikaans Kraal Vernacular"
cultural_description = "The Cape callback — whitewashed gabled walls, werf layout around a central yard, thick walls against dry heat. The deep-frontier's Afrikaans founding communities holding their form across centuries."
corridor_pool = "heritage"
geographic_sector = "deep_frontier"
min_prosperity_bps = 0
base_weight = 8000
weight_mods = { founding_age = { ancient = 15000 }, morphology_zone = { arid = 13000 } }
zone_affinity = { Residential = 15000, Administrative = 9000 }
allow_tags = ["rendered_wall", "pitched_roof", "shuttered_facade"]
block_tags = ["glass_curtain_wall", "screen_facade"]
era_scope = "any"
visual_bundle = { wall = ["rendered_wall", "stone_wall"], roof = ["pitched_roof", "clay_tile_roof"], facade = ["shuttered_facade"], street = ["packed_earth", "cobble"], color_register = "cape_whitewash", fallback = { rendered_wall = "generic_wall", shuttered_facade = "generic_facade", packed_earth = "generic_street" } }
[templates.arab_oasis_qanat]
label = "Arab Oasis Vernacular"
cultural_description = "The MENA dryland callback — courtyard houses, thick rammed-earth walls, wind-towers and shaded lanes engineered against the sun. The deep-frontier's Arab/Persian founders reaching back to arid-land mastery."
corridor_pool = "heritage"
geographic_sector = "deep_frontier"
min_prosperity_bps = 0
base_weight = 8000
weight_mods = { founding_age = { ancient = 14000 }, morphology_zone = { arid = 16000 } }
zone_affinity = { Residential = 15000, MixedUse = 10000, Commercial = 9000 }
allow_tags = ["rammed_earth_wall", "flat_roof", "screen_facade"]
block_tags = ["glass_curtain_wall", "pitched_roof"]
era_scope = "any"
visual_bundle = { wall = ["rammed_earth_wall", "stucco_wall"], roof = ["flat_roof", "terraced_roof"], facade = ["screen_facade", "lattice_screen"], street = ["packed_earth", "cobble"], color_register = "sand_and_shade", fallback = { rammed_earth_wall = "generic_wall", screen_facade = "generic_facade", packed_earth = "generic_street" } }