Root-cause analysis and fixes¶
Every failure gets a record¶
Healed, unhealed, or suppressed, every transaction produces a typed RcaRecord:
a clean human-readable message, the root cause, the evidence collected, the
actions attempted, and a suggested permanent fix. For unhealable failures, an RCA
agent enriches the message — turning a raw TimeoutError stack into "the login
button id changed from login-button to signin-btn."
Test-change context¶
When the test source is in a git repository, heal collects the failing line's last-modified date and recent history. That lets the RCA distinguish "test outdated" (the locator's line last changed 14 months ago; the app moved on) from "application changed" or "application defect" — a causality hint no single-run view can give.
Fix blast radius¶
A heal can become a permanent code change, but where the change lands decides how dangerous it is. The fix engine resolves the locator's origin through the RF parsing model and classifies the blast radius:
flowchart TD
H[healed locator] --> O{origin?}
O -->|literal at call site| LOCAL[local]
O -->|variable / prefix-variable| VAR{used at<br/>N sites?}
O -->|user-keyword argument| CALL[trace to call sites]
VAR -->|1| LOCAL
VAR -->|many| SHARED[shared]
CALL -->|1| LOCAL
CALL -->|many| SHARED
LOCAL --> AUTO[eligible for in-place]
SHARED --> REVIEW[patch / review only,<br/>never auto-applied]
A locator stored in a ${VARIABLE} used by 14 keywords is shared — heal
will never auto-edit it in place, because that would change 14 call sites at
once. Instead it produces a patch and lists every usage so you (or a
coding agent) can decide. A literal at a single
call site is local and safe to apply.
This is the difference between a trustworthy autofixer and one that breaks the other 13 tests. See Fix test files for the application tiers.