22
33## Status
44
5- Proposed (2026-07-10). Nothing in this ADR is implemented yet.
5+ Accepted (2026-07-10). Migration steps 1-6 and 8 have shipped; step 7 (benchmark extension) remains
6+ deferred. See [ Migration progress] ( #migration-progress ) for the per-step landing record.
67
7- ## Context
8+ ## Context (historical baseline)
89
9- Replay today is deterministic. ` .ad ` scripts are plain text — one action per line, ` # ` comments, a
10- ` context platform=... device=... theme=... ` header (` src/replay/script.ts ` ) — recorded via
11- ` open --save-script ` (` src/daemon/session-action-recorder.ts ` , ` src/daemon/session-script-writer.ts ` )
12- or hand-written, and executed step-by-step by ` runReplayScriptFile `
10+ This section records the repository state audited on 2026-07-10, before the migration steps recorded
11+ below shipped. Its present-tense observations are historical evidence;
12+ [ Migration progress] ( #migration-progress ) is the authoritative record of current behavior.
13+
14+ At acceptance, replay was deterministic. ` .ad ` scripts were plain text — one action per line, ` # `
15+ comments, and a ` context platform=... device=... theme=... ` header (` src/replay/script.ts ` ) — recorded
16+ via ` open --save-script ` (` src/daemon/session-action-recorder.ts ` ,
17+ ` src/daemon/session-script-writer.ts ` ) or hand-written, and executed step-by-step by
18+ ` runReplayScriptFile `
1319(` src/daemon/handlers/session-replay-runtime.ts ` ) under the daemon's ` replay ` /` test ` commands
1420(` src/daemon/handlers/session-replay.ts ` ). Recorded touch/fill/get targets are selector chains with
1521` || ` alternates (` buildSelectorChainForNode(...).join(' || ') ` ,
@@ -18,7 +24,7 @@ or hand-written, and executed step-by-step by `runReplayScriptFile`
1824(` src/compat/maestro/ ` ); progress is step-indexed (` stepIndex ` /` stepTotal ` in
1925` emitReplayTestActionProgress ` , ` session-replay-runtime.ts:243-260 ` ).
2026
21- Recovery is opt-in ` --update ` /` -u ` healing (` replayUpdate ` flag,
27+ Recovery was opt-in ` --update ` /` -u ` healing (` replayUpdate ` flag,
2228` src/commands/cli-grammar/flag-definitions-workflow.ts ` ). It only fires after a step has already
2329returned a hard failure (` session-replay-runtime.ts:118-149 ` : `if (!shouldUpdate) return failure; ...
2430healReplayAction(...)`), and it only retries the SAME recorded selector material —
@@ -67,14 +73,14 @@ zero on the happy path and paying only where reality diverged from the recording
6773 ... then smallest on-screen area") but never disclosed per response — an agent that hasn't read the
6874 help topic, or whose target moved between recording and replay, gets no signal a heuristic rather than
6975 an exact match chose its target.
70- - ** (c) No target-binding verification exists anywhere in this path.** ` --verify `
76+ - ** (c) No target-binding verification existed in this path at acceptance .** ` --verify `
7177 (` captureEvidenceBaseline ` , ` resolution.ts:45-58,104-134 ` ; the ` verifyEvidence ` guarantee cell in ADR
7278 0011's registry) attaches a pre/post-action node diff so the caller can see SOMETHING changed — it
7379 says nothing about whether the CORRECT node was the one tapped. A wrong-but-plausible pick (the
7480 sibling "Prevent Remove" button) produces a real, visible diff and is still the wrong action.
75- - ** (d) Heal auditability is a bare count.** A successful ` --update ` run returns
81+ - ** (d) Heal auditability was a bare count.** A successful ` --update ` run returned
7682 ` { replayed, healed, ... } ` (` session-replay-runtime.ts:186-195 ` ) — ` healed ` is a number, nothing
77- else — and rewrites the ` .ad ` file in place via ` writeReplayScript `
83+ else — and rewrote the ` .ad ` file in place via ` writeReplayScript `
7884 (` session-replay-runtime.ts:182-184 ` , ` src/replay/script.ts:459-484 ` ) with no diff shown anywhere in
7985 the response.
8086- ** (e) This silent-pick default is in real tension with this repo's general posture toward ambiguity.**
@@ -774,3 +780,25 @@ each states its dependencies explicitly.
774780 boundary watermark on ` replay ` (R1/R6), the writer's post-watermark slice and bare-` @ref ` fail-loud
775781 guard (R4/R6) — the healed-script emission otherwise reuses ` close --save-script ` 's existing
776782 ` session.actions ` serializer.
783+
784+ ## Migration progress
785+
786+ Landing record for the plan above (main as of 2026-07-13). This section tracks progress only; it does
787+ not restate or amend the decisions.
788+
789+ | Step | Decision | Status | Landed in |
790+ | --- | --- | --- | --- |
791+ | 1. Resolution disclosure | 2 | Shipped | #1193 |
792+ | 2. Structured divergence transport | 4 (report) | Shipped | #1197 |
793+ | 3. ` .ad ` target annotations, inert | 3 (parser/writer) | Shipped | #1196 |
794+ | 4. Target-binding verification | 3 (enforcement) | Shipped | #1209 |
795+ | 5. ` replay --from ` + ` --plan-digest ` resume | 4 (resume) | Shipped | #1211 |
796+ | 6. ` --update ` retirement | 1 | Shipped | #1211 |
797+ | 7. Benchmark extension | 5 | Deferred | — |
798+ | 8. Agent-supervised re-record repair | 6 | Shipped | #1228 |
799+
800+ Step 4 (#1209 ) added the ` selector-miss ` /` identity-mismatch ` /` identity-unverifiable ` divergence kinds
801+ and a post-resolution target guard that cross-checks the dispatched winner against the verified member.
802+ Issue #1221 ("Complete ADR 0012 replay target-binding verification") was closed as already implemented:
803+ its verification scope is covered by step 4. Step 7 remains deferred. Step 8 implements the repair
804+ design accepted in #1226 and shipped in #1228 .
0 commit comments