docs(overhaul): contract S5 c3 fix round 2

This commit is contained in:
Erik 2026-09-04 21:33:29 +02:00
parent 5cc437bf98
commit ccd88eabcc
2 changed files with 58 additions and 4 deletions

View file

@ -1,8 +1,8 @@
# Campaign OVERHAUL v2 — S5 consumers, material, and closeout packet
**Status:** S5-c1 and S5-c2 LANDED + lead graphical gates PROVISIONAL PASS;
S5-c3 implemented in scratch, retail review 1 FAIL, bounded fix round 1 in
progress under §18.
S5-c3 implemented in scratch; retail review passes 1 and 2 FAIL, and bounded
fix round 2 is contracted under §19.
**Branch:** `claude/campaign-w-retail-frame-walk`.
**Gate:** G4 remains unpassed. Nothing merges to `main` before G4.
@ -1335,3 +1335,57 @@ first. Only its PASS unlocks the sequential OpenAI architecture/production/
gate-honesty review over the entire S5-c3 stack. Each further code finding
receives its own bounded contract; S5-c3 stops before an eleventh review pass.
Documentation-only findings may be corrected directly by the lead.
## 19. S5-c3 fix round 2 — CalcDegLevel's four intermediate stores
OpenAI retail review pass 2/10 returned **FAIL** on one remaining MAJOR F1
defect. Fix round 1 otherwise passed: the FPS witness is `0x43A6AAAB`, the
14-FPS candidate is `0x3BB2BC0A`, the selector boundary stays at level zero,
the qword `0.01` edge and physical FPS slot direction pass, and AP-198 now
states the exact five-row residual while AD-78 remains 17/27. The reviewer
also re-confirmed the paired executable/PDB identity, clean allowed scope,
the exact installed census, and the official evidence identities.
### 19.1 R2-F1 — reproduce every executable-visible numerator store
The remaining defect is only
`BuildingDegradeController.CalculateCandidate`. Its combined
`float weightedNumerator` narrows once after all five terms. The paired
`Render::CalcDegLevel @0x0054CAF0` bytes instead store the evolving numerator
to binary32 four times: after w0 at `0x0054CC14`, after the negative w1 term
at `0x0054CC61`, after the zero-weight w2 term at `0x0054CCA6`, and after the
positive w3 term at `0x0054CCEB`. Retail then promotes that fourth stored
value, adds the w4 term wide at `0x0054CD3F`, divides wide, adds/clamps wide,
and narrows only at the final candidate store.
Implement that literal schedule allocation-free. Each of the first four
stages must be an explicit `float` store followed by promotion for the next
stage; do not algebraically combine, reassociate, or eliminate the `+0*w2`
store. Feed every term with the existing exact binary32 coefficient. Keep the
five membership weights, denominator, history/stability behavior, clamp,
exceptional-value behavior, and every other fix-round-1 change untouched.
Add an independent bit-exact assertion:
- `CalculateCandidate(16.25f, 0f)` must publish `0x3CA3D70A`; the current
combined store publishes `0x3CA3D70B`.
Sabotage by recombining the five terms into one store and record this witness
as the first failure, then restore it. Re-run the three §18 witnesses, qword
edge, FPS slot-direction pin, complete controller/selector lane, original
S5-c3 focused surface, allocation lane, official hermetic lane, and inclusive
InstalledDat lane with the same documented nonpassing identities.
### 19.2 Scope and review order
Production scope is exactly
`src/AcDream.App/Rendering/BuildingDegradeController.cs`; test scope is exactly
`tests/AcDream.App.Tests/Rendering/BuildingDegradeControllerTests.cs`. No
other production, test, register, packet, plan, UI, renderer, RHI, shader, DAT,
or lifecycle behavior changes. No graphical client and no commit; the lead
owns landing.
Return the exact two-file diff, `git diff --check`, Release solution build
0W/0E, every lane above, and the mutation's first failure. The same OpenAI
retail lens performs narrow review pass 3/10 over §19 first. Only its PASS
unlocks the sequential full architecture/production/gate-honesty review.