test(simulation): derivation-harness call sites + believability golden regen for coastline invention
Mechanical call-site updates (7) for the invent_primitives signature; believability golden regenerated via UPDATE_GOLDEN=1. Deltas are deliberate: slope_q/elev_q spreads widen, vegetation_classes +1 (Marine), water-districts-wet coherence reaches 46/46 and 19/19 (T-1082 class closed — classification and coastline are the same line). Reductions (ocean_fraction distinct, morphology_zones on GJ244Ad) are the eager pseudo-grid point-sampling coasts honestly instead of area-averaging them into synthetic intermediates; believability coast-sampling resolution is Q-123 calibration territory. All 37 derivation-harness law checks unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -841,7 +841,7 @@ fn law_climate_vegetation_no_skip_temperature_sweep() {
|
|||||||
let mut last: Option<VegetationClass> = None;
|
let mut last: Option<VegetationClass> = None;
|
||||||
for t_i in (-60i32..=30).rev().step_by(5) {
|
for t_i in (-60i32..=30).rev().step_by(5) {
|
||||||
let temp = Some(t_i as f32);
|
let temp = Some(t_i as f32);
|
||||||
let vc = derive_vegetation(temp, moisture_q, elev_q, false);
|
let vc = derive_vegetation(temp, moisture_q, elev_q, false, false);
|
||||||
if let Some(prev) = last {
|
if let Some(prev) = last {
|
||||||
if prev == VegetationClass::Forest && vc == VegetationClass::Barren {
|
if prev == VegetationClass::Forest && vc == VegetationClass::Barren {
|
||||||
panic!(
|
panic!(
|
||||||
@@ -861,7 +861,7 @@ fn law_climate_vegetation_no_skip_elevation_sweep() {
|
|||||||
let moisture_q = 55;
|
let moisture_q = 55;
|
||||||
let mut last: Option<VegetationClass> = None;
|
let mut last: Option<VegetationClass> = None;
|
||||||
for elev_q in (0i32..=100).step_by(5) {
|
for elev_q in (0i32..=100).step_by(5) {
|
||||||
let vc = derive_vegetation(temp, moisture_q, elev_q, false);
|
let vc = derive_vegetation(temp, moisture_q, elev_q, false, false);
|
||||||
if let Some(prev) = last {
|
if let Some(prev) = last {
|
||||||
if prev == VegetationClass::Forest && vc == VegetationClass::Barren {
|
if prev == VegetationClass::Forest && vc == VegetationClass::Barren {
|
||||||
panic!(
|
panic!(
|
||||||
@@ -898,7 +898,7 @@ fn law_climate_vegetation_full_grid_no_skip() {
|
|||||||
for elev_q in (0i32..=100).step_by(10) {
|
for elev_q in (0i32..=100).step_by(10) {
|
||||||
let mut last: Option<VegetationClass> = None;
|
let mut last: Option<VegetationClass> = None;
|
||||||
for &temp in &temps_desc {
|
for &temp in &temps_desc {
|
||||||
let vc = derive_vegetation(temp, moisture_q, elev_q, false);
|
let vc = derive_vegetation(temp, moisture_q, elev_q, false, false);
|
||||||
if let Some(prev) = last {
|
if let Some(prev) = last {
|
||||||
if prev == VegetationClass::Forest && vc == VegetationClass::Barren {
|
if prev == VegetationClass::Forest && vc == VegetationClass::Barren {
|
||||||
panic!(
|
panic!(
|
||||||
@@ -919,7 +919,7 @@ fn law_climate_vegetation_riparian_near_perennial_water() {
|
|||||||
// near_perennial_water=true must produce a Riparian variant in viable zones.
|
// near_perennial_water=true must produce a Riparian variant in viable zones.
|
||||||
|
|
||||||
// Forest zone → RiparianThicket.
|
// Forest zone → RiparianThicket.
|
||||||
let vc_forest = derive_vegetation(Some(18.0), 60, 20, true);
|
let vc_forest = derive_vegetation(Some(18.0), 60, 20, true, false);
|
||||||
assert!(
|
assert!(
|
||||||
matches!(
|
matches!(
|
||||||
vc_forest,
|
vc_forest,
|
||||||
@@ -930,7 +930,7 @@ fn law_climate_vegetation_riparian_near_perennial_water() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Scrub zone → RiparianScrub.
|
// Scrub zone → RiparianScrub.
|
||||||
let vc_scrub = derive_vegetation(Some(5.0), 30, 50, true);
|
let vc_scrub = derive_vegetation(Some(5.0), 30, 50, true, false);
|
||||||
assert!(
|
assert!(
|
||||||
matches!(
|
matches!(
|
||||||
vc_scrub,
|
vc_scrub,
|
||||||
@@ -941,7 +941,7 @@ fn law_climate_vegetation_riparian_near_perennial_water() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Hyper-arid Barren zone + perennial water → RiparianScrub oasis (D-239 §8).
|
// Hyper-arid Barren zone + perennial water → RiparianScrub oasis (D-239 §8).
|
||||||
let vc_arid = derive_vegetation(Some(20.0), 3, 10, true);
|
let vc_arid = derive_vegetation(Some(20.0), 3, 10, true, false);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
vc_arid,
|
vc_arid,
|
||||||
VegetationClass::RiparianScrub,
|
VegetationClass::RiparianScrub,
|
||||||
@@ -957,7 +957,7 @@ fn law_climate_vegetation_airless_always_absent() {
|
|||||||
for moisture_q in [0, 30, 70, 100] {
|
for moisture_q in [0, 30, 70, 100] {
|
||||||
for elev_q in [0, 50, 100] {
|
for elev_q in [0, 50, 100] {
|
||||||
for near_water in [false, true] {
|
for near_water in [false, true] {
|
||||||
let vc = derive_vegetation(None, moisture_q, elev_q, near_water);
|
let vc = derive_vegetation(None, moisture_q, elev_q, near_water, false);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
vc,
|
vc,
|
||||||
VegetationClass::Absent,
|
VegetationClass::Absent,
|
||||||
|
|||||||
@@ -6,38 +6,38 @@
|
|||||||
"voxel_sampled_districts": 64,
|
"voxel_sampled_districts": 64,
|
||||||
"contrast": {
|
"contrast": {
|
||||||
"moisture_q": {
|
"moisture_q": {
|
||||||
"min": 32,
|
"min": 31,
|
||||||
"max": 80,
|
"max": 80,
|
||||||
"distinct": 49
|
"distinct": 48
|
||||||
},
|
},
|
||||||
"elev_q": {
|
"elev_q": {
|
||||||
"min": 0,
|
"min": 0,
|
||||||
"max": 98,
|
"max": 100,
|
||||||
"distinct": 99
|
"distinct": 101
|
||||||
},
|
},
|
||||||
"slope_q": {
|
"slope_q": {
|
||||||
"min": 0,
|
"min": 0,
|
||||||
"max": 13,
|
"max": 30,
|
||||||
"distinct": 14
|
"distinct": 30
|
||||||
},
|
},
|
||||||
"ocean_fraction_q": {
|
"ocean_fraction_q": {
|
||||||
"min": 0,
|
"min": 0,
|
||||||
"max": 100,
|
"max": 100,
|
||||||
"distinct": 65
|
"distinct": 44
|
||||||
},
|
},
|
||||||
"morphology_zones": 9,
|
"morphology_zones": 9,
|
||||||
"vegetation_classes": 3,
|
"vegetation_classes": 4,
|
||||||
"terrain_materials": 4,
|
"terrain_materials": 4,
|
||||||
"voxel_relief_m": 20,
|
"voxel_relief_m": 24,
|
||||||
"micro_habitat_distinct": 2
|
"micro_habitat_distinct": 2
|
||||||
},
|
},
|
||||||
"coherence": {
|
"coherence": {
|
||||||
"water_districts": 49,
|
"water_districts": 46,
|
||||||
"water_districts_wet": 44,
|
"water_districts_wet": 46,
|
||||||
"drainage_samples": 0,
|
"drainage_samples": 0,
|
||||||
"drainage_monotonic": 0,
|
"drainage_monotonic": 0,
|
||||||
"vegetation_samples": 64,
|
"vegetation_samples": 64,
|
||||||
"vegetated_districts": 8
|
"vegetated_districts": 7
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -49,32 +49,32 @@
|
|||||||
"moisture_q": {
|
"moisture_q": {
|
||||||
"min": 0,
|
"min": 0,
|
||||||
"max": 20,
|
"max": 20,
|
||||||
"distinct": 21
|
"distinct": 20
|
||||||
},
|
},
|
||||||
"elev_q": {
|
"elev_q": {
|
||||||
"min": 0,
|
"min": 0,
|
||||||
"max": 99,
|
"max": 100,
|
||||||
"distinct": 100
|
"distinct": 101
|
||||||
},
|
},
|
||||||
"slope_q": {
|
"slope_q": {
|
||||||
"min": 0,
|
"min": 0,
|
||||||
"max": 6,
|
"max": 15,
|
||||||
"distinct": 7
|
"distinct": 14
|
||||||
},
|
},
|
||||||
"ocean_fraction_q": {
|
"ocean_fraction_q": {
|
||||||
"min": 0,
|
"min": 0,
|
||||||
"max": 100,
|
"max": 100,
|
||||||
"distinct": 65
|
"distinct": 38
|
||||||
},
|
},
|
||||||
"morphology_zones": 9,
|
"morphology_zones": 6,
|
||||||
"vegetation_classes": 1,
|
"vegetation_classes": 2,
|
||||||
"terrain_materials": 4,
|
"terrain_materials": 2,
|
||||||
"voxel_relief_m": 19,
|
"voxel_relief_m": 21,
|
||||||
"micro_habitat_distinct": 0
|
"micro_habitat_distinct": 0
|
||||||
},
|
},
|
||||||
"coherence": {
|
"coherence": {
|
||||||
"water_districts": 25,
|
"water_districts": 19,
|
||||||
"water_districts_wet": 22,
|
"water_districts_wet": 19,
|
||||||
"drainage_samples": 0,
|
"drainage_samples": 0,
|
||||||
"drainage_monotonic": 0,
|
"drainage_monotonic": 0,
|
||||||
"vegetation_samples": 64,
|
"vegetation_samples": 64,
|
||||||
|
|||||||
Reference in New Issue
Block a user