test(simulation): golden-seed regression for the Layer 0->1 cascade (#952, D-200)
End-to-end determinism guard. cascade_golden.rs pins two artifacts for a real committed body heightmap (GJ1c) in one diffable JSON golden (server/tests/golden/cascade_layer1.json): - Layer 0: SHA-256 of the source heightmap.png bytes (flips if the Python heightmap generator or the file changes) - Layer 1: the serialized Layer1Output of run_cascade on a 128x64 downsample (flips if the Rust drainage/feature/sub-biome code changes) JSON (not the msgpack discussed in refinement) to match the existing golden_suite.rs convention and stay diffable — a failure shows what drifted. UPDATE_GOLDEN=1 regenerates; wired into `make golden-update`. Adds Serialize/Deserialize to RiverNetwork/DrainageBasin/Layer1Output and a sha2 dev-dependency. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
use std::collections::{BTreeMap, BTreeSet};
|
||||
|
||||
use bevy_ecs::prelude::Resource;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::simulation::generator::GeographicAttractor;
|
||||
|
||||
@@ -26,7 +27,7 @@ pub const CACHE_CAPACITY: usize = 50;
|
||||
|
||||
/// River network extracted by the D8 drainage algorithm (D-208).
|
||||
/// Stub — replaced when #918 is implemented.
|
||||
#[derive(Debug, Clone, Default)]
|
||||
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
|
||||
pub struct RiverNetwork {
|
||||
/// Pixel positions (row, col) of all river cells (flow_accumulation > 200).
|
||||
pub river_cells: Vec<(u16, u16)>,
|
||||
@@ -38,7 +39,7 @@ pub struct RiverNetwork {
|
||||
|
||||
/// One drainage basin / province derived from watershed analysis (D-205).
|
||||
/// Stub — boundary polyline data comes from atlas_province_boundaries.
|
||||
#[derive(Debug, Clone)]
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct DrainageBasin {
|
||||
pub basin_id: u32,
|
||||
/// Boundary polyline as pixel-space (row, col) points.
|
||||
|
||||
@@ -21,9 +21,10 @@ use crate::atlas::features::{self, TerrainAnalysis};
|
||||
use crate::atlas::heightmap::BodyHeightmap;
|
||||
use crate::atlas::subbiome;
|
||||
use crate::simulation::generator::{AttractorType, GeographicAttractor};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
/// Full Layer-1 result for one body.
|
||||
#[derive(Debug, Clone)]
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct Layer1Output {
|
||||
pub body_id: String,
|
||||
pub river_network: RiverNetwork,
|
||||
|
||||
Reference in New Issue
Block a user