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 d369a4f1..c0ac1afc 100644 --- a/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md +++ b/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md @@ -687,8 +687,8 @@ Update immediately when a slice changes state. Chat is not the ledger. | S4-c3b | **LANDED 2026-09-04** — implementation `26e97ba41`, provenance contract `5110bf676`, packet-only correction `3f2f00c9f`; packet §22–§25. Dead classic-group `LocalSortCenters`/`CachedBatch.LocalSortCenter` storage and the alpha camera-parameter/digest chain are deleted. Live per-cell/particle CYpt keys, opaque `SortDistance`, building/private/portal distances, two FIFO lists, all state/barriers, and AP/AD rows remain. | **G3 LEAD SELF-GATE PROVISIONAL PASS; owner acceptance/owner-only rows pending. G4 UNPASSED.** | Retail/deletion lens PASS. Production lens found no code defect and one artifact-provenance omission; packet-only fix round 1 passed its narrow re-review. Fresh campaign: Release 0W/0E; App 132/132; Core 29/29; allocation 2/2 at 0 B; shader 32/32. G3: route 1 13/13, route 2 4/4, route 3 retry 3/3, all exit 0/graceful. The first route-3 attempt stopped before Nanto on registered #462. Exact PNG paths: packet §25. | | S5-c1 | **LANDED 2026-09-04 after the owner-authorized documentation/evidence exception.** Mandatory stop `efb075619` remains in history; final campaign tip `1718832e2`, reviewed scratch tip `b2d56f9e3`. | G4 UNPASSED | Narrow exception re-review PASS. Clean evidence: hermetic 16,760/16,760; inclusive InstalledDat 385 pass / the same documented 10 fail / 1 skip; both exact `d6592d3ac`, `WorktreeDirty=false`, manifests fully verified. Fresh campaign Release 0W/0E, Core 111/111, visibility 38/38, allocation/AP-116 4/4. Lead graphical portal-haze gate PROVISIONAL PASS, exit 0/graceful, 10 PNGs under `logs/selfgate-20260904-171137-s5c1-particle-visibility`; owner inspection pending. | | S5-c2 | **LANDED + REVIEW-CLOSED 2026-09-04; lead graphical gate PROVISIONAL PASS.** Campaign stack `a4de2efc4` -> `048027e71` -> `ef819eedf`; reviewed scratch tip `521f5edda54`; packet §§14–16. The opt-in IA-24 path borrows the exact prior-completed landscape set/flag, selects world casters through S2 CELLARRAY or building `EffectCellId`, selects authored terrain slots, and projects exact active instance runs without rebuilding retained topology. Pack-off remains unchanged. | G4 UNPASSED | Retail/deviation PASS; production's documentation-only fix round 1 narrowly re-reviewed PASS. Fresh campaign Release 0W/0E and affected 137/137. Official evidence: hermetic 16,768/16,768; broader InstalledDat 468 pass / 10 fail / 1 skip; canonical 385 pass / the same 10 fail / 1 skip; manifests and nonpassing identities exact. Valid lead gate `logs/selfgate-20260904-183925-s5c2-candidate-shadow-ab`: seven PNGs, exit 0, graceful logout, no fatal match, no client left. Exact parent `5c106bcdf` A/B at `s5-c2-ab-parent/logs/selfgate-20260904-183815-s5c2-parent-shadow-ab` proves the gate-visible dark lighting switch predates c2; #469/IA-24 carry it for resolution or explicit owner acceptance before G4. Owner PNG inspection pending. | -| S5-c3 | **CONTRACTED 2026-09-04; implementation pending.** Packet §17 is binding. | G4 UNPASSED | Exact building part-0 degrade selection, selected-Gfx complete-body gate, selected shell submission, shared retail FPS/automatic-degrade owner, and the three live Config preferences. Per the owner's 2026-09-04 override, one OpenAI implementation agent works in the detached scratch worktree; lead verification and both sequential OpenAI reviews precede landing. | -| S5 | IN FLIGHT — c1 and c2 landed/review-closed/provisionally self-gated; c3 contracted; c4–c5, #469 disposition, closeout, and G4 remain | G4 | Packet §§7 and 12–17 are binding; S5-c3 implementation is next; never merge main before G4. | +| S5-c3 | **IMPLEMENTED IN SCRATCH; RETAIL REVIEW FAIL; FIX ROUND 1 CONTRACTED 2026-09-04.** Packet §17 is the base contract; §18 is the bounded repair. | G4 UNPASSED | The typed building selection, exact complete-body gate/order, Setup part zero, selected shell/residency, shared owner, Config wiring, census, scope, and mutations passed lead verification plus the first OpenAI retail lens. Review found one MAJOR exact-port defect: FPS, CalcDegLevel, and selector thresholds round x87 intermediates to binary32 too early (three concrete one-bit/boundary witnesses), plus one MINOR stale AP-198 claim that the already-live Landscape Draw Distance remains dead. OpenAI fix round 1 repairs only those arithmetic store boundaries and register truth; narrow retail re-review then the full sequential production review precede landing. | +| S5 | IN FLIGHT — c1 and c2 landed/review-closed/provisionally self-gated; c3 fix round 1 contracted; c4–c5, #469 disposition, closeout, and G4 remain | G4 | Packet §§7 and 12–18 are binding; S5-c3's bounded review repair is next; never merge main before G4. | --- 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 fd32bcad..42fc4c0b 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 @@ -1234,3 +1234,99 @@ lifecycle identity, allocation, allowed scope, build/lane provenance, and at least three reproduced sabotage claims. Reviews run sequentially. A failed lens gets one bounded fix contract; a chunk needing a third fix round stops and is written up. + +## 18. S5-c3 fix round 1 — x87 store schedule and register truth + +The first sequential OpenAI retail/deviation review returned **FAIL** on the +uncommitted scratch implementation: one MAJOR exact-arithmetic defect and one +MINOR pre-existing register-truth defect. Everything else in §17 passed. This +is the first bounded fix round; it does not reopen selection ownership, +building traversal, residency, Config wiring, or any S5-c1/S5-c2 behavior. + +The reviewer independently re-confirmed the executable SHA, CodeView GUID/age, +all seven §17.1 byte-range hashes, the named-decomp semantics, the complete +§17.2 census, the complete-body order, Setup part zero, selected-shell identity +and surface preservation, no base fallback, scope, lifecycle wiring, the other +register edits, and every required mutation. Its clean focused return was +64/64, and the scratch state was restored exactly. + +### 18.1 F1 — preserve retail's x87/store boundaries + +The candidate currently rounds arithmetic too early in three places. Repair +only these exact boundaries, allocation-free: + +1. `SceneTool::UpdateFPSCounter @0x0043E510` sums the 20 stored single-precision + frame durations in x87 precision and divides before narrowing once at the + published FPS store. Accumulating into a C# `float` is not equivalent. Use + a wider accumulator that exactly sums the 20 binary32 inputs, perform the + division wide, then narrow once to `float`. Restore retail's physical + history direction: shift old slots `0..18` to `1..19`, then store the + just-finished binary32 duration at slot 0. The prior-20-before-insert order + remains unchanged. +2. `Render::CalcDegLevel @0x0054CAF0` evaluates its five membership weights, + weighted numerator/denominator, addition, and clamp in x87 precision except + at the explicit binary32 stores visible in the named function. Re-express + the pure calculation with wide intermediates fed by the exact binary32 + constants (`-0.150000006f`, `-0.02f`, `0.01f`, `0.1f`) and narrow only at + retail's candidate store. The stability comparison promotes each binary32 + history slot and candidate and compares against the executable's qword + `0.01`, not `0.01f`. Keep the existing shift-before-evaluate and final + current-multiplier store order. +3. `GfxObjDegradeInfo::get_degrade @0x0051E4B0` stores the effective distance + after `abs(distance)-DegradeDistance`, but evaluates each positive/negative + threshold in x87 precision and compares the stored binary32 effective value + against that wide threshold. Do not round the threshold to `float` before + the strict comparison. Disable/force precedence, strict `<`, equality + advance, final slot, modes, and NaN/infinity behavior stay unchanged. + +Add bit-exact independent assertions for all three proven witnesses: + +- FPS history `[0.001f, 0.005f] × 10` publishes bits `0x43A6AAAB` + (`333.333344f`), not the candidate's `0x43A6AAAC`; +- `CalculateCandidate(14f, 0f)` publishes bits `0x3BB2BC0A`, not + `0x3BB2BC0B`; +- with ideal/max `24f/48f`, multiplier `0.0020020019728690386f`, and + effective distance `24.04804801940918f` (`0x41C06267`), retail's wide + threshold remains strictly greater and selects the first level. + +Also pin the qword stability edge directly and the slot direction without +reflection-only self-comparison. Each of these changes needs a named mutation +and actual first failing assertion: restore float FPS accumulation; restore +float CalcDeg intermediates or `0.01f`; restore a rounded selector threshold; +reverse the FPS slot direction. Restore every mutation before return. + +### 18.2 F2 — correct AP-198's already-live landscape radius + +`AP-198` is stale independently of this chunk: `Render_LandscapeDrawDistance` +already feeds `RuntimeSettingsController`'s live far radius, and the Config +controller maps its persisted default 8 to the selected Medium entry. Remove +that control from AP-198, change every six-row statement to five, and delete +the obsolete no-highlight sub-note. Keep the actual Config dim set at 17/27; +S5-c3 still changes only Automatic Degrades, Graphics Performance, and Degrade +Distance from store-only to live. No row is added or retired, so active table +counts do not change. Add or update a truth pin that fails on the old six-row +wording or the obsolete no-highlight statement. + +### 18.3 Scope, return, and review order + +Production edits are limited to `BuildingDegradeController.cs` and +`Walk/WalkBuilding.cs`. Test edits are limited to their existing focused test +files plus the existing Config/register truth pin if required. The only +documentation edit in the implementation remains +`docs/architecture/retail-divergence-register.md`. Do not change controller +ownership/tick placement, selection/result shapes, building factory or +transforms, portal walk/order, shell classification, residency, materials, +surface overrides, UI wiring, RHI/shaders, DAT readers, or any other register +row. No graphical client. + +Return the exact changed-file list; `git diff --check`; Release solution build +0W/0E; the bit-exact math/selector/controller and Config/register focused +lanes; the original S5-c3 focused lane; official hermetic lane; inclusive +InstalledDat lane with exactly the documented global identities; and the new +mutation ledger. Do not commit—the lead owns the reviewed landing commit under +the owner's OpenAI-only process override. + +The same OpenAI retail lens narrowly re-reviews F1/F2 and regression evidence +first. Only its PASS unlocks the sequential OpenAI architecture/production/ +gate-honesty review over the entire S5-c3 stack. A failed re-review receives +the one remaining bounded fix round; another failure after that stops S5-c3.