docs(rendering): close packed dispatcher gate
This commit is contained in:
parent
f9829d5f9e
commit
f10dec58ba
3 changed files with 110 additions and 6 deletions
|
|
@ -25,8 +25,9 @@ retail-faithful gameplay
|
|||
| F5 | complete | Exact `81e2f1a5` passed capped and uncapped nine-stop routes plus uncapped dense Arwic. Across the final checkpoints the referee completed 1,663 + 1,677 + 81 comparisons with zero mismatches, zero pending deltas, zero rejected operations, exact binary/source identity, and graceful shutdown. Evidence: `docs/research/2026-07-24-slice-f5-render-scene-shadow-gate.md`. |
|
||||
| G0 — borrowed frame product | complete | Two reusable arenas publish exact generation/frame-stamped borrowed views for scene candidates, cell ranges, transforms, classification, light sets, selection, PView/clip references, counts, and source digest. Release/reuse invalidates every copied view; abort never publishes; frame N may build while N-1 is borrowed; the warm path allocates zero bytes. Eight focused tests pass inside the 3,743-App / 8,227-solution Release gate. |
|
||||
| G1 — scene-query replacement | complete | Exact `e346f8bb` passed capped and uncapped nine-stop routes plus uncapped dense Arwic: 29,392 + 29,025 + 1,522 same-frame candidate comparisons, zero mismatches, equal counts/digests at every checkpoint, exact binary/source identity, and graceful shutdown. Evidence: `docs/research/2026-07-25-slice-g1-scene-query-candidate-gate.md`. |
|
||||
| G2 — packed dispatcher input | source-packing gate active | The scene now retains an immutable presentation payload and the frame product flattens each unique projection into entity and mesh-part spans, including palette and surface-override identity. The compare-only controller expands exact PView routes and checks every current dispatcher input tuple without drawing twice. The full Release gate is 3,746 App tests / 3 skips and 8,230 solution tests / 5 skips. Connected source-input parity and final instance-output parity remain before G2 closes. |
|
||||
| G3–G5 | pending | No production consumer has switched. |
|
||||
| G2 — packed dispatcher input | complete | Exact `f9829d5f` passed capped and uncapped nine-stop routes plus dense Arwic. Candidate order, packed input, classified output, and selection each completed 16,879 + 17,282 + 770 comparisons with zero mismatch; journal/rejection counts were zero and shutdown graceful. Evidence: `docs/research/2026-07-25-slice-g2-packed-dispatcher-gate.md`. |
|
||||
| G3 — retained classification/storage | active | Restore the isolated retained-classification cache after G2's exact-order correction, then prove dirty-only rebuild and zero-allocation warm reuse before any draw-source switch. |
|
||||
| G4–G5 | pending | No production consumer has switched. |
|
||||
|
||||
The exact pre-F/G runtime rollback anchor remains `e7d9d6fa`. F0 is
|
||||
non-drawing diagnostic infrastructure and therefore is not a visual-cutover
|
||||
|
|
@ -572,6 +573,17 @@ door apertures, look-ins, non-flooded rooms, and portal straddles.
|
|||
4. Keep Wb/texture/selection/light/alpha owners unchanged.
|
||||
5. Add old-input/new-input instance-set comparison at the dispatcher boundary.
|
||||
|
||||
**Completed 2026-07-25.** Exact `f9829d5f` passed capped and uncapped
|
||||
nine-stop routes plus uncapped dense Arwic. Candidate order, packed mesh-part
|
||||
input, classified opaque/alpha output, and selection each completed
|
||||
16,879 + 17,282 + 770 comparisons with zero mismatch. The stronger gate
|
||||
corrected two referee blind spots: route canonicalization had hidden source
|
||||
order, and the no-VAO diagnostic path had hashed stale reusable group lists
|
||||
despite accepting zero instances. `GpuWorldState` now owns explicit traversal
|
||||
slots plus mutable bucket indices; zero-instance fingerprints describe empty
|
||||
accepted output. Evidence:
|
||||
`docs/research/2026-07-25-slice-g2-packed-dispatcher-gate.md`.
|
||||
|
||||
**Commit gate:** identical instance keys, model matrices, material identities,
|
||||
clip slots, light sets, selection parts, alpha records, and draw counts.
|
||||
|
||||
|
|
|
|||
|
|
@ -13,10 +13,15 @@ incremental render scene instead of walking `LandblockEntries`. It remains a
|
|||
compare-only source: production still draws the accepted
|
||||
`InteriorEntityPartition`/`WorldEntity` path.
|
||||
|
||||
The comparison preserves route, route index, cell, duplicate membership, and
|
||||
projection identity. Sorting is allowed only within those dimensions so
|
||||
unordered retained scene indices cannot create a false mismatch while PView
|
||||
order and route multiplicity remain exact.
|
||||
The comparison preserved route, route index, cell, duplicate membership, and
|
||||
projection identity. At this gate it canonicalized identities within those
|
||||
dimensions because retained scene indices were unordered.
|
||||
|
||||
**G2 correction:** this proved membership and multiplicity, not exact source
|
||||
traversal. Stable equal-distance alpha ordering makes traversal observable.
|
||||
G2 moved that order into `GpuWorldState`, removed comparator canonicalization,
|
||||
and passed the stronger ordered candidate/packed/output gate. See
|
||||
`docs/research/2026-07-25-slice-g2-packed-dispatcher-gate.md`.
|
||||
|
||||
## Exact physical evidence
|
||||
|
||||
|
|
|
|||
87
docs/research/2026-07-25-slice-g2-packed-dispatcher-gate.md
Normal file
87
docs/research/2026-07-25-slice-g2-packed-dispatcher-gate.md
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
# Slice G2 Packed Dispatcher Gate
|
||||
|
||||
**Date:** 2026-07-25
|
||||
|
||||
**Candidate:** `f9829d5f9ea831b67be7cf5c3c339d11c9b5d52d`
|
||||
|
||||
**Result:** accepted; G2 complete
|
||||
|
||||
## Purpose
|
||||
|
||||
G2 proves that the retained render scene can produce the exact ordered object
|
||||
and mesh-part stream consumed by the accepted dispatcher, then classifies that
|
||||
stream through the same mesh, material, clip, light, translucency, alpha, and
|
||||
selection owners without drawing a second time.
|
||||
|
||||
The production draw source remains unchanged. This is still compare-only
|
||||
evidence and does not create a visual-cutover rollback unit.
|
||||
|
||||
## Exact physical evidence
|
||||
|
||||
| Route | Report | Candidate order | Packed input | Classified output | Selection | Exit |
|
||||
|---|---|---:|---:|---:|---:|---|
|
||||
| Capped nine-stop | `logs/connected-r6-soak-20260725-021745.report.json` | 16,879 / 16,879 | 16,879 / 16,879 | 16,879 / 16,879 | 16,879 / 16,879 | graceful |
|
||||
| Uncapped nine-stop | `logs/connected-r6-soak-20260725-022749.report.json` | 17,282 / 17,282 | 17,282 / 17,282 | 17,282 / 17,282 | 17,282 / 17,282 | graceful |
|
||||
| Uncapped dense Arwic | `logs/connected-dense-town-20260725-023714.report.json` | 770 / 770 | 770 / 770 | 770 / 770 | 770 / 770 | graceful |
|
||||
|
||||
Every canonical checkpoint reported:
|
||||
|
||||
- source commit, embedded binary commit, and candidate commit equal to
|
||||
`f9829d5f9ea831b67be7cf5c3c339d11c9b5d52d`;
|
||||
- zero candidate, packed-input, classified-output, selection, and shadow-scene
|
||||
mismatches;
|
||||
- zero pending render-journal entries and zero rejected delta applications;
|
||||
- equal current/product frame sequence and equal expected/actual digests;
|
||||
- `Passed=true`, `ExitCode=0`, `GracefulExit=true`, and exact binary/source
|
||||
identity.
|
||||
|
||||
Dense Arwic exercised 15,530 resident objects and 111 active animated statics.
|
||||
The nine-stop routes covered Caul, Sawato, Rynthid, Aerlinthe, Holtburg,
|
||||
same-location revisits, landblock retirement/reuse, movement, jump, combat,
|
||||
portal transitions, generation replacement, and graceful teardown.
|
||||
|
||||
## Corrections found by the stronger gate
|
||||
|
||||
### Ordered traversal is behavior
|
||||
|
||||
The original G1 comparator canonicalized each route by identity. It proved
|
||||
membership and multiplicity, but not the accepted traversal order. G2's stable
|
||||
alpha comparison exposed that equal-distance transparent parts preserve source
|
||||
order, matching retail `CShadowPart::insertion_sort` at `0x006B5130`.
|
||||
|
||||
`GpuWorldState` now owns an explicit resident traversal slot plus the mutable
|
||||
entity bucket index. Static publications and live projections consume that
|
||||
one derived order. Swap-removal, rebucket, pending-to-loaded, same-landblock
|
||||
replacement, and retired-slot reuse are permanent tests. The candidate and
|
||||
packed-input comparators no longer sort away order differences.
|
||||
|
||||
### Empty diagnostic submissions contain no stale groups
|
||||
|
||||
The first exact capped run on `e0f36caa` had perfect candidate, packed-input,
|
||||
and selection parity but seven transient classified-output mismatches. The
|
||||
production no-VAO early return skipped group partitioning, so its diagnostic
|
||||
fingerprint hashed stale reusable group lists even though it reported zero
|
||||
accepted instances and groups.
|
||||
|
||||
`f9829d5f` normalizes a zero-instance diagnostic submission to empty accepted
|
||||
group sets. This changes neither GL work nor pixels; it makes the referee
|
||||
describe the actual accepted output. A permanent test seeds stale opaque and
|
||||
transparent scratch and proves the zero-instance fingerprint remains the
|
||||
canonical empty submission.
|
||||
|
||||
## Deterministic gate
|
||||
|
||||
- Exact-order mismatch fixture rejects equal membership in a different route
|
||||
order.
|
||||
- Static and live traversal fixtures cover landblock slot order, bucket index,
|
||||
swap-removal, pending state, rehydrate, and slot reuse.
|
||||
- Empty/no-VAO submission fixtures cover deferral and stale scratch.
|
||||
- App Release: 3,759 passed / 3 skipped.
|
||||
- Complete Release solution: 8,243 passed / 5 skipped.
|
||||
|
||||
## Rollback
|
||||
|
||||
G2 is compare-only. Commits through `f9829d5f` are safe to retain if a later
|
||||
production visual cutover is reverted. The pre-cutover runtime rollback anchor
|
||||
remains `e7d9d6fa`. G4 must record its exact production cutover commit before
|
||||
the user visual gate.
|
||||
Loading…
Add table
Add a link
Reference in a new issue