acdream/docs/research/2026-07-25-slice-g4-production-cutover-automated-gate.md
Erik 51e184725f docs(rendering): record G4 automated gate
Capture the exact capped, uncapped, and dense physical evidence, reveal-readiness corrections, comparison-mode performance interpretation, pending visual gate, and single surgical rollback boundary.

Co-authored-by: OpenAI Codex <codex@openai.com>
2026-07-25 05:01:27 +02:00

124 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Slice G4 Production Cutover — Automated Gate
**Date:** 2026-07-25
**Production cutover:** `ef1d263337997bb030eadb7b8e71d73dc659907a`
**Gated source:** `03b10183e95985c658e5975d2cc1a082a589738d`
**Result:** automated gate accepted; user visual gate pending
## Purpose
G4 makes the retained, scene-built `RenderFrameView` the production entity
source at the five existing retail PView stages. Terrain, buildings, EnvCells,
particles, alpha ordering, selection, lighting, mesh/texture ownership, and GL
execution retain their established owners. The old route is still built only
as a diagnostic referee while lifecycle automation is enabled; it is not
drawn.
## Cutover shape
- `RetailPViewRenderer` borrows the exact generation/frame-stamped product.
- `RetailPViewPassExecutor` expands its ordered route ranges at the same five
PView stages used before the cutover.
- `WbDrawDispatcher` classifies and draws packed candidates through the
established shader, texture, light, alpha, and selection owners.
- Unchanged static classifications and ordered scene indices persist across
frames; only dirty records refresh.
- Full-scene digests and old/new comparisons are consumer-gated and absent
from an ordinary launch.
- Production does not require or call the current-path referee.
## Corrections made before and during the gate
The first implementation pass found and corrected four integration costs
before the cutover commit:
1. ordinary runtime composition incorrectly required the optional comparison
observer;
2. selection geometry was constructed twice;
3. a diagnostic scene digest sorted the full scene every production frame;
4. outdoor/dynamic indices were copied and sorted every frame despite stable
membership.
The first exact nine-stop run then exposed an independent reveal-readiness
weakness. Composite warmup used the same 128-item limit for cheap candidate
discovery and expensive mesh/texture preparation. Caul's roughly 21,000
retained objects could exhaust the portal reveal window before discovery
finished. `129dd77d` separates those budgets.
A second run proved that a late membership edge could still restart the
whole-world follow-up scan. `03b10183` adds a stable destination-neighborhood
source over `GpuWorldState`'s canonical published buckets. Warmup now reads
only the 3×3 reveal neighborhood, including static and live projections while
the generation is deliberately quiesced. Both corrections apply equally to
the old and retained draw paths; neither changes the visual rollback boundary.
## Exact physical evidence
| Route | Report | Product comparisons | Final rebuild / cross-frame reuse | Result |
|---|---|---:|---:|---|
| Capped nine-stop | `logs/connected-r6-soak-20260725-043955.report.json` | 20,502 | 1 / 6,109 | pass |
| Uncapped nine-stop | `logs/connected-r6-soak-20260725-044923.report.json` | 24,463 | 2 / 6,037 | pass |
| Uncapped dense Arwic | `logs/connected-dense-town-20260725-045805.report.json` | 1,634 | 2 / 3,833 | pass |
Every route used a Release binary whose embedded commit exactly matched
`03b10183e95985c658e5975d2cc1a082a589738d`, exited with code zero through the
graceful logout path, and recorded:
- zero product/referee candidate mismatch;
- zero reveal invariant failure;
- every canonical reveal ready;
- zero composite warmup items at every stable checkpoint;
- zero pending render-journal operations or rejected scene deltas;
- retained-classification reuse across returns;
- fixed-camera PNG artifacts for every checkpoint.
Dense Arwic exercised 15,530 resident objects and 111 active animated statics.
Its final frame retained 4,949,760 bytes of packed classification and reused
3,833 unchanged visible projections.
## Performance interpretation
The connected G4 gate intentionally keeps the complete old route and
field-level referee enabled on every sampled frame. Dense Arwic therefore
reported 29.3 ms CPU p50 and roughly 10 MiB of diagnostic allocation per frame
while GPU p50 remained 1.8 ms. These are comparison-mode costs, not the
production-only result. An ordinary development launch after consumer-gating
measured roughly 8 ms with about 90 KiB frame-thread allocation in a dense
scene. The authoritative production-only performance matrix belongs to G5,
after the user visual gate permits deletion of the old route and transition
diagnostics.
## Deterministic gate
- Production composition succeeds without a comparison observer.
- The product routes in exact PView stage order.
- Transform-only scene updates preserve index revision and refresh only the
dirty record.
- Membership/sort changes advance index revision and rebuild ordered indices.
- A 21,025-record warmup discovery completes independently of the conservative
128-entity preparation/upload budget.
- Readiness snapshots include destination static/live projections even while
ordinary gameplay visibility is quiesced.
- App Release: 3,775 passed / 3 skipped.
- Complete Release solution: 8,259 passed / 5 skipped.
- Release build: zero errors; the complete test build retains 16 pre-existing
test warnings.
## Visual gate and rollback
The user must still inspect login, outdoor/dungeon portal transitions,
selection, alpha/translucency, animated/equipped objects, particles, radar,
and repeated destination returns before G4 can delete the old referee.
If that visual gate fails, the exact surgical command is:
```powershell
git revert ef1d263337997bb030eadb7b8e71d73dc659907a
```
Do not reset the branch and do not revert G3 (`6a026c5a`). The two
reveal-readiness corrections are valid on both draw paths and remain after the
cutover revert.