docs(overhaul): S4 hand-off — landed state, the in-flight S4-c2 implementer, the #464 RenderDoc plan, the Holtburg doorway A/B, owner-owed items

Written for a fresh session on another account: read order, exact tips and
worktrees, what S1-S4-c1 landed with their proof, how to find the state of
the chunk 2 implementer dispatched this morning, the #464 attribution plan
(RenderDoc pixel history on the scripted artifact frame - the lead's own
job once ACE is up), the Holtburg doorway frame read, tooling gotchas, and a
paste-prompt.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-09-04 05:00:35 +02:00
parent 4c6fb8fa6e
commit 36fddf17ca
2 changed files with 380 additions and 1 deletions

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,379 @@
# Campaign OVERHAUL v2 — hand-off at S4 chunk 2 (2026-09-04 morning)
Written by the lead session that took over after the 2026-09-03 session ran
out of account credits. Everything below is on disk under the Windows user
`erikn`; a fresh Claude account on this machine can read all of it.
## 0. Read order for the new lead
1. `CLAUDE.md` in the worktree (project rules; the grep-named-decomp-first
workflow; no workarounds; every new pin needs a mutation check).
2. `docs/plans/2026-09-01-campaign-overhaul-world-solidity.md` — the plan.
§5 working model, §9 slices, §10 scene matrix, **§13 ledger = live state**
(the S3 and S4 rows are long; read their tails).
3. `claude-memory/project_overhaul_campaign.md` (junction of
`C:\Users\erikn\.claude\projects\C--Users-erikn-source-repos-acdream\memory\`)
— the campaign digest, "Current" heading; then `MEMORY.md` for the
feedback memories it links (`feedback_quote_decomp_predicates`,
`feedback_every_new_pin_must_be_shown_to_fail`,
`feedback_skip_ab_before_theorizing`, `feedback_agent_worktree_base`,
`feedback_soak_numbers_need_same_session_type`).
4. `docs/research/2026-09-01-overhaul/s4-depth-alpha-packet.md` — S4's
packet: §1§4 what remains of S4, **§8 = the S4-c2 contract**, §6/§7/§9 =
chunk 1's contract and its two fix rounds.
5. `docs/ISSUES.md`#464 (long; the whole investigation), #460#463,
#465#467.
6. `docs/research/2026-09-01-overhaul/s3-walk-ownership-map.md` — S3's
packet (chunk contracts, review rounds; §6b = the retail capture record).
7. `docs/research/2026-09-01-overhaul/oh-capture/README.md` — the six retail
capture poses and their logs (walk / parts / alphadepth / pmverts /
blockcheck).
8. The previous sessions' transcripts, if you need the reasoning behind a
decision (grep, never read whole):
`C:\Users\erikn\.claude\projects\C--Users-erikn-source-repos-acdream--claude-worktrees-peaceful-blackburn-5333f0\f3ae8d4c-4f29-4329-8629-7252bd2bf4c2.jsonl`
(2026-09-02 15:20 → 2026-09-04 04:29, the S1S4-c1 session) and this
session's under
`C:\Users\erikn\.claude\projects\C--Users-erikn-source-repos-acdream--claude-worktrees-eloquent-hugle-42119e\`.
## 1. Where the work lives
| Item | Value |
|---|---|
| Worktree | `C:\Users\erikn\source\repos\acdream\.claude\worktrees\peaceful-blackburn-5333f0` |
| Branch | `claude/campaign-w-retail-frame-walk`, tip `4c6fb8fa6` (docs) on `766f9e749` (code), clean |
| Base | `origin/main` `e102fb36` (2026-08-29); the branch carries all of Campaign FW + OVERHAUL, ~270 commits; **nothing merges to main before G4** |
| Dev pak | `%USERPROFILE%\Documents\Asheron's Call\acdream.pak`, bake recipe 8 (`acdream.recipe7.pak` kept beside it) |
| Release binary | `src\AcDream.App\bin\Release\net10.0\AcDream.App.exe` built at `766f9e749` |
| ACE | `127.0.0.1:9000`, `testaccount` / `testpassword`, character `+Acdream`. **Was NOT running at hand-over** (no UDP 9000 listener). Only the owner starts it. |
| Retail client for captures | `C:\Users\erikn\Downloads\acclient.exe` (2013 v11.4186, pairs with `refs/acclient.pdb`); the Turbine folder's exe is the 2015 build and does NOT pair |
Scratch worktrees (all detached; keep or remove as you like):
| Worktree | At | Purpose |
|---|---|---|
| `s4-c2-impl` | `766f9e749` | S4 chunk 2 implementer's worktree (see §3) |
| `s4-c1-impl` | `9ba8f013e` | chunk 1's rounds (landed; removable) |
| `s3-review-fix` | `6575cfcee` | pre-S4 A/B control build (route-g3b.txt copied in, dirty) |
| `s2-final-ab` | `78068b2c` | S2-final binary for same-session perf A/B soaks (keep) |
| `464-ab` | `0b9e9b64a` | env-gated draw-skip A/B build used to localize #464 |
| `mouselook-verb` | `c43fb4ace` | the `mouselook` automation verb (cherry-picked to the branch; removable) |
Binding rules the owner set (do not relax): never `git reset --hard`,
`git checkout --`, `git clean`, bare `git stash`; never kill a client the
owner started; never launch a client while one is running; never more than
five agents per step; a chunk needing a THIRD fix round stops and is written
up in the ledger; self-passed gates stay provisional until the owner looks;
every deviation gets a register row in the same commit.
## 2. What has landed (with the proof)
- **S1 Geometry — CLOSED, G1 owner-passed 2026-09-02.** Exact CellStruct side
and subset construction (`D3DPolyRender::ConstructMesh` @0x0059DFA0),
recipe 8, AP-234 retired.
- **S2 World graph — CLOSED, G2 owner-passed 2026-09-03.**
`ShadowObjectRegistry` is the ONLY render-membership owner (one flood per
registration feeds collision rows AND the retail render product); render-only
statics register from both publishers; particle emitters draw by their own
cell (`add_particle_shadow_to_cell` @0x00514a70) — that fixed the missing
portal-arrival haze.
- **S3 Walk — CLOSED 2026-09-03 (`ea76a3803`).** Chunk 2: the interior turn's
landscape flush / stamp advance / gated Z clear / exit seals run only under
`outside_view.view_count > 0`, the clear gated by retail's persistent
`portalsDrawnCount`. Chunk 3: terrain drawn per land cell in retail's
DrawBlock interleave (this removed the Holtburg house-through-hill
fragments by ORDER alone). Chunk 1: the print-only walk transcript
(`ACDREAM_DUMP_WALK_TRANSCRIPT=1`) + the offline eight-kind conformance gate
over the captures. Chunk 4 + hygiene chunk H: every acdream-only clip rule,
the per-view sky/weather loops, the scissor and terrain-clip stacks and the
six cathedral probes deleted. Slice review fix round: punch fans clipped by
their OWN view (slice/view alignment bug), the seal pin through the real
producer, dead per-cell clip machinery deleted. Owner's S3 double-check:
every pose PASS except the cathedral stairwell zoomed out (→ #464).
- **S4 chunk 1 — LANDED 2026-09-03 23:40** as `d1e3e64f6` + `5de42a12f` +
`323f5a334` (rounds 02 cherry-picked) + `766f9e749` (four comment
sentences corrected by the lead, code unchanged — the plan bars a third
implementer round; **the owner has not reviewed that correction yet**).
Content: retail's far-punch depth bits `0x3F7FFFEF` in `portal_depth.vert`
(ours was `0x3F7FFFFE`, 15 ULPs off); the ±12 local-input portal-polygon
reject with retail's REAL quantifier (reject only when EVERY vertex lies on
ONE plane among x=±12 / y=±12; bytes 0x59BCD60x59BD66; the lead's first
paraphrase inverted it — see `feedback_quote_decomp_predicates`); the seal
count-after-guard order; the AD-119 register row (ColorWrite off vs retail's
zero-alpha blend); and the automated **PM/PC depth-event transcript gate**
(`tests/AcDream.App.Tests/Rendering/Walk/WalkTraceConformanceTests.AlphaDepthTranscript.cs`
+ `WalkAlphaDepthTrace.cs`) replaying all SIX retail `*.alphadepth.log`
captures with `portalsDrawnCount` seeded from each fixture's first counter
(seeds 0/0/1/2/2/8) — 6/6 PASS. Round-2 lenses: retail PASS (byte evidence:
one increment site 0x59BD74, one reset site 0x5A489E, `forceClear` has no
writer), production PASS, gate-honesty FAIL on comment truth only. Landing
gates: Release 0 warnings; hermetic App lane 6,833/6,833; InstalledDat lane
249 pass / 4 known (#383 ×2, TowerAscent, #458) / 1 skip.
Retail axioms (owner-confirmed, never "fix"): the exterior slab through the
cathedral stair chamber (2013 + EoR clients show it); the zoomed-out FRONT
view from the stairwell showing the hall arches and sky; #458's doorway
far-block admission is a 0.5 % edge-plane precision boundary (AD-118).
## 3. In flight: S4 chunk 2 (the alpha lists)
**Contract:** packet §8, verbatim. One production behavior change: replace
the single distance-sorted `RetailAlphaQueue` with retail's two append-order
lists (CLIP and ALPHA, 3000 each; `D3DPolyRender::AddMeshToAlphaList`
@0x0059C230), route every delayed subset through ONE pure router implementing
the OH1 alpha spec's `DrawMesh` branch table (spec §4 rows 15; delay mask
`0x0E` @0x00820D88, `MultiPassAlpha` false @0x0081EF96, constructed subset
mask spec §2), flush at retail's four sites (`DrawBuilding` 0f = the existing
`AlphaBarrier`; `DrawBlock` 0.75 = a NEW leaf event at the sort-cell EXIT;
`PView::DrawCells` 0f = `LandscapeFlush`; `RenderNormalMode` 0f = pass end)
under `FlushAlphaList` @0x0059D2E0's threshold rule (quote the comparison
from the bytes), delete `FlushFartherThan` / `RetailAlphaOrdering.ComputeViewerDistance`
/ every viewer distance on the submit path, retire register row AP-34 in the
same commit, capacity overflow DROPS the subset. Proof = extend the transcript
gate from PM/PC to AM/FL over all six captures (per flush: site, threshold,
drained count PER LIST).
**Dispatch state:** this session dispatched one Sonnet implementer (plain
Agent tool, not the Workflow tool) at ~08:35 local on 2026-09-04 into
`s4-c2-impl` (detached at `766f9e749`). It commits ONCE on top of that HEAD
when done. **To find its state:**
```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
```
- A commit above `766f9e749` → the implementer finished. Its report is lost
with the session; reconstruct it from the commit body (it was told to paste
every mutation-check failing assertion and every gate's real output line
there). Proceed to the review round below.
- No commit, dirty tree → it was cut off mid-way. Read the diff; either
finish it yourself against §8 or discard the worktree's changes (it is a
disposable detached worktree; `git worktree remove --force` + re-add) and
re-dispatch from §8. Do not stash.
- No commit, clean tree → it never started editing; re-dispatch.
The previous session's Workflow script for this chunk (prompt text identical
to §8, one implementer + three sequential lenses) is at
`C:\Users\erikn\.claude\projects\C--Users-erikn-source-repos-acdream--claude-worktrees-peaceful-blackburn-5333f0\f3ae8d4c-4f29-4329-8629-7252bd2bf4c2\workflows\scripts\s4-c2.js`
— reusable via `Workflow({scriptPath})` only if the owner has opted into
workflows in your session; otherwise use the Agent tool.
**Review round (the §5 model):** two lenses (retail-faithful: every
predicate quoted against `docs/research/named-retail/acclient_2013_pseudo_c.txt`
and the paired binary at raw = VA 0x400000; production/gate-honesty: no
distance left on the alpha path, AP-34 retired, no per-frame allocation, every
claimed gate reproduced read-only, at least three mutation checks re-performed,
no KnownFailure without a written divergence in packet §9). The LEAD verifies
every finding against the source before acting (`feedback_verify_subagent_claims_against_source`).
Lenses on `model:'opus'` were 529-overloaded for ~90 min on 2026-09-03; the
session model worked as a lens. Max two fix rounds, then the ledger.
**Landing:** cherry-pick the chunk commit(s) onto the campaign branch; Release
build; the six transcript Facts; hermetic lane
(`--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);
shader classes; the validation-on self-gate at the S3-closed poses diffed
against the S3-closed run; a stationary-phase soak A/B against the S4-c1
binary (removing the sort must not regress; judge `stationary` only — #463).
Then the §13 S4 row and the memory digest.
**After chunk 2:** S4-c3 = deletions (packet §4); then G3 (S4's owner gate:
the §10 scene matrix + the capture poses; the lead's G3 pre-run of 2026-09-03
is the baseline, 20/20 provisional, owner passed all but the cathedral); then
S5 (consumers, material/degrade exact ports, delete every inventoried
fallback/probe, closeout); then G4 and the merge to main.
## 4. Open investigation: #464 (the cathedral stairwell arch)
Read `docs/ISSUES.md` #464 in full first. Compressed state:
- **Pinned pose (owner, 2026-09-03 22:04):**
`/teleloc F4180113 39.502899 19.832422 180.976700 1 0 0 0`, default camera
distance, tilted slightly UP. Scripted reproduction:
`tools/overhaul-selfgate/route-464-tilt3.txt`, frame `01-neg160`
(eye z 182.61, pitch 4°) = ARTIFACT; frame `02-neg240` (eye z 182.32) =
clean. Run: `logs/selfgate-20260903-225434-464-tilt3`. Owner's acdream
screenshot and retail screenshot are in the issue's history; the retail
capture at this pose is `oh-capture/cathedral-stair-arch.{walk,alphadepth,pmverts}.log`
(retail shows a SOLID far face above the arch).
- **Symptom:** above and around the bottom arch the hall's interior (cut-off
columns, vault, an unsealed pink quad) draws where retail shows solid wall.
- **Proven EQUAL to retail at this pose:** camera cell and eye (four probe
rounds, `ACDREAM_PROBE_FLAP=1` + `ACDREAM_PROBE_FACILITY_STAIRS=1`: root
0x114, eye inside, sweep uncontacted); the read-only decomp investigation
(`464-camera-investigation.md`: eleven sweep/root differences, each
unreachable here); the admission set (retail's walk log = our cells/groups/
order exactly); the punch/seal EVENT stream (16 `PM mode=1` punches, 8
seals, counter 8 — the PM/PC gate PASSES at this pose); the punch VERTICES
(retail `pmverts` capture vs our dump: 16 attempts, vertex-identical; retail
rejects 12/16 by its ±12 rule, so do we); clip-plane overflow (none, 35
edges per view); the delayed-alpha draws (skipping ALL of them = identical
frame; the piers are opaque); the interior Z clear (skipping it = identical
frame); the degrade level (`GfxObjDegradeInfo::get_degrade` @0x0051e4b0
gives level 0 in both clients at 20 m).
- **Source localized 2026-09-03 23:19 by env-gated draw skips (worktree
`464-ab`, `AB_SKIP_BLDS=F418000A`):** skipping the HALL BUILDING'S SHELL
(model `0x01001FB3`, building `F418000A`) removes the hanging pieces and the
frame matches retail. Skipping cell f3180105, the far-block shells
f3170034/f317003d, cell f4180104, the tower shell 0x01001FB7, corridor cell
0x109, or ALL hall cells does NOT (with 0x109 or the hall skipped the pieces
persist over SKY). So the pieces are the hall shell's own geometry above/
beside the corridor that cell 0x109's vault (emitPos=True, z 187.2190.7)
should hide, and 0x109 contributes nothing to those pixels in our frame.
- **The remaining question, three candidates:** (1) 0x109's vault polygons
are never drawn at those pixels (the walk or the exit-view clip drops them
where retail keeps them); (2) they are drawn but the shell is nearer in
depth than believed; (3) the bound depth state at the shell draw is not the
declared Test/Write/Less (`EnvCellRenderer.Rhi.cs:113` vs
`WbDrawDispatcher.Rhi.cs:343`). Also unproven: that retail hides the pieces
at the SAME eye (the capture eye is 182.79 level; the artifact band is
~182.6 at 4° and gone 0.29 m lower).
- **Next step, the lead's own job, no owner needed once ACE is up: a
RenderDoc pixel history on the scripted artifact frame.** RenderDoc is NOT
installed (`renderdoccmd` absent). Plan: install RenderDoc (Vulkan capture
is supported); launch the client under `renderdoccmd capture` with the same
arguments the self-gate runner uses (`--session-config
tools/overhaul-selfgate/session.json`, `ACDREAM_SELFGATE_PASS=testpassword`,
`ACDREAM_UI_PROBE_SCRIPT=<route-464-tilt3.txt>`, artifact dir env); when the
route reaches frame `01-neg160` trigger a capture through RenderDoc's
target-control API (python `renderdoc` module: `CreateTargetControl`
`TriggerCapture(1)`; the route's `sleep` before the screenshot gives the
window) — or add a `sleep` and trigger by wall clock; then open the `.rdc`
with the python module (`OpenCaptureFile``OpenCapture`
`ReplayController.PixelHistory(texture, x, y, ...)`) at a pixel above the
arch (in the 1760×990 frame the pieces sit in the upper-middle band; pick
from `464-tilt3-01-neg160.png`). The history lists every draw touching the
pixel with its depth value and pass/fail. Candidate (1) shows as no draw
from 0x109 at all; (2) as a 0x109 draw that failed the depth test against
the shell's value; (3) as a shell draw with a depth state other than Less
or with writes off. Map draw IDs back to cells via the walk transcript
(`ACDREAM_DUMP_WALK_TRANSCRIPT=1`) or RenderDoc's debug markers if present.
Fallback without RenderDoc: a per-frame probe printing which of 0x109's
polygons `0x0`/`0x1` survive admission/clip and the depth the shell writes
(about a day). Owner alternative: a retail tilt sweep through the band at
the pinned pose.
- **Fix rule:** whatever the cause, the fix must follow a quoted retail rule
from the decomp, not a patch at the symptom; if anything deviates it gets a
register row. #464 blocks G3 (zoom is a named criterion of the cathedral
matrix row). It is scheduled AHEAD of S4-c2's landing gate but does not
block S4-c2's implementation. When fixed, promote the two #464 replays
(sweep stops on the pier; walk from root 0x114 floods 114/113/112) into
InstalledDat pins.
- **Related, not #464:** #467 (character runs in place at the corridor mouth;
movement/collision; outside the campaign); the "running down the stairs"
artifact is a transient of #464 (`logs/selfgate-20260903-211930-464-run`
frame 22).
- **Post-campaign:** #465 panel fill (paint unreachable interior portal
polygons opaque to beat retail's seam leak) — deferred until G4, retail
mode off, registered, A/B sweep acceptance. Never start it mid-campaign.
## 5. Open question: the Holtburg doorway frame (before trusting any self-gate there)
`tools/overhaul-selfgate/route-g3b.txt` frame 15 (`holtburg-doorway`,
`/teleloc A9B4013F 133.603592 13.391837 96.330009 …`): the landed build's runs
`logs/selfgate-20260903-234030-s4c1-landed-g3b` and `…-235044-s4c1-landed-g3b2`
both show an empty plane under fog instead of the village; the S3-state run
`logs/selfgate-20260903-165634-g3b` shows the village. Log read: the server
snaps y 13.39→17.39 in every run; the CLIENT then seated the player in the
house-interior cell `0xA9B4013F` at (134.07, 17.36) in the new runs versus the
outdoor cell `0xA9B40029` at (133.60, 17.39) in the old one (0.46 m apart on
the threshold) → the frame roots indoors with the eye outside. Read as a
placement boundary at the doorway, not a draw change (chunk 1 touched no
placement code). The pre-S4 control (`s3-review-fix/logs/selfgate-20260904-042324-pre-s4-g3b`,
build at `6575cfcee`) produced 0 frames: the login reveal at 0xA9B40176 never
went visible (#462 class) and the process exited 0xE0434352 after the graceful
logout (#461 class). **Owed:** with ACE up, run route-g3b on the landed tip
twice and on the pre-S4 build once
(`pwsh -File tools/overhaul-selfgate/run-selfgate.ps1 -Label <l> -Route ./tools/overhaul-selfgate/route-g3b.txt`
from the respective worktree; it refuses to start beside any AcDream.App;
runs are logged under `logs/selfgate-<stamp>-<label>/`, screenshots under
`artifacts/screenshots/`, and `client.log` carries the `live: teleport
materialized - snapped to <…> cell=…` line). If the cell flips between runs
at the same requested pose, file it as a placement issue (not the campaign's)
and change the route's pose 0.5 m outward so the gate frame is deterministic.
## 6. Owner-owed items (ask, do not wait silently)
1. Start ACE (nothing connected runs without it).
2. Review the four comment corrections in `766f9e749` (the lead's own edit
after the barred third round).
3. #464: either let the lead run RenderDoc (preferred) or do the retail tilt
sweep at the pinned pose.
4. Double-check the provisional G3 pre-run rows and the S3-closed self-gate
(all PNGs under `logs/selfgate-20260903-16*`, `…-234934-s4c1-landed-route2`,
`…-235044-s4c1-landed-g3b2`).
5. Matrix rows only the owner can run: the cathedral wall actor (two clients),
the exterior ramp (no coordinates recorded), Tusker, two ordinary dungeons.
6. Before G4: fixes for #460 (windowless shutdown hang after an aborted
script), #461 (crash on a late motion update after logout), #462
(intermittent interior login reveal stall), #463 (soak turn-sample
artifact). #466 (Ravenous Eater textures, `/create 35121`, owner says it is
ours) and #467 are tactical, outside the campaign.
## 7. Tooling and gotchas the previous sessions paid for
- **Self-gate kit** `tools/overhaul-selfgate/`: `run-selfgate.ps1` (pwsh 7
only), `session.json` (direct login, no select screen; `plugins: []`),
routes `route.txt` (4 poses incl. `04-holtburg-terrain-leak`),
`route-g3.txt` (13 matrix shots), `route-g3b.txt` (4 capture poses),
`route-g3c.txt` (Nanto ×3, 300 s wait), `route-464-*.txt`. Verbs: `command`,
`wait world-visible <ms>`, `sleep`, `screenshot <name> <ms>`, `input
press|down|up <InputAction>`, `mouselook <dx> <dy>` (negative dy = look up),
`close-client`. A probe `wait` that times out ABORTS the script so
`close-client` never runs (#460): give cold regions 300 s. Pixel diff:
`py scratchpad/selfgate-diff4.py <run> [<baseline>]` (PIL) — the sheet
approach; Facility left-wall mean RGB ≈ (79,20,25) = panels present.
- **Interactive owner launch:**
`$env:ACDREAM_SELFGATE_PASS="testpassword"; & ./src/AcDream.App/bin/Release/net10.0/AcDream.App.exe --session-config tools/overhaul-selfgate/session.json`
(add `ACDREAM_PROBE_FLAP=1` / `ACDREAM_PROBE_FACILITY_STAIRS=1` /
`ACDREAM_DUMP_WALK_TRANSCRIPT=1` as needed; the transcript log grows to
millions of lines in minutes).
- **Vulkan validation:** the client never enables layers; force
`VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation`,
`VK_LOADER_LAYERS_ENABLE=*validation*`,
`VK_LAYER_DEBUG_ACTION=VK_DBG_LAYER_ACTION_LOG_MSG`,
`VK_LAYER_REPORT_FLAGS=error,warn,perf`, `VK_LAYER_LOG_FILENAME=<file>`.
Zero errors at the S3 tip after #459; ten pre-existing
`WARNING-Shader-OutputNotConsumed` perf warnings remain.
- **Soak:** `tools/run-connected-r6-soak.ps1 -SkipBuild -PreparedAssetPath
"$env:USERPROFILE\Documents\Asheron's Call\acdream.pak"` (needs
`src/AcDream.Cli` built; refuses if the binary stamp ≠ checked-out commit —
do not commit between build and soak; `-Repository <worktree>` for A/B).
An RDP session flattens every destination to ~31 ms; compare only within
one session type (check `VideoControllers` in the report) and judge the
`stationary` phase only.
- **Retail capture kit** `tools/walk-oracle/oh/` (recon first; walk / parts /
alpha-depth / pmverts / blockcheck / blockset templates; `oh-run-capture.ps1
-Script <template> -Log <abs path> -Frames N`; pass `-Log` as
`"${L}${log}"`, a bash `\$log` collapses). cdb: `qd` only top-level after
fall-through; `poi()` inside `.if` is sign-extended → use `dwo()`; attach is
exclusive; the 5th `F` marker is the detach frame.
- **Agents:** provision worktrees yourself (`git worktree add --detach <path>
<sha>`); `isolation:'worktree'` has started from the WRONG base. Workflow
scripts must be LF-only with no unescaped backticks. Every new pin needs a
mutation check pasted into the commit body; IL-offset "order" pins are not
pins. A contract must QUOTE decomp predicates, never paraphrase (the ±12
inversion). Grep-verify every sentence of a contract before dispatch: three
of yesterday's review findings were the lead's own prescribed comments.
- **Bash on this box:** `py` not `python`; heredocs collapse `\\`; the
harness appends `&& pwd -P` to the last line (never end on a heredoc
terminator); `grep -c` with zero matches exits 1 and kills `&&` chains;
cp1252 console → `PYTHONIOENCODING=utf-8`.
- **ACE session:** a hard-killed client leaves the session logged in ~3 min
(relaunch fails with exit 29); graceful close clears in seconds.
- **Two App tests fail only in Debug** (#457, IL-offset pins); gates run
Release.
## 8. Paste-prompt for the new agent
```
Work in the worktree C:\Users\erikn\source\repos\acdream\.claude\worktrees\peaceful-blackburn-5333f0
(branch claude/campaign-w-retail-frame-walk). You are taking over Campaign OVERHAUL v2 mid-slice.
Read, in this order, and then tell me the summary you formed before acting:
1. docs/research/2026-09-01-overhaul/2026-09-04-s4-handoff.md (this hand-off; its §0 lists the rest of the read order).
2. CLAUDE.md, then docs/plans/2026-09-01-campaign-overhaul-world-solidity.md §13 (the S3 and S4 row tails).
3. claude-memory/project_overhaul_campaign.md "Current".
Then check the state of the S4 chunk 2 implementer per the hand-off's §3, report what landed / what is in flight / what you propose next, and continue under the campaign goal: drive the plan until the renderer is solid and G4 passes; never merge to main before G4; the §5 working model (you write each bounded chunk contract, Sonnet implements, you verify every claim against the named retail decomp and the paired binary, review lenses per round, you commit, ledger current; a chunk needing a third fix round stops and is written up); self-gate with the graphical client (Release, build green first, never beside a running client, close your own gracefully) and record PASS/FAIL with PNG paths — provisional until I look; stop only for a third fix round, a retail fact that cannot be recovered statically, or anything destructive or outside the plan; never reset/checkout--/clean/stash; never more than five agents in one step. ACE may be down — tell me if it is.
```