diff --git a/server/data/systems.db b/server/data/systems.db index 36bc2162e..e3ac9f8c3 100644 Binary files a/server/data/systems.db and b/server/data/systems.db differ diff --git a/tooling/economy-db/import_economics.py b/tooling/economy-db/import_economics.py index 7c7dab9ce..2d9ed3979 100755 --- a/tooling/economy-db/import_economics.py +++ b/tooling/economy-db/import_economics.py @@ -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, diff --git a/wiki/economics/architecture_trait_catalog.toml b/wiki/economics/architecture_trait_catalog.toml index 0d754d257..15e5036c5 100644 --- a/wiki/economics/architecture_trait_catalog.toml +++ b/wiki/economics/architecture_trait_catalog.toml @@ -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 = 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" } }