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 qui guide Claude a travers le cycle TDD complet.
Audit d'Accessibilité Web
Testing
Réalise un audit d'accessibilité web complet selon les normes WCAG.
Générateur de Tests UAT
Testing
Génère des cas de test d'acceptation utilisateur structurés et complets.