Files
settled-reach/wiki/economics/architecture_zone_bias.toml
T
jpmschweitzerandClaude Fable 5 ba781f9324 feat(db): architecture zone-bias + color-register-band tables + V-TT-06/07 (T-988)
Ratified content baked into systems.db as two new tables:
- architecture_zone_bias (57 rows): sparse per-template, per-zone_type
  token-weight overrides (integer bps), Miri-authored — the D-235 step-2
  zone bias. V-TT-06: every token must exist in that template's own
  visual_bundle axis.
- color_register_bands (28 rows): per color_register integer HSV bands
  (hue centidegrees, sat/val bps), Araminta-authored. V-TT-07: full
  catalog coverage + valid integer bounds (min<max, in range).

Both TOMLs registered in generator_sources (stamp coverage); DDL in
systems-schema.sql + migration.py; validation wired into import_economics
steps 18/19 and test_traits.py failure-branch units (make test-tooling).
systems.db regenerated + re-stamped.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 09:03:19 +02:00

381 lines
15 KiB
TOML

# ==========================================================================
# Architecture zone-type bias table (T-988, D-235 step 2)
#
# D-235's BuildingExteriorTag derivation is 3 steps: (1) the district's
# dominant trait template (D-232) filters the available token set per axis
# via its own `visual_bundle`; (2) THIS FILE biases which of those
# already-filtered tokens a building is likely to draw, keyed on the
# building's FUNCTION (D-142 zone_type) — "an industrial block stays stone,
# not corrugated metal, if the template's allow-list says so"; (3) density
# sets setback_tier. This table is step 2 only.
#
# SPARSE / FALLBACK MODEL. This is deliberately NOT a full 28-template x
# 31-zone_type x 4-axis matrix (3,472 cells). It authors only the cases
# where cultural or functional logic genuinely demands a lean — a civic
# building reaching for stone and colonnade, a market stall staying in the
# lighter/cheaper register, a fishing quay pulling boardwalk over cobble.
# Every (template, zone_type) pair NOT listed here — and every token within
# a listed entry not given a weight — falls back to a UNIFORM draw across
# the template's visual_bundle for that axis. Absence of an entry is not an
# oversight; it means the template's own visual_bundle already tells the
# whole story for that function, or (rarely, see note at end) the template
# has no per-axis choice left to bias.
#
# OWNERSHIP. Same co-maintenance split as object_tag_vocabulary.toml
# (Q-049's resolution: split by concern, not by file) —
# - Miri owns the CULTURAL/FUNCTIONAL rationale: which zone_type leans
# toward which already-allowed token, and why (the inline comment above
# each entry below).
# - Araminta owns VISUAL-COHERENCE tuning of the bps weights themselves
# (does the resulting draw distribution actually read well against the
# shipped art, does a "boost" ever starve a token to invisibility).
# This pass (T-988 content deliverable) is Miri's cultural-logic
# authoring pass with initial weights; Araminta's visual-coherence review
# of the weights is a expected follow-up, same pattern as her parallel
# `color_register_bands.toml` pass in this same ticket.
#
# SCHEMA. Integer basis points (D-010): 10000 = 1.0x the uniform baseline.
# A weight above 10000 boosts a token above uniform likelihood; a weight
# below 10000 (never authored as 0 — no hard excludes here, that's what
# the template's own allow/block already did) suppresses it toward rare.
# Only tokens already present in the template's own visual_bundle.<axis>
# may appear (importer-validated, V-TT check) — this file never expands a
# template's palette, only re-weights within it. Unlisted tokens/axes/zones
# keep the uniform baseline.
#
# [bias.<template_tag>.<zone_type_id>]
# wall = { <wall_token> = <bps>, ... } # optional per axis
# roof = { <roof_token> = <bps>, ... }
# facade = { <facade_token> = <bps>, ... }
# street = { <street_token> = <bps>, ... }
# ==========================================================================
# ==========================================================================
# A. CROSS-CORRIDOR POOL
# ==========================================================================
# mixed_market_vernacular: brick reads load-bearing/durable shopfront vs.
# rendered's softer domestic finish upstairs.
[bias.mixed_market_vernacular.commercial_market]
wall = { brick_wall = 15000 }
street = { cobble = 14000 }
[bias.mixed_market_vernacular.residential_surface]
wall = { rendered_wall = 14000 }
street = { paved = 13000 }
# speculative_boomtown: freight gets the rawest register (first thing
# thrown up); the market street is the town's "arrived" storefront.
[bias.speculative_boomtown.industrial_freight]
wall = { steel_frame = 16000 }
roof = { corrugated_roof = 16000 }
street = { packed_earth = 15000 }
[bias.speculative_boomtown.commercial_market]
wall = { composite_panel = 14000 }
roof = { flat_roof = 13000 }
street = { paved = 13000 }
# extraction_camp: the works itself is steel; worker housing is poured
# concrete, not rig-grade steel.
[bias.extraction_camp.extraction_platform]
wall = { steel_frame = 18000 }
[bias.extraction_camp.residential_surface]
wall = { concrete_wall = 14000 }
# industrial_utilitarian: the production floor is steel/corrugated/heavy-
# haul; the district's few storefronts keep the older brick frontage.
[bias.industrial_utilitarian.industrial_manufacturing]
wall = { steel_frame = 15000 }
roof = { corrugated_roof = 14000 }
street = { heavy_haul = 15000 }
[bias.industrial_utilitarian.commercial_market]
wall = { brick_wall = 13000 }
roof = { flat_roof = 12000 }
street = { paved = 13000 }
# cold_chain_works: the plant is permanent concrete with truck access; the
# produce-market front is the lighter composite-panel register.
[bias.cold_chain_works.industrial_processing]
wall = { concrete_wall = 14000 }
street = { heavy_haul = 15000 }
[bias.cold_chain_works.commercial_market]
wall = { composite_panel = 13000 }
street = { paved = 13000 }
# precision_arcology: labs get the showcase glass + green roof + clean
# raised walkways; the production floor behind it stays flat/paved/panel.
[bias.precision_arcology.research_station]
roof = { green_roof = 15000 }
street = { elevated_walkway = 14000 }
[bias.precision_arcology.industrial_manufacturing]
wall = { composite_panel = 13000 }
roof = { flat_roof = 14000 }
street = { paved = 13000 }
# information_spire: civic seats keep institutional restraint even at the
# top of the spire; retail/market level gets the reactive screen facade.
[bias.information_spire.administrative_civil]
facade = { regular_facade = 15000 }
street = { elevated_walkway = 13000 }
[bias.information_spire.commercial_market]
facade = { screen_facade = 14000 }
street = { paved = 13000 }
# civic_monumental: the courts get the fullest ceremonial treatment of any
# building in the catalog; a mere checkpoint in an Administrative district
# is NOT a courthouse — utilitarian concrete, ornament suppressed hard.
[bias.civic_monumental.administrative_civil]
wall = { stone_wall = 16000 }
roof = { vaulted_roof = 15000 }
facade = { colonnade = 15000 }
street = { cobble = 14000 }
[bias.civic_monumental.administrative_judicial]
wall = { stone_wall = 16000 }
roof = { vaulted_roof = 16000 }
facade = { colonnade = 16000 }
street = { cobble = 14000 }
[bias.civic_monumental.security_checkpoint]
wall = { concrete_wall = 15000 }
roof = { flat_roof = 15000 }
facade = { ornamental_facade = 6000 }
# foreign_quarter: the transplant that draws a crowd gets the grand vaulted/
# lattice register; the quiet domestic import stays plainer.
[bias.foreign_quarter.entertainment_venue]
roof = { vaulted_roof = 15000 }
facade = { lattice_screen = 14000 }
[bias.foreign_quarter.residential_surface]
roof = { clay_tile_roof = 13000 }
facade = { screen_facade = 13000 }
# ==========================================================================
# B. PER-CORRIDOR BASELINE POOLS
# ==========================================================================
# core_cosmopolitan: the old ministries stay stone/ornamental; modern retail
# layers glass over the old core; ordinary old-town housing stays brick.
[bias.core_cosmopolitan.administrative_civil]
wall = { stone_wall = 15000 }
facade = { ornamental_facade = 14000 }
[bias.core_cosmopolitan.commercial_market]
wall = { glass_curtain_wall = 14000 }
facade = { regular_facade = 13000 }
[bias.core_cosmopolitan.residential_surface]
wall = { brick_wall = 13000 }
roof = { pitched_roof = 13000 }
# north_anglo_frontier: civic restraint in brick vs. timber farm sheds with
# corrugated roofs on packed-earth farm tracks.
[bias.north_anglo_frontier.administrative_civil]
wall = { brick_wall = 14000 }
facade = { regular_facade = 14000 }
street = { paved = 13000 }
[bias.north_anglo_frontier.rural_agricultural]
wall = { timber_wall = 14000 }
roof = { corrugated_roof = 15000 }
street = { packed_earth = 15000 }
# south_lusophone: the praça-facing arcade for the market vs. the shuttered
# private house.
[bias.south_lusophone.commercial_market]
facade = { arcade_facade = 15000 }
street = { cobble = 14000 }
[bias.south_lusophone.residential_surface]
facade = { shuttered_facade = 14000 }
wall = { stucco_wall = 13000 }
# west_germanic_ordered: engineered brick precision for manufacturing vs.
# the plain rendered residential street.
[bias.west_germanic_ordered.industrial_manufacturing]
wall = { brick_wall = 14000 }
street = { paved = 14000 }
[bias.west_germanic_ordered.residential_surface]
wall = { rendered_wall = 13000 }
street = { cobble = 12000 }
# west_compact_cooperative: the civic hall is visibly held in common
# (colonnade + green roof) vs. plain cooperative housing.
[bias.west_compact_cooperative.administrative_civil]
facade = { colonnade = 16000 }
roof = { green_roof = 14000 }
[bias.west_compact_cooperative.residential_surface]
facade = { regular_facade = 13000 }
wall = { rendered_wall = 13000 }
# east_dense_utilitarian: signage-saturated screen facade at the retail/
# transit level vs. lattice-screened concrete housing above.
[bias.east_dense_utilitarian.commercial_market]
facade = { screen_facade = 15000 }
street = { elevated_walkway = 14000 }
[bias.east_dense_utilitarian.residential_surface]
facade = { lattice_screen = 14000 }
wall = { concrete_wall = 13000 }
street = { paved = 13000 }
# frontier_surname_settlement: the founder-family's one formal stone
# building vs. rammed-earth farm outbuildings on packed earth.
[bias.frontier_surname_settlement.administrative_civil]
wall = { stone_wall = 16000 }
facade = { regular_facade = 14000 }
street = { cobble = 15000 }
[bias.frontier_surname_settlement.rural_agricultural]
wall = { rammed_earth_wall = 14000 }
roof = { flat_roof = 13000 }
street = { packed_earth = 15000 }
# frontier_hardscrabble: only the wall axis has any choice here — a
# checkpoint gets the standardized defensive concrete; a frontier outpost
# gets the locally hand-built rammed earth.
[bias.frontier_hardscrabble.security_checkpoint]
wall = { concrete_wall = 15000 }
[bias.frontier_hardscrabble.wilderness_frontier]
wall = { rammed_earth_wall = 14000 }
# ==========================================================================
# C. HERITAGE SUB-POOLS
# ==========================================================================
# scottish_highland_vernacular: scattered crofts (pitched roof, packed
# earth track) vs. the one village market building (tile roof, cobble).
[bias.scottish_highland_vernacular.residential_dispersed]
roof = { pitched_roof = 14000 }
street = { packed_earth = 14000 }
[bias.scottish_highland_vernacular.commercial_market]
roof = { clay_tile_roof = 13000 }
street = { cobble = 13000 }
# west_african_compound: the market-facing arcade vs. the private family
# compound behind its shuttered rammed-earth wall.
[bias.west_african_compound.commercial_market]
facade = { arcade_facade = 15000 }
street = { cobble = 13000 }
[bias.west_african_compound.residential_surface]
facade = { shuttered_facade = 14000 }
wall = { rammed_earth_wall = 13000 }
street = { packed_earth = 14000 }
# iberian_hacienda: the estate-office colonnade reads institutional vs. the
# veranda-fronted domestic hacienda.
[bias.iberian_hacienda.administrative_civil]
facade = { colonnade = 15000 }
wall = { stone_wall = 14000 }
[bias.iberian_hacienda.residential_surface]
facade = { arcade_facade = 14000 }
wall = { stucco_wall = 13000 }
# atlantic_creole_maritime: the working waterfront (timber, boardwalk) vs.
# inland creole housing (render, cobble).
[bias.atlantic_creole_maritime.port_fishing]
wall = { timber_wall = 14000 }
street = { boardwalk = 15000 }
[bias.atlantic_creole_maritime.residential_surface]
wall = { rendered_wall = 13000 }
street = { cobble = 13000 }
# nordic_timber: the coastal fishing quay pulls boardwalk; inland housing
# keeps the turf/green-roof domestic register on cobble.
[bias.nordic_timber.port_fishing]
street = { boardwalk = 15000 }
[bias.nordic_timber.residential_surface]
roof = { green_roof = 13000 }
street = { cobble = 13000 }
# central_european_blok: civic solidity keeps its ornament in reserve (but
# still reaches for it) vs. the plain perimeter-block housing stock.
[bias.central_european_blok.administrative_civil]
facade = { ornamental_facade = 14000 }
wall = { brick_wall = 14000 }
[bias.central_european_blok.residential_surface]
facade = { regular_facade = 13000 }
wall = { rendered_wall = 13000 }
# east_asian_temple_enclave: ceremonial reception gets the full vaulted-
# colonnade register; the ordinary residential quarter around the temple
# stays in the softer timber/lattice domestic register.
[bias.east_asian_temple_enclave.diplomatic_elite]
roof = { vaulted_roof = 16000 }
facade = { colonnade = 15000 }
[bias.east_asian_temple_enclave.residential_surface]
wall = { timber_wall = 14000 }
roof = { clay_tile_roof = 13000 }
facade = { lattice_screen = 13000 }
street = { cobble = 13000 }
# vietnamese_water_village: working water trade backs onto the canal;
# land-fronting tube-houses face the boardwalk instead.
[bias.vietnamese_water_village.port_fishing]
wall = { timber_wall = 14000 }
street = { canal_way = 15000 }
[bias.vietnamese_water_village.rural_aquaculture]
street = { canal_way = 15000 }
[bias.vietnamese_water_village.residential_surface]
wall = { rendered_wall = 13000 }
street = { boardwalk = 13000 }
# afrikaans_kraal: the werf/farmstead register (render, pitched roof, dirt
# track) vs. the more formal Cape civic building (stone, tile, cobble).
[bias.afrikaans_kraal.rural_pastoral]
wall = { rendered_wall = 14000 }
roof = { pitched_roof = 14000 }
street = { packed_earth = 14000 }
[bias.afrikaans_kraal.administrative_civil]
wall = { stone_wall = 14000 }
roof = { clay_tile_roof = 13000 }
street = { cobble = 13000 }
# arab_oasis_qanat: the shaded souk-adjacent market lane vs. the courtyard
# house with its wind-tower privacy screen.
[bias.arab_oasis_qanat.commercial_market]
wall = { stucco_wall = 14000 }
facade = { lattice_screen = 14000 }
street = { cobble = 14000 }
[bias.arab_oasis_qanat.residential_surface]
wall = { rammed_earth_wall = 14000 }
roof = { terraced_roof = 14000 }
facade = { screen_facade = 14000 }
street = { packed_earth = 14000 }
# ==========================================================================
# NOT BIASED — flagged, not an oversight
# ==========================================================================
# generic_baseline is the one template with ZERO degrees of freedom: every
# axis (wall/roof/facade/street) carries exactly one token in its
# visual_bundle. There is nothing left to bias — any zone_type drawing this
# template gets that one token per axis regardless. This is correct: it is
# the corridor-neutral fallback the draw can always reach (catalog line 57),
# and a single-token axis is definitionally already "uniform."
# ==========================================================================