D-258 invariant 2: descending the ladder must reveal COMPOSITION, so a cell reading "forest" globally contains the clearings, marsh, rock and scrub the vote suppressed. Below Global it contained nothing: morphology carried NINE zones at Global and exactly ONE (AlluvialPlain) at every rung under it, and vegetation collapsed to one class from District down. WHY THE EXISTING TIERS COULD NOT DO IT. vegetation_invention already perturbs moisture with a massif band and a texture band — but that pair was built for cross-rung coherence and is weighted 70/30 specifically so "the texture term alone can never outweigh the massif term". It is designed NOT to change a verdict, which is the exact opposite of what composition needs. And it could not simply be turned up. Measured: 50.2% of the texture field's amplitude sits in its 32,768 m octave alone, and everything at or below 2,048 m holds 5.9% of the total. Across a District window only that 5.9% varies, which after the 30% weight and a ~29-point ceiling swings moisture by +/-0.51 points against vegetation gates 5-15 points apart. Nothing could ever cross one. That is the geometric series, not a tuning shortfall — raising the ceiling enough to matter at District would make the field violent at Region. So a third tier carries the fine band ALONE, normalized to its own full swing: quiet where the coarse tiers are loud, loud where they have nothing left to say. It feeds BOTH classification inputs, because moisture alone would have left morphology just as flat. CONSERVATION IS THE BOUND, not weighting (D-258 invariant 3). The field is zero-mean, so a downsample returns the summary it was added to. Pinned two ways: a field-level zero-mean test, and a real-terrain test that derives a District-sized patch and asserts the majority vegetation class survives. RARE INCLUSIONS, and this was a correction. The smooth term is a gentle sway around the base, so it can only flip a verdict where the ground already sits near a gate — which made deep-in-class ground immune, and the conservation test duly measured a patch that was 100% Forest. A monoculture is the flat map this ticket exists to fix, one scale down. Jeroen: "maybe a dense forest should still sometimes produce a clearing or a rocky outcropping." D-258 says CONTAIN, not border on. A sparse high-contrast term now rides on top — thresholded value noise so inclusions are connected blobs rather than stray speckled cells. The same patch now reads 98.9% Forest with 1.1% Barren outcrops. The moisture half of an inclusion obeys the envelope rule (a world with no patchiness ceiling grows no glades — caught by the zero-ceiling test, which the first version failed by putting damp pockets on airless rock); the slope half does not, because an outcrop is geology and a dead world is exactly where bare rock should break the surface. The slope ceiling is 6, not the 15 first written. Measured against the window-derivation fixtures, base slope_q on ordinary ground is 2-6, so +/-15 did not vary the signal but REPLACED it — one fixture moved 6 -> 19 and two coastal samples flipped to Wetland on invented slope alone. The morphology gates are far apart because a cliff coast is a real landform; composition must let marginal ground fall both ways, never manufacture a fjord on a flood plain. NOT applied at the orbital rung, which is envelope-only by design and documents that it never invents slope — pinned by derive_orbital_at_metres_never_invents_slope, which caught the first version. Both goldens move in the IMPROVING direction, checked before updating rather than blind-refreshed: GJ338Bd moisture 75->85 distinct, slope 28->34 (range 0-50), materials 3->4 GJ244Ad moisture 25->42, slope 15->22, morphology zones 6->7, materials 2->3 Ladder effect (was -> now): Region moisture 25->39; District moisture 3->17 and vegetation 1->2; Quarter moisture 3->8. 45 server suites green, clippy clean. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
50 lines
1.2 KiB
Rust
50 lines
1.2 KiB
Rust
//! Atlas data loaders — reads pre-computed build-time data from systems.db.
|
|
//!
|
|
//! These loaders are used by the runtime-background tier (D-200, D-206) when
|
|
//! populating BodyWorldState (D-203). They are never called on the main tick thread.
|
|
|
|
pub mod atlas_data_proxy;
|
|
pub mod attractor_matching;
|
|
pub mod believability;
|
|
pub mod block_irregularity;
|
|
pub mod body_params_reader;
|
|
pub mod body_world_state;
|
|
pub mod browse_proxy;
|
|
pub mod browse_reader;
|
|
pub mod cascade;
|
|
pub mod chunk_context;
|
|
pub mod city_context_reader;
|
|
pub mod coast_invention;
|
|
pub mod composition;
|
|
pub mod detail_scatter;
|
|
pub mod district_mix;
|
|
pub mod district_profile;
|
|
pub mod domain_warp;
|
|
pub mod drainage;
|
|
pub mod features;
|
|
pub mod gen_queue;
|
|
pub mod heightmap;
|
|
pub mod hydrology_equilibrium;
|
|
pub mod layer1;
|
|
pub mod layer_proxy;
|
|
pub mod mosaic;
|
|
pub mod plugin;
|
|
pub mod region_profile;
|
|
pub mod river_course;
|
|
pub mod road_graph;
|
|
pub mod scale;
|
|
pub mod shell;
|
|
pub mod skeleton_gen;
|
|
pub mod source_resolver;
|
|
pub mod step_canvas;
|
|
pub mod subbiome;
|
|
pub mod tile_condition;
|
|
pub mod trait_catalog_reader;
|
|
pub mod trait_draw;
|
|
pub mod trait_exterior;
|
|
pub mod trait_swerve;
|
|
pub mod vegetation_invention;
|
|
pub mod voxel;
|
|
|
|
pub use plugin::GenerationPlugin;
|