From 02219318a052b01dfe3c6049864bfba2d70d9572 Mon Sep 17 00:00:00 2001 From: Erik Date: Sat, 5 Sep 2026 07:13:43 +0200 Subject: [PATCH] docs(overhaul): prove replay projection cause and contract permanent correction --- docs/ISSUES.md | 18 +- .../retail-divergence-register.md | 2 +- ...-09-01-campaign-overhaul-world-solidity.md | 2 +- .../s5-c1b-projection-diagnostic.txt | 65 ++++++++ .../s5-consumers-material-closeout-packet.md | 155 +++++++++++++++++- 5 files changed, 235 insertions(+), 7 deletions(-) create mode 100644 docs/research/2026-09-01-overhaul/s5-c1b-projection-diagnostic.txt diff --git a/docs/ISSUES.md b/docs/ISSUES.md index f48cb139..ca29c5c2 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -41,8 +41,8 @@ remain closed. See ## #472 — Stair-arch walk fixture cannot distinguish retail e229 residency from block rejection -**Status:** OPEN — blocks Campaign OVERHAUL v2 S5 closeout C1a and G4; one -targeted owner retail capture is required. +**Status:** IN-PROGRESS — capture complete; §40's diagnostic resolves the +mismatch. Permanent default replay correction and review remain before closure. **Severity:** EVIDENCE BLOCKER (no production renderer defect established) **Component:** InstalledDat walk-conformance harness / retail capture corpus @@ -84,6 +84,14 @@ Do not call the old mismatch an accepted x87 boundary until that experiment is complete. Evidence: `oh-capture/cathedral-stair-arch-e229.combined-r1.log` and `cathedral-stair-arch-e229.projection-mode.log`. +**2026-09-05 diagnostic result:** corrected matrix projection/rays, explicit +next-marker pose, and per-live-view EC recording reproduce all four stair +frames exactly (2158/2158), with e229 Outside and no LC/SC. All six OH walk +fixtures plus the new capture are exact (25/25 complete frames). The historical +capture/acceptance paragraphs above are superseded; this is a replay-harness +defect, not an accepted x87 renderer divergence. Packet §40 contracts the +permanent correction, regression tests and reviews. #472 is not closed yet. + ## #471 — Production walk-ordered building detail was classified but never rendered @@ -448,7 +456,11 @@ so this class is caught on every gate, not only when the lead remembers the env ## #458 — Walk admits land block `a9c9` at holtburg-doorway-still that retail does not draw -**Status:** RESOLVED 2026-09-03 — a PRECISION BOUNDARY, not a walk defect (register row AD-118; the KnownFailure row is kept on purpose — see the resolution below). Found 2026-09-03 by the S3 chunk 1 eight-kind transcript conformance (the gate's first real walk catch). +**Status:** REOPENED 2026-09-05 — the former x87-only attribution below is +disproven by S5 packet §40's diagnostic. Corrected matrix rays/projection and +next-marker pose reproduce all four doorway frames exactly (1185/1185). +Permanent default replay correction, KnownFailure removal and review remain. +The 2026-09-03 investigation/resolution below is retained as superseded history. **Severity:** MEDIUM (retail-order exactness; one far land cell drawn that retail skips — no known visible artifact) **Component:** `WalkLandscape.CheckBlocks` / `LandCellCheck` block-level visibility at a LOD-ring boundary diff --git a/docs/architecture/retail-divergence-register.md b/docs/architecture/retail-divergence-register.md index 89975e0d..c2a9636d 100644 --- a/docs/architecture/retail-divergence-register.md +++ b/docs/architecture/retail-divergence-register.md @@ -216,7 +216,7 @@ readiness/requeue adaptation. See | AD-102 | **Filed 2026-08-15 at Campaign CC slice CC4 (the Heritage page's Viamontian button and the Town page's Sanamar button).** Retail gates BOTH controls behind `CPlayerSystem::AccountHasThroneOfDestiny`: `gmCGHeritagePage::ListenToElementMessage @ 0x00483860` shows `MakeToDWarningDialog` instead of selecting Viamontian (element `0x100003c3`) for a non-ToD account, and `gmCGTownPage::ListenToElementMessage @ 0x0047c480` does the same for Sanamar (element `0x1000040b`, `startArea` index 3 — also the reason `CharGenState::RandomizeStartArea`'s ToD-aware `RandInt(3 or 4)` bound exists). acdream's `ChargenOptions` (CC1) carries no account/DLC-ownership signal anywhere in the model, so both controls ship WITHOUT the gate — every installed heritage/town in `Options.HeritagesById`/`Options.StarterAreas` is always selectable, matching what a ToD-owning account would see. | `src/AcDream.App/UI/Layout/CharacterCreationHeritagePage.cs` (`HeritageByButtonId[0x100003C3u]`); `src/AcDream.App/UI/Layout/CharacterCreationTownPage.cs` (`StartAreaByButtonId[0x1000040Bu]`, `Randomize`) | ACE's server-side `CharacterCreate` handler never checks ToD ownership either (the field is purely a retail-client UI gate), so accepting the selection unconditionally never produces a request the emulator would reject; adding an account-ownership model to CC1's DAT-only `ChargenOptions` is out of this slice's scope and would need its own design (where does the "ToD owned" bit come from — account service, launcher config, a new env flag?). | None observable against ACE. A future retail-parity gate that specifically checks "does a non-ToD account get warned off Viamontian/Sanamar" will fail until an account-ownership signal exists to gate on. | `gmCGHeritagePage::ListenToElementMessage @ 0x00483860`; `gmCGTownPage::ListenToElementMessage @ 0x0047c480`; `gmCGTownPage::SetTown @ 0x0047c360`; `CharGenState::RandomizeStartArea` (DoRandom case 4, `RandInt(hasToD ? 4 : 3)`) | | AD-99 | **Filed 2026-08-15 at Campaign LA gate round 2 finding 1 (character-select Exit button).** On a confirmed Exit, acdream closes the client through the existing graceful window-close path (`d.Window.Close`, the same seam `GameplayInputCommandController`'s in-world Escape fallback already uses) instead of retail's real post-confirm behavior: `RecvNotice_CloseDialog`'s case-1 arm queues UI mode `0x10000009`, which `gmEpilogueUI::Register` claims — a brief epilogue/farewell screen — before the process actually terminates. The confirmation dialog itself (`MakeConfirmExitDialog`, its exact `ID_CharacterManagement_ConfirmExit` text, and the `m_confirmExitDialogContext != 0` re-entry guard) IS ported faithfully; only the post-confirm destination differs, the same shape as AD-74's Options-panel exit. | `src/AcDream.App/UI/Layout/CharacterManagementUiController.cs` (`RequestExit`); `src/AcDream.App/UI/RetailUiRuntime.cs` (`CharacterSelectionRuntimeBindings.RequestExit`); `src/AcDream.App/Composition/InteractionRetainedUiComposition.cs` (`d.Window.Close` binding) | acdream has no `gmEpilogueUI` port (out of scope this round); reusing the ONE existing graceful-shutdown seam keeps `disconnected`/`exited` status events firing through `GameWindow.OnClosing` → `CompleteShutdown` rather than inventing a second shutdown path, per explicit direction for this finding. | A user confirming Exit sees the window close immediately instead of retail's brief epilogue screen; a future feature wanting to reproduce that screen (or an intermediate "logged off, returned to character select" state) has no seam yet — same gap class as AD-44. | `gmCharacterManagementUI::MakeConfirmExitDialog @0x004ed250`; `RecvNotice_CloseDialog @0x004ed760` case 1; `gmEpilogueUI::Register(0x10000009)` @0x0047a680; `gmCharacterManagementUI::OnAction @0x004ed410` (Escape key, unported — button-only this round) | | AD-113 | **Filed 2026-08-25 at Campaign CT slice CT-GF1 (client-wide retained-UI ancestor clip).** Porting retail's `UIRegion::DrawHere @0x0069FA30` ancestor-clip intersection (an element's screen rect is intersected against the FULL inherited clip-rect chain and the subtree is skipped when the intersection is empty — the `var_24` gate @0x0069FB8E) as `UiElement.ClipsChildren`'s new client-wide default (true, threaded through the pre-existing `UiRenderContext.PushClip`/`PopClip`) needed one deliberate opt-out: retail spawns a menu's dropdown popup as a SEPARATE top-level region (`UIElement_Menu::MakePopup`), clipped only by the screen, while acdream's `UiMenu` draws its popup INLINE from the owning button in a second traversal (`OnDrawOverlay`, pre-existing, "regardless of this element's position in the tree" by its own doc comment). Without an escape, the new ancestor clip would wrongly cut off a popup that legitimately extends outside its own (possibly short) owning window — e.g. a channel dropdown opened upward past a short chat window's top edge. `UiElement.ExpandsClipForPopup` (default false) resets the accumulated clip to the full CANVAS rect (0,0,ScreenSize) — SCREEN-clipped, not truly unbounded, matching retail's own popup region (`UIElement_Menu::MakePopup` spawns a top-level region bounded by the screen) — for exactly the `OnDrawOverlay` call of an opted-in element (`UiRenderContext.PushClipUnbounded`, sharing the existing clip stack; corrected from an earlier `null`/unbounded clip at the CT-GF1 fix round); `UiMenu` overrides it true, paired with `ClipsChildren => false` so its own out-of-bounds `OnHitTest` union (the popup occupies `ly < 0` or `ly >= Height` depending on open direction) stays reachable through the same early-bounds gate that now defaults on for every other element. | `src/AcDream.App/UI/UiElement.cs` (`ClipsChildren`, `ExpandsClipForPopup`, `DrawOverlays`); `src/AcDream.App/UI/UiRenderContext.cs` (`PushClipUnbounded`); `src/AcDream.App/UI/UiMenu.cs` (the two overrides) | The popup is the ONLY overlay-drawing widget in the tree today (grep-confirmed: exactly one `OnDrawOverlay` override client-wide), and it already renders on top of the whole UI by construction (the overlay pass beats even rect backgrounds), so exempting it from the ancestor clip matches its existing "regardless of tree position" contract rather than introducing new behavior. | A future `OnDrawOverlay` override that is NOT a screen-anchored popup (e.g. an in-place highlight meant to stay window-clipped) would silently escape every ancestor's clip if it left `ExpandsClipForPopup` at its default; the opt-in default direction makes that the exception rather than the rule, but a widget that WANTS window-clipped overlay content has no dedicated seam beyond simply not overriding the escape. | `UIRegion::DrawHere @0x0069FA30`; `UIElement_Menu::MakePopup`; the register's own AP-201 retirement note (the FIRST `ClipsChildren`/`PushClip` port, for `UiScrollablePanel`'s viewport) | -| AD-118 | **ATTRIBUTION REOPENED 2026-09-05 (#472, S5 packet §39): live `newmethod=1` selects matrix-based rays while the replay implements the legacy branch. The earlier x87-only explanation below is not established until the mixed-projection harness defect is isolated; no production change or new accepted failure is implied.** **Filed 2026-09-03 at Campaign OVERHAUL v2 S3 (docs/ISSUES.md #458, resolved).** The walk's portal-view EDGE PLANES are built from acdream's own float projection (`WalkCopyView` on `IWalkRayCaster`'s unprojected rays; the replay context's `Matrix4x4` view-proj), while retail builds them in `Render::copy_view @0x0054dfc0` from D3D-transformed screen points under x87 arithmetic. The planes agree to about 0.5 % (measured live at the Holtburg doorway: the fourth door-edge plane's clip height at the ring-21 block `a9c9` is 300.4/310.2 m in retail vs 298.8/308.5 m here — a slope ratio of 0.05104 vs 0.05042, roughly 0.35 px of projected door-vertex position at 720p), which is invisible everywhere except at a block/cell corner that sits within that margin of a plane: there `Render::block_check`'s four-corner unanimity test can flip PartiallyInside↔Outside for a far LOD block (one corner inside for us, outside for retail), admitting or skipping a whole distant land block retail decides the other way. | `src/AcDream.App/Rendering/Walk/WalkCopyView.cs` (per-edge plane build); `src/AcDream.App/Rendering/Walk/WalkVisibilityMath.cs` (`FillClipHeights`, `CornerPlaneCheck`, `BlockCheck`); `tests/AcDream.App.Tests/Rendering/Walk/WalkTraceReplay.cs` (the replay's projection) | Bit-exact agreement would require reproducing D3D's x87 vertex transform and `copy_view`'s exact rounding order; the algorithm, sentinels, loop shape, z slab padding and verdict logic are all ported verbatim and reproduce three of four capture poses exactly at the eight-kind transcript level. | A land block at ≥ 20 rings whose corner lies within ~0.5 % of a doorway edge plane may be drawn where retail skips it (or vice versa) — one far, low-LOD block, no known visible artifact; the `WalkTraceConformanceTests.Oh_doorway_still_first_frame_diff` row stays `KnownFailure` as the standing example. | `Render::copy_view @0x0054dfc0`; `Render::get_clip_height @0x0054cff0`; `Render::block_check @0x0054dc50`; `LScape::draw_check_blocks @0x00505f80` (the `if (esi_3 != 0)` residency gate and the per-view `block_check` call @0x005061df); captures `docs/research/2026-09-01-overhaul/oh-capture/holtburg-doorway-still.blockcheck.log` / `.blockset.log` | +| AD-118 | **DIAGNOSTICALLY DISPROVEN 2026-09-05; permanent test correction/review pending (S5 packet §40).** The observed #458 doorway and #472 stair differences came from the replay's legacy rays paired with a different forward projection; frame-entry pose timing also mattered. Captured newmethod=1 selects the matrix branch. The corrected matrix plus next-marker pose reproduces all 25 complete OH/capture frames exactly; the old x87-only attribution is superseded. | `tests/AcDream.App.Tests/Rendering/Walk/WalkTraceReplay.cs`; `WalkOracleTrace.cs`; shared conformance Recorder | No production deviation has been established by these fixtures. Retire this row's acceptance rationale with C1c's permanent discriminating proof; ordinary floating-point differences are not permission to accept a transcript mismatch. | #458's KnownFailure remains only until the permanent default replay row passes; no new failure accepted. The historical evidence remains in docs/ISSUES.md, explicitly superseded. | `Render::copy_view @0054dfc0`; `PrimD3DRender::ScreenToViewTransform @0059aa40`; `SmartBox::RenderNormalMode @00453aa0`; packet §§39–40; `s5-c1b-projection-diagnostic.txt` | --- diff --git a/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md b/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md index b18f6c09..8945a1bb 100644 --- a/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md +++ b/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md @@ -696,7 +696,7 @@ Update immediately when a slice changes state. Chat is not the ledger. | S5-#470 | **LANDED + REVIEW-CLOSED 2026-09-05; LEAD GRAPHICAL A/B PROVISIONAL PASS.** Campaign implementation stack `15a796c3a` -> `7506e5f14` -> `b333edb4f`; route `19b44e5e3`; reviewed scratch `51f974da4` -> `2cad9c84` -> `98c004aa7`; packet §§27–30. | G4 UNPASSED | Retail/behavior pass 2/10 and production pass 4/10 closed the two evidence-only findings. Fresh campaign Release 0W/0E and focused 48/48; exact scratch hermetic 16,976/16,976 and canonical InstalledDat 386/10/1, manifests 30/30. Pinned gate `logs/selfgate-20260905-032132-s5-470-pinned-shadow-ab-r1`: retail/off -> High -> retail/off, 3/3 PNGs, exit 0, graceful, no client; visual PASS provisional. The stale recipe-8 pre-route launch is excluded and recorded in §30. | | S5-#469 | **LANDED + REVIEW-CLOSED 2026-09-05; LEAD GRAPHICAL TRANSITION PROVISIONAL PASS.** Contract `809887524`; reviewed scratch `c09b6cf0f`; campaign implementation `94ddde69a`; route `62efc72cb`; packet §§31–32. | G4 UNPASSED | Retail/deviation pass 1/10 and production pass 2/10 both PASS with no finding. The two atmospheric vertex receivers keep retail's authored unnormalized `uLights` direction across every shadow gate; celestial direction remains for opt-in shadow/volumetric projection; IA-24 corrected in the same commit. Exact scratch: Release 0W/0E, focused 126/126, Vulkan 2/2, hermetic 16,983/16,983, InstalledDat 386/10/1. Fresh campaign Release 0W/0E, focused 82/82, Vulkan 2/2. Gate `logs/selfgate-20260905-040449-s5-469-lighting-transition-r1`: five PNGs, active 2,500-caster/four-cascade High rows, no near-black relight, exit 0/graceful, no client; visual PASS provisional. | | S5-c5 | **CLOSED + LANDED 2026-09-05; LEAD GRAPHICAL SMOKE PROVISIONAL PASS.** Contract `b77989c32`; campaign `bf53e2ad6` -> `e625dc4e6` -> `1b7ee4e58`; reviewed scratch tip `158656f0d`; packet §§33–35. | G4 UNPASSED | Retail/deletion pass 1/10 PASS. Production pass 2/10 found one static-field hole in the owner guard; fix round 1 reproduced both static-owner mutations, and production pass 3/10 PASS. Exact scratch hermetic 16,921/16,921, canonical InstalledDat 368/9/1, manifests 30/30. Fresh campaign Release 0W/0E, App 146/146, Core 8/8. A stale recipe-8 preflight is excluded; a non-destructive recipe-10 bake produced 2,237,865 keys with zero failures. Corrected gate `logs/selfgate-20260905-052130-s5-c5-landed-v10`: five PNGs, exit 0/graceful, no fatal/deleted-prefix match, no client left; geometry matches S5-c4, visual PASS provisional. | -| S5 | **IN FLIGHT: owner capture completed; C1b projection diagnostic contracted.** c1–c5 plus #470/#469 landed, review-closed, and provisionally self-gated; C1 offline evidence complete; C1a remains stopped pending diagnostic result. | G4 | Packet §§7 and 12–39 bind. New capture proves e229 resident+rejected at the current stairwell pose; follow-up `newmethod=1` exposes test replay's wrong legacy ray branch. C1b compares coherent captured-matrix projection/rays with baseline and all OH transcripts, without production or default-test changes. Then close C1a's recorder/geometry-hash witnesses, C2 and G4. Never merge main before G4. | +| S5 | **IN FLIGHT: C1b diagnostic complete; C1c permanent replay correction contracted.** c1–c5 plus #470/#469 landed, review-closed, and provisionally self-gated; C1 offline evidence complete. | G4 | Packet §§7 and 12–40 bind. Corrected matrix projection + next-marker pose + live-view EC recording match all 25 complete OH/capture frames exactly; #458/#472 and AD-118's former x87 attribution are disproven as harness defects. C1c makes the proven correction permanent with mutations and sequential reviews; then C1a geometry/membership hash, full-lane closeout, C2 and G4. No production code changed in the diagnostic. Never merge main before G4. | --- diff --git a/docs/research/2026-09-01-overhaul/s5-c1b-projection-diagnostic.txt b/docs/research/2026-09-01-overhaul/s5-c1b-projection-diagnostic.txt new file mode 100644 index 00000000..c0223b4f --- /dev/null +++ b/docs/research/2026-09-01-overhaul/s5-c1b-projection-diagnostic.txt @@ -0,0 +1,65 @@ +S5 closeout C1b projection diagnostic evidence +Contract/source identity: HEAD 3f5ca9ff4f392169138e7438f441795e640325cb, branch codex/s5-closeout-harness +Date: 2026-09-05 + +Safety/provenance +- The owner's retail acclient PID 29732 remained running. No graphical client was launched. +- Only the test assembly was built. Both referenced production AcDream.App.dll copies were SHA-256 + 90BB90521F8F46B3887234F9D560E33616F108492693AA7597AEE0850E87FA76 before and after. +- No production source, fixture, shared assertion, status, or gate was changed. No commit was created. + +Commands and exact outcomes + +1. Test-project build used before the initial diagnostic: + dotnet build tests/AcDream.App.Tests/AcDream.App.Tests.csproj -c Release --no-restore --no-dependencies -v:minimal + AcDream.App.Tests.dll built; Build succeeded; 0 Warning(s), 0 Error(s); 00:00:08.31. + +2. Standalone round-trip witness: + dotnet test tests/AcDream.App.Tests/AcDream.App.Tests.csproj -c Release --no-build --filter "FullyQualifiedName~WalkProjectionDiagnosticTests.Captured_matrix" --results-directory artifacts/s5-c1b-projection-3f5ca9ff4 --logger "trx;LogFileName=roundtrip.trx" --logger "console;verbosity=detailed" + Passed 1/1 in 0.8824 s. Maximum corrected round-trip error was 0.000110485424 pixel. + Legacy center through the captured projection was (512.5008,360.5003). + Artifact: roundtrip.trx + SHA-256: C89C808F3333A88A0F5B951A89EB02758AED779B481CFA5BA16FA7E84B038212 + +3. Retained initial diagnostic, before the nullable outdoor-camera correction: + dotnet test tests/AcDream.App.Tests/AcDream.App.Tests.csproj -c Release --no-build --filter "FullyQualifiedName~WalkProjectionDiagnosticTests.Captured_and_historical" --results-directory artifacts/s5-c1b-projection-3f5ca9ff4 --logger "trx;LogFileName=walk-diagnostic.trx" --logger "console;verbosity=detailed" + Failed 0/1 after 2.1381 s at terrace-edge: the diagnostic incorrectly required outdoor cell + f418000b in the interior-cell dictionary. All output before that harness failure is retained. + Artifact: walk-diagnostic.trx + SHA-256: E22C1DD24527C16CD637B069266A0676CBAD36AB3E78EDF4BBF3C8615F33507F + +4. Test-assembly-only rebuild after correcting nullable outdoor camera and target lookup: + dotnet build tests/AcDream.App.Tests/AcDream.App.Tests.csproj -c Release --no-restore --no-dependencies /p:BuildProjectReferences=false -v:minimal + AcDream.App.Tests.dll built; Build succeeded; 0 Warning(s), 0 Error(s); 00:00:06.69. + Production AcDream.App.dll SHA-256 was unchanged before/after at both source and test output paths: + 90BB90521F8F46B3887234F9D560E33616F108492693AA7597AEE0850E87FA76. + +5. Final complete focused diagnostic: + dotnet test tests/AcDream.App.Tests/AcDream.App.Tests.csproj -c Release --no-build --filter "FullyQualifiedName~WalkProjectionDiagnosticTests" --results-directory artifacts/s5-c1b-projection-3f5ca9ff4 --logger "trx;LogFileName=walk-diagnostic-final.trx" --logger "console;verbosity=minimal" + Passed 2/2, failed 0, skipped 0, duration 2 s. + Artifact: walk-diagnostic-final.trx + SHA-256: 8E14F9BFFCAF57047D0990185FAB393170CEC962024C035C01422C4DC266B00E + +Measured result +- The final TRX retains 100 labeled full-sequence LCS comparisons: both projections, both marker + pairings, the new capture, four complete frames for each historical OH fixture, and every edit. +- Captured-matrix + retail-correct next-marker pairing was exact in all 25/25 comparisons. +- Captured-matrix was exact in 49/50 comparisons across both pairings. Its only mismatch was #458 + frame 1 under the known-wrong same-marker pairing: inserted LC/SC a9c90001. +- Legacy was exact in 26/50 comparisons. It inserted LC/SC e2290001 in every historical stair + frame, inserted LC/SC a9c90001 for #458, and omitted LC/SC fe180001 for cathedral-leak. +- On the historical stair, captured-matrix changes e229 from PartiallyInside/LC=true/SC=true to + Outside/CellInView[0]=Outside/LC=false/SC=false for all four frames under both pose associations. +- For the new capture's correct F1-events/F2-pose comparison, e229 is present at slot 399, + ring 18, side 1, slab bf800000..43890000; all seven per-view BlockCheck verdicts are Outside; + final InView and CellInView[0] are Outside; LC=false and SC=false. Raw points, edge planes, CY, + four interval vectors, verdicts, and nearest-edge margins are retained in the final TRX. + +Limitations +- Applying the captured D3D projection to historical captures is explicitly labeled a + same-configuration hypothesis; those captures did not independently dump their matrix words. +- This is an InstalledDat replay diagnostic, not a connected/runtime geometry publication witness. +- The new capture's Signature8 happens to be exact under both ray implementations; its raw + e229 admission verdict therefore does not alone discriminate the projection paths. The raw + inputs can be compared; historical-frame equality and round-trip tests provide discrimination. +- No accepted conformance expectation or default replay constructor behavior was changed. diff --git a/docs/research/2026-09-01-overhaul/s5-consumers-material-closeout-packet.md b/docs/research/2026-09-01-overhaul/s5-consumers-material-closeout-packet.md index 138680ba..bd554827 100644 --- a/docs/research/2026-09-01-overhaul/s5-consumers-material-closeout-packet.md +++ b/docs/research/2026-09-01-overhaul/s5-consumers-material-closeout-packet.md @@ -1,8 +1,8 @@ # Campaign OVERHAUL v2 — S5 consumers, material, and closeout packet **Status:** S5-c1 through S5-c5 plus #470/#469 LANDED + REVIEW-CLOSED with lead -graphical gates PROVISIONAL PASS; closeout C1 passed; C1a is STOPPED on the -retail-live fact in #472 now captured; C1b projection diagnostic is contracted; +graphical gates PROVISIONAL PASS; closeout C1 passed; C1b diagnostic reproduces +all 25 complete OH/capture frames; C1c permanent replay correction is contracted; connected/performance C2 and G4 remain. **Branch:** `claude/campaign-w-retail-frame-walk`. **Gate:** G4 remains unpassed. Nothing merges to `main` before G4. @@ -3703,3 +3703,154 @@ not widen into renderer math or silently accept a new failure. The lead writes the subsequent correction contract from the measured result; then the normal sequential retail and production reviews apply. C1a's product hash and test closure, C2, and G4 remain; no merge to main. + +## 40. C1b result and C1c permanent replay correction contract — 2026-09-05 + +### 40.1 Measured result: both purported precision boundaries are harness defects + +The frozen §39 diagnostic uses only the two authorized test files in +`s5-closeout-harness`, based on `3f5ca9ff4`; it is not a production change +or an official closeout gate. Exact commands, limitations and artifact hashes: +`s5-c1b-projection-diagnostic.txt`. Final artifact: +`s5-closeout-harness/artifacts/s5-c1b-projection-3f5ca9ff4/walk-diagnostic-final.trx`, +SHA-256 `8E14F9BFFCAF57047D0990185FAB393170CEC962024C035C01422C4DC266B00E`. + +The lead inspected the observer, literal Signature8 comparison, LCS alignment, +raw captured/candidate intervals, and final admission; independently counted +all 100 rows from the complete TRX, and re-hashed both production DLL copies. +The final focused run passed 2/2. The first diagnostic failure is preserved: +its outdoor-camera setup wrongly required a cell in the interior dictionary; +the nullable outdoor-camera repair changed only the diagnostic. + +| Comparison | Exact | +|---|---:| +| Matrix projection + correct next-marker pose | 25/25 | +| Matrix projection across both pose associations | 49/50 | +| Legacy projection across both pose associations | 26/50 | + +The 25 correct-pose rows are all four complete frames of each of the six OH +walk fixtures, plus the new complete capture. Each is a full ordered +eight-kind equality, not count equality. The historical stair gives +2158/2158 for all four frames, with resident e229 now Outside at the actual +walk and no LC/SC. The doorway gives 1185/1185 for all four; its frame 1 still +differs if deliberately paired with the stale same-marker pose. The +cathedral-leak's missing fe180001 pair also disappears. The new capture +gives 2367/2367 and reproduces all seven e229 OUTSIDE decisions, though its +tokens alone happen to match both projection variants. + +Corrected screen/ray/screen maximum error is 0.000110485424 pixel; the legacy +center maps to (512.5008,360.5003). The new captured-matrix planes retain +ordinary float-rounding differences from retail; no claim of bit-identical +D3D/x87 math is made. Applying this captured projection to old fixtures remains +a labeled same-configuration hypothesis, now supported by their exact +transcripts. It does not justify altering a different capture's configuration. + +These results disprove AD-118's x87-only explanation for #458 and the proposed +application of that explanation to #472. Do not preserve those failures by +changing production, relaxing visibility, or accepting a new divergence. +Permanent correction and review are still owed before closing the issues. + +Preflight correction: retail PID 29732 remained running throughout. A mixed +PowerShell table hid its fields after the UDP row; the lead's temporary +“no client” report was wrong. Serialize endpoint/process records independently +or as explicit JSON. No client was launched or closed. Only the test assembly +was rebuilt with --no-dependencies (and explicitly +/p:BuildProjectReferences=false for the final build); the referenced +AcDream.App.dll copies remained SHA-256 +`90BB90521F8F46B3887234F9D560E33616F108492693AA7597AEE0850E87FA76`. +ACE remains UDP 9000/PID 13340. Do not build production or launch another +graphical client beside the owner's running client. + +### 40.2 C1c scope — permanent test-only correction + +One OpenAI implementer uses the existing scratch, fast-forwarding this +documentation contract without discarding the frozen diagnostic edits. +Preserve §39 artifacts. No production, shader, package, captured-log, gate +script, or geometry-witness change is allowed. This chunk closes the walk +half of §37; its geometry/membership witness remains the next bounded chunk. + +Allowed code files: WalkTraceReplay.cs, WalkOracleTrace.cs, +WalkOracleTraceTests.cs, WalkTraceConformanceTests.cs and its existing partial +siblings solely for necessary recorder/pose call-site changes. The diagnostic +class may be removed or reduced to a narrowly useful diagnostic; at most one +focused hermetic projection-test class may be added. All are under +tests/AcDream.App.Tests/Rendering/Walk/. Allowed documentation: +this packet's result section, docs/ISSUES.md #458/#472, and AD-118 in +docs/architecture/retail-divergence-register.md. Lead owns the ledger/Current. + +1. Make the proven coherent matrix projection/ray pair the ordinary replay + path for this captured 1024x720 configuration. Cite named + Render::copy_view @0054dfc0 and ScreenToViewTransform @0059aa40 and the + captured newmethod/matrix evidence. Keep forward and inverse transforms + coherent; do not subtract a half pixel, adjust epsilon, or claim that the + legacy formula is equivalent. A legacy implementation may remain ONLY as + an explicit negative test/diagnostic, never as a production fallback. + Verify the configured matrix words against the captured fixture, not only + a second copy of hardcoded constants. + +2. Preserve the literal marker pose and event stream in the parser. Expose an + explicit rendered/replay pose from the NEXT frame marker's P record, + including the final raw marker; do not manufacture its incomplete frame. + No pose selection may try both choices and accept whichever happens to + pass. Migrate pose-stamped conformance consumers to the correct association; + unposed fixture parsing remains supported. Add a synthetic moving-pose pin + proving final-marker association and no silent same-marker fallback. + +3. Correct the shared Recorder/AppendFloodTurns to read each real cell's live + TopView.ViewCount at the callback that still owns the flood. Emit EC per + live view in reverse-cell order, then OC once per cell in reverse-cell + order. Borrow the actual cell map; no production event or driver changes. + Retail anchors are PView::DrawCells @005a4ab1–005a4acc and + @005a4ade–005a4b1a. Keep the oracle's EC/OC literal, never derived from DC. + +4. Add the sixth stair walk to AllFixtures and permanent exact Signature8 + equality over ALL four complete frames of ALL six OH walk logs, plus the + new one-frame capture. Reuse the ordinary shared context/recorder, not a + shadow test-only implementation with different semantics. Pin stair + multi-view multiplicity and the absence of LC/SC:e2290001. Remove #458's + KnownFailure trait only when its ordinary exact row passes. Existing FW0 + comparisons and unrelated accepted failure identities must not be + weakened or silently removed; a new mismatch is a finding. + +5. Correct obsolete source/test comments and the #458/#472/AD-118 current + claims. Preserve the history as explicitly superseded, not current truth. + Retire AD-118 for the disproven fixture failure once the permanent proof + passes; this does not promise universal bit-identical floating-point + projection. No new production divergence is introduced. + +### 40.3 Discrimination, review and gates + +Permanent hermetic tests cover center/corners/interior round trips with a +justified <=0.001 pixel bound for the declared finite inputs, the captured +matrix binding, and explicit next-marker parsing. InstalledDat proof compares +every literal event in the 25 complete frames using the real shared recorder. + +Apply and restore separately, with the first exact failure recorded: + +- restore the legacy ray formula while retaining matrix forward projection; +- restore one EC per cell (the stair multi-view row must fail); +- use the same-marker pose (the moving parser pin and doorway frame 1 must fail); +- alter a captured matrix coefficient while leaving the binding fixture intact; +- redirect the sixth fixture consumer to a nonexistent path. + +Preserve every original capture byte and unrelated test expectation. Return +the full scoped diff, test-assembly-only Release result, focused hermetic and +InstalledDat conformance results, mutation first failures and restoration +proof, exact source/artifact hashes, and git diff --check. While retail is +running, only --no-dependencies --no-restore +/p:BuildProjectReferences=false test builds are permitted, with referenced +production DLL hashes checked before/after; no graphical launch or production +build. The implementer returns uncommitted work; the lead commits. + +Sequential retail/transcript review first verifies branch, projection, +frame-marker timing, live EC multiplicity, unchanged literal fixtures and +full-sequence proof against named retail and paired bytes. After PASS, +production/gate-honesty review checks default-path use, parser behavior, +mutations, scope, provenance and unrelated test preservation. A finding gets a +bounded fix and narrow re-review; the owner's ceiling is ten review passes. + +After both reviews pass, the lead commits, runs the ordinary Release and +canonical conformance closure when no client is running, verifies the same +nonpassing identities except the intentionally retired #458 row, and keeps +the ledger current. Geometry/membership witness, final full-lane evidence, +C2 and G4 remain. No merge to main.