docs: Campaign FW - FW2 status + the FW3 slice plan from the cutover survey

FW2 gate adjudication recorded (RecordingGpuDevice referees are the
automated gate; the pixel A/B rides FW3's cutover toggle). FW3 sliced
from the verified surface survey: FW3.1 production walk world data
(the Building record drops every walk field today - the biggest gap),
FW3.2 walk-driven static routes (stop EMITTING the three static routes;
ClipFrameAssembler/ViewconeCuller survive for the dynamic routes;
walk-path selection publication - picking is an unlisted consumer of
the static draw path), FW3.3 ShellDrawLiftZ retirement (THREE sites -
AP-32 lists only two), FW3.4 perf checkpoint with the baseline
correction (519.7 fps is the Aerlinthe ordinary profile, not dense
Arwic - capture a fresh pre-cutover dense-Arwic pair first).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-30 12:45:27 +02:00
parent e65644cb33
commit b95850defe

View file

@ -265,6 +265,21 @@ pixel-equivalent on static content.
- **Gates:** submitter unit tests (order preservation, merge legality); - **Gates:** submitter unit tests (order preservation, merge legality);
framebuffer equivalence on static-content scenes; hermetic suites green. framebuffer equivalence on static-content scenes; hermetic suites green.
**FW2 STATUS (2026-08-30, @`e65644cb`):** `OrderedDrawStream` +
`WbDrawDispatcher.OrderedStream` (the submitter partial — per-instance-
first emission, pure-CPU merge-run builder, fail-loud stage/pipeline/
cull boundary validation) and `WorldDepthContract` are landed with 27
RecordingGpuDevice gates; hermetic 6,714/0. Depth verified verbatim
from the decomp (`zfuncVal` 0x2 = D3DCMP_LESS via `SetDepthBufferMode`
@0x005a2d10; LESSEQUAL is GameSky-local). **Gate adjudication:** the
offscreen pixel A/B rides FW3's cutover toggle — a walk-driven scene
first exists there, `IGpuRenderTarget` has no readback verb today, and
opaque content under Less is order-independent, so the RecordingGpuDevice
order/merge referees are FW2's automated gate and the pixel proof joins
FW3's (offline pixel gate + owner visual gate). Deferred to FW3 and
recorded in the code: the building-detail overlay replay, portal-punch
emission, and the `_drawCullModes`/alpha-scope sequencing constraint.
### FW3 — static world cutover + THE perf checkpoint ### FW3 — static world cutover + THE perf checkpoint
**Goal:** terrain, EnvCell shells, and buildings draw via the walk in **Goal:** terrain, EnvCell shells, and buildings draw via the walk in
@ -291,6 +306,60 @@ deeper commitment.
gate (statics look right indoors + outdoors, no seam strip at the gate (statics look right indoors + outdoors, no seam strip at the
doorway, no z-fighting at shells); perf numbers recorded in this plan. doorway, no z-fighting at shells); perf numbers recorded in this plan.
**FW3 SLICE PLAN (2026-08-30, from the cutover-surface survey):**
- **FW3.1 — production walk world data.** Materialize the walk's world
model at landblock commit time, registry-owned, through the LEGAL
`IDatReaderWriter` seam (never raw `DatCollection`
`RuntimeDatAccessArchitectureTests`): (a) `WalkCell` fields onto/beside
`LoadedCell` (portal side/exact from the RAW `Flags` already preserved
on `CellPortalInfo`; plane from the existing `ClipPlanes` parallel
list; the 0xFFFF→0xFFFFFFFF exit-sentinel widening); (b) a production
`WalkBuilding` build in `LandblockBuildFactory`/`BuildingLoader` — the
BIGGEST gap: today's `Building` drops ModelId/Frame/portal
flags/stab lists at load; (c) the walk landscape assembly (retail
z-slabs from the height table, the SideCellCount LOD pyramid,
`CellBuildings[]`, viewer-centred grid) fed from landblock residency;
(d) the production frame context: camera/rays/CyPlane/ObjectToClip
derived from the LIVE `WorldCameraFrame` + real viewport (the capture
client's 1024×720 constants are fixture pins, not production values).
Conformance: the ten oracle fixtures re-run against the PRODUCTION
builders (same DATs → identical walk output as the test adapter).
- **FW3.2 — walk-driven static routes.** `WorldSceneRenderer` drives
`RetailFrameWalk``OrderedDrawStream`
(Terrain/BuildingShell/CellStatic/LookInStatic/PortalPunch stages) →
`SubmitOrderedStream` for static content; the old builder STOPS
EMITTING `LandscapeOutdoorStatic`/`LandscapeBuildingShell`/`CellStatic`
ranges (the `CompletePackedProductionFrame` count assertion forbids
emit-but-skip); dynamic routes (`LookInObject`,
`LandscapeOutsideDynamic`, `DynamicLast`) stay packed — which requires
`ClipFrameAssembler` + `ViewconeCuller` to SURVIVE this stage (their
slices key the dynamic routes). Walk-path SELECTION publication
(static picking today rides `publishSelection: true` in the packed
classifier — an unlisted consumer; the walk submitter must feed
`RetailSelectionScene` or statics go un-clickable). Portal-punch
emission via `PortalDepthMaskRenderer` at walk turns; building-detail
overlay replay; sky/weather move from per-slice to the walk's
landscape turn; the `_drawCullModes`/alpha-scope sequencing constraint
resolved (own cull scratch or strict sequencing). Route-keyed particle
owners re-sourced from the walk.
- **FW3.3 — ShellDrawLiftZ retirement.** THREE sites (the register row
AP-32 lists only two — `LandblockBuildFactory.cs` bakes the lift into
the drawn cell transform and is unlisted): delete all three, flip the
#130 proof (`UnliftedGate_LeavesTheStripAtTheDrawnTopEdge` is
explicitly written to fail-by-gap until the lift is gone), delete
AP-32 in the same commit.
- **FW3.4 — perf checkpoint + gates.** BASELINE CORRECTION: the
519.7 fps / 1.869 / 1.096 ms numbers are the Aerlinthe
ordinary-production profile, NOT dense Arwic. Before the cutover
lands, capture a fresh dense-Arwic pre-cutover baseline with the same
harness (`tools/run-connected-r6-soak.ps1 -Uncapped -DenseTown`), and
apply the ±20% stop rule to THAT pair. Transition checklist: the
lifecycle gate + dense-town soak exist; a Holtburg house-exit stop and
a teleport stopwatch metric must be ADDED to the lifecycle route
(`drive.ps1` from the spec does not exist — the checklist runs on the
existing gate scripts).
### FW4 — entities, particles, dynamics into walk turns; delete the apparatus ### FW4 — entities, particles, dynamics into walk turns; delete the apparatus
**Goal:** everything draws at its walk turn; the patch apparatus and the **Goal:** everything draws at its walk turn; the patch apparatus and the