docs(overhaul): contract S4 c3b deletions
This commit is contained in:
parent
b1d33c9b88
commit
a0523e6057
3 changed files with 144 additions and 2 deletions
|
|
@ -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 <l> -Route <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
|
||||
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.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue