Productionizes the T-1177 equilibrium solver: run_layer1 now solves hydrology once per body (~24ms, mirrors drainage::analyze) and carries it as TerrainAnalysis.hydrology; run_layer1_with_moisture threads the real body moisture ceiling (extracted derive_moisture_ceiling_q), with the T-1177 population-survey default as fallback. The resident rung-0 global tier does not exist yet (T-1181's scope) — hydrology rides TerrainAnalysis and lands in that tier for free when it is built (deviation recorded on the ticket). MorphologyZone::Lake is now sourced from the settled solver at derive time: a gridunit is Lake when bilinear-sampled filled surface exceeds bilinear-sampled original elevation at the sample's own (px, py) — the continuous comparison, so lake edges refine with rung like coastlines; never a discrete basin-cell projection. The gate sits strictly between OpenOcean (>= 80) and the old ocean_fraction heuristic (>= 60), which survives as the derive-fresh fallback when no solve is attached — byte-identical to pre-T-1184 output in that case. Static classification, distinct from the sim-state flooded plane; no endorheic bit (the drains-vs-closed cue is T-1185's outlet-course presence, per the D-227 amendment (4) sequencing). Zero new wire bytes. Acceptance: lake_classification_cache_hit_equals_cache_miss (solve twice independently, byte-identical zones, non-vacuous Lake hit) plus hydrology determinism tests. Golden fidelity: the window golden fixture now builds TerrainAnalysis through the production entry point (run_layer1_with_moisture, per-body), and a dedicated lake_bowl golden body pins the hydrology-sourced Lake path (morphology 1 at ocean_fraction_q 0 — provably not the heuristic); the 108 pre-existing golden rows are byte-identical (pure append). believability.json moved by one lake-shaped line (GJ338Bd voxel_relief_m 27->28, a correctly reclassified lake district leaving the dry-relief sample set). river_course and derivation-harness goldens unchanged. Full suite: 2114 passed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
85 lines
1.7 KiB
JSON
85 lines
1.7 KiB
JSON
[
|
|
{
|
|
"body_id": "GJ338Bd",
|
|
"world_seed": 13200299156134074780,
|
|
"district_count": 2048,
|
|
"voxel_sampled_districts": 64,
|
|
"contrast": {
|
|
"moisture_q": {
|
|
"min": 17,
|
|
"max": 97,
|
|
"distinct": 74
|
|
},
|
|
"elev_q": {
|
|
"min": 0,
|
|
"max": 100,
|
|
"distinct": 101
|
|
},
|
|
"slope_q": {
|
|
"min": 0,
|
|
"max": 31,
|
|
"distinct": 31
|
|
},
|
|
"ocean_fraction_q": {
|
|
"min": 0,
|
|
"max": 100,
|
|
"distinct": 44
|
|
},
|
|
"morphology_zones": 9,
|
|
"vegetation_classes": 4,
|
|
"terrain_materials": 4,
|
|
"voxel_relief_m": 28,
|
|
"micro_habitat_distinct": 2
|
|
},
|
|
"coherence": {
|
|
"water_districts": 46,
|
|
"water_districts_wet": 46,
|
|
"drainage_samples": 0,
|
|
"drainage_monotonic": 0,
|
|
"vegetation_samples": 64,
|
|
"vegetated_districts": 8
|
|
}
|
|
},
|
|
{
|
|
"body_id": "GJ244Ad",
|
|
"world_seed": 13200299156134074780,
|
|
"district_count": 2048,
|
|
"voxel_sampled_districts": 64,
|
|
"contrast": {
|
|
"moisture_q": {
|
|
"min": 0,
|
|
"max": 24,
|
|
"distinct": 25
|
|
},
|
|
"elev_q": {
|
|
"min": 0,
|
|
"max": 100,
|
|
"distinct": 101
|
|
},
|
|
"slope_q": {
|
|
"min": 0,
|
|
"max": 15,
|
|
"distinct": 15
|
|
},
|
|
"ocean_fraction_q": {
|
|
"min": 0,
|
|
"max": 100,
|
|
"distinct": 36
|
|
},
|
|
"morphology_zones": 6,
|
|
"vegetation_classes": 2,
|
|
"terrain_materials": 2,
|
|
"voxel_relief_m": 22,
|
|
"micro_habitat_distinct": 0
|
|
},
|
|
"coherence": {
|
|
"water_districts": 19,
|
|
"water_districts_wet": 19,
|
|
"drainage_samples": 0,
|
|
"drainage_monotonic": 0,
|
|
"vegetation_samples": 64,
|
|
"vegetated_districts": 0
|
|
}
|
|
}
|
|
]
|