* fix(#373): replace unquoted $GSD_SDK with space-safe gsd_run launcher Workflow bash blocks resolved the runtime as GSD_SDK="node $GSD_TOOLS" and invoked it unquoted ($GSD_SDK query ...). On install paths containing spaces (e.g. /Volumes/Mini Me/...) the unquoted expansion word-split into `node /Volumes/Mini gsd-tools.cjs ...`, failing with "Cannot find module '/Volumes/Mini'" and getting masked by `2>/dev/null || echo "{}"` into a silent empty state. Replace the string variable with a single-line shell launcher that defines a gsd_run function, invokes the runtime with a fully-quoted path and "$@", and preserves the local-cjs / installed-gsd-tools-on-PATH fallback (#3668) plus the loud not-found error and install hint. The launcher uses _GSD_SHIM_NAME indirection so no workflow emits the /gsd-tools substring that the do.md dispatcher-parity scanner would misread, and is single-line to stay within the per-file progressive-disclosure line budgets (#2551). The canonical launcher lives in get-shit-done/workflows/_runtime-launcher.snippet.sh, is propagated once per file by scripts/sync-runtime-launcher.cjs, and is locked by tests/runtime-launcher-parity.test.cjs (fails CI on drift, on a reappearing $GSD_SDK token, or on a /gsd-tools substring). Dependent workflow-assertion tests are updated from $GSD_SDK to gsd_run, and the runtime launcher is registered in CONTEXT.md. Fixes #373 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ci(#373): add changeset fragment and allow-test-rule for parity guard The runtime-launcher parity test is a structural drift guard that reads workflow markdown to assert the canonical launcher is present and the retired $GSD_SDK / /gsd-tools tokens are absent; annotate it with allow-test-rule per the no-source-grep lint escape hatch. Add the required .changeset fragment for this user-facing fix. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * test(#373): make parity PATH-fallback assertion cross-platform (Windows) Subtest (E) compared GSD_TOOLS against the Node-side absolute temp path, but the value originates from git-bash which reports the POSIX form, so the prefix comparison failed on windows-latest while the launcher itself worked (the installed stub was invoked). Assert the resolved binary by normalized suffix (/bin/gsd-tools, not .cjs) instead of the absolute prefix; the behavioral stub-invocation assertion is unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
111 lines
3.4 KiB
Markdown
111 lines
3.4 KiB
Markdown
<purpose>
|
|
Cross-phase audit of all UAT and verification files. Finds every outstanding item (pending, skipped, blocked, human_needed), optionally verifies against the codebase to detect stale docs, and produces a prioritized human test plan.
|
|
</purpose>
|
|
|
|
<process>
|
|
|
|
<step name="initialize">
|
|
Run the CLI audit:
|
|
|
|
```bash
|
|
_GSD_SHIM_NAME="gsd-tools.cjs"; GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2; exit 1; fi
|
|
AUDIT=$(gsd_run query audit-uat --raw)
|
|
```
|
|
|
|
Parse JSON for `results` array and `summary` object.
|
|
|
|
If `summary.total_items` is 0:
|
|
```
|
|
## All Clear
|
|
|
|
No outstanding UAT or verification items found across all phases.
|
|
All tests are passing, resolved, or diagnosed with fix plans.
|
|
```
|
|
Stop here.
|
|
</step>
|
|
|
|
<step name="categorize">
|
|
Group items by what's actionable NOW vs. what needs prerequisites:
|
|
|
|
**Testable Now** (no external dependencies):
|
|
- `pending` — tests never run
|
|
- `human_uat` — human verification items
|
|
- `skipped_unresolved` — skipped without clear blocking reason
|
|
|
|
**Needs Prerequisites:**
|
|
- `server_blocked` — needs external server running
|
|
- `device_needed` — needs physical device (not simulator)
|
|
- `build_needed` — needs release/preview build
|
|
- `third_party` — needs external service configuration
|
|
|
|
For each item in "Testable Now", use Grep/Read to check if the underlying feature still exists in the codebase:
|
|
- If the test references a component/function that no longer exists → mark as `stale`
|
|
- If the test references code that has been significantly rewritten → mark as `needs_update`
|
|
- Otherwise → mark as `active`
|
|
</step>
|
|
|
|
<step name="present">
|
|
Present the audit report:
|
|
|
|
```
|
|
## UAT Audit Report
|
|
|
|
**{total_items} outstanding items across {total_files} files in {phase_count} phases**
|
|
|
|
### Testable Now ({count})
|
|
|
|
| # | Phase | Test | Description | Status |
|
|
|---|-------|------|-------------|--------|
|
|
| 1 | {phase} | {test_name} | {expected} | {active/stale/needs_update} |
|
|
...
|
|
|
|
### Needs Prerequisites ({count})
|
|
|
|
| # | Phase | Test | Blocked By | Description |
|
|
|---|-------|------|------------|-------------|
|
|
| 1 | {phase} | {test_name} | {category} | {expected} |
|
|
...
|
|
|
|
### Stale (can be closed) ({count})
|
|
|
|
| # | Phase | Test | Why Stale |
|
|
|---|-------|------|-----------|
|
|
| 1 | {phase} | {test_name} | {reason} |
|
|
...
|
|
|
|
---
|
|
|
|
## Recommended Actions
|
|
|
|
1. **Close stale items:** `/gsd:verify-work {phase}` — mark stale tests as resolved
|
|
2. **Run active tests:** Human UAT test plan below
|
|
3. **When prerequisites met:** Retest blocked items with `/gsd:verify-work {phase}`
|
|
```
|
|
</step>
|
|
|
|
<step name="test_plan">
|
|
Generate a human UAT test plan for "Testable Now" + "active" items only:
|
|
|
|
Group by what can be tested together (same screen, same feature, same prerequisite):
|
|
|
|
```
|
|
## Human UAT Test Plan
|
|
|
|
### Group 1: {category — e.g., "Billing Flow"}
|
|
Prerequisites: {what needs to be running/configured}
|
|
|
|
1. **{Test name}** (Phase {N})
|
|
- Navigate to: {where}
|
|
- Do: {action}
|
|
- Expected: {expected behavior}
|
|
|
|
2. **{Test name}** (Phase {N})
|
|
...
|
|
|
|
### Group 2: {category}
|
|
...
|
|
```
|
|
</step>
|
|
|
|
</process>
|