Summary
During an armed --save-script record-and-heal repair segment, the agent's read-only diagnostic
commands (snapshot -i, get attrs, find, is) are recorded into the healed script alongside the
corrective actions. This pollutes the healed artifact, and in one measured case a recorded diagnostic
introduced a new, self-inflicted divergence on fresh replay.
Found in the wave-3 E3 repair-economics experiment (single-field-rename drift on iOS test-app).
Evidence
Two independent sonnet trials both used the documented --save-script/--from heal-by-doing flow
correctly, and both still required a manual .ad edit afterward solely to remove recorded diagnostics:
- sonnet-1: three extraneous
get attrs … steps (from triage inspection) were captured into the healed
script; harmless but not part of the flow — hand-removed.
- sonnet-2: a
get attrs @e13 run during triage was captured; on a fresh replay its recorded
ancestry did not hold and it caused a second divergence (identity-mismatch: recorded ancestry
scrollview/"Checkout form" vs observed other/"Legal name"). Hand-removed to finalize.
Net: across all 4 E3 trials, 0 produced a clean healed script hands-off — the flow foot-guns even the
agent that follows it. --no-record exists but neither agent discovered it for reads mid-repair.
Why it matters
The record-and-heal flow's value is a clean, replayable healed script produced without hand-editing. Today
it doesn't deliver that: an agent that inspects the screen to find the corrected target (the expected
behavior) pollutes its own output, and the pollution can be worse than cosmetic (a recorded read can carry
state-dependent identity that re-diverges).
Design options (maintainer call — not a silent patch)
- Cheap / hint-layer: the divergence
repairHint text (and help workflow) should teach that
inspections during an armed repair must use --no-record. Zero behavior change; just stops the agent
foot-gunning itself. Aligns with "tune the hint, not the design."
- Real / ADR-0012 decision-6 amendment: decide whether read-only commands (
snapshot/get/is/
find) recorded inside a repair segment should default out of the healed script (they never mutate
state, so they're arguably diagnostics by definition, not flow steps). This changes what the heal
transaction commits and is a semantic decision about the record-and-heal contract — hence an ADR
amendment, not a patch.
Option 2 is the more complete fix; option 1 is a safe interim. A related sub-finding worth its own look:
the sonnet-2 case is also a state-dependent-identity data point on iOS (a field's recorded ancestry
differed between mid-repair and fresh replay) — in mild tension with the E1 iOS FDR-0 result, whose flows
didn't contain a get-on-a-just-interacted-field step. Worth an autopsy (filled vs focused vs scroll state).
Summary
During an armed
--save-scriptrecord-and-heal repair segment, the agent's read-only diagnosticcommands (
snapshot -i,get attrs,find,is) are recorded into the healed script alongside thecorrective actions. This pollutes the healed artifact, and in one measured case a recorded diagnostic
introduced a new, self-inflicted divergence on fresh replay.
Found in the wave-3 E3 repair-economics experiment (single-field-rename drift on iOS test-app).
Evidence
Two independent sonnet trials both used the documented
--save-script/--fromheal-by-doing flowcorrectly, and both still required a manual
.adedit afterward solely to remove recorded diagnostics:get attrs …steps (from triage inspection) were captured into the healedscript; harmless but not part of the flow — hand-removed.
get attrs @e13run during triage was captured; on a fresh replay its recordedancestry did not hold and it caused a second divergence (
identity-mismatch: recorded ancestryscrollview/"Checkout form"vs observedother/"Legal name"). Hand-removed to finalize.Net: across all 4 E3 trials, 0 produced a clean healed script hands-off — the flow foot-guns even the
agent that follows it.
--no-recordexists but neither agent discovered it for reads mid-repair.Why it matters
The record-and-heal flow's value is a clean, replayable healed script produced without hand-editing. Today
it doesn't deliver that: an agent that inspects the screen to find the corrected target (the expected
behavior) pollutes its own output, and the pollution can be worse than cosmetic (a recorded read can carry
state-dependent identity that re-diverges).
Design options (maintainer call — not a silent patch)
repairHinttext (andhelp workflow) should teach thatinspections during an armed repair must use
--no-record. Zero behavior change; just stops the agentfoot-gunning itself. Aligns with "tune the hint, not the design."
snapshot/get/is/find) recorded inside a repair segment should default out of the healed script (they never mutatestate, so they're arguably diagnostics by definition, not flow steps). This changes what the heal
transaction commits and is a semantic decision about the record-and-heal contract — hence an ADR
amendment, not a patch.
Option 2 is the more complete fix; option 1 is a safe interim. A related sub-finding worth its own look:
the sonnet-2 case is also a state-dependent-identity data point on iOS (a field's recorded ancestry
differed between mid-repair and fresh replay) — in mild tension with the E1 iOS FDR-0 result, whose flows
didn't contain a
get-on-a-just-interacted-field step. Worth an autopsy (filled vs focused vs scroll state).