From 8722293f6b014f1d047829db9bca84828459dacd Mon Sep 17 00:00:00 2001 From: Fr0zka Date: Wed, 16 Sep 2026 00:56:04 +0200 Subject: [PATCH] docs: deterministic maths recorded (new canonical hashes); stale landing-connector paragraph corrected - WORK-NEXT: state after 2026-09-16 -- Sol's review, the sol/deterministic-math result, new canonical export/worms/field hashes, and the next branches in order. - CODEMAP 3.2: VoxelMath::DetSinCos / IsFiniteFast rows. - ARCHITECTURE: passage landings have had no connector to the (0,0) room since the owner's d97373c playtest correction; the doc still claimed one. Records the open gap Sol found (the random-reach fallback when the footing query declines is unproven) and the proposed fix. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01TaFdXhTdYMkW1xrV6ApT6Y --- ARCHITECTURE.md | 9 ++++++++- CODEMAP.md | 2 ++ WORK-NEXT.md | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index a0dfc9b..4eca0ae 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -517,7 +517,14 @@ historical random reach and are reported diagnostically. The source query proves only a local pose; it does not flood-fill the live network. Therefore every inter-strate end also receives an explicit `FVoxelPassageLanding`: a rounded chamber with a hard -flat floor and a deterministic connector to that strate's finite origin landing room at `(0,0)`. +flat floor. **There is no connector to the origin landing room at `(0,0)`.** The owner deleted +those radial roads after a playtest (`d97373c`, 2026-09-08: they cut straight through everything); +room joins are flattened to walkable height instead. A source-fit landing therefore stays local to +the room it was fitted into (`GeneratePassages`, the `VF_BuildPassageLanding` calls). +⚠️ Open gap (Sol's code review, `DESIGN-SOL-2026-09-15-CODE.md` §1.3/§2.4): when the footing query +declines, the landing falls back to the historical random reach, and nothing proves that pose joins +the walk network. The canonical capability gate covers one scenario, not every seed or mix. +Proposed fix, not built: retry deterministically at other candidate spots instead of falling back. This is the join guarantee, including for a source-fit answer — it is not a probability claim about a nearby room. The connector is a swept flat-floor corridor with a 5-voxel (1.25 m) radius / 2.5 m clear width and a 12-voxel (3 m) clear height. Its 4.5-voxel support inset is enough for the diff --git a/CODEMAP.md b/CODEMAP.md index 4cd7c68..aaa39ea 100644 --- a/CODEMAP.md +++ b/CODEMAP.md @@ -126,6 +126,8 @@ remains `0`, and lateral regions remain gated off. | `EVoxelFace` enum + `GetFaceDirection` / `GetFaceNormal` | 33-61 | 6 cube faces. | | `WorldToChunkCoord` / `WorldToLocalCoord` / `ChunkToWorldPos` | 74-104 | Coord-space conversions (handle negatives via floor/positive-modulo). | | `LocalToIndex` / `IndexToLocal` / `IsValidLocalCoord` | 107-131 | Flat-array 3D↔1D indexing. | +| `VoxelMath::IsFiniteFast` / `IsFinite` | ~24-53 | Exact IEEE bit test (`voxel.FastIsFinite` A/B switch). | +| `VoxelMath::DetSinCos` / `DetSin` / `DetCos` | ~63-195 | **The only sin/cos allowed where the world is decided** (2026-09-16, `10fd0b6`). Fixed double period reduction and float polynomial, no CRT: `FMath::Sin/Cos` are CRT `sinf/cosf`, whose FMA3 variant is picked by CPU. Pinned by `VoxelForge.Determinism.DetSinCos`; `-voxel.CrtFma3=0` flips the CRT path to prove it. | | `SmoothStep01` | 140 | 3x²-2x³ — used everywhere for blends. | | `VOXEL_NOISE_SCALE` (1.25f) | 147 | Rescales UE PerlinNoise3D to ~[-1,1]. | | `EVoxelTileClass` enum (`Mixed`/`AllSolid`/`AllAir`) | — | T1.d verdict. **MOVED here from `VoxelGenerator.h` 2026-07-27** so `VoxelDensityOp.h` can share it without a UCLASS dependency. A false `AllSolid`/`AllAir` is a HOLE; a false `Mixed` only costs CPU. | diff --git a/WORK-NEXT.md b/WORK-NEXT.md index 651ad3d..8966d54 100644 --- a/WORK-NEXT.md +++ b/WORK-NEXT.md @@ -247,6 +247,41 @@ costs (tunnel core ~20%, tunnel SDF ~13%) are the geometry itself, so the exact- reached diminishing returns. The reach proofs are now guarded by `VoxelForge.Correctness.TilePostReachProof`. +## State after 2026-09-16: Sol's design review, deterministic maths (`10fd0b6`) + +**Reframe.** Local "find the hot spot" rounds had reached diminishing returns, so, on the owner's +idea, Sol High was asked how it would build the project from scratch (`DESIGN-SOL-2026-09-15.md`), +then read the code and said what could reasonably change (`DESIGN-SOL-2026-09-15-CODE.md`). Its +verdict: don't rebuild. There are two performance bets, each with instrumentation-only first steps +and kill criteria, plus one determinism hole. Owner's rule: each idea gets its own branch and is +dropped if it doesn't hold capability and performance. + +**Done: `sol/deterministic-math`, merged.** On Win64, `FMath::Sin/Cos` were CRT `sinf/cosf`, and the +UCRT picks an FMA3 variant by CPU at start-up. Now `VoxelMath::DetSinCos` (fixed reduction and +polynomial, max error 5.96e-8) is used on every world-deciding site; `-voxel.CrtFma3=0` forces the +CRT's other path, and exports are byte-identical either way. Before the fix, the two paths also +matched on this Ryzen, so the hole was real but not observed here. Capability is exact; +static/moving worker time is -3.6%/-3.5% vs the tip DLL. Order-independent vertex distance is at +most 8.7 micrometres (a line-by-line OBJ diff reported "11.4 m", a line-order artefact: compare +meshes by nearest vertex, not by line). + +**New canonical hashes (the world changed once, by design):** +- export-only OBJ SHA-256 `CBB8AE185E949B33CF2656441BA4AB17398975A098967870DFD45B435A37906F` + (geometry `B9EF84AC`), was `b3e5f4c3..9b377`; +- worms/capability region `9242C093`, was `311CA42C` (walk OBJ `20CCF7BD..0100`); +- field digest (cross-platform test grid) shape `0x767FB0650936435D`, field `0x2AE570A5A1A9C5CE`; +- capability unchanged: 20,830 / 10,909, connected. + +**Next, in order (each on its own branch, owner-approved):** +1. Bet A rung 1 + bet B rung 1 (counters and trace only, no field change): + - how much per-sample candidate work a tile-wide, feature-major tunnel evaluator would save; + - how many density samples adjacent tiles duplicate and could donate in time. +2. Only if a rung-1 kill criterion is cleared: the rung-2 prototype behind a switch. +3. Landing gap (ARCHITECTURE, passage landings): replace the random-reach fallback with a + deterministic retry. +Smaller hardening noted by Sol, not scheduled: field-wise cache hashing instead of raw-memory +CRC32; an integer-lattice mesher entry point; server-sequenced edit order once networking exists. + ### Open design questions for the owner - All five strate slots resolve to `DA_Strate3`. Intended? - Should a composer roll be allowed to overwrite an explicitly authored value?