Skip to content

record-and-heal: armed --save-script repair records the agent's read-only diagnostics into the healed script (can introduce new divergences) #1271

Description

@thymikee

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)

  1. 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."
  2. 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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    in-progressWork is actively in progressneeds-triageNew or unreviewed issue

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions