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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TaFdXhTdYMkW1xrV6ApT6Y
This commit is contained in:
1 parent
10fd0b6e77
commit
8722293f6b
3 files changed
+45
-1
No files matched your search
+8
-1
@@ -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
|
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
|
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
|
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
|
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
|
clear width and a 12-voxel (3 m) clear height. Its 4.5-voxel support inset is enough for the
|
||||||
|
|||||||
@@ -126,6 +126,8 @@ remains `0`, and lateral regions remain gated off.
|
|||||||
| `EVoxelFace` enum + `GetFaceDirection` / `GetFaceNormal` | 33-61 | 6 cube faces. |
|
| `EVoxelFace` enum + `GetFaceDirection` / `GetFaceNormal` | 33-61 | 6 cube faces. |
|
||||||
| `WorldToChunkCoord` / `WorldToLocalCoord` / `ChunkToWorldPos` | 74-104 | Coord-space conversions (handle negatives via floor/positive-modulo). |
|
| `WorldToChunkCoord` / `WorldToLocalCoord` / `ChunkToWorldPos` | 74-104 | Coord-space conversions (handle negatives via floor/positive-modulo). |
|
||||||
| `LocalToIndex` / `IndexToLocal` / `IsValidLocalCoord` | 107-131 | Flat-array 3D↔1D indexing. |
|
| `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. |
|
| `SmoothStep01` | 140 | 3x²-2x³ — used everywhere for blends. |
|
||||||
| `VOXEL_NOISE_SCALE` (1.25f) | 147 | Rescales UE PerlinNoise3D to ~[-1,1]. |
|
| `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. |
|
| `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. |
|
||||||
|
|||||||
@@ -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
|
reached diminishing returns. The reach proofs are now guarded by
|
||||||
`VoxelForge.Correctness.TilePostReachProof`.
|
`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
|
### Open design questions for the owner
|
||||||
- All five strate slots resolve to `DA_Strate3`. Intended?
|
- All five strate slots resolve to `DA_Strate3`. Intended?
|
||||||
- Should a composer roll be allowed to overwrite an explicitly authored value?
|
- Should a composer roll be allowed to overwrite an explicitly authored value?
|
||||||
Reference in new issue
Block a user