docs(overhaul): contract S4 c3b deletions

This commit is contained in:
Erik 2026-09-04 14:45:52 +02:00
parent b1d33c9b88
commit a0523e6057
3 changed files with 144 additions and 2 deletions

View file

@ -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 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 15 | **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-c2 attempts 15 | **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-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 | | S5 | — | G4 | fill |
--- ---

View file

@ -159,10 +159,12 @@ memory 17.7 MiB. G3/G4 remain unpassed.
## 4. After chunk 2 ## 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 evidence-only exception, the exact mutation correction, narrow independent
PASS, campaign commit mapping, and fresh build/focused gates. Write c3b's 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), 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` `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 <l> -Route <file>` (Nanto ×3, 300 s waits) with `pwsh -File tools/overhaul-selfgate/run-selfgate.ps1 -Label <l> -Route <file>`

View file

@ -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 --check` clean. The campaign `src`/`tests` tree is byte-identical to reviewed
scratch commit `9cfddf301`. No graphical client was launched. c3b is now scratch commit `9cfddf301`. No graphical client was launched. c3b is now
unlocked; G3 remains locked until the deletion-only c3b chunk lands. 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; §§1721 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.