Testland
Browse all skills & agents

manual-test-script-author

Builds stakeholder-readable scripted manual test cases from a feature spec in four formats: a step-table (preconditions / steps / expected result / actual / pass-fail / notes) for spreadsheet review, a Gherkin Given/When/Then format for BDD-aware teams, a business-language UAT script with acceptance-criteria mapping and contractual sign-off (references/uat-format.md), and a one-line-per-item execution checklist for smoke / on-call / bug-bash / compliance sweeps (references/checklist-format.md). Each script is self-contained (no implicit team knowledge), single-scenario (one happy + N edge per script), and includes the data setup the tester needs without being a developer. Use when a feature can't be (or shouldn't be) fully automated and a human tester needs an executable script or checklist - UAT sign-off rounds, regression baselines, certification testing, deploy smoke checklists, exploratory follow-up scripts.

Install with skills.sh (any agent)

npx skills add testland/qa --skill manual-test-script-author
View source

manual-test-script-author

Overview

Not every test should (or can) be automated. Some need a human:

  • Acceptance / UAT scripts that go to a non-developer end user.
  • Regression baselines for legacy code where the cost of automation exceeds the test's run frequency.
  • Certification / compliance scripts that an auditor walks step-by-step.
  • First-pass exploration follow-up - a script formalizing what exploratory testing surfaced.

This skill builds those scripts in four formats: a step-table for spreadsheet review, Gherkin for BDD-aware teams, a business-language UAT script for stakeholder sign-off (references/uat-format.md), and a focused execution checklist for smoke / on-call / compliance sweeps (references/checklist-format.md).

For session-based exploratory tests (where the script doesn't predetermine steps), use exploratory-testing - the charter-driven sibling skill - instead.

When to use

  • A feature has stakeholder-visible behavior that's hard to assert in code (visual look-and-feel, content review, multi-channel flow).
  • A non-developer needs to run regression checks (UAT testers, product managers, customer support).
  • An automated test suite needs a manual fallback for edge cases the runner can't reach.

If the feature is fully automatable and the team has the budget, write an automated test - see gherkin-from-stories (in the qa-bdd plugin) for the upstream Gherkin generation.

Step 1 - Read the input

The skill takes one of:

  • A user story / PRD section.
  • A bug report (for regression-baseline scripts).
  • An exploratory testing session debrief (for follow-up scripts).
  • An acceptance criterion line item (for UAT scripts).

Extract the actor, trigger, and observable outcomes - the same Gherkin structure as gherkin-from-stories (qa-bdd plugin). A manual script is the same logical shape as a Gherkin scenario; the difference is the level of detail + the inclusion of setup data.

Step 2 - Format A: step-table (spreadsheet)

The default format. Reads top-to-bottom; each row is one step the tester executes:

## TC-1234 - Apply promo code at checkout

**Feature:** Checkout - promo codes
**Tester:** ____________________   **Date:** ____________________
**Build:** ____________________   **Environment:** staging | prod

### Preconditions

- [ ] User account `qa-test-user@example.com` exists with valid
      payment method (Stripe test card 4242…) attached.
- [ ] Cart contains 1× SKU `BOOK-001` ($24.99).
- [ ] Promo code `WELCOME10` is active in the admin panel
      (10% off, no minimum).

### Steps

| #  | Action                                                  | Expected result                                                | Actual | Pass/Fail | Notes |
|----|---------------------------------------------------------|----------------------------------------------------------------|--------|-----------|-------|
| 1  | Navigate to `/checkout`.                                  | Cart subtotal shows `$24.99`. Promo input is visible.          |        |           |       |
| 2  | Enter `WELCOME10` in the promo input. Click `Apply`.      | Subtotal updates to `$22.49`. Confirmation toast: "Code applied". |       |           |       |
| 3  | Click `Place order`.                                      | Confirmation page shows order ID. Total `$22.49` (plus tax).   |        |           |       |
| 4  | Check email inbox for `qa-test-user@example.com`.         | Confirmation email arrives within 5 min, total `$22.49`.       |        |           |       |

### Sign-off

**Tester signature:** ____________________
**Sign-off date:** ____________________

### Defects raised

(list)

The Preconditions block is load-bearing - without it, the tester improvises setup, and the script's repeatability collapses. Cite specific test data (account email, SKU, code) so two runs produce the same result.

Step 3 - Format B: Gherkin (BDD-aware)

Feature: Apply promo code at checkout

  Background:
    Given a logged-in user "qa-test-user@example.com" with a valid Stripe test card attached
    And the user's cart contains 1× SKU "BOOK-001" ($24.99)
    And promo code "WELCOME10" is active (10% off, no minimum)

  Scenario: Apply valid promo at checkout
    Given the user is on the /checkout page
    When the user enters "WELCOME10" in the promo input
    And the user clicks "Apply"
    Then the subtotal updates from "$24.99" to "$22.49"
    And a confirmation toast appears: "Code applied"

    When the user clicks "Place order"
    Then the confirmation page shows an order ID
    And the order total is "$22.49" (plus tax)
    And a confirmation email arrives within 5 minutes at "qa-test-user@example.com" with total "$22.49"

  Scenario: Apply expired promo at checkout
    Given promo code "EXPIRED50" is inactive (expired 2026-01-01)
    When the user enters "EXPIRED50" in the promo input
    And the user clicks "Apply"
    Then the subtotal remains "$24.99"
    And an error appears: "This code has expired"

Same content as Format A, different shape. Pick based on the team's tooling: spreadsheets prefer A; Cucumber / Behat prefer B.

Format C - UAT script (stakeholder sign-off)

When the runner is a business stakeholder and sign-off is the contractual gate (B2B contracts, regulated industries, customer acceptance as the payment trigger), use the UAT format: one script per user journey, business language only, an acceptance-criteria verification table, and a tester + stakeholder sign-off block. Full format, the business-language translation table, and the three-tasks scoping rule: references/uat-format.md.

Format D - focused execution checklist

When the need is a fast human-runnable sweep (a per-deploy production smoke, an on-call first-pass, a bug-bash kickoff, a periodic compliance record), a full step-table is overkill: use the checklist format - 10-30 one-line [ ] feature: action → observable outcome items grouped by flow, with a per-group time budget and versioned files. Full format and scoping table: references/checklist-format.md.

Step 4 - Single-scenario discipline

A 30-step script that bundles 5 scenarios (happy path + 4 edge cases) is unmaintainable. The pattern:

  • One TC per logical scenario (one happy + one variant per TC).
  • Edge cases are sibling TCs, not appended steps.
TC-1234 - Apply valid promo
TC-1235 - Apply expired promo
TC-1236 - Apply invalid-format promo
TC-1237 - Apply already-used promo
TC-1238 - Apply promo to empty cart

The cost is more TCs; the benefit is per-TC pass/fail clarity. A 30-step bundle that fails at step 17 obscures whether step 17 was the bug or step 12 was a precondition violation.

Step 5 - Self-contained data

Per exploratory-wiki (opens in new window):

"In reality, testing almost always is a combination of exploratory and scripted testing, but with a tendency towards either one, depending on context."

Manual scripts that depend on "the test data the team uses" or "whatever account QA has" fail when the next tester runs them. The script must specify:

  • Test account credentials (or "create per the create-account TC with these inputs").
  • Specific SKUs / product IDs / record IDs.
  • Specific test cards / synthetic PII per the canonical sources (e.g. Stripe test cards 4242 4242 4242 4242).
  • Expected URLs, button labels, copy text - verbatim where copy is checked by the test.

Step 6 - Defect-raising integration

When a step fails, the tester needs to log a defect with enough context for the developer to reproduce. The script's Defects raised section captures:

| Defect ID | Step  | Expected                          | Actual                           | Severity |
|-----------|-------|-----------------------------------|----------------------------------|----------|
| BUG-9876  |   2   | Subtotal updates to `$22.49`       | Subtotal stays at `$24.99`; toast says "Invalid code" | high    |

Turn each failure into a structured bug-reproduction package.

Output format

## Manual test scripts - `<feature>`

**Source spec:** `<story / PRD / charter>`
**Format:** step-table | gherkin
**Scripts produced:** N
**Estimated wall time per full run:** ~M minutes

| TC ID  | Title                                       | Format     | Wall time | Coverage |
|--------|---------------------------------------------|------------|----------:|----------|
| TC-1234 | Apply valid promo                            | step-table |   ~3 min  | happy path |
| TC-1235 | Apply expired promo                          | step-table |   ~3 min  | edge      |
| TC-1236 | Apply invalid-format promo                   | step-table |   ~2 min  | edge      |

(per-TC bodies follow)

### Test data dependencies

- Account: `qa-test-user@example.com`
- SKUs: `BOOK-001` ($24.99)
- Promo codes: `WELCOME10` (active), `EXPIRED50` (expired)
- Test card: Stripe `4242 4242 4242 4242`

### Author notes

- Each TC is self-contained - no implicit cross-TC dependencies.
- Sign-off block is per-TC; aggregate sign-off via release runbook.

Anti-patterns

Anti-patternWhy it failsFix
One TC bundling 5 scenariosFailure at step N obscures the cause; reruns repeat all N steps.One TC per logical scenario (Step 4).
Vague preconditions ("the user is set up")Different testers improvise differently; results diverge.Specific account / SKU / data per script (Step 5).
Steps without expected results ("click submit")Tester doesn't know what to assert; pass/fail is subjective.Every step has an "Expected result" column (Step 2).
Manual scripts for fully-automatable featuresMaintenance burden; diverges from the automated suite.Automate first; manual scripts for the irreducibly-human cases (Use).
No defect-raising columnFailures get logged in chat / lost; reproducibility gone.Defects-raised block (Step 6); link to bug-repro tooling.
Relying on the tester's experience to fill gapsOnboarding new testers becomes painful.Self-contained scripts; no implicit team knowledge (Step 5).
Scripts in PDF / Word that can't be diffedUpdates lost; tracking changes manual.Markdown / Gherkin; version-controlled.

Limitations

  • Maintenance overhead. Manual scripts need updating when the product changes. For high-churn areas, automation is cheaper long-term.
  • Tester skill matters. A script can't replace the tester's observational judgment ("the toast was visible but the animation looked broken").
  • Coverage of edge cases. Manual scripts cover what the author imagined; exploratory testing catches what the author didn't - pair with exploratory-testing (charter-driven sessions).

References

  • exp (opens in new window) - Exploratory vs scripted testing distinction; "most real-world testing combines both approaches with emphasis depending on project context."
  • gherkin-from-stories (qa-bdd plugin) - upstream: emits Gherkin from a story; this skill turns Gherkin into a tester-runnable script.
  • UAT script format (business language, AC mapping, sign-off): references/uat-format.md.
  • Execution checklist format (smoke / on-call / bug-bash / compliance): references/checklist-format.md.
  • exploratory-testing - the session-based exploratory sibling.

Execution checklist format

View source (opens in new window)

Execution checklist format

Deep reference for manual-test-script-author SKILL.md. A full step-table script is overkill for some situations:

  • A 5-minute production smoke after every deploy.
  • An on-call's "is it broken?" first-pass verification.
  • A periodic (weekly / monthly) compliance check.
  • A bug-bash kickoff (give every participant the same checklist).

For these, a focused checklist wins: ~10-30 items, each one line, each with a clear pass/fail. The whole list fits on one screen / one printed page; the runner sweeps through it in 5-15 minutes. This format converts a regression suite (or test plan) into that checklist.

When to use this format

  • After a deploy, the team needs a fast "did anything obviously break" sweep.
  • On-call rotations want a "is the system broken?" template they can run before paging others.
  • A bug-bash needs the same checklist for every participant so coverage is consistent.
  • A compliance review needs a periodic verification record.

If the use case is "test a feature thoroughly before release," use the full step-table format from the SKILL.md body instead - expected results per step.

Step 1 - Pick scope

A checklist's value is its focus. Scope by one of:

ScopeItem countWall timeUse
Critical-path smoke~10~5 minPer-deploy.
Primary-flow check~20~15 minOn-call first-pass.
Full-feature sweep~30~30 minBug-bash kickoff.
Compliance record~10~10 minWeekly / monthly.

Wider scope = lower run frequency = less repeated value.

Step 2 - Convert each test case to one-line form

Source TCs from the step-table scripts or the existing regression suite. Compress each to a single line with three slots:

[ ] [feature]: [action] → [observable outcome]

Examples:

[ ] **Login**: enter `qa-test-user@example.com` + valid pwd → dashboard loads in <3s.
[ ] **Cart**: add `BOOK-001` → cart count badge shows "1".
[ ] **Promo code**: apply `WELCOME10` → subtotal drops by 10%.
[ ] **Checkout**: click `Place order` → confirmation page within 5s.
[ ] **Email**: order confirmation arrives within 5 min.

If a step needs 3+ lines to express, split into multiple checklist items OR move it back to the full step-table format - the checklist isn't the right artifact for that step.

Step 3 - Group by flow

A 30-item flat list is hard to scan. Group:

## Production smoke - release `v1.4.5`

**Tester:** ___________________  **Date:** ___________________  **Time:** ___________________
**Environment:** prod | staging   **Build SHA:** ___________________

### Auth flow

- [ ] **Login** (existing user): `qa-test-user@example.com` + valid pwd → dashboard <3s
- [ ] **Logout**: click `Sign out` → redirect to `/login`
- [ ] **Password reset**: click `Forgot password` → email arrives within 5 min

### Cart + checkout flow

- [ ] **Add to cart**: SKU `BOOK-001` → cart count badge shows "1"
- [ ] **Cart page**: navigate to `/cart` → item visible with qty 1, $24.99
- [ ] **Promo code**: apply `WELCOME10` → subtotal drops to $22.49
- [ ] **Checkout**: complete checkout with Stripe test card 4242 → confirmation page

### Account flow

- [ ] **Profile update**: change email → save → reload → email persists
- [ ] **Order history**: view past orders → most recent test order present

### Sign-off

**Pass / fail / partial:**
**Defects raised:** (list IDs)
**Notes:**

The flow grouping doubles as a coverage check - empty groups mean the smoke doesn't cover that flow.

Step 4 - Time-box and document

A checklist that takes "as long as it takes" gets skipped. Set an explicit budget per group:

| Group               | Items | Budget |
|---------------------|------:|-------:|
| Auth flow            |    3  |  3 min |
| Cart + checkout flow |    4  |  6 min |
| Account flow         |    2  |  3 min |
| **Total**            |   9   | 12 min |

If the actual run exceeds the budget by >50%, the checklist is too long; trim to the highest-signal items.

Step 5 - Pair with a defect-raising flow

Same as the SKILL.md body's defect-raising step - checklist failures need a path to a logged defect:

### Defects raised this run

| # | Item                                          | Observed                            | Severity | Bug ID  |
|---|-----------------------------------------------|-------------------------------------|----------|---------|
| 1 | Promo code: apply WELCOME10                   | Subtotal stayed at $24.99           | high     | BUG-987 |

Step 6 - Versioning

The checklist evolves with the product. Keep it in docs/:

docs/checklists/
├── prod-smoke-v1.md
├── prod-smoke-v2.md          ← current
├── on-call-first-pass-v1.md
└── bug-bash-checkout-v1.md

Bumping the version when the items change (rather than mutating in place) preserves the historical record - useful for audit ("what did the smoke check on 2026-04-15?") and for retrospective on incidents that the smoke missed.

Output format

## Test execution checklists - `<feature/area>`

**Generated from:** `<source - TC suite / test plan / story>`
**Total items:** N
**Total wall-time budget:** M minutes
**Scope:** smoke | first-pass | full sweep | compliance

(per-checklist bodies follow per Step 3)

### Coverage notes

- Auth flow: N items covering login + logout + password reset
- Cart flow: N items covering add + view + checkout
- Areas NOT covered (intentional): admin panel (out of smoke scope),
  internationalized currencies (covered weekly via `prod-smoke-i18n.md`)

Anti-patterns

Anti-patternWhy it failsFix
50-item flat listTester loses focus; coverage drops mid-run.Group by flow, ≤8-10 items per group (Step 3).
Items with multi-line stepsDefeats the checklist's purpose (one-line scan).Split or move to full step-table (Step 2).
No time budget"When you have time" → never run.Per-group budget (Step 4).
One generic checklist for "everything"Tries to be smoke + UAT + compliance; serves none well.Per-purpose checklists; pick scope first (Step 1).
No defect-raising integrationFailed items get logged in chat; the run record is incomplete.Defects-raised block in the sign-off (Step 5).
Checklist mutated in place (no version)Can't tell what was checked when; audit / incident analysis broken.Versioned files (Step 6).
"Smoke" check that takes 45 minutesSmoke ≠ full regression; team skips after deploy.Hard cap at 10-15 min for smoke (Step 1 table).

Limitations

  • Subjective pass/fail. A one-line check ("dashboard loads in <3s") relies on tester judgment. For exact-value checks, use the full step-table format.
  • Coverage gaps invisible. A 10-item smoke won't catch a regression in the 100 areas it doesn't cover. Pair with full regression runs at lower frequency.
  • Tester fatigue. Same checklist run daily becomes mechanical; testers stop noticing the failures. Rotate checklists per week / per tester to keep attention fresh.
  • No automation parity. A passing manual checklist doesn't imply an automated suite would pass; the checks are different by design.

References

  • bug-bash-facilitator - consumes a checklist as the bug-bash kickoff template.
  • smoke-suite-gate (qa-process) - automated equivalent for CI-runnable smoke.

UAT script format

Deep reference for manual-test-script-author SKILL.md. UAT scripts are written for stakeholders, not developers: the end user, subject-matter expert (SME), or solution owner runs the script in business language, and the success criterion is "this works for the business," not "no exceptions thrown." Sign-off is a contractual artifact - upon meeting the acceptance criteria the stakeholder signs off, confirming the product meets defined requirements (uat-wiki (opens in new window)).

When to use this format

  • A release requires formal UAT - B2B contracts, regulated industries (finance, healthcare, gov), enterprise SaaS.
  • A new feature needs business sign-off before launch.
  • A vendor contract requires "customer acceptance" as the payment trigger.
  • A migration / rebuild needs the customer to confirm "yes, this is what we wanted" before old system shutdown.

If the test is technical (verify HTTP 200, validate schema), use the step-table or Gherkin format from the SKILL.md body - the developer-facing formats.

Step 1 - Identify the user journey

Per uat-wiki (opens in new window):

"UAT should be executed against test scenarios representing user journeys rather than technical click-by-click steps."

A UAT script covers one user journey end-to-end, not a single button-click. The journey is what the business stakeholder agreed to in the contract / SOW / acceptance criteria.

Examples:

  • "A new customer signs up, places a first order, and receives confirmation."
  • "An existing customer updates their billing address and the invoice reflects the change next billing cycle."
  • "An admin creates a new user, assigns roles, and the user can log in with the assigned permissions."

Per uat-wiki (opens in new window), select the "three most common or difficult tasks users will perform" - UAT depth, not breadth.

Step 2 - Format

# UAT-001 - New customer first-order flow

**Customer / Stakeholder:** ____________________
**Tester:** ____________________   **Date:** ____________________
**Environment:** UAT   **Build / Version:** v1.4.5

## Business context

This script verifies that a new prospective customer can complete
the full sign-up + first-order journey end-to-end, including
account creation, email confirmation, browsing the catalog, adding
items to cart, completing checkout, and receiving confirmation.

This corresponds to acceptance criterion **AC-1** in the SOW.

## Pre-conditions

- [ ] Test environment is at build `v1.4.5` (verified by tester).
- [ ] Tester has not previously created an account on this UAT
      environment.
- [ ] Test payment method is available: Stripe test card
      4242 4242 4242 4242, any expiry, any CVC.
- [ ] Tester has access to email inbox for `<email>@example.com`.

## Steps

| Step | Action                                                           | Expected outcome                                                        | Pass | Fail | Notes |
|------|------------------------------------------------------------------|-------------------------------------------------------------------------|:----:|:----:|-------|
| 1    | Open `https://uat.example.com/`. Click "Sign up".                  | Sign-up form appears.                                                    |      |      |       |
| 2    | Enter email `uat-001-<initials>@example.com`, set password.        | "Verify your email" prompt appears.                                      |      |      |       |
| 3    | Open the email inbox; click the verification link.                 | Browser opens to dashboard; greeting shows the user's name.              |      |      |       |
| 4    | Browse the catalog. Search for "BOOK-001".                         | Product page loads showing the item details and "Add to cart" button.   |      |      |       |
| 5    | Click "Add to cart". Click the cart icon.                          | Cart page shows "BOOK-001" qty 1, $24.99.                                 |      |      |       |
| 6    | Click "Checkout". Enter shipping address.                          | Order summary shows shipping cost; tax computed per address.             |      |      |       |
| 7    | Enter payment details (test card 4242…). Click "Place order".      | Confirmation page shows order ID; total matches step 6.                  |      |      |       |
| 8    | Open email inbox; verify confirmation email arrives within 5 min.  | Email shows order ID, items, total, expected delivery date.              |      |      |       |

## Acceptance criteria verification

| AC ID  | Description                                                | Verified in step | Pass / fail |
|--------|------------------------------------------------------------|------------------|:-----------:|
| AC-1.1 | New customer can sign up                                    | 1, 2, 3          |             |
| AC-1.2 | New customer can browse the catalog                         | 4                |             |
| AC-1.3 | New customer can add items to cart                          | 5                |             |
| AC-1.4 | New customer can complete checkout                          | 6, 7             |             |
| AC-1.5 | New customer receives order confirmation                    | 8                |             |

## Sign-off

**Tester:** ____________________  **Date:** ____________________

**Customer / Stakeholder:** ____________________  **Date:** ____________________

By signing, the stakeholder confirms that the system meets
acceptance criteria AC-1.1 through AC-1.5 as defined in the
Statement of Work, dated YYYY-MM-DD.

## Defects raised

| Bug ID | Step | Severity | Description |
|--------|------|----------|-------------|
|        |      |          |             |

Step 3 - Business language, not implementation

UAT scripts are read by stakeholders who don't speak HTTP / DB / React. Translate:

Implementation languageBusiness language
POST /orders returns 201The order is placed and the system shows a confirmation.
cart.items.length === 1The cart shows the item.
email.subject === 'Order confirmation'An order confirmation email arrives.
auth_token is set in the cookieThe user is logged in.
INSERT INTO users succeededThe account is created.

The script is about outcomes, not mechanisms.

Step 4 - Three-tasks rule

Per uat-wiki (opens in new window): "the three most common or difficult tasks users will perform" - UAT covers depth, not breadth.

A UAT round shouldn't have 50 scripts. The pattern:

  • 5-10 scripts covering the three most common user journeys.
  • 2-5 scripts covering the two or three most difficult tasks (the ones that go wrong most often in the team's history).

If the contract has 30 acceptance criteria, group them into ~10 journeys; one script per journey.

Step 5 - Run the round, log defects, re-test

Execute each script with the stakeholder. For every failed step, log a defect in the "Defects raised" table (Step 2 format) with its step and severity. Verify: every row in the acceptance-criteria table must read pass before sign-off; if any AC fails, hand the defects to the team, fix them, and re-run the affected scripts. Repeat until all acceptance criteria pass - do not proceed to sign-off with an open failing AC.

Step 6 - Sign-off as artifact

The signed UAT scripts go into the customer record:

  • Hard-copy file (paper-signed for legal records).
  • Soft-copy in the team's contract management system.
  • PR comment in the team's repo (referencing the signed PDF).

The sign-off date triggers the contractual milestone (payment, go-live authorization, vendor approval).

Anti-patterns

Anti-patternWhy it failsFix
Implementation-language stepsStakeholder can't follow.Translate to business language (Step 3).
50 UAT scriptsStakeholder won't run them all; rubber-stamp result.5-10 + 2-5 difficult (Step 4).
Steps without expected outcomesStakeholder doesn't know what "success" means; subjective sign-off.Every step has an expected outcome (Step 2).
No acceptance criteria mappingSign-off doesn't tie back to contract; legal exposure.AC verification table (Step 2).
Script that mixes positive and negative casesStakeholder confused; sign-off ambiguous.Positive cases only in UAT; negative cases via QA's regression suite.
Asking the developer to run UATDefeats the purpose; per uat-wiki (opens in new window) the end user / SME runs it.Hand to the right person.
Skipping sign-off ("we'll do it later")Contract milestone slips; payment delayed; trust eroded.Hard-stop the release without signed scripts.

Limitations

  • Stakeholder availability. UAT requires the customer's time; scheduling is the rate-limiter.
  • Soft acceptance. Stakeholders may sign off without thoroughly testing; the script's structure helps but doesn't enforce.
  • No automation parity. UAT explicitly tests the user experience; automated tests of the same steps don't substitute.
  • Per-customer customization. B2B UAT often requires customer-specific scripts (their data, their workflows). Scale by tenancy, not by template.

References

  • uat-wiki (opens in new window) - User acceptance testing definition: who runs it (end user / SME / solution owner), purpose (sign-off as contractual artifact), format (user journeys, not technical click-steps), three-most-common-or-difficult-tasks rule.
  • gherkin-from-stories (in the qa-bdd plugin) - upstream: emits the ACs this format turns into UAT scripts.

Related skills

bug-bash-facilitator

Builds a structured bug-bash session - pre-bash kit (charter, test-data prep, environment setup, sign-up sheet), in-bash structure (role rotation across cohorts, shared backlog board, real-time triage), scoring rubric (severity weighting, novelty bonus), and a post-bash same-day wrap-up authored by the facilitator (not a standalone debrief: for post-session writeups without a live bash, use the PROOF debrief in exploratory-testing). Use when a team needs a coordinated multi-tester sweep before a release or after a major change - converts an ad-hoc "everyone test for an hour" into a recorded, comparable session with deliverables.

decision-table-test-design

Derives human-readable manual test cases from a business-rule spec via a decision table: identify conditions and actions, build the full 2^n-column matrix, collapse columns with irrelevant entries, strike infeasible combinations, then emit one test case per remaining column (each feasible column is one coverage item per ISTQB CTFL v4.0 section 4.2.3). A deep single-technique walkthrough rather than a broad multi-lens case matrix; the output is manual step/expected cases rather than parameterized test code, and it covers how cases are derived rather than how a case record is structured. Use when a spec's outcome depends on interacting conditions (pricing, eligibility, discounts, routing rules) rather than the boundaries of a single input.

exploratory-charter-author

Authoring workflow that turns a feature spec, risk area, or bug cluster into a session-based exploratory testing charter per Jonathan and James Bach's SBTM - frames the one-sentence mission, scopes 3-7 areas, picks a 60 / 90 / 120 min time-box, suggests tours, and wires the PROOF debrief deliverables. Per Bach, exploratory testing is "performing tests while learning things that may influence the testing" - the charter sets the mission while leaving exact steps to the tester's judgment. Use when a feature has too many unknowns to script (new feature / refactor blast-radius / bug cluster) and a session-based exploration is the right approach. Authors the charter only: the ready-to-fill charter card, session vocabulary, debrief template, and session review live in the exploratory-testing skill this workflow composes with.

exploratory-testing

Plans and runs time-boxed exploratory testing when tester hours are scarce before a release - one tester with two free 45-minute blocks before code freeze, a high-stakes window such as year-end payroll, or a device and environment the scripted suite never touches. Session-based per the Bachs' SBTM: charters (Explore X with Y to discover Z), 60-90 minute sessions, session sheets with TBS metrics, and the PROOF debrief. Bundles the exploration heuristics as references - Whittaker's seven tours, Kelly's FCC CUTS VIDS, Bach's SFDPOT. Broader than exploratory-charter-author, which writes one charter document: this owns the whole cycle from budgeting the available hours to debriefing what was found. Use when deciding what to explore with the time available, and how to run and record those sessions.

state-transition-test-design

Derives human-readable manual test cases from stateful behavior: identify states, events, transitions, and guard conditions, draw the state table including invalid (empty-cell) transitions, choose a coverage level (all states, valid transitions / 0-switch, transition pairs / 1-switch per Chow, all transitions including invalid ones), then derive one test case per coverage item as an event sequence with per-step expected states (ISTQB CTFL v4.0 section 4.2.4). A deep single-technique walkthrough rather than a broad multi-lens case matrix; the output is manual step/expected cases rather than parameterized test code, and it covers how cases are derived rather than how a case record is structured. Use for lifecycle entities (accounts, orders, subscriptions), workflows, and UI wizards where the response to an event depends on the current state.