Skip to content

feat: agentic-end-to-end-testing skill + spec-derived scenario cards#1931

Draft
obra wants to merge 23 commits into
devfrom
agentic-end-to-end-testing
Draft

feat: agentic-end-to-end-testing skill + spec-derived scenario cards#1931
obra wants to merge 23 commits into
devfrom
agentic-end-to-end-testing

Conversation

@obra

@obra obra commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Who is submitting this PR? (required)

Field Value
Your model + version Claude Fable 5 (claude-fable-5)
Harness + version Claude Code CLI 2.1.199
All plugins installed superpowers 6.1.0, claude-session-driver 4.0.0, episodic-memory, superpowers-chrome, context7, linear, plugin-dev, agent-sdk-dev
Human partner who reviewed this diff Jesse Vincent (@obra) — directed every design decision in-session; full-diff review pending (hence draft)

What problem are you trying to solve?

Three related failures observed across real sessions:

  1. Agents claim e2e success without unfakeable evidence — "looks fine"
    reports, assertions weakened until they pass, stale builds tested as if
    they were the branch. The patterns that prevent this (scenario cards,
    disposable verification runners, proof movies/documents, honest-failure
    reporting) existed only in a personal dotfiles skill and scattered
    session history, not in core.
  2. Post-implementation test drift: models write e2e tests for the behavior
    they built rather than what was requested. Nothing ties e2e assertions
    back to the spec that predates the implementation.
  3. Role contamination: in a controlled 4-worker experiment, an agent that
    found a real product bug while verifying it also fixed it mid-run,
    citing ambient norms — same prompt, second worker declined. Ambient
    norms do not decide finder-vs-fixer consistently; the boundary must be
    explicit.

What does this PR change?

Adds the agentic-end-to-end-testing skill (decision core + runner prompt
template + driving recipes for browser/CLI-TUI/computer-use + proof-movie
recipes + a check-cards-against-spec checker with a 23-assertion test
harness). Extends brainstorming with a conditional "E2E scenario cards"
table for specs that add or change user-visible behavior, and gives
subagent-driven-development a pre-finish offer of spec-derived e2e
verification (procedure in a progressive-disclosure doc). Design specs and
plans are committed under docs/superpowers/.

Is this change appropriate for the core library?

Yes: agent-agnostic, project-agnostic verification methodology. No
third-party service integration; the only script is bash + POSIX tools.
The eval scenarios developed alongside it live in the separate
superpowers-evals repo (branch agentic-e2e-scenarios), not in core.

What alternatives did you consider?

  • Quorum/Gauntlet eval scenarios as the repeatability mechanism
    rejected by maintainer decision: repeatability ships in-skill (checker
    script + RED/GREEN discipline); eval scenarios live in superpowers-evals.
  • Cards written at spec time — rejected after a controlled experiment:
    the falsification table locks at spec time, card expansion happens
    post-implementation under a verbatim-lift rule the experiment showed
    agents follow (4/4 cells verbatim).
  • Fix-empowered verification agents — rejected for flag-only: one
    mandate per agent; the agents that find issues are never responsible for
    issues being solved.

Does this PR contain multiple unrelated changes?

It contains one skill plus its integrations. The brainstorming table, the
checker, and the SDD offer all exist to feed or consume the new skill's
scenario cards — none stands alone without it.

Existing PRs

Environment tested

Harness (e.g. Claude Code, Cursor) Harness version Model Model version/ID
Claude Code CLI 2.1.199 Fable 5 (controller), Sonnet (subjects/workers) claude-fable-5, claude-sonnet-5

New harness support (required if this PR adds a new harness)

N/A — no new harness.

Evaluation

  • Initial prompt: build an agentic-end-to-end-testing skill from the
    agentic-scenario / verification-runner / proof-movie patterns developed
    in prior sessions; later extended with "what about writing scenarios
    based on a superpowers brainstorming spec?"
  • Eval sessions after the change: 4 live claude-session-driver worker runs
    (2 scenarios × bare/skill arms) against real fixture apps; a 4-worker
    card-authoring drift experiment; 9/9 positive + clean negative-gate
    micro-tests for the brainstorming predicate (the first predicate wording
    failed the negative gate 0/4 and was re-keyed on that evidence); 6/6
    micro-tests for the SDD offer; 23-assertion checker harness plus
    adversarial probe fixtures.
  • Before/after: bare arms auto-fired an older personal skill and ran
    looser workflows; skill arms read the new SKILL.md, loaded supporting
    files on demand, produced per-assertion PASS/FAIL tables with concrete
    evidence, reported failures honestly without touching product code, and
    one arm dispatched a disposable runner with the template filled
    correctly (honesty clause verbatim, evidence re-read gate observed in
    the event stream).

Rigor

  • If this is a skills change: I used superpowers:writing-skills and
    completed adversarial pressure testing (paste results below)
  • This change was tested adversarially, not just on the happy path
  • I did not modify carefully-tuned content (Red Flags table,
    rationalizations, "human partner" language) without extensive evals
    showing the change is an improvement

Adversarial results (summary): RED baselines recorded before every GREEN
edit; reviewer probes found two real checker false-passes (whole-file
falsification match; level-1 heading not terminating the Expected section)
— both fixed with regression tests; task reviewers forensically verified
RED/GREEN claims against session transcripts and caught one
misrepresented baseline, which was corrected; brainstorming/SDD wording
was micro-tested against control arms and pressure scenarios (including a
wrap-up-efficiently-while-human-is-away arm) before landing.

Human review

  • A human has reviewed the COMPLETE proposed diff before submission

Draft PR: opened for @obra's full-diff review; box intentionally unchecked
until that review happens.

obra added 23 commits July 4, 2026 14:10
<date> inside the innerHTML string literal parses as an empty HTML
element in the browser rather than literal text if left unsubstituted.
Use the house bracket convention instead.
…disclosure doc

The predicate-keyed at-skill-start trigger is replaced by an unconditional
offer to the human after the final whole-branch review, before
finishing-a-development-branch. The procedure (spec discovery,
author/checker/runner flow, fix-wave rules) moves to spec-derived-e2e.md;
SKILL.md keeps the offer, a flowchart node, and the Integration reference.
Micro-tested 6/6: four controllers at the post-review point all offer
before finishing (including under wrap-up-efficiently pressure with the
human away); two accepted-offer controllers follow the disclosure doc with
the checker run by the controller, one fix subagent, and a fix-diff review
gate. Deviation recorded in the design spec.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant