test(overhaul): integrate reviewed consumed-light checkpoint observation

This commit is contained in:
Erik 2026-09-05 13:56:49 +02:00
parent ad866b7f65
commit 59b0b6e72f
9 changed files with 703 additions and 1 deletions

View file

@ -0,0 +1,71 @@
# #478 checkpoint observation — lead verification
Contract6c3ffd79e. OpenAI return in `s5-478-light-observation`, seven files,
no shader/RHI/selector/runtime changes. This is an observation, not a lighting
repair, a retail-parity closure, an FPS result or G4 acceptance.
## Independent checks
Lead read the complete source/test delta and the actual consumption chain:
WorldRenderFrameBuilder568570 produces and lends one PointSnapshot;
EnvCellRenderer.GetCellLightSet has only SubmitRhi as production caller;
SubmitRhi copies that set to binding5 and its packed snapshot to binding4.
Both arrays remain retained. RenderFrameResourceController begins the existing
EnvCell generation every opened frame. RenderFrameOrchestrator does not run
postdiagnostics after failure, and zero-area returns before opening a frame.
Source gating rejects zero-area/non-world outcomes; generation filtering
rejects prior-frame cell sets. Private entity viewports do not change the
EnvCell buffers. No selector, packer, or snapshot rebuild occurs on capture.
The added fixture compares actual RecordingGpuDevice ring bytes, not a second
packing/selection oracle. Two nonuniform cells are submitted in reverse order
to the output's sorted cell IDs; their distinct eight-index sets still match
their own binding5 slices. Binding4 is compared bit-for-bit, including the
one-zero-light dummy upload. Copied source identity, scalar/vector bits,
local pose, ambient and checkpoint JSON are covered. These observations prove
CPU-submitted inputs, not GPU execution, a particular vertex contribution, or
pixel brightness. Copies/allocations occur only at requested checkpoints.
During implementation the lead required the contract's optional appended DTO
field and tightened the canonical composition witness: mere parameter types
or any earlier getter call are not an argument-ownership proof. The final IL
test pins adjacent DrawDispatcher→EnvCellRenderer→Lighting→FrameProfiler
getter calls at the actual constructor invocation.
Lead actual negative controls, together in one targeted run:
- Replacing only the composed EnvCellRenderer argument with null fails the
canonical-argument test (expected getter index217, actual153).
- Removing the current-generation filter fails the no-draw stale-frame
assertion (HasCurrentEnvCellInput expectedfalse, actualtrue).
Both failed as intended, 0 passed/2 failed; exact raw source hashes restored.
Then affected Release tests: **60/60 passed, zero skips/failures**. No clients
were running before either invocation. Agent's final full Release build:
0 warnings/errors; agent focused60/60. Fresh scratch initially had missing
assets (NETSDK1004), restored successfully before compilation; not a code bug.
## Exact return / test seals
Paths below relative to the scratch worktree:
| File | SHA256 |
| --- | --- |
| src/AcDream.App/Composition/FrameRootComposition.cs | DF536DC96FB075792D3E1E14A2022BB19AAB9546FB0E2860A3E4D86A68524071 |
| src/AcDream.App/Diagnostics/WorldLifecycleAutomationController.cs | D23C952AC064A54D027A9EC20F10611CA3232F48C63150789AB53E685EA0F0E0 |
| src/AcDream.App/Diagnostics/WorldLifecycleResourceSnapshotSource.cs | 413DBF21A466B399B97E90DC87A05CFAC9CA3696708C3871524CA799558DAEF9 |
| src/AcDream.App/Rendering/Wb/EnvCellRenderer.LightingObservation.cs | 13761B2248291A28B408BCA6F7F67A1C2CDCA860B62ECDB90914F8FD2DD53FAD |
| tests/AcDream.App.Tests/Composition/FrameRootCompositionTests.cs | 6E6A87490A87FCCD377AC659B03237FF90F90841A53D2FD3DCCA029A8241CD2A |
| tests/AcDream.App.Tests/Diagnostics/WorldLifecycleAutomationControllerTests.cs | F58D2E13578F78EBBE3F3F03EC22F377465F5FD1CB8C3C395AB862554DA7E205 |
| tests/AcDream.App.Tests/Rendering/Wb/EnvCellRendererTests.cs | 35ABB9273F741C699B7623248FF0A74072F498C8CD7A8C2A9B7551978F26FB15 |
| artifacts/478-consumed-light/focused-final2/focused-final2.trx | 6E59ABCF93AA56013EA25A6D4D04114118C21EA2D76494ED29BCF9E9A16DEB08 |
| artifacts/478-consumed-light/root-mutations/root-mutations.trx | 4E9D5B378D7160567C9A14C45DE940EAA9C5EF770AE8220CDFA853DBD3AEC921 |
| artifacts/478-consumed-light/root-restored60/root-restored60.trx | 57E74670066B34721BF30E9349D83FF355C4AA7CCFFA931383B53A4BADAB9761 |
Wegener's one narrow production/lifetime review PASS, no blockers; no builds
or tests by the reviewer. Lead committed the exact seven-file return as
`41128d8164821fd186a1e2d36e042e2dea425270` and integrates those blobs unchanged.
No new retail deviation is introduced by this diagnostic. Next: fresh
integrated Release and exact-binary Town Network High/off/High with all PNGs retained.
Remove temporary observation with the eventual evidence-backed #478 repair.
FPS/#481/C2 remain deferred. No main merge; G4FAIL.

View file

@ -4917,3 +4917,10 @@ and JSON serialization are the tests; no new selector or per-frame recorder.
No lighting fix or FPS work. Register AP-16/AP-35/AP-85 remains unchanged.
Lead owns the contract/integration; one OpenAI implementer and one narrow
production/lifetime review. The next live result determines the repair scope.
Seven-file return41128d816 accepted: agent full Release0W0E/60PASS;
root both actual wiring/generation mutations fail, exact restore/60PASS;
Wegener narrow production/lifetime PASS/no blockers. Lead verification and
seals in478-observation-lead-verification.md. No per-frame path/algorithm
change or new divergence. Integrate exact blobs, then fresh build/tests and
unchanged Town Network run. FPS deferral and G4FAIL remain.