docs(overhaul): contract #473 opaque detail coverage repair

This commit is contained in:
Erik 2026-09-05 07:49:16 +02:00
parent ec8edb1573
commit d35ed1aece
3 changed files with 117 additions and 11 deletions

View file

@ -1,9 +1,11 @@
# 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; C1b diagnostic reproduces
all 25 complete OH/capture frames; C1c permanent replay correction is contracted;
connected/performance C2 and G4 remain.
**Status:** OWNER VISUAL GATE FAIL #473: exterior building sections disappear.
S5-c1 through S5-c5 plus #470/#469 landed, but prior provisional graphical
coverage did not establish complete exterior shells. Section 42 contracts the
narrow detail-active opaque coverage repair. C1c's returned test/doc correction
is frozen uncommitted pending review; geometry/membership witness, full-lane
closure, connected/performance C2 and owner G4 remain.
**Branch:** `claude/campaign-w-retail-frame-walk`.
**Gate:** G4 remains unpassed. Nothing merges to `main` before G4.
@ -3907,3 +3909,104 @@ implementer repairs it, sequential retail and production lenses review, and
the lead verifies/commits/re-gates after graceful client closure. Any genuine
unrecoverable static retail fact is reported rather than guessed. Owner's
ten-review ceiling remains; documentation-only corrections are direct.
## 42. #473 repair contract — solid detail alpha must not become sample coverage
### 42.1 First reachable defect and lead verification
Diagnosis at ec8edb157 found a concrete pipeline error introduced by S5-c4's
one-pass detail conversion. Both current fragment families emit retail's
`X = a * qA * qA` through the shared detail include. Wb's detail-active
`PipelineForMaterial` nevertheless returns the quality-selected opaque/A2C
pipeline for `RetailSetSurfaceBlend.Opaque`. Both the actual walk-ordered
caller and classic grouped opaque caller reach it. EnvCell's opaque pipeline
already has A2C disabled. VulkanGpuPipeline enables hardware A2C exactly when
the descriptor requests it and SampleCount > 1.
The owner's exact log records High quality, 4x MSAA, AlphaToCoverage=True,
and detail category 1 resolving 05001787 -> 06006D58. The lead independently
read all 65,536 installed A8R8G8B8 texels: alpha min24/max46, hence opaque
final X is 0.0088581315..0.0325413303. Raw detail bytes SHA256:
925A4E7CE87B8F5582A723BCD5DE4299ADD526DC7DDE7C54D8F1D882ACD175C7.
That detail alpha is not solid-surface coverage. Feeding it to A2C creates
an unintended coverage reduction; exact per-sample behavior remains the GPU
gate's responsibility, not a claim derived from a recording test.
Lead re-read named `D3DPolyRender::SetSurface @0059C4D0`: detail stages at
0059C51C/52B/53A/549 retain the squared final alpha; ordinary opaque selects
ONE/ZERO, no alpha blend or alpha test (0059C6E9..0059C6F9), with the existing
depth write. This is not permission to replace the fragment alpha by 1 or
change the blend arithmetic. Direct PE re-hashing against the same paired
006FFEADC5D679C871497112A5BD1F87714D0E273E2166BAE5052DDE369297B1 executable
reproduced every relevant section-22 range: SetSurface stages229 bytes
090E24BE542E9DA4F77B547D091F5C2E676109495919BEA70027AD2B89E11426;
material state417 bytes
1F077DA1BB09FBAC0EAF7522E125C716AAF499DFA8763DD3DDF29CCC6A76C382;
RenderMeshSubset single-pass224 bytes
64A988D4B1611CEEA6DE135FF52CDF30FE1AFDAAFF5E3B76751FFA7FC833CC53.
The superseded two-draw port-note pseudocode is not this repair's oracle.
Independent exclusions: all 52 GfxObjs across A9B4/F418 building base and
nonzero ladder levels contain zero raw-2 polygons, so UN-4's known legacy
side handling is not a demonstrated explanation here. All 32 nonbase
surface arrays match their slot-zero array. Fresh canonical extraction and
recipe10 package full serialized bytes match for sampled C17/A2B/BC3:
135/143/98 vertices, respectively; SHA256 166091DD4A07B3DA4322D0A663AE81FCBBF3AB3B6A2E7C18A228F3E247AFCC08,
AF482C163FBEB5A85A239A8DF8D0190CD37C1787527040BB710B20252D3EB227,
B1288B8DC53460B220075864AE6507BA5CE9880FCF1851FBD14828CEE32FDE21.
These sampled payload checks are not an all-mesh GPU completeness claim.
### 42.2 Bounded implementation and permanent discriminator
One OpenAI implementer changes the shared detail-active material selection:
`RetailSetSurfaceBlend.Opaque => pipelines.Opaque`. Preserve pure Clip's
`opaquePipeline` arm (the separately disclosed AP-240), all detail-off
quality-selected pipelines, every blended family, fragment C/X, texture
sampling, depth/cull, command order/count, geometry, LOD, prepared recipe and
alpha queue. No shader edit, rebake, generic culling repair, or C1c change.
Correct the existing real PrepareThenDraw ordinary/detail-opaque/detail-Clip/
ordinary assertion: only the detail-opaque command binds non-A2C. Cover 1x
and actual 4x, ordinary and atmospheric families, with exact pipeline
descriptors, draw order/count, depth state and detail push fields. Add a
classic-grouped real submission regression for the same shared selection;
verify detail unavailable/disabled and quality A2C=false remain unchanged.
Use existing fixtures and focused test files, not a test-only replacement
of PipelineForMaterial. A mutation restoring the old one-line Opaque arm
must fail the relevant ordered and classic tests; restore and re-run green.
Existing pure Clip/AP-240 and blended-detail tests remain unchanged in meaning.
Update #473, register a filed-and-code-retired AP-245 row in the same fix
commit, and append exact results here. The new row records the defect and
its correction without pretending GPU/owner acceptance. AP-240 and AP-244
remain active. Correct source comments only where this edit makes them stale.
Return all changes uncommitted for the lead. Do not touch frozen
s5-closeout-harness or its nine-file C1c result. No unrelated refactoring.
### 42.3 Reviews, build and honest graphical gate
At 2026-09-05T07:48:08+02:00 explicit JSON preflight found zero AcDream,
retail or debugger processes and ACE UDP9000 PID13340. PID18836 had exited;
its log ends with graceful logout requested/confirmed. The lead did not
close or control the owner's session. Check again before every build/launch;
never build beside a running client. Release builds and focused tests are
now authorized under this repair step. Do not launch a client as implementer.
Sequential independent OpenAI retail then production/gate-honesty review;
a finding gets only a bounded fix and narrow re-review, maximum ten passes.
Lead independently verifies the code, discriminating tests and paired facts,
commits the reviewed change and runs a green Release build before one owned
graphical run per background command. Use the same recipe10 package, 4x MSAA,
A2C=true and detail ON: do not hide the bug by globally disabling detail/A2C.
The previous provisional images were insufficient: c5 03-holtburg-house.png
is INSIDE, c5 04-holtburg-terrain-leak.png faces away toward a hillside, and
c4 09-cathedral-terrace-edge.png does not frame the complete exterior. Their
blanket intact-shell claims are superseded, not evidence against owner FAIL.
The new gate must frame complete Holtburg and cathedral exteriors from more
than one side and at near/far distances, and check the working Facility
interior as a control. Record exact poses/settings/binary, PNG paths and
PASS/FAIL; close only the lead's own session gracefully. Lead PASS remains
provisional until the owner re-gates. Keep #473 open if rendered sections
remain missing, even if the narrow tests pass. No merge main; C1c and all
remaining closeout/G4 obligations resume only after this failure is handled.