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 6a309122..c4cd50ff 100644 --- a/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md +++ b/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md @@ -679,6 +679,7 @@ Update immediately when a slice changes state. Chat is not the ledger. | S4-c2 owner repair | **STOPPED UNLANDED 2026-09-04** — owner-authorized implementation `a094bf2b7` is clean in `s4-c2-impl`; packet §15 is the review record | G3/G4 UNPASSED | The repaired renderer behavior passed the retail lens: exact whole-leaf pass membership, `0x08`/`0x09` CLIP, row-3 override, blend/reference/depth state, sentinel separation, detail state, rollback, allocation, AP-238/AP-240. The lens still returned FAIL: commit body omitted the required per-mutation first failures, packet mutation 5 names the wrong first assertion/address, and four source/test comments are stale. Sequential production lens therefore did not run. Correcting those items is a post-review fourth repair, which §14 does not authorize. Nothing landed or graphically gated; resume only by explicit owner process decision. | | S4-c2 attempts 1–5 | **ATTEMPT 1/5 CONSUMED; ATTEMPT 2/5 PASSED AND LANDED 2026-09-04** — reviewed implementation `daaeab0ba`; campaign stack `89f1e2676` → `9ccb61a8e` → `0aa166aa0` → `252886e84`; packet §17 | G3/G4 UNPASSED | Sequential retail/evidence then production/gate-honesty PASS. Fresh: Release 0W/0E; shader 32/32; affected 37/37; real allocation 2/2 at 0 B; production 239/239. Official no-retry hermetic 16,734/1: sole unchanged global `Console.Out` capture race, exact theory 2/2 isolated. InstalledDat 255/10 documented/1. Validation routes `selfgate-20260904-115818-s4c2-landed-route` and `selfgate-20260904-120025-s4c2-landed-g3b` PASS provisional. First soak failed on known #461/#462; retry and S4-c1 control both 9/9 graceful; stationary averages CPU p95 −0.01 ms, GPU p95 +0.16 ms, alloc p50 +1.2 KiB, update p95 −0.12 ms. Three attempts remain unused. | | S4-c3a | **LANDED 2026-09-04 after the owner-authorized §21 evidence exception.** Reviewed scratch stack `44e2bc227b` → `b6bf6c131` → `eea5793d2` → `14397b14c` → `359061b82` → `255194e90` → `9cfddf301`; campaign cherry-picks `a86ec73ec` → `8e0c6fb14` → `01674bcc7` → `8bd75ba31` → `b6b015604` → `316193043` → `67c76026e`. The earlier stop remains in history at `06b986622`. | G3/G4 UNPASSED | Final retail lens PASS; production behavior/lifecycle/allocation/scope clean. The narrow independent gate-honesty re-review PASS reproduced the exact first failure (AP-table-boundary `Assert.True`, `rowIndex=-1`, before `Assert.Single`), restored AP-241 byte-identically, and passed the pin 1/1. Fresh campaign: Release 0W/0E; focused class lane 96/96; no-surface 1/1; AP pin 1/1; real allocation 2/2 at 0 B; shader 32/32; `git diff --check` clean. No client launched. NEXT: write c3b's deletion-only contract from the landed code; G3 stays locked until c3b lands. | +| S4-c3b | **CONTRACT WRITTEN — packet §22; implementation pending.** Delete only the superseded classic-group `LocalSortCenters`/`CachedBatch.LocalSortCenter` sidecar and the dead alpha camera-parameter/digest chain. Preserve c3a's live per-cell/particle CYpt keys, opaque `SortDistance`, building/private/portal distances, two FIFO lists, all state/barriers, and AP/AD rows. Correct/pin the three `AlphaFlushCounts_*` reasons; verify the old bias/stencil/distance-sort paths stay absent. | G3/G4 UNPASSED | One Sonnet implementation, then sequential retail/deletion and production/gate-honesty lenses. Dual PASS lands the deletion-only chunk and unlocks G3. No client before landing. | | S5 | — | G4 | fill | --- diff --git a/docs/research/2026-09-01-overhaul/2026-09-04-s4-handoff.md b/docs/research/2026-09-01-overhaul/2026-09-04-s4-handoff.md index 043423a0..9d6d22cd 100644 --- a/docs/research/2026-09-01-overhaul/2026-09-04-s4-handoff.md +++ b/docs/research/2026-09-01-overhaul/2026-09-04-s4-handoff.md @@ -159,10 +159,12 @@ memory −17.7 MiB. G3/G4 remain unpassed. ## 4. After chunk 2 -1. **S4-c3a is LANDED; c3b is unlocked.** Packet §21 records the owner's +1. **S4-c3a is LANDED; c3b is contracted in packet §22.** Packet §21 records the owner's evidence-only exception, the exact mutation correction, narrow independent PASS, campaign commit mapping, and fresh build/focused gates. Write c3b's - deletion-only contract from the landed code. Do not start G3 until c3b lands. + deletion-only contract from the landed code. §22 deletes only dead grouped + sort-center/camera sidecars and preserves the live c3a keys. Do not start G3 + until c3b lands. 2. **G3 — S4's owner gate:** the lead runs `route-g3.txt` (13 matrix shots), `route-g3b.txt` (the capture poses; pose 15 now outdoors), `route-g3c.txt` (Nanto ×3, 300 s waits) with `pwsh -File tools/overhaul-selfgate/run-selfgate.ps1 -Label -Route ` diff --git a/docs/research/2026-09-01-overhaul/s4-depth-alpha-packet.md b/docs/research/2026-09-01-overhaul/s4-depth-alpha-packet.md index f188748c..fe073b6e 100644 --- a/docs/research/2026-09-01-overhaul/s4-depth-alpha-packet.md +++ b/docs/research/2026-09-01-overhaul/s4-depth-alpha-packet.md @@ -1851,3 +1851,142 @@ allocation pins 2/2 at 0 B; shader/manifest/SPIR-V lane 32/32; `git diff --check` clean. The campaign `src`/`tests` tree is byte-identical to reviewed scratch commit `9cfddf301`. No graphical client was launched. c3b is now unlocked; G3 remains locked until the deletion-only c3b chunk lands. + +## 22. S4-c3b contract — delete the superseded alpha-order sidecars (lead, 2026-09-04) + +### 22.1 Retail and landed-code boundary + +This chunk changes no retail-visible renderer behavior. Named retail +`D3DPolyRender::AddMeshToAlphaList @0x0059C230` accepts mesh/subset/surface and +list-state flags but no camera or distance argument; it appends into one of two +fixed arrays. `FlushAlphaList @0x0059D2E0` replays those arrays by index. +Retail's only relevant distance step is earlier and per cell: +`CShadowPart::insertion_sort @0x006B5130..0x006B519D`, before the resulting +parts call `DrawMesh`. The paired bytes and the named pseudo-C agree on those +facts; §§17–21 contain the earlier byte/review record. + +Landed c3a now owns the needed key on +`WalkClassifiedBatch.LocalSortCenter`/`SortDistanceSq` and on the prepared +particle record before the two FIFO lists see it. A separate classic grouped +dispatcher sidecar survives only as dead storage and diagnostic hash input: +`CachedBatch.LocalSortCenter`, `InstanceGroup.LocalSortCenters`, and their +append/cache plumbing. Two additional tombstones pass a camera position into +`DeferTransparentGroups` and `BuildTransparentSubmissionDigest`, then discard +it. None feeds a draw, route, list choice, queue record, flush, or barrier. + +### 22.2 D1 — remove the dead grouped sort-center sidecar + +Delete `CachedBatch.LocalSortCenter` and +`InstanceGroup.LocalSortCenters`, including constructor arguments, cache-hit +delegate/plumbing, append parameters, per-frame clear/release calls, and the +unused field in `AddSubmissionInstance`'s diagnostic digest. The resulting +classic grouped path retains matrices, exact submission ordinal, clip slot, +lights, indoor/detail/opacity/selection state, and every material key. + +This deletion must not touch these live retail keys: + +- `ObjectRenderData.SortCenter`; +- `WalkClassifiedBatch.LocalSortCenter` and `SortDistanceSq`; +- `WalkStaticStreamPopulator`'s transformed authored-center calculation and + stable descending per-cell insertion sort; +- `ParticleRenderer`'s authored GfxObj sort center, prepared distance, and + object/particle merge; +- building-degrade `ViewerDistanceTo`, opaque `InstanceGroup.SortDistance`, + portal-flood distance, private-viewport sorting, or off-screen particle + ordering. + +The `CurrentRenderDispatcherSubmission` digest deliberately stops hashing the +deleted non-rendered sidecar. That is diagnostic cleanup, not a world-render +change; submission order and every rendered field remain hashed. + +### 22.3 D2 — remove the dead alpha camera-parameter chain + +Remove `cameraWorldPosition` from +`DeferTransparentGroups`, `BuildTransparentSubmissionDigest`, +`CreateDispatcherSubmission`, `ObserveCurrentDispatcherSubmission`, and +`ObserveClassifiedDispatcherSubmission`, plus all callers/tests. No +`_ = cameraWorldPosition` tombstone may remain. + +Keep the camera output from `BeginEntityDispatch`, the camera argument to +`PartitionInstanceGroups`, `InstanceGroup.SortDistance`, and +`CompareOpaqueSubmissionOrder`: that is the still-live opaque/private grouped +path and is outside the alpha deletion. + +### 22.4 D3 — truth cleanup and explicit non-changes + +The six `AlphaFlushCounts_*` rows remain evaluated KnownFailures. Their exact +three reasons are: (1) the replay world is content-empty; (2) AP-238 coalesces +EnvCell work to one `(cell,list)` token; (3) AP-239/AP-240 alter list +membership for the named ordinary-Wb cases. Remove any surviving broad +“per instance versus per subset” explanation; ordinary Wb and particle paths +otherwise append per real subset. The live `AlphaFlushSites_*` rows remain. + +Static deletion verification must find no executable `RetailAlphaOrdering`, +`FlushFartherThan`, alpha-submit `viewerDistance`, portal punch depth bias, +`#129` eye-span cap, or stencil-mark pass. Do not delete generic RHI stencil +support, change `PortalDepthMaskRenderer`, touch shaders/SPIR-V, or change +AD-119/AP-238/AP-239/AP-240/AP-241/AP-242/AP-243. The historical mutation +comments that quote the deleted old API may remain when clearly past tense. + +### 22.5 Required tests and mutation evidence + +Extend the existing production-facing tests, not a surrogate implementation: + +1. reflection/source shape proves `CachedBatch` and `InstanceGroup` have no + `LocalSortCenter(s)` sidecar while `WalkClassifiedBatch` still has + `LocalSortCenter` and `SortDistanceSq`; +2. reflection/source shape proves the five D2 methods have no dead camera + parameter and neither tombstone remains, while `PartitionInstanceGroups` + still accepts and uses its camera position for opaque `SortDistance`; +3. existing cache-hit composition, transparent submission-order digest, + group-clear, per-cell object order, particle merge, queue, allocation, and + shader/state pins remain green; +4. a source-truth pin keeps the three `AlphaFlushCounts_*` reasons and rejects + the false broad explanation; +5. a deletion pin rejects any production resurrection of + `RetailAlphaOrdering`, `FlushFartherThan`, or an alpha-submit + `viewerDistance`, without rejecting unrelated building/opaque/portal + distance owners. + +Every new pin gets a real sabotage. At minimum, record the actual first +failure after independently restoring: (a) `InstanceGroup.LocalSortCenters`; +(b) `CachedBatch.LocalSortCenter`; (c) the discarded camera parameter/tombstone +on `DeferTransparentGroups`; (d) the discarded camera parameter on the +transparent digest; (e) the false broad count explanation; and (f) one deleted +alpha-order symbol. Restore each mutation exactly before the clean return. + +### 22.6 Scope, gates, and review + +Allowed production files: +`src/AcDream.App/Rendering/Wb/CachedBatch.cs`, +`WbDrawDispatcher.cs`, and comment-only cleanup in +`WbDrawDispatcher.WalkClassify.cs`. Tests may change only +`tests/AcDream.App.Tests/Rendering/Wb/InstanceGroupClearTests.cs`, +`tests/AcDream.App.Tests/Rendering/Walk/WalkStaticStreamPopulatorTests.cs`, and +the directly affected existing rendering test file if compile fallout requires +it. Documentation is limited to this packet, +`docs/architecture/worldbuilder-inventory.md`, and +`docs/architecture/acdream-architecture.md`. No register edit is expected; if +source truth disproves that, stop and return the fact instead of silently +changing scope. + +Must not change queue/router/pipeline/list membership, capacity, flush/barrier, +particle preparation, per-cell sort/merge, package/content/RHI/shader state, +or graphical behavior. No client launch from the implementation/review +worktree. + +Automated return: `git diff --check`; Release solution 0W/0E; focused Wb +group/cache/digest + walk per-cell/order + queue/particle/router suite; both +real production 0-B pins; shader/manifest/SPIR-V 32/32; hermetic lane; and +InstalledDat with exactly the documented global set plus the six retained +`AlphaFlushCounts_*`, no new failure. The implementer commits one bounded +change on a clean worktree and returns exact files, counts, and mutation-first- +failure text. + +Sequential reviews: first, retail/deletion fidelity verifies the named decomp +and paired bytes, that only pre-append per-cell CYpt survives, and that every +live distance owner above was preserved. Second, production/gate honesty checks +call reachability, diagnostic-digest consequences, cache/reset/storage +lifecycle, allocation, allowed scope, every mutation claim, and all gate +counts. A failed lens gets one bounded fix contract; a third fix round stops +and is written up. Dual PASS lands c3b and unlocks G3.