acdream/docs/research/2026-07-25-slice-g2-packed-dispatcher-gate.md

87 lines
4 KiB
Markdown

# 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.