Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
Use BEFORE writing any test — enumerate cases per behavior (happy / boundary / error / abuse), prioritize by likelihood × impact, cross-check via subagent — even if the user just says 'add tests'.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
AI-written test suites default to too few tests, mostly happy path. This skill is the discovery step that runs before the first test is written: enumerate what could break, pick the most important cases, then hand the list to test-driven-development or the stack skill. The goal is breadth AND quality — happy path AND boundaries AND error paths — with a hard cap so the output is never a pile of trivial tests.
This is the before layer. Assertion quality is testing-anti-patterns; after-the-fact coverage review is judge-test-coverage.
test-driven-development RED phase and /tests create route here as a mandatory first step.Do NOT use when:
testing-anti-patterns.systematic-debugging.judge-test-coverage.NO TEST IS WRITTEN BEFORE THE CASE LIST EXISTS.
ENUMERATE → PRIORITIZE → THEN WRITE. NEVER HAPPY-PATH-ONLY.
FLOOR PER BEHAVIOR: 1 HAPPY + 1 BOUNDARY + 1 ERROR (+1 ABUSE ON SECURITY PATHS).
CAP PER BEHAVIOR: 5–8 CASES — EACH MUST FAIL FOR A DISTINCT REASON.
This section is the decision Gherkin, BDD, Cucumber, Behat and
given-when-then are meant to reach — each pinned as a should-trigger case in
evals/triggers.json, with German exemplars for Cucumber and Behat. That
corpus specifies
the intent; it does not route, and this skill's description carries none of
the terms. A decision, not a guide to writing one.
Cases and contracts are not the same artifact. A case is something you assert in the project's unit runner. An executable behavior contract — a specification written in the language of whoever asked for the change, and run by a tool that reads it — is a heavier thing, and most changes do not owe one. Ask for one everywhere and it degrades into a second, slower unit suite; ask for one nowhere and behavior nobody can read stays unstated.
Does this change alter behavior someone outside the code can observe, and would that person describe it in their own words?
Both halves have to hold: observable behavior with no outside audience is still only a case. Observable rules out anything a caller cannot see. In their own words rules out behavior that is real but has no audience outside the codebase — if the only person who can state the rule is the person reading the implementation, a case in the unit runner states it better and cheaper.
Yes → a contract is owed. A refund is issued when an order is cancelled within 14 days; a member on a lapsed plan is denied the export; a rejected upload tells the uploader which rule it broke.
No → cases, not a contract. At least these:
When the answer is yes, the ordering is unchanged: the contract fails before the
implementation exists and passes after — see
test-driven-development. A contract
first seen green has the same unknown sensitivity as any other test never seen
red.
A CONTRACT STEP NAMING A SELECTOR, A TIMEOUT, OR A KEYSTROKE IS A DEFECT
IN THE CONTRACT — NOT AN IMPLEMENTATION DETAIL THAT HAPPENS TO BE THERE.
WRITE WHAT IS TRUE, NEVER WHAT IS CLICKED.
A contract that scripts the interface is pinned to the interface: it goes red on every redesign that changes nothing anyone cares about, and stays green through the redesign that breaks the rule. It also stops being readable by the person whose words it was supposed to be in — which was the only reason to pay for it.
Wrong — this is a click script wearing Given-When-Then:
Given I open "/cart?id=42"
When I click #apply-coupon
And I type "SUMMER" into input[name=code]
And I wait 2 seconds
Then .cart-total should contain "€45.00"
Every line is about the page. Change the button id and it fails; move the discount rule and it passes.
Right — same behavior, stated as the rule it is:
Given a cart of €50
When the customer applies a valid 10% coupon
Then the order total is €45
The rule survives the redesign, and the person who asked for it can read it.
The test for a step: could it still be true if the product were a CLI, an API, and a web page? If not, it belongs in the implementation the contract calls into, not in the contract.
List the 1–3 distinct observable behaviors the change introduces or modifies — one sentence each: "When X happens, the system should do Y." Each behavior gets its own case list. If you cannot state a behavior in one sentence, split it.
Walk the dimensions below; mark 3–5 as HIGH (most likely to occur × highest impact when wrong). Skip dimensions the behavior structurally cannot hit — but say so, don't silently omit.
broken-access-control (unauthenticated → 401, not-owner → 403/404, cross-tenant → 403/404) are the floor, not optional extras.Generate ≥ 1 concrete case per HIGH dimension, plus the happy path. Enforce the floor: 1 happy + 1 boundary + 1 error per behavior, +1 abuse case when the behavior is security-relevant. Name each case like a test (it rejects an expired token), not like a category ("error handling").
Widen the list with a second pair of eyes:
Unavailability of subagents never skips this step — it only switches the path.
If a behavior collected more than 8 cases: rank by likelihood × blast radius, keep the top 5–8. Quality gate: each surviving case must be able to fail for a distinct reason (different code path / exception / assertion). The same assertion fed two interchangeable input values is ONE case — use a data provider, not a second test. Record dropped cases in one line each so the discovery work is not lost.
Then hand the list to test-driven-development — every case runs its own RED → GREEN cycle — or to the stack skill (pest-testing, api-testing, playwright-testing).
floor met: happy ✓ boundary ✓ error ✓ (abuse: n/a — no security surface).testing-anti-patterns Anti-Pattern 6 still apply — 6 meaningful tests beat 20 trivial ones.test-driven-development — consumes the case list; one RED → GREEN cycle per case.testing-anti-patterns — assertion-quality floor (overfit, tautology, gaming the green).judge-test-coverage — after-the-fact coverage review.pest-testing · api-testing · playwright-testing — stack-specific execution.senior-engineering-discipline — the Iron-Law floor this procedure operationalizes.broken-access-control — the three negative tests on data-returning endpoints.まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.
日本語の概要は準備中です。原文の説明を表示しています。
Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.
日本語の概要は準備中です。原文の説明を表示しています。
Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.
日本語の概要は準備中です。原文の説明を表示しています。
Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.
日本語の概要は準備中です。原文の説明を表示しています。