feat(simulation): wire region climate layer into the cascade + proxy (T-1113, D-243)

CascadeLayer::Region appended per the enum's append-only Ord rule (depends only on seed/body_params/heightmap dims — documented); BodyWorldState.regions BTreeMap per the districts precedent; RegionGridLayer dense row-major all-integer encoding (season/weather repr(u8) discriminants, mean_temp deci-degC i16 with i16::MIN airless sentinel, moisture_q u8); build_region_grid mirrors build_district_grid; protocol.gd region_grid passthrough (visual overlay deliberately out of scope); wire fixtures regenerated via make fixtures. atlas:: suite 507 green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-16 18:51:43 +02:00
co-authored by Claude Fable 5
parent c2f236e26e
commit 4f52abd532
10 changed files with 330 additions and 18 deletions
+8 -7
View File
@@ -407,13 +407,14 @@ fn run_work_item(item: &GenWorkItem) -> GenCompletion {
} else {
hm
};
// Run the full cascade through RoadGraph (Layer 2, T-1038), the
// terminal layer. It subsumes Settlement, DistrictProfile (T-1023),
// and all prior layers. DistrictProfile derivation still gates on
// body_params internally (skipped when absent — e.g. a body with no
// params row), but the road graph needs no body params, so it runs
// for every analyzed body.
let up_to = CascadeLayer::RoadGraph;
// Run the full cascade through Region (T-1113), the terminal
// layer. It subsumes RoadGraph (T-1038), Settlement,
// DistrictProfile (T-1023), and all prior layers.
// DistrictProfile and Region derivation both gate on
// body_params internally (skipped when absent — e.g. a body
// with no params row), but the road graph needs no body
// params, so it runs for every analyzed body.
let up_to = CascadeLayer::Region;
let snapshot = run_cascade_from_heightmap(
*body_seed,
working,