docs(meta): D-258 amended — rung 0.5 measured, storage not forced (T-1212, T-1213)
The 2026-08-06 amendment ruled: build the un-summarisation as a pure function, measure it, and open the storage question only if the numbers force it. They do not. tests/rung_cost_bench.rs (ignored, run with --release) times the real derive on Ferrath at the ladder anchor: the whole-body solve 114 ms once per body, one served canvas 118 / 141 / 175 / 175 ms at Global / Region / District / Quarter. Storage that could serve Region is ~71 GB for one body; a layer at the record's own sizing holds only Global's resolution, the rung that least needs it. The amendment also states what the conservation gate actually protects: the reliefmap D-258 names as the biome input is read by no server code, so the "summary" is the derive's own uncomposed verdict. Whether it should become an input is left for Jeroen. T-1214/T-1215 are annotated, not cancelled. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2428,6 +2428,20 @@ Technical foundation decisions that constrain implementation: engine, client-ser
|
||||
|
||||
**Process note:** this was found by capturing the ladder and looking at it, after the goldens had been failing for 15 commits and two of them had been *passing* against blank screens. Consistent with the previous amendment's lesson — the verification that finally saw the problem was an eyeball on a real render at a real resolution, not a green assertion.
|
||||
|
||||
- **Amendment (2026-09-24 — measured: the numbers do not force storage; the stored layer stays unbuilt):** the previous amendment's condition — *open the storage question only if the pure function's numbers force it* — has been measured, and they do not. This applies that ruling; it does not make a new one.
|
||||
|
||||
**The pure function exists and meets the bar.** Composition (`atlas/composition.rs`) and signed relief shading carry the un-summarisation into every rung below Global; the conservation invariant (3) is enforced on real terrain in plain `cargo test` — 13 patches across Ferrath, each derived with and without composition, the composed plurality required to equal the uncomposed one — and was mutation-proven both ways (over-invention and no invention both fail it). Structure retained down the ladder, lum p1–p99: Global 147.4, Region 63.6, District 84.2, Quarter 76.6 (flat: 33.6 / 13.7 / 11.0).
|
||||
|
||||
**Cost of the derive** (`tests/rung_cost_bench.rs`, release, 16 cores, Ferrath at the ladder anchor, 1290×540): the whole-body solve **114 ms**, once per body, already cached; one served canvas **118 ms Global, 141 ms Region, 175 ms District, 175 ms Quarter** wall. Flat across rungs, as the extent inversion ([D-255](#d-255)) designed.
|
||||
|
||||
**Cost of storing instead.** A stored layer can only serve the rungs whose resolution it holds. At Region's 379 m pitch Ferrath is ~100,500 × 50,250 = 5.05 × 10⁹ cells; at the canvas's 14 bytes of dense planes per cell that is **~71 GB for one body**, and District is 10⁴ times that again. A layer sized by this record's own rule (a whole body at 2 screen px per gridunit) is small — ~2 M cells, tens of MB — but it holds Global's resolution and therefore serves only Global, which derives in 118 ms. Storage would buy a tenth of a second at the one rung that never needed it, and cannot reach the rungs that do.
|
||||
|
||||
**Consequence.** The [D-227](#d-227) carve-out stays unused: everything below rung 0 is derive-don't-store, rung 0.5 included, and "rung 0.5" names the un-summarising *function* every rung calls, not an artefact. [T-1215](../../.pql) (re-point every rung to a stored layer) and [T-1214](../../.pql) (move hydrology onto it) lose their premise. [T-1216](../../.pql) (Global biome palette) and [T-1217](../../.pql) (lake shores through the shared shore path) are unaffected.
|
||||
|
||||
**Open, and not decided here: the reliefmap is still not an input.** This record names `reliefmap.png` as the biome input whose plurality rung 0.5 un-summarises. No server code reads it (`heightmap.rs` mentions it only to reject an RGB PNG). Biome is derived from climate — temperature, moisture, elevation — so the "summary" the conservation gate protects is the derive's own uncomposed verdict, not a reliefmap pixel. Whether the reliefmap should become an input at all (it is itself a render of the same heightmap, so reading it may be circular) is Jeroen's call.
|
||||
|
||||
**Two defects found by the same capture pass, both violations of invariant (1):** the terrain character stepped on the None→Light glaciation isotherm (a straight seam through Region's relief, drawn as a stair-stepped cliff) and composition's 192 m inclusions ignored the rung's octave cutoff (aliased speckle at Region). Both fixed in T-1213; the character now reads a continuous glacial weight.
|
||||
|
||||
---
|
||||
|
||||
### D-259: Enclosed settlements — open-air requires a breathable atmosphere
|
||||
|
||||
Reference in New Issue
Block a user