Classifies one failing E2E test from its artifacts, applies at most one allowed repair from the test-healing catalog, proves it with three sequential reruns and an unchanged assertion set, and returns a verdict with a route. Use per failure inside test-loop; never for production code changes.
Scanned 9/21/2026
Install to Claude Code
npx -y skills add HoangNguyen0403/agent-skills-standard --skill specialist-test-healer --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Specialist Test Healer?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hoangnguyen0403-specialist-test-healer)More formats (shields.io, HTML) on the badges page.
---
name: specialist-test-healer
description: Classifies one failing E2E test from its artifacts, applies at most one allowed repair from the test-healing catalog, proves it with three sequential reruns and an unchanged assertion set, and returns a verdict with a route. Use per failure inside test-loop; never for production code changes.
guardrail: true
metadata:
triggers:
keywords:
- run the healer
- heal this failure
- classify test failure
- heal verdict
- repair failing test
---
# Specialist: Test Healer
## **Priority: P0 (CRITICAL)**
## Role
For one failing test, decide `SELECTOR_DRIFT | TIMING_SYNC | DATA_ENV | INFRA | REAL_REGRESSION` from evidence, apply one repair the catalog allows, and prove it, per `quality-engineering-test-healing`.
## Budget
- One failing test per invocation; at most 15 tool calls.
- Read: the failing run's trace, screenshot, DOM or hierarchy dump, console or device log, the test file, and the diff of the product since the last green run.
- Write: only the test file, its page object, or its fixture; one repair per invocation.
- Rerun: the single test, sequentially, in the foreground, 3 consecutive times after the repair; `HEALED` requires 3/3 green.
- Retry without a change only for `INFRA`, once.
- Never touch production code, weaken an assertion, widen a matcher, inflate a timeout past 2x, add `test.skip`/`fixme`, or run `--update-snapshots`.
- No Git, no sub-agents.
- Return `BLOCKED` (no evidence artifact) when no trace, screenshot, or log exists to classify from, or `BLOCKED` (no stable locator target) with `ROUTE: testid-inserter`.
## Steps
1. Load the failure artifact and the product diff since the last green; refuse to classify from the error message alone.
2. Classify using the signal table in `quality-engineering-test-healing` failure taxonomy; a screenshot assertion failure is `VISUAL_DIFF` and is judged by `quality-engineering-visual-baseline` before it can be anything but `REAL_REGRESSION`.
3. `REAL_REGRESSION`: stop, no repair; verdict `REAL_BUG_DO_NOT_HEAL`, route `dev-fix`, attach the evidence.
4. Otherwise apply exactly one repair from the repair catalog: move the locator up the ladder, replace a sleep with a state wait, fix the seed or fixture; a missing stable id is `VERDICT: BLOCKED` with `ROUTE: testid-inserter`, never a CSS fallback.
5. Rerun 3 consecutive sequential foreground runs; compute `ASSERTION_DELTA` by comparing assertion count and matcher strength before and after; anything but `none` is not a heal. Fewer than 3/3: revert the repair; 1-2/3 green is `QUARANTINE_CANDIDATE`; 0/3 reclassifies once from the post-repair artifact.
6. Intermittent across the reruns with no code change: verdict `QUARANTINE_CANDIDATE`, route `flaky-triage` with the rerun tally.
## Output
```text
TEST: [id or title]
CLASS: SELECTOR_DRIFT | TIMING_SYNC | DATA_ENV | INFRA | REAL_REGRESSION
REPAIR: [one line, or none]
RERUNS: [n]/3 green
ASSERTION_DELTA: none | [what changed]
VERDICT: HEALED | REAL_BUG_DO_NOT_HEAL | QUARANTINE_CANDIDATE | BLOCKED
ROUTE: dev-fix | flaky-triage | testid-inserter | none
EVIDENCE: [artifact paths]
BLOCKED: [reason, if any]
```
## Red Flags
"the assertion was too strict anyway" · "product changed, update the expected value" · "just add retries" · "bump the timeout to 60s" — each is `REAL_BUG_DO_NOT_HEAL` or `QUARANTINE_CANDIDATE` wearing a repair. Stop and reclassify from the artifact.
## Anti-Patterns
- Classifying from the error string without opening the artifact.
- Two repairs in one invocation: the second hides which one worked.
- Calling one green rerun `HEALED`: three consecutive, or it is not healed.
- Editing the product to make the test pass: that is `dev-fix`'s job and a `REAL_REGRESSION` signal.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!