docs(overhaul): hand-off at S4-c2 fix round 1 DONE (cc8e5677a in s4-c2-impl) — what is left on chunk 2, the review and landing procedure; ledger S4 row updated

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-09-04 07:33:34 +02:00
parent 2a35f0a4c3
commit cb71a92d51
2 changed files with 28 additions and 78 deletions

View file

@ -1,4 +1,4 @@
# Campaign OVERHAUL v2 — hand-off at S4 chunk 2, fix round 1 (2026-09-04 ~11:00 local)
# Campaign OVERHAUL v2 — hand-off at S4 chunk 2, fix round 1 DONE / round review NOT started (2026-09-04 ~12:20 local)
Clean state for a fresh session. Everything referenced is on disk under the
Windows user `erikn`; a different Claude account on this machine reads it all.
@ -42,7 +42,7 @@ see §3 for how to find out what the chunk-2 fixer left behind.
| Item | Value |
|---|---|
| Worktree | `C:\Users\erikn\source\repos\acdream\.claude\worktrees\peaceful-blackburn-5333f0` |
| Branch | `claude/campaign-w-retail-frame-walk`; docs tip `2001103ca`, **latest renderer code `766f9e749`** (S4 chunk 1); clean |
| Branch | `claude/campaign-w-retail-frame-walk`; docs tip = the commit carrying this file, **latest renderer code ON THE BRANCH `766f9e749`** (S4 chunk 1); clean. Chunk 2 code is in `s4-c2-impl` only (§3). |
| Base | `origin/main` `e102fb36` (2026-08-29); ~275 commits ahead; **nothing merges to main before G4** |
| Dev pak | `%USERPROFILE%\Documents\Asheron's Call\acdream.pak`, bake recipe 8 |
| Release binary | `src\AcDream.App\bin\Release\net10.0\AcDream.App.exe` built at `766f9e749` |
@ -53,7 +53,7 @@ Scratch worktrees (detached):
| Worktree | At | Purpose |
|---|---|---|
| `s4-c2-impl` | `048d5b12f` on `766f9e749` (+ the fixer's round-1 commit when it lands) | **S4 chunk 2 — the chunk commit and its fix round live HERE, not on the branch yet** |
| `s4-c2-impl` | `cc8e5677a` (fix round 1) on `048d5b12f` (the chunk) on `766f9e749`; clean | **S4 chunk 2 lives HERE, not on the branch yet** — review the round, then land (§3) |
| `s4-c1-impl` | `9ba8f013e` | S4-c1 baseline BINARY, built (Release App + Cli) for the landing soak A/B; keep until S4-c2 lands |
| `s2-final-ab` | `78068b2c` | S2-final binary for same-session perf A/B (keep) |
| `s3-review-fix` | `6575cfcee` | pre-S4 control build; stalls at the foundry login (#462) — not usable as a control |
@ -95,86 +95,36 @@ every deviation gets a register row in the same commit.
chamber; the zoomed-out FRONT view from the stairwell (hall arches + sky);
#458's far-block admission (AD-118, 0.5 % edge-plane precision).
## 3. In flight: S4 chunk 2 — fix round 1
## 3. S4 chunk 2 — where it stands (fix round 1 DONE, review of the round NOT started)
**What landed in the worktree:** `048d5b12f` in `s4-c2-impl` (Sonnet, 2026-09-04
09:35): `RetailAlphaQueue` = retail's two FIFO lists (CLIP/ALPHA, 3000 each,
capacity drop), `RetailAlphaMeshRouter` (DrawMesh rows 15 + ConstructMesh
mask), the new `SortCellExit` walk event for DrawBlock's 0.75 valve, the four
flush sites, `FlushFartherThan`/every viewer distance deleted. Hermetic
6,855/6,855; shaders 32/32.
**Two commits sit in worktree `s4-c2-impl`, NOT yet on the campaign branch:**
**Review round 1 (both lenses FAIL; lead verified every finding at the source;
the core port is exact at the bytes):**
- BLOCKING: the particle site asserts DrawMesh rows 1/2/4/5 "unreachable" and
THROWS; `ParticleRenderer.TryAppendMeshDraws` appends Opaque-classified mesh
batches → mask 0x00 → row 5 → exception in the render loop.
- MAJOR: the CLIP list is structurally EMPTY for ordinary content (ClipMap
kinds are `WbDrawDispatcher.IsOpaque` → alpha-to-coverage, never routed;
4,183 of 10,556 captured AM entries are CLIP) — no register row;
contract C3's detail input hardcoded false while building shells reach the
alpha path and the DRAIN applies the detail pass retail's replay never has
(`DrawBuilding` @0x0059f2a0 installs `building_detail_surface` @0x0059f2eb
before its flush → row 1 immediate); C4 (EnvCell detail-off append) skipped
though `EnvCellRenderer.RenderTransparentOrdered` makes it bounded;
`IsFirstForList` = first-since-drain where retail's `new` is per-DrawMesh
invocation (`0059d4cc/0059d4d0`); the AM/FL gate is all-KnownFailure and the
counts are unmatchable by construction; a THIRD `FlushLandscapeAlpha` caller
(`RetailPViewRenderer.cs:485`, the #132 outdoor-root drain) is mislabelled as
retail's DrawCells flush, which never runs on an outdoor root; AP-236 REUSES
an id filed and retired on main by #132.
- MINOR: AP-237's cloud example is disproven (Type 0x10114 has alpha-family
bits → mask 0x02 both sides); `DrawBlock` cited at its loop head
0x005a18d0 (function is 0x005a17c0); "return site" = the call address;
scratch-retention argument; stale comments; §10 transcription off by one.
- Everything is itemized as **packet §11 (M1M8) + §11.1 (A1A8)** on the
campaign branch (`3813f0bbf`, `3e76f71d5`).
| Commit | What | State |
|---|---|---|
| `048d5b12f` | the chunk: two FIFO lists, `RetailAlphaMeshRouter`, the `SortCellExit` valve event, four flush sites, distance sort deleted | review round 1: both lenses FAIL (recorded in the ledger and packet §11) |
| `cc8e5677a` | **fix round 1 (Sonnet, 2026-09-04 ~11:0012:10)** — every item of packet §11 M1M8 and §11.1 A1A8 | implementer reports all items landed; lead verified the commit shape (27 files, +1,248/352), the register ids, the twelve split Facts and the A1 deletion; **the round's two review lenses have NOT run** |
**Dispatched:** one Sonnet implementer (plain Agent tool) at ~10:55 local into
`s4-c2-impl`, told to commit ONCE on top of `048d5b12f` with every mutation
check's actual failing assertion and every gate's real output line in the
commit body. **It runs inside the 2026-09-04 lead session; a session switch
kills it.** Find its state:
What `cc8e5677a` did, per the implementer's report (verify each claim against the source before trusting it — `feedback_verify_subagent_claims_against_source`):
```bash
git -C C:/Users/erikn/source/repos/acdream/.claude/worktrees/s4-c2-impl log --oneline -3
git -C C:/Users/erikn/source/repos/acdream/.claude/worktrees/s4-c2-impl status --short
```
- **M1** the two router throws deleted; new `ParticleRenderer.RouteParticleSubmission` (testable) and `DrawImmediateParticleSubmissionRhi` for rows 1/5; particle `materialHasAlpha` from retail's `CMaterial::CheckAlphaValues` @0x005396a0 (has_alpha = 0 only when all four channel alphas are 1.0; `CMaterial::SetTranslucencySimple` @0x005396f0 sets them to `1 translucency`), i.e. "current alpha ≠ 1.0" from `ColorArgb`'s top byte. **Verify this quote and the reachability path `Particle::Update` @0x0051c290`CPhysicsPart::SetTranslucency` yourself; it is the round's one new retail rule.**
- **M3** detail-surface router input at both Wb sites; new `DrawImmediateAlphaInstance(Rhi)` draws a translucent building-shell instance at its own turn when building detail is on; the drain's detail branch deleted; new register row **AD-120** (the "in place → at the entity's stream mark" adaptation).
- **M6** `RetailPViewPassExecutor.SubmitOrDrawTransparentCellShell` + `EnvCellAlphaDrawSource` (one token per cell, replayed through `RenderTransparentOrdered`); `EnvCellRenderer.TransparentDetailEnabled`.
- **M4** `RetailAlphaEntry.IsFirstForList` deleted with its wrong pin.
- **M5** the six Facts split into `AlphaFlushSites_*` (live, but the class carries `Lane=InstalledDat`, so they pass in the InstalledDat lane, never hermetically) and `AlphaFlushCounts_*` (KnownFailure, three-part truthful reason); new live valve pin `WalkFrameDriverTests.SortCellExit_ValveDrainsThroughReplayAtTheExactBoundary`.
- **M2 / A2 / M8c** register: `~~AP-34~~` restored struck-through; AP-236→**AP-238**, AP-237→**AP-239**; new **AP-240** (the structurally empty CLIP list: clip-mapped subsets draw immediately alpha-to-coverage); AD count 92, AP count corrected.
- **M7** the cloud citation disproven; a real Translucent+ClipMap-without-alpha-family instance found by a live DAT scan: surface `0x08000015` on GfxObj `0x010001EC` (6,152 surfaces scanned, 27 matches).
- **A1** the mislabelled outdoor-root `FlushLandscapeAlpha()` at `RetailPViewRenderer.cs:485` deleted (the pass-end `RenderNormalMode` flush in `RetailAlphaQueue.EndFrame` is retail's outdoor drain); pin in `RetailPViewRendererTests.cs`.
- **A4** `ApplyScratchRetention` source-count argument fixed with a pin; **M8a/b/d, A3, A5A7** citations/comments/§10 fixed; `worldbuilder-inventory.md:420` updated.
- Gates the implementer reports: Release 0 warnings; hermetic 6,864/6,864; InstalledDat 255 pass / 10 fail (4 pre-existing + 6 `AlphaFlushCounts_*`) / 1 skip; shaders 32/32; the six focused classes 120/120. Mutation checks with failing text are in the commit body (`git -C <s4-c2-impl> log -1 --format=%B`).
- **Lead reproduction on `cc8e5677a` (2026-09-04 12:15):** `dotnet build AcDream.slnx -c Release` → 0 Error(s); hermetic App lane → `Passed! - Failed: 0, Passed: 6864, Skipped: 0, Total: 6864`. The InstalledDat lane, the shader classes and the focused classes were NOT re-run by the lead — the review lens does that.
- A commit above `048d5b12f` → round 1 finished; its report is the commit
body. Run the two review lenses (below), verify their findings yourself.
- No commit, dirty tree → cut off mid-round. Read the diff against §11/§11.1;
finish it yourself or discard the worktree's changes (it is disposable:
`git worktree remove --force` + re-add detached at `048d5b12f`) and
re-dispatch §11 + §11.1 from scratch. Never stash.
- No commit, clean tree → never started; re-dispatch.
**What is left on chunk 2, in order:**
**Round-1 review:** two lenses (Opus or the session model; the Opus tier was
529-overloaded for ~90 min on 2026-09-03): retail-faithful, narrowed to the
decomp claims of M1/M3/M6 and the router inputs; production/gate-honesty (the
six live `AlphaFlushSites_*` Facts, the new valve pin, the immediate-draw
paths' allocation, the register). Lead verifies every finding against the
source (`feedback_verify_subagent_claims_against_source`). PASS → land. FAIL →
fix round 2 (the LAST) → PASS → land; a third round STOPS the chunk and is
written up in the ledger.
1. **Review round 1 of `cc8e5677a`** — two lenses (Opus, or the session model if Opus 529s): (a) retail-faithful, narrowed to M1's `CheckAlphaValues`/`SetTranslucencySimple` rule and reachability, M3's row-1 immediate path vs `DrawBuilding` @0x0059f2a0 (`curr_detail_surface` set @0x0059f2eb, cleared @0x0059f345; replay `detailEnabled = 0`), M6's `DrawEnvCell` @0x0059f170 detail rule, the router inputs at all three sites, A1's claim that nothing opaque draws between the deleted drain and the pass-end flush; (b) production/gate-honesty: reproduce every gate line, re-perform ≥3 mutation checks, check every sentence of the commit body and packet §10 against the tests, the immediate-draw paths' allocation, the register rows AP-238/239/240 + AD-120 for accuracy (AP-240's consequence text; AD-120's adaptation is honest), no file outside the allowed set. **The lead verifies every finding at the source before acting.** The prompts for both lenses are in this session's transcript (search `LENS = RETAIL FAITHFULNESS` and `LENS = PRODUCTION SAFETY + GATE HONESTY`) — reuse them narrowed to the round-1 diff.
2. PASS → **land** (procedure below). FAIL → **fix round 2 = the LAST** (write it as packet §12; a third round STOPS the chunk and is written up in the ledger).
3. **Landing:** cherry-pick `048d5b12f` then `cc8e5677a` onto the campaign branch — the packet conflicts (the worktree's copy has §10 + a "§11 result" paragraph under §10; the campaign's copy has §11/§11.1); resolve by keeping §10 (with its result paragraph) BEFORE §11. Then: Release build 0 warnings; hermetic lane; InstalledDat lane (expect the four known failures + the six `AlphaFlushCounts_*`, nothing else; the six `AlphaFlushSites_*` must PASS there); shader classes; the validation-on self-gate (`route.txt` four poses, then `route-g3b.txt`; one run per background command) diffed against `logs/selfgate-20260903-234934-s4c1-landed-route2` and `logs/selfgate-20260904-062148-g3b-tip-a2` (Facility left-wall mean RGB ≈ (79,20,25) = panels present); a STATIONARY-phase soak A/B against the S4-c1 binary already built in `s4-c1-impl` (`tools/run-connected-r6-soak.ps1 -SkipBuild -PreparedAssetPath "$env:USERPROFILE\Documents\Asheron's Call\acdream.pak"` on the tip, then `-Repository <s4-c1-impl> -SkipBuild`; same Windows session type; judge `stationary` only — #463). Then the §13 S4 row, the digest, and remove `s4-c2-impl`/`s4-c1-impl`.
**Landing procedure:** cherry-pick `048d5b12f` and the round-1 commit onto the
campaign branch (the packet will conflict on §10 vs §11 — both are appends;
keep both, §10 before §11); Release build 0 warnings; hermetic lane
(`dotnet test tests/AcDream.App.Tests/AcDream.App.Tests.csproj -c Release --no-build --filter "Lane!=InstalledDat&Lane!=PreparedPackage&Lane!=Live&Lane!=Manual&Lane!=Timing&Lane!=Windows&Lane!=Linux&Lane!=SystemFont&Purpose!=Diagnostic&Status!=KnownFailure"`);
InstalledDat lane (`ACDREAM_RUN_INSTALLED_DAT_TESTS=1`,
`ACDREAM_DAT_DIR="C:/Users/erikn/Documents/Asheron's Call"`,
`--filter "Lane=InstalledDat"`; expect exactly the four known failures plus
the six `AlphaFlushCounts_*` KnownFailure Facts); shader classes; the
validation-on self-gate (`route.txt` four poses + `route-g3b.txt`) diffed
against the S3-closed run `logs/selfgate-20260903-16*` /
`…-234934-s4c1-landed-route2` with `py scratchpad/selfgate-diff4.py <run> <baseline>`
(PIL; the script lives in the OLD session's scratchpad — re-create it if
missing: per-frame mean-abs-diff sheet); a STATIONARY-phase soak A/B against
the S4-c1 binary in `s4-c1-impl`
(`tools/run-connected-r6-soak.ps1 -SkipBuild -PreparedAssetPath "$env:USERPROFILE\Documents\Asheron's Call\acdream.pak"`,
then `-Repository <s4-c1-impl> -SkipBuild`; same Windows session type; judge
`stationary` only — #463). Then the §13 S4 row, the register, and the digest.
**Known residuals that survive chunk 2 (registered, not bugs to chase now):** AP-240 (the CLIP list is fed only by clip-mapped mesh particles — every other clip-mapped subset is alpha-to-coverage opaque), AP-238 (EnvCell one-token-per-cell granularity), AP-239 (the Translucent+ClipMap mask collapse; one real instance), AD-120 (immediate translucent draw at the entity's stream mark rather than in place), AD-119 (portal-depth ColorWrite off vs zero-alpha blend). The `AlphaFlushCounts_*` Facts stay KnownFailure by construction (harness content + per-instance vs per-subset + AP-240); a content-bearing gate would be S5 evidence work only if a slice needs it.
## 4. After chunk 2
@ -261,7 +211,7 @@ Read, in this order, and then tell me the summary you formed before acting:
2. CLAUDE.md, then docs/plans/2026-09-01-campaign-overhaul-world-solidity.md §13 (the S4 row tail).
3. claude-memory/project_overhaul_campaign.md "Current".
4. docs/research/2026-09-01-overhaul/s4-depth-alpha-packet.md §8, §11, §11.1.
Then check the S4 chunk 2 fixer's state per the hand-off's §3 and report: what landed, what is
Then confirm the two chunk-2 commits in s4-c2-impl per the hand-off's §3 and report: what landed, what is
in flight, what you propose next. Continue under the campaign goal: drive the plan until the
renderer is solid and G4 passes; never merge to main before G4; the §5 model (you write each
bounded chunk contract, Sonnet implements, you verify every claim against the named retail decomp