name: "run-full-suite" description: "Discover and run all speckit shell test suites across every feature spec in the repository, then print a consolidated cross-spec summary." argument-hint: "Optional filter — spec folder name or number (e.g. '004', 'token'), '--list' to preview without running, or '--fail-fast' to stop after first spec failure" metadata: author: "aeai-project" user-invocable: true disable-model-invocation: false
Purpose
run-full-suite scans every specs/*/spec-integration-tests/ directory for a run-all.sh and/or tc-*.sh files, runs each suite in sequence, and produces a single consolidated report across all specs. This is the project-wide integration test runner equivalent of dotnet test for the speckit shell test layer.
User Input
$ARGUMENTS
- Empty: run every discovered spec suite
- Spec filter (e.g.
004,token,catalog): run only suites whose parent folder name contains the filter (case-insensitive) --list: print all discovered suites with TC counts, do not run--fail-fast: stop after the first spec suite that has any FAIL result
Execution Steps
Step 1 — Discover all spec suites
From the repo root, find all feature scripts directories:
find specs -maxdepth 3 -name "run-all.sh" | sort
For each found run-all.sh, derive:
SPEC_DIR— the parentspecs/{NNN}-{name}/folderSPEC_ID— the{NNN}-{name}folder nameTC_COUNT— number oftc-*.shfiles in the samespec-integration-tests/directoryHAS_CONFIG— whetherconfig.envexists in the scripts directory
If no run-all.sh files are found anywhere under specs/, stop and tell the user:
"No runnable spec suites found. Run /speckit-scripttest on one or more features first."
Apply the $ARGUMENTS filter: keep only suites whose SPEC_ID contains the filter string (case-insensitive). If the filter matches nothing, tell the user which suites exist and stop.
Step 2 — Handle --list
If $ARGUMENTS contains --list:
Print a discovery table and stop without running:
Discovered speckit test suites:
# Spec TC Scripts config.env Runnable
─── ────────────────────────────── ──────────── ──────────── ────────
1 004-token-wallet-service 27 ✓ ✓
2 005-token-adjusted-checkout 0 ✗ ✗ (no tc-*.sh yet)
…
Run '/run-full-suite' to execute all runnable suites.
Step 3 — Check shared prerequisites
Before running any suite, verify tools are available:
command -v curl || echo "WARN: curl not found — HTTP tests will fail across all suites"
command -v jq || echo "WARN: jq not found — JSON assertions will fail across all suites"
command -v psql || echo "WARN: psql not found — DB tests will fail across all suites"
command -v docker || echo "WARN: docker not found — detect-ports.sh (env var refresh) will not be able to derive PG_CONN"
Print a one-line warning for any missing tool. Do not block execution — scripts will report their own FAILs.
Step 4 — Run each suite
For each suite in discovery order (filtered if $ARGUMENTS specified):
-
Print a suite header:
════════════════════════════════════════════════════════ Suite: 004-token-wallet-service (27 scripts) ════════════════════════════════════════════════════════ -
Refresh env vars before running. If
specs/{SPEC_ID}/spec-integration-tests/detect-ports.shexists, run it with--updatefirst soconfig.envreflects the current AppHost run's ports and connection strings (Aspire reassigns ports/passwords on every restart, so a staleconfig.envwill cause spurious failures):
bash "specs/{SPEC_ID}/spec-integration-tests/detect-ports.sh" --update
If the script reports it cannot detect a running project (e.g. the AppHost isn't running), surface that warning to the user before continuing — the suite will likely fail without it.
3. Run the suite using `run_in_terminal`:
```bash
bash "specs/{SPEC_ID}/spec-integration-tests/run-all.sh"
-
Parse stdout for the
TEST SUMMARYblock — extractPassed,Failed,Skipped,Total. -
Store results as
{SPEC_ID, passed, failed, skipped, total, duration_seconds}. -
If
--fail-fastis set andfailed > 0: print the failure details for this suite, then stop and print the partial cross-spec summary (Step 5) with a note that execution was halted early. -
Continue to the next suite regardless of failures (unless
--fail-fast).
Step 5 — Cross-spec summary report
After all suites have run, print the consolidated report:
════════════════════════════════════════════════════════════════════
FULL SUITE REPORT — {ISO datetime}
════════════════════════════════════════════════════════════════════
Spec PASS FAIL SKIP TOTAL Status
───────────────────────────── ───── ───── ───── ───── ──────
004-token-wallet-service 25 2 0 27 ✗ FAIL
005-token-adjusted-checkout — — — — ○ NO SCRIPTS
…
─────────────────────────────────────────────────────────────────
TOTALS {N} {N} {N} {N}
Overall status: {PASS / FAIL}
════════════════════════════════════════════════════════════════════
Status key:
✓ PASS— all TCs in this suite passed✗ FAIL— one or more TCs failed (list them below the table)○ NO SCRIPTS— directory exists but has notc-*.shyet⚠ SKIPPED— suite was excluded by the filter argument
Failure detail block (printed below table if any failures):
Failures:
004-token-wallet-service
✗ tc-022.sh — FAIL: net_balance expected=0 actual=80
✗ tc-043.sh — FAIL: HTTP 409 expected, got 200
Step 6 — Exit guidance
- If all pass: "All {N} test cases passed across {M} spec suites."
- If failures exist:
- "Run
/speckit-runteststo re-run a single spec's suite." - "Run
/run-full-suite 004to isolate a specific spec."
- "Run
- If any suites show
NO SCRIPTS: "Run/speckit-scriptteston those features to generate scripts." - Exit code: surface the failed count — if any
FAIL > 0, treat the overall run as failed (useexit 1semantics when running in terminal).
TDD Red-Green-Refactor
Testing
Skill that guides Claude through the complete TDD cycle.
Web Accessibility Audit
Testing
Performs a comprehensive web accessibility audit following WCAG standards.
UAT Test Case Generator
Testing
Generates structured and comprehensive user acceptance test cases.