diff --git a/docs/research/2026-08-14-campaign-la-handoff.md b/docs/research/2026-08-14-campaign-la-handoff.md index cd7dd77c..8dcc588b 100644 --- a/docs/research/2026-08-14-campaign-la-handoff.md +++ b/docs/research/2026-08-14-campaign-la-handoff.md @@ -5,9 +5,17 @@ ledger), then `docs/superpowers/specs/2026-08-14-launcher-campaign-design.md` (the approved design).** Memory crib: `claude-memory/project_launcher_direction.md`. -Branch: `claude/acdream-launcher-credentials-4d2f7c` -Worktree: `.claude/worktrees/acdream-launcher-credentials-4d2f7c` -HEAD at handoff: `498f1c11` +## Worktrees (full paths — work in the campaign worktree, NOT the repo root) + +| Purpose | Full path | Branch | HEAD at handoff | +|---|---|---|---| +| **Campaign branch — START HERE** | `C:\Users\erikn\source\repos\acdream\.claude\worktrees\acdream-launcher-credentials-4d2f7c` | `claude/acdream-launcher-credentials-4d2f7c` | `75a6724d` | +| LA2 slice | `C:\Users\erikn\source\repos\acdream\.claude\worktrees\acdream-la2` | `campaign-la2` | `c6019424` | +| LA3 slice | `C:\Users\erikn\source\repos\acdream\.claude\worktrees\acdream-la3` | `campaign-la3` | `26feba81` | +| LA7a slice (merged — removable) | `C:\Users\erikn\source\repos\acdream\.claude\worktrees\acdream-la7a` | `campaign-la7a` | `0c8643a7` | + +The repo root `C:\Users\erikn\source\repos\acdream` is on `main` and is NOT +where this campaign happens. --- @@ -48,8 +56,8 @@ Design decisions already made and NOT to be re-litigated (spec §2): | Slice | State | Commits | |---|---|---| | LA0 `AcDream.Platform` extraction | **DONE** (review closed) | `cb6502c8`, `a49e92df`, `7a839cba` | -| LA1 launch contract (App CLI + status writer + roster seam) | implemented; **Opus review returned FIX-FIRST**; fix round IN FLIGHT | `db9ad53c` (MIXED — see §4), note `e1322a06` | -| LA2 probe mode + idle policy | implementer IN FLIGHT | branch `campaign-la2` (base `498f1c11`) | +| LA1 launch contract (App CLI + status writer + roster seam) | implemented; Opus review FIX-FIRST; **fix round WIP — stopped mid-task**, see §3 | `db9ad53c` (MIXED — see §4), note `e1322a06`, WIP `75a6724d` | +| LA2 probe mode + idle policy | **WIP — stopped mid-task**, see §3 | `c6019424` on branch `campaign-la2` | | LA3 `AcDream.Launcher.Core` | implemented; review FIX-FIRST (12 findings); **fix round LANDED — all 12 fixed, 94/94 Windows + WSL**; owes narrow re-review, then merge | `37d74e44`, `26feba81` on branch `campaign-la3` | | LA7a character wire messages | **DONE + MERGED** | `6a32f375`, `4338b1c1`, `0c8643a7`, merge `fa2de1c4` | | LA4 Avalonia UI | not started (needs LA3) | — | @@ -64,24 +72,37 @@ retail sends ≥16 bytes, we send 8; ACE ignores the tail). --- -## 3. Work IN FLIGHT at handoff — recover these first +## 3. Work STOPPED MID-TASK — resume these first -Three agents were running when this handoff was written. Their results arrive -as task notifications in the ORIGINAL session only; a new session must verify -state from git instead of waiting. +Two agents were **killed for token budget** and their partial work is +**committed as clearly-marked WIP**. Build/test state at both WIP commits is +UNVERIFIED — build and test before trusting either. -1. **LA1 fix round** — main worktree, branch - `claude/acdream-launcher-credentials-4d2f7c`. Findings: F1 (HIGH, required) - the `SessionStatusWriter` must never throw into the login/teardown - transactions and must create its parent directory (an unwritable/missing - status path currently fails a healthy session — first-run trigger); - F2 App reader must TOLERATE `process.paths` (parse-and-ignore, like the - existing `policy`) and explicitly REFUSE `mode: "probe"` with a named error; - F4 production-shape the shared fixture (`process.content`, `standardInput` - credential); F3 reconnect emits `disconnected` first + record the mid-play - drop limitation; F5–F8 minor hardening. -2. **LA2 implementer** — worktree `.claude/worktrees/acdream-la2`, branch - `campaign-la2`. +1. **LA1 fix round — WIP at `75a6724d`** (campaign worktree/branch). + DONE in the WIP: F1 best-effort `SessionStatusWriter` (never throws into + login/teardown, creates its parent directory), F2 App reader tolerance + (parse-and-ignore `process.paths`, explicit named refusal of + `mode: "probe"`), F5 `--session-config` argument hardening, new tests. + **STILL OWED:** F4 production-shape the shared fixture + (`tests/Fixtures/campaign-la/session-config-shared-fixture.json` — add + `process.content`, switch credential to `standardInput`/`session`, assert + values on BOTH sides; this was the agent's literal next step); F3 reconnect + emits `disconnected` before the second `connected` + record the mid-play + wire-drop limitation in the plan's status-stream section; F6 `exited` + idempotency + distinct reason strings; F7 make the Runtime redaction test + structural (assert the exact serialized property set per event kind); F8 + platform-guard file-set test + fix the overstating `isLinux` comment; + optional `RuntimeOptions.PrintMembers` redaction of `LivePass`. + Then: run Runtime/App/Headless Release suites (+ WSL for Runtime/Headless) + and dispatch the NARROW re-review. +2. **LA2 — WIP at `c6019424`** (worktree `...\acdream-la2`, branch + `campaign-la2`). DONE in the WIP: probe flag through + `LiveSessionConnectOptions`, the `StartCore` short-circuit before selection, + the `mode` field with the `JsonRequired`→semantic-validation move, host + exit-code mapping, 34 tests passing including 3 probe tests (agent's last + report before the stop). **STILL OWED:** idle-policy unit tests (its next + step), full Runtime+Headless Release suites on Windows AND WSL, then the + Opus dual-lens review. 3. **LA3 fix round — COMPLETE at `26feba81`** (worktree `.claude/worktrees/acdream-la3`, branch `campaign-la3`). All 12 findings fixed: the CRITICAL `"paths": {}` emission (now omitted entirely), probe @@ -161,7 +182,65 @@ re-derive the work). --- -## 6. The goal to set +## 6. Kickoff prompt for the new session + +Paste this as the FIRST message of the new session (it names the three +resumable work items explicitly), then set the goal in §7. + +```text +Resume Campaign LA (the acdream launcher). Work in +C:\Users\erikn\source\repos\acdream\.claude\worktrees\acdream-launcher-credentials-4d2f7c +on branch claude/acdream-launcher-credentials-4d2f7c. Read +docs/research/2026-08-14-campaign-la-handoff.md first, then the ledger in +docs/plans/2026-08-14-launcher-campaign.md. + +Three items are waiting, all recoverable from git — two are partial work from +agents that were stopped mid-task for token budget, and their build/test state +is UNVERIFIED: + +1. LA1 fix round — WIP commit 75a6724d on this branch. An agent had completed + findings F1 (best-effort SessionStatusWriter that never throws into the + login/teardown transactions and creates its parent directory), F2 (App + reader tolerates process.paths and explicitly refuses mode:"probe"), and F5 + (--session-config argument hardening). It was stopped just as it started F4. + Finish: F4 production-shape tests/Fixtures/campaign-la/session-config-shared-fixture.json + (add process.content, switch the credential to standardInput/session, assert + values in BOTH host suites), F3 (reconnect emits disconnected before the + second connected; record the mid-play wire-drop limitation in the plan's + status-stream section), F6 (exited idempotency + distinct reason strings), + F7 (make the Runtime redaction test structural — assert the exact serialized + property set per event kind), F8 (platform-guard file-set test + fix the + overstating isLinux comment), and optionally redact LivePass from + RuntimeOptions.PrintMembers. Then build, run Runtime/App/Headless Release + suites plus WSL for Runtime/Headless, and dispatch the narrow re-review. + +2. LA2 — WIP commit c6019424 in worktree + C:\Users\erikn\source\repos\acdream\.claude\worktrees\acdream-la2 (branch + campaign-la2). An agent had implemented the probe flag through + LiveSessionConnectOptions, the StartCore short-circuit before selection, the + mode field with the JsonRequired-to-semantic-validation move, and the host + exit-code mapping, with 34 tests green including 3 probe tests. It was + stopped before writing the idle-policy unit tests. Finish those, run the + Runtime+Headless Release suites on Windows and WSL, then dispatch the Opus + dual-lens review. + +3. LA3 — COMPLETE at 26feba81 in worktree + C:\Users\erikn\source\repos\acdream\.claude\worktrees\acdream-la3 (branch + campaign-la3). All 12 review findings fixed, 94/94 Windows and WSL. It needs + only a narrow Opus re-review of 26feba81 against the finding list in §3 of + the handoff, then merge into the campaign branch. + +At the LA1+LA3 merge, do not lose the two owed items: the cross-assembly +contract test (feed a Launcher.Core composer document to BOTH host loaders) and +adding tests/AcDream.Launcher.Core.Tests to the Linux CI lane in +.github/workflows/headless-portability.yml. + +After those land, continue the ledger: LA4 (Avalonia UI), LA5 (plugin hosting), +LA6 (login commands), LA7b (char-select state+flow), LA8 (authored screen), LA9 +(installer), LA10 (updater), LA11 (closeout). +``` + +## 7. The goal to set Set this with `/goal` in the new session (it is the same directive this session ran under, refreshed for the current state): @@ -169,10 +248,13 @@ ran under, refreshed for the current state): ```text GOAL: Ship Campaign LA — the acdream launcher/installer/updater + retail character-select screen. -Start at docs/research/2026-08-14-campaign-la-handoff.md, then the ledger in -docs/plans/2026-08-14-launcher-campaign.md. Recover the three in-flight slices -first (LA1 fix round on the campaign branch, LA2 on campaign-la2, LA3 fix round -on campaign-la3) by inspecting git state, then continue slice by slice. +Work in C:\Users\erikn\source\repos\acdream\.claude\worktrees\acdream-launcher-credentials-4d2f7c +(branch claude/acdream-launcher-credentials-4d2f7c). Start at +docs/research/2026-08-14-campaign-la-handoff.md, then the ledger in +docs/plans/2026-08-14-launcher-campaign.md. Finish the three waiting items +first — LA1 fix round (WIP 75a6724d, unverified), LA2 (WIP c6019424 on +campaign-la2, unverified), LA3 (complete at 26feba81 on campaign-la3, owes a +narrow re-review then merge) — then continue slice by slice. Process, per slice: 1. Fable plans/sequences/integrates — never present work-order menus; pick and announce.