@tekyzinc/gsd-t 3.12.12 → 3.12.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +73 -26
- package/README.md +76 -76
- package/bin/design-orchestrator.js +1 -1
- package/bin/gsd-t-unattended.cjs +1 -1
- package/bin/gsd-t-unattended.js +1 -1
- package/bin/gsd-t.js +82 -10
- package/commands/gsd-t-backlog-promote.md +6 -6
- package/commands/gsd-t-complete-milestone.md +7 -7
- package/commands/gsd-t-design-audit.md +3 -3
- package/commands/gsd-t-design-build.md +1 -1
- package/commands/gsd-t-design-decompose.md +4 -4
- package/commands/gsd-t-execute.md +1 -1
- package/commands/gsd-t-feature.md +3 -3
- package/commands/gsd-t-gap-analysis.md +3 -3
- package/commands/gsd-t-health.md +3 -3
- package/commands/gsd-t-help.md +10 -10
- package/commands/gsd-t-impact.md +3 -3
- package/commands/gsd-t-init-scan-setup.md +5 -5
- package/commands/gsd-t-init.md +4 -4
- package/commands/gsd-t-log.md +1 -1
- package/commands/gsd-t-milestone.md +2 -2
- package/commands/gsd-t-pause.md +2 -2
- package/commands/gsd-t-prd.md +2 -2
- package/commands/gsd-t-project.md +1 -1
- package/commands/gsd-t-resume.md +4 -4
- package/commands/gsd-t-scan.md +3 -3
- package/commands/gsd-t-setup.md +2 -2
- package/commands/gsd-t-test-sync.md +1 -1
- package/commands/gsd-t-unattended-watch.md +5 -5
- package/commands/gsd-t-unattended.md +9 -9
- package/commands/gsd-t-wave.md +4 -4
- package/commands/gsd.md +17 -17
- package/docs/GSD-T-README.md +68 -68
- package/docs/architecture.md +8 -8
- package/docs/context-budget-recovery-plan.md +2 -2
- package/docs/infrastructure.md +7 -7
- package/docs/methodology.md +1 -1
- package/docs/neo4j-setup.md +2 -2
- package/docs/prd-gsd2-hybrid.md +1 -1
- package/docs/prd-harness-evolution.md +1 -1
- package/docs/requirements.md +2 -2
- package/docs/unattended-config.md +1 -1
- package/docs/unattended-windows-caveats.md +1 -1
- package/docs/workflows.md +1 -1
- package/package.json +1 -1
- package/scripts/context-meter/threshold.test.js +2 -2
- package/scripts/gsd-t-auto-route.js +1 -1
- package/scripts/gsd-t-context-meter.e2e.test.js +1 -1
- package/scripts/gsd-t-context-meter.test.js +1 -1
- package/scripts/gsd-t-update-check.js +1 -1
- package/templates/CLAUDE-global.md +18 -163
- package/templates/stacks/_markdown.md +32 -0
- package/templates/stacks/design-to-code.md +1 -1
package/commands/gsd-t-setup.md
CHANGED
|
@@ -192,7 +192,7 @@ Options:
|
|
|
192
192
|
[2] web-app — "User-facing app: accessible, performant, visually consistent. UX is the product."
|
|
193
193
|
[3] cli — "Developer CLI: fast, predictable, clear output. Error messages explain what went wrong and how to fix it."
|
|
194
194
|
[4] custom — Write your own 1–3 sentences
|
|
195
|
-
[5] skip — No Quality North Star (can add later via /
|
|
195
|
+
[5] skip — No Quality North Star (can add later via /gsd-t-setup)
|
|
196
196
|
```
|
|
197
197
|
|
|
198
198
|
If the user picks 1–3, use the corresponding preset text from the table below.
|
|
@@ -240,7 +240,7 @@ Would you like to generate a design brief at .gsd-t/contracts/design-brief.md?
|
|
|
240
240
|
This gives subagents a consistent visual language reference (colors, typography, spacing, patterns).
|
|
241
241
|
|
|
242
242
|
[1] Yes — generate now (sources: Tailwind config if exists, then project defaults)
|
|
243
|
-
[2] No — skip for now (can generate later by re-running /
|
|
243
|
+
[2] No — skip for now (can generate later by re-running /gsd-t-setup)
|
|
244
244
|
```
|
|
245
245
|
|
|
246
246
|
If user picks 1: generate `.gsd-t/contracts/design-brief.md` using the format defined in `.gsd-t/contracts/design-brief-contract.md` (or the standard format):
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Model**: haiku (polling a state file is mechanical — no reasoning needed)
|
|
4
4
|
|
|
5
|
-
You are running one tick of the unattended supervisor watch loop. This command is **stateless**: every firing re-reads `.gsd-t/.unattended/supervisor.pid` + `state.json` + `run.log` from disk and makes a fresh decision. There is no in-memory state between ticks, and a `/clear` followed by `/
|
|
5
|
+
You are running one tick of the unattended supervisor watch loop. This command is **stateless**: every firing re-reads `.gsd-t/.unattended/supervisor.pid` + `state.json` + `run.log` from disk and makes a fresh decision. There is no in-memory state between ticks, and a `/clear` followed by `/gsd-t-resume` during a live unattended run is a no-op.
|
|
6
6
|
|
|
7
7
|
The watch loop is the user's visibility surface into the running supervisor. It fires every 270 seconds (inside the 5-minute prompt-cache TTL) and either:
|
|
8
8
|
1. Renders a compact status block + reschedules itself, OR
|
|
@@ -245,7 +245,7 @@ The supervisor process is gone but it did not remove its PID file — this is a
|
|
|
245
245
|
|
|
246
246
|
Recovery: inspect .gsd-t/.unattended/run.log and .gsd-t/.unattended/state.json.
|
|
247
247
|
Remove the stale PID file with: rm .gsd-t/.unattended/supervisor.pid
|
|
248
|
-
Then relaunch with: /
|
|
248
|
+
Then relaunch with: /gsd-t-unattended
|
|
249
249
|
```
|
|
250
250
|
|
|
251
251
|
**STOP** — do NOT reschedule. End the turn.
|
|
@@ -296,7 +296,7 @@ The supervisor is still alive but has transitioned to a terminal status on its l
|
|
|
296
296
|
Total elapsed: {Hh Mm}
|
|
297
297
|
Log: {LOG_PATH}
|
|
298
298
|
|
|
299
|
-
Stop sentinel was honored between worker iterations. Relaunch with /
|
|
299
|
+
Stop sentinel was honored between worker iterations. Relaunch with /gsd-t-unattended.
|
|
300
300
|
```
|
|
301
301
|
|
|
302
302
|
**STOP** — do NOT reschedule. End the turn.
|
|
@@ -321,7 +321,7 @@ Format rules:
|
|
|
321
321
|
📋 Tasks: {TASKS_DONE}/{TASKS_TOTAL} [{progress bar}] · elapsed {Hh Mm}
|
|
322
322
|
🔧 {DOMAIN_SUMMARY or "No domains yet (pre-partition)"}
|
|
323
323
|
⏱ Iter {ITER}/{MAX_ITER} · last tick {tickAge} · last exit {LAST_EXIT} ({durationSec}s)
|
|
324
|
-
⏰ Next tick in 270s · Stop: /
|
|
324
|
+
⏰ Next tick in 270s · Stop: /gsd-t-unattended-stop
|
|
325
325
|
```
|
|
326
326
|
|
|
327
327
|
Progress bar rendering (8 chars wide):
|
|
@@ -392,7 +392,7 @@ After the tool call, end the turn. Do NOT output a "Next Up" hint, do NOT contin
|
|
|
392
392
|
## Notes
|
|
393
393
|
|
|
394
394
|
- **Stateless**: every tick re-reads state from disk. No memory between firings.
|
|
395
|
-
- **Terminal = STOP**: any terminal branch (3, 4, 5) ends the loop. The user relaunches via `/
|
|
395
|
+
- **Terminal = STOP**: any terminal branch (3, 4, 5) ends the loop. The user relaunches via `/gsd-t-unattended` if needed.
|
|
396
396
|
- **Never spawn subagents**: this is a pure polling command — no Task, no TeamCreate, no observability logging block.
|
|
397
397
|
- **No branch guard, no pre-commit gate, no doc ripple**: this command does not modify any files.
|
|
398
398
|
- **Stale-tick tolerance**: if `lastTick` is >540s old but PID is still alive, warn soft (`⚠️ stale`) but still reschedule — the supervisor may be mid-worker.
|
|
@@ -16,7 +16,7 @@ Run via Bash:
|
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
18
|
if [ ! -f ".gsd-t/progress.md" ]; then
|
|
19
|
-
echo "ERROR: .gsd-t/progress.md not found — not a GSD-T project. Run /
|
|
19
|
+
echo "ERROR: .gsd-t/progress.md not found — not a GSD-T project. Run /gsd-t-init first."
|
|
20
20
|
exit 1
|
|
21
21
|
fi
|
|
22
22
|
```
|
|
@@ -61,10 +61,10 @@ If `PID_RUNNING=true`, **STOP** and print:
|
|
|
61
61
|
```
|
|
62
62
|
🔴 Unattended supervisor is already running (PID {PID}).
|
|
63
63
|
|
|
64
|
-
Use /
|
|
64
|
+
Use /gsd-t-unattended-stop to request a clean halt, then wait for the
|
|
65
65
|
watch loop to confirm it has stopped before relaunching.
|
|
66
66
|
|
|
67
|
-
To just watch the current run: /
|
|
67
|
+
To just watch the current run: /gsd-t-unattended-watch
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
Do NOT spawn a second supervisor. End the turn.
|
|
@@ -137,7 +137,7 @@ The `/gsd-t-resume` worker already knows how to chain through phases automatical
|
|
|
137
137
|
```
|
|
138
138
|
❌ No active milestone found and none identifiable from context.
|
|
139
139
|
|
|
140
|
-
Specify one explicitly: /
|
|
140
|
+
Specify one explicitly: /gsd-t-unattended --milestone=M1
|
|
141
141
|
```
|
|
142
142
|
- **STOP.** Do NOT spawn.
|
|
143
143
|
|
|
@@ -230,7 +230,7 @@ If `PREFLIGHT=fail`, **STOP** and print:
|
|
|
230
230
|
• {name}
|
|
231
231
|
Install: {install}
|
|
232
232
|
|
|
233
|
-
Install the missing software and retry: /
|
|
233
|
+
Install the missing software and retry: /gsd-t-unattended
|
|
234
234
|
```
|
|
235
235
|
|
|
236
236
|
End the turn. Do NOT spawn.
|
|
@@ -393,7 +393,7 @@ If `LIVENESS=dead`, the supervisor crashed at startup. Print diagnostics and **S
|
|
|
393
393
|
• Protected branch or dirty worktree rejected by safety rails
|
|
394
394
|
• Permissions error on .gsd-t/.unattended/ directory
|
|
395
395
|
|
|
396
|
-
Fix the issue above and retry: /
|
|
396
|
+
Fix the issue above and retry: /gsd-t-unattended
|
|
397
397
|
```
|
|
398
398
|
|
|
399
399
|
End the turn without scheduling a watch tick.
|
|
@@ -415,8 +415,8 @@ Print the launch confirmation block:
|
|
|
415
415
|
Watch: ScheduleWakeup every 270s
|
|
416
416
|
|
|
417
417
|
The supervisor is running detached — it survives /clear and terminal close.
|
|
418
|
-
Stop gracefully: /
|
|
419
|
-
Watch manually: /
|
|
418
|
+
Stop gracefully: /gsd-t-unattended-stop
|
|
419
|
+
Watch manually: /gsd-t-unattended-watch
|
|
420
420
|
```
|
|
421
421
|
|
|
422
422
|
## Step 5: Schedule the First Watch Tick
|
|
@@ -446,6 +446,6 @@ After the tool call, end the turn. The in-session watch loop takes over from her
|
|
|
446
446
|
- **Platform helper**: uses `spawnSupervisor` from `bin/gsd-t-unattended-platform.cjs` — never hand-rolls `child_process.spawn` directly. This handles macOS/Linux/Windows differences.
|
|
447
447
|
- **Dry-run**: `--dry-run` prints the would-be invocation without spawning. Useful for validating flags before a long overnight run.
|
|
448
448
|
- **No doc ripple, no pre-commit gate**: this command spawns a background process; it does not modify any source files or contracts.
|
|
449
|
-
- **watch command is stateless**: after this command returns, every `/
|
|
449
|
+
- **watch command is stateless**: after this command returns, every `/gsd-t-unattended-watch` tick re-reads state from disk. There is no in-memory state to preserve.
|
|
450
450
|
|
|
451
451
|
$ARGUMENTS
|
package/commands/gsd-t-wave.md
CHANGED
|
@@ -49,7 +49,7 @@ After reading progress.md, verify it contains the required fields before proceed
|
|
|
49
49
|
- **Domains table**: A `| Domain |` table with at least one row
|
|
50
50
|
|
|
51
51
|
If ANY of these are missing or malformed, STOP and report:
|
|
52
|
-
"Wave cannot proceed — progress.md is missing required fields: {list}. Run `/
|
|
52
|
+
"Wave cannot proceed — progress.md is missing required fields: {list}. Run `/gsd-t-status` to inspect, or `/gsd-t-init` to repair."
|
|
53
53
|
Do NOT attempt to fix progress.md yourself — that risks data loss.
|
|
54
54
|
|
|
55
55
|
## Step 2: Determine Resume Point
|
|
@@ -304,8 +304,8 @@ Summary:
|
|
|
304
304
|
|
|
305
305
|
Next steps:
|
|
306
306
|
- Push tag: git push origin milestone/{name}
|
|
307
|
-
- Start next: /
|
|
308
|
-
- View roadmap: /
|
|
307
|
+
- Start next: /gsd-t-milestone "{next}"
|
|
308
|
+
- View roadmap: /gsd-t-status
|
|
309
309
|
═══════════════════════════════════════════════════════════════════════════════
|
|
310
310
|
```
|
|
311
311
|
|
|
@@ -313,7 +313,7 @@ Next steps:
|
|
|
313
313
|
|
|
314
314
|
If the user interrupts or a phase agent fails:
|
|
315
315
|
1. The current phase agent saves its own state to `.gsd-t/progress.md`
|
|
316
|
-
2. Report: "Paused at {phase}. Run `/
|
|
316
|
+
2. Report: "Paused at {phase}. Run `/gsd-t-resume` to continue."
|
|
317
317
|
3. Resume will pick up from the last completed phase
|
|
318
318
|
|
|
319
319
|
## Error Recovery
|
package/commands/gsd.md
CHANGED
|
@@ -28,7 +28,7 @@ Before semantic evaluation, determine if this is a **continuation** of an alread
|
|
|
28
28
|
|
|
29
29
|
For non-continuation messages, decide whether the request is **conversational** (user is thinking, exploring, or articulating — no command spawn) or **workflow** (user wants work done — route to a GSD-T command via Step 2).
|
|
30
30
|
|
|
31
|
-
This step replaces the retired `/
|
|
31
|
+
This step replaces the retired `/gsd-t-prompt`, `/gsd-t-brainstorm`, and `/gsd-t-discuss` commands, whose use cases the router now handles inline.
|
|
32
32
|
|
|
33
33
|
### Conversational triggers (respond inline, NO command spawn):
|
|
34
34
|
|
|
@@ -74,7 +74,7 @@ Read the **Command Summaries** section of `commands/gsd-t-help.md` (or the in-me
|
|
|
74
74
|
- **1 match** → Route immediately
|
|
75
75
|
- **2+ matches** → Pick the best fit based on scope and context. Show the runner-up:
|
|
76
76
|
```
|
|
77
|
-
→ Routing to /
|
|
77
|
+
→ Routing to /gsd-t-{command}: {reason}
|
|
78
78
|
(also considered: gsd-t-{runner-up} — Esc to switch)
|
|
79
79
|
```
|
|
80
80
|
|
|
@@ -136,7 +136,7 @@ When cleanup is needed, do it at the start of `design-decompose` before reading
|
|
|
136
136
|
|
|
137
137
|
### New request (from Step 2):
|
|
138
138
|
```
|
|
139
|
-
→ Routing to /
|
|
139
|
+
→ Routing to /gsd-t-{command}: {brief reason}
|
|
140
140
|
```
|
|
141
141
|
|
|
142
142
|
### Conversational (from Step 2.5):
|
|
@@ -148,13 +148,13 @@ Follow this header with your direct in-line response — ask clarifying question
|
|
|
148
148
|
### Design pipeline (from design-to-code routing):
|
|
149
149
|
```
|
|
150
150
|
→ Design pipeline: clean → decompose → build
|
|
151
|
-
Starting: /
|
|
151
|
+
Starting: /gsd-t-design-decompose
|
|
152
152
|
```
|
|
153
153
|
Use this format when the router detects a design-to-code pipeline. Show the full pipeline with the current step highlighted. Auto-advance between steps without returning to the router.
|
|
154
154
|
|
|
155
155
|
### Continuation (from Step 2a):
|
|
156
156
|
```
|
|
157
|
-
→ /gsd ──▶ continue /
|
|
157
|
+
→ /gsd ──▶ continue /gsd-t-{last-command}
|
|
158
158
|
```
|
|
159
159
|
|
|
160
160
|
Where `{last-command}` is:
|
|
@@ -188,10 +188,10 @@ Valid command slugs: `quick`, `debug`, `feature`, `execute`, `milestone`, `proje
|
|
|
188
188
|
|
|
189
189
|
**RIGHT ✅** — always use the exact command slug:
|
|
190
190
|
```
|
|
191
|
-
→ Routing to /
|
|
192
|
-
→ Routing to /
|
|
193
|
-
→ /gsd ──▶ continue /
|
|
194
|
-
→ /gsd ──▶ continue /
|
|
191
|
+
→ Routing to /gsd-t-execute: implement auth feature across backend
|
|
192
|
+
→ Routing to /gsd-t-debug: investigate login bug before fixing
|
|
193
|
+
→ /gsd ──▶ continue /gsd-t-execute
|
|
194
|
+
→ /gsd ──▶ continue /gsd-t-quick
|
|
195
195
|
```
|
|
196
196
|
|
|
197
197
|
This MUST be the very first line of your response. Then immediately execute that command's full workflow, passing `$ARGUMENTS` through.
|
|
@@ -203,16 +203,16 @@ This MUST be the very first line of your response. Then immediately execute that
|
|
|
203
203
|
If called with no arguments, show:
|
|
204
204
|
|
|
205
205
|
```
|
|
206
|
-
Usage: /
|
|
206
|
+
Usage: /gsd {describe what you want}
|
|
207
207
|
|
|
208
208
|
Examples:
|
|
209
|
-
/
|
|
210
|
-
/
|
|
211
|
-
/
|
|
212
|
-
/
|
|
213
|
-
/
|
|
214
|
-
/
|
|
215
|
-
/
|
|
209
|
+
/gsd Fix the login timeout bug
|
|
210
|
+
/gsd Add dark mode support
|
|
211
|
+
/gsd Scan the codebase for tech debt
|
|
212
|
+
/gsd What's the current progress?
|
|
213
|
+
/gsd Compare this spec against our code
|
|
214
|
+
/gsd Help me think through this integration before I start
|
|
215
|
+
/gsd I'm stuck — what are other angles?
|
|
216
216
|
|
|
217
217
|
I'll route to the right GSD-T command — or just think out loud with you
|
|
218
218
|
if you're still figuring things out (no command spawn).
|
package/docs/GSD-T-README.md
CHANGED
|
@@ -24,34 +24,34 @@ cd my-project
|
|
|
24
24
|
claude
|
|
25
25
|
|
|
26
26
|
# 2. Full onboarding (git + init + scan + setup in one)
|
|
27
|
-
/
|
|
27
|
+
/gsd-t-init-scan-setup
|
|
28
28
|
|
|
29
29
|
# Or step by step:
|
|
30
|
-
/
|
|
30
|
+
/gsd-t-init my-project
|
|
31
31
|
|
|
32
32
|
# 3. Define what you're building
|
|
33
|
-
/
|
|
33
|
+
/gsd-t-milestone "User Authentication System"
|
|
34
34
|
|
|
35
35
|
# 5. Let it rip (auto-advances through all phases)
|
|
36
|
-
/
|
|
36
|
+
/gsd-t-wave
|
|
37
37
|
|
|
38
38
|
# Or go phase by phase for more control:
|
|
39
|
-
/
|
|
40
|
-
/
|
|
41
|
-
/
|
|
42
|
-
/
|
|
43
|
-
/
|
|
44
|
-
/
|
|
45
|
-
/
|
|
46
|
-
/
|
|
47
|
-
/
|
|
39
|
+
/gsd-t-partition
|
|
40
|
+
/gsd-t-discuss
|
|
41
|
+
/gsd-t-plan
|
|
42
|
+
/gsd-t-impact
|
|
43
|
+
/gsd-t-execute
|
|
44
|
+
/gsd-t-test-sync
|
|
45
|
+
/gsd-t-integrate
|
|
46
|
+
/gsd-t-verify
|
|
47
|
+
/gsd-t-complete-milestone
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
## Resuming After a Break
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
53
|
claude
|
|
54
|
-
/
|
|
54
|
+
/gsd-t-resume
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
GSD-T reads all state files and tells you exactly where you left off.
|
|
@@ -64,86 +64,86 @@ GSD-T reads all state files and tells you exactly where you left off.
|
|
|
64
64
|
|
|
65
65
|
| Command | Purpose | Auto |
|
|
66
66
|
|---------|---------|------|
|
|
67
|
-
| `/
|
|
67
|
+
| `/gsd {request}` | Describe what you need → auto-routes to the right command | Manual |
|
|
68
68
|
| _(any plain text)_ | Auto-routed via UserPromptSubmit hook — no leading `/` needed | Auto |
|
|
69
69
|
|
|
70
70
|
### Help & Onboarding
|
|
71
71
|
|
|
72
72
|
| Command | Purpose | Auto |
|
|
73
73
|
|---------|---------|------|
|
|
74
|
-
| `/
|
|
75
|
-
| `/
|
|
76
|
-
| `/
|
|
77
|
-
| `/
|
|
78
|
-
| `/
|
|
74
|
+
| `/gsd-t-help` | List all commands with descriptions | Manual |
|
|
75
|
+
| `/gsd-t-help {cmd}` | Detailed help for specific command | Manual |
|
|
76
|
+
| `/gsd-t-prompt` | Help formulate your idea before committing | Manual |
|
|
77
|
+
| `/gsd-t-brainstorm` | Creative exploration and idea generation | Manual |
|
|
78
|
+
| `/gsd-t-prd` | Generate a GSD-T-optimized Product Requirements Document | Manual |
|
|
79
79
|
|
|
80
80
|
### Project Initialization
|
|
81
81
|
|
|
82
82
|
| Command | Purpose | Auto |
|
|
83
83
|
|---------|---------|------|
|
|
84
|
-
| `/
|
|
85
|
-
| `/
|
|
86
|
-
| `/
|
|
87
|
-
| `/
|
|
88
|
-
| `/
|
|
89
|
-
| `/
|
|
90
|
-
| `/
|
|
91
|
-
| `/
|
|
92
|
-
| `/
|
|
93
|
-
| `/
|
|
84
|
+
| `/gsd-t-setup` | Generate or restructure project CLAUDE.md | Manual |
|
|
85
|
+
| `/gsd-t-init` | Initialize GSD-T structure in project | Manual |
|
|
86
|
+
| `/gsd-t-init-scan-setup` | Full onboarding: git + init + scan + setup in one | Manual |
|
|
87
|
+
| `/gsd-t-project` | Full project → milestone roadmap | Manual |
|
|
88
|
+
| `/gsd-t-feature` | Major feature → impact analysis + milestones | Manual |
|
|
89
|
+
| `/gsd-t-scan` | Deep codebase analysis → techdebt.md | Manual |
|
|
90
|
+
| `/gsd-t-gap-analysis` | Requirements gap analysis — spec vs. existing code | Manual |
|
|
91
|
+
| `/gsd-t-promote-debt` | Convert techdebt items to milestones | Manual |
|
|
92
|
+
| `/gsd-t-populate` | Auto-populate docs from existing codebase | Manual |
|
|
93
|
+
| `/gsd-t-design-decompose` | Decompose design into element/widget/page contracts | Manual |
|
|
94
94
|
|
|
95
95
|
### Milestone Workflow
|
|
96
96
|
|
|
97
97
|
| Command | Purpose | Auto |
|
|
98
98
|
|---------|---------|------|
|
|
99
|
-
| `/
|
|
100
|
-
| `/
|
|
101
|
-
| `/
|
|
102
|
-
| `/
|
|
103
|
-
| `/
|
|
104
|
-
| `/
|
|
105
|
-
| `/
|
|
106
|
-
| `/
|
|
99
|
+
| `/gsd-t-milestone` | Define new milestone | Manual |
|
|
100
|
+
| `/gsd-t-partition` | Decompose into domains + contracts | In wave |
|
|
101
|
+
| `/gsd-t-discuss` | Multi-perspective design exploration | In wave |
|
|
102
|
+
| `/gsd-t-plan` | Create atomic task lists per domain (tasks auto-split to fit one context window) | In wave |
|
|
103
|
+
| `/gsd-t-impact` | Analyze downstream effects | In wave |
|
|
104
|
+
| `/gsd-t-execute` | Run tasks — task-level fresh dispatch, worktree isolation, adaptive replanning, stack rules injection | In wave |
|
|
105
|
+
| `/gsd-t-test-sync` | Sync tests with code changes | In wave |
|
|
106
|
+
| `/gsd-t-qa` | QA agent — test generation, execution, gap reporting | Auto-spawned |
|
|
107
107
|
| *Red Team* | Adversarial QA — spawns after QA passes to find bugs the builder missed | Auto-spawned |
|
|
108
|
-
| `/
|
|
109
|
-
| `/
|
|
110
|
-
| `/
|
|
111
|
-
| `/
|
|
108
|
+
| `/gsd-t-doc-ripple` | Automated document ripple — update downstream docs after code changes | Auto-spawned |
|
|
109
|
+
| `/gsd-t-integrate` | Wire domains together | In wave |
|
|
110
|
+
| `/gsd-t-verify` | Run quality gates + goal-backward verification → auto-invokes complete-milestone | In wave |
|
|
111
|
+
| `/gsd-t-complete-milestone` | Archive + git tag (auto-invoked by verify, also standalone) | In wave |
|
|
112
112
|
|
|
113
113
|
### Automation & Utilities
|
|
114
114
|
|
|
115
115
|
| Command | Purpose | Auto |
|
|
116
116
|
|---------|---------|------|
|
|
117
|
-
| `/
|
|
118
|
-
| `/
|
|
119
|
-
| `/
|
|
120
|
-
| `/
|
|
121
|
-
| `/
|
|
122
|
-
| `/
|
|
123
|
-
| `/
|
|
124
|
-
| `/
|
|
125
|
-
| `/
|
|
126
|
-
| `/
|
|
127
|
-
| `/
|
|
128
|
-
| `/
|
|
129
|
-
| `/
|
|
130
|
-
| `/
|
|
131
|
-
| `/
|
|
132
|
-
| `/
|
|
133
|
-
| `/
|
|
117
|
+
| `/gsd-t-unattended` | Launch detached supervisor — runs active milestone to completion with zero human intervention | Manual |
|
|
118
|
+
| `/gsd-t-unattended-watch` | Watch tick — fires every 270s via ScheduleWakeup, reports supervisor status | Auto |
|
|
119
|
+
| `/gsd-t-unattended-stop` | Touch stop sentinel — supervisor halts after current worker finishes | Manual |
|
|
120
|
+
| `/gsd-t-wave` | Full cycle, auto-advances all phases | Manual |
|
|
121
|
+
| `/gsd-t-status` | Cross-domain progress view with token breakdown, global ELO and cross-project rankings | Manual |
|
|
122
|
+
| `/gsd-t-resume` | Restore context, continue | Manual |
|
|
123
|
+
| `/gsd-t-quick` | Fast task with GSD-T guarantees | Manual |
|
|
124
|
+
| `/gsd-t-visualize` | Launch browser dashboard — SSE server + React Flow agent visualization | Manual |
|
|
125
|
+
| `/gsd-t-debug` | Systematic debugging with state | Manual |
|
|
126
|
+
| `/gsd-t-metrics` | View task telemetry, process ELO, signal distribution, domain health, and cross-project comparison (`--cross-project`) | Manual |
|
|
127
|
+
| `/gsd-t-health` | Validate .gsd-t/ structure, optionally repair | Manual |
|
|
128
|
+
| `/gsd-t-pause` | Save exact position for reliable resume | Manual |
|
|
129
|
+
| `/gsd-t-log` | Sync progress Decision Log with recent git activity | Manual |
|
|
130
|
+
| `/gsd-t-version-update` | Update GSD-T to latest version | Manual |
|
|
131
|
+
| `/gsd-t-version-update-all` | Update GSD-T + all registered projects | Manual |
|
|
132
|
+
| `/gsd-t-triage-and-merge` | Auto-review, merge, and publish GitHub branches | Manual |
|
|
133
|
+
| `/gsd-t-design-audit` | Compare built screen against Figma — per-widget deviation report with severity | Manual |
|
|
134
134
|
| `/global-change` | Apply file changes (copy/insert/update/delete) across all GSD-T projects | Manual |
|
|
135
135
|
|
|
136
136
|
### Backlog Management
|
|
137
137
|
|
|
138
138
|
| Command | Purpose | Auto |
|
|
139
139
|
|---------|---------|------|
|
|
140
|
-
| `/
|
|
141
|
-
| `/
|
|
142
|
-
| `/
|
|
143
|
-
| `/
|
|
144
|
-
| `/
|
|
145
|
-
| `/
|
|
146
|
-
| `/
|
|
140
|
+
| `/gsd-t-backlog-add` | Capture item, auto-categorize, append to backlog | Manual |
|
|
141
|
+
| `/gsd-t-backlog-list` | Filtered, ordered view of backlog items | Manual |
|
|
142
|
+
| `/gsd-t-backlog-move` | Reorder items by position (priority) | Manual |
|
|
143
|
+
| `/gsd-t-backlog-edit` | Modify backlog entry fields | Manual |
|
|
144
|
+
| `/gsd-t-backlog-remove` | Drop item with optional reason | Manual |
|
|
145
|
+
| `/gsd-t-backlog-promote` | Refine, classify, launch GSD-T workflow | Manual |
|
|
146
|
+
| `/gsd-t-backlog-settings` | Manage types, apps, categories, defaults | Manual |
|
|
147
147
|
|
|
148
148
|
---
|
|
149
149
|
|
|
@@ -293,7 +293,7 @@ Run the active milestone to completion over hours or days with zero human interv
|
|
|
293
293
|
|
|
294
294
|
**Relay model**: Each iteration spawns a fresh `claude -p` session with a compact prompt derived from `.gsd-t/progress.md` state. The supervisor waits for the worker to exit, records the exit code in `state.json`, runs safety checks (gutter detection, blocker sentinel scan), and spawns the next worker. Workers never overlap. Context rot is impossible — each worker starts clean.
|
|
295
295
|
|
|
296
|
-
**Watch loop**: `/
|
|
296
|
+
**Watch loop**: `/gsd-t-unattended` starts an in-session ScheduleWakeup loop that ticks every 270 seconds. Each tick reads `state.json` and `supervisor.pid` to render a live progress block. When the supervisor reaches a terminal state (`done`, `failed`, `stopped`), the watch loop stops rescheduling and prints a final summary. A `/clear` + `/gsd-t-resume` transparently re-attaches: the resume command checks for a live `supervisor.pid` and re-starts the watch loop automatically.
|
|
297
297
|
|
|
298
298
|
**Safety rails**: Branch protection (refuses to run on `main`/`master`/`release/*` by default), dirty-tree check (whitelists GSD-T runtime files), per-iteration gutter detection (repeated error patterns, file thrash, no-progress stall), wall-clock and iteration caps, and a blocker sentinel that halts on unrecoverable worker errors.
|
|
299
299
|
|
|
@@ -405,7 +405,7 @@ copy *.md %USERPROFILE%\.claude\commands\
|
|
|
405
405
|
cp *.md ~/.claude/commands/
|
|
406
406
|
```
|
|
407
407
|
|
|
408
|
-
Verify with: `/
|
|
408
|
+
Verify with: `/gsd-t-help`
|
|
409
409
|
|
|
410
410
|
---
|
|
411
411
|
|
package/docs/architecture.md
CHANGED
|
@@ -52,7 +52,7 @@ The framework has no runtime — it is consumed entirely by Claude Code's slash
|
|
|
52
52
|
- **Pre-task experience retrieval (execute, debug)**: Grep Decision Log for `[failure]`/`[learning]` entries matching current domain before spawning subagent — Reflexion pattern without fine-tuning. Writes `experience_retrieval` event.
|
|
53
53
|
- **Distillation step (complete-milestone Step 2.5)**: Scans `.gsd-t/events/*.jsonl` for patterns seen ≥3 times, proposes CLAUDE.md / constraints.md rule additions, user confirms before write.
|
|
54
54
|
### Auto-Route + Auto-Update Hooks (M16 — complete)
|
|
55
|
-
- **`scripts/gsd-t-auto-route.js`** (39 lines): UserPromptSubmit hook. Reads JSON from stdin (`{ prompt, cwd, session_id }`). If `.gsd-t/progress.md` does not exist in cwd → exits silently. If prompt starts with `/` → exits silently. If plain text in a GSD-T project → emits `[GSD-T AUTO-ROUTE]` signal to Claude's context, routing the message through `/
|
|
55
|
+
- **`scripts/gsd-t-auto-route.js`** (39 lines): UserPromptSubmit hook. Reads JSON from stdin (`{ prompt, cwd, session_id }`). If `.gsd-t/progress.md` does not exist in cwd → exits silently. If prompt starts with `/` → exits silently. If plain text in a GSD-T project → emits `[GSD-T AUTO-ROUTE]` signal to Claude's context, routing the message through `/gsd`. Catches all exceptions — never blocks the prompt.
|
|
56
56
|
- **`scripts/gsd-t-update-check.js`** (79 lines): SessionStart hook. Reads `~/.claude/.gsd-t-version`. Reads/refreshes `~/.claude/.gsd-t-update-check` cache (1h TTL). If newer version available: runs `npm install -g @tekyzinc/gsd-t@{latest}` + `gsd-t update-all` via execSync. Outputs `[GSD-T AUTO-UPDATE]`, `[GSD-T UPDATE]`, or `[GSD-T]` banner. NOTE: No module.exports — untestable as module (TD-081). Version string not validated before execSync (SEC-N28).
|
|
57
57
|
|
|
58
58
|
### Scan Visual Output (M17 — complete v2.34.10)
|
|
@@ -72,9 +72,9 @@ The framework has no runtime — it is consumed entirely by Claude Code's slash
|
|
|
72
72
|
|
|
73
73
|
### Headless Mode (M23 — complete)
|
|
74
74
|
- **doHeadless(args)**: Dispatch function for the `headless` CLI subcommand.
|
|
75
|
-
- **doHeadlessExec(command, cmdArgs, flags)**: Wraps `claude -p "/gsd-t-{command}"` via `execFileSync`. Verifies claude CLI availability, enforces timeout, writes log file if `--log` requested. Returns structured JSON if `--json` flag set. (M36 Phase 0: prompt form is `/gsd-t-X`, NOT `/
|
|
75
|
+
- **doHeadlessExec(command, cmdArgs, flags)**: Wraps `claude -p "/gsd-t-{command}"` via `execFileSync`. Verifies claude CLI availability, enforces timeout, writes log file if `--log` requested. Returns structured JSON if `--json` flag set. (M36 Phase 0: prompt form is `/gsd-t-X`, NOT `/gsd-t-X` — non-interactive mode rejects the `/` namespace prefix.)
|
|
76
76
|
- **parseHeadlessFlags(args)**: Extracts `--json`, `--timeout=N`, `--log` from raw args. Returns `{ flags, positional }`.
|
|
77
|
-
- **buildHeadlessCmd(command, cmdArgs)**: Builds the bare `/gsd-t-{command}` prompt string. Interactive-mode
|
|
77
|
+
- **buildHeadlessCmd(command, cmdArgs)**: Builds the bare `/gsd-t-{command}` prompt string. Interactive-mode `/` prefix deliberately omitted — see `.gsd-t/M36-spike-findings.md` Spike A.
|
|
78
78
|
- **mapHeadlessExitCode(processExitCode, output)**: Maps process exit code + output text patterns to GSD-T exit codes (0–5).
|
|
79
79
|
- **headlessLogPath(projectDir, timestamp)**: Generates `.gsd-t/headless-{timestamp}.log` path.
|
|
80
80
|
- **doHeadlessQuery(type)**: Dispatches to one of 7 query functions. All pure Node.js file reads, no LLM calls, <100ms.
|
|
@@ -130,7 +130,7 @@ gsd-t init [name] → templates/ → applyTokens()
|
|
|
130
130
|
|
|
131
131
|
### Runtime Command Execution (within Claude Code)
|
|
132
132
|
```
|
|
133
|
-
User types /
|
|
133
|
+
User types /gsd-t-{command} [args]
|
|
134
134
|
→ Claude Code loads ~/.claude/commands/gsd-t-{command}.md
|
|
135
135
|
→ Claude interprets step-by-step instructions
|
|
136
136
|
→ Reads state files → Executes workflow → Pre-Commit Gate → Updates progress.md
|
|
@@ -284,7 +284,7 @@ The unattended supervisor is a cross-session relay engine that runs an active GS
|
|
|
284
284
|
|
|
285
285
|
```
|
|
286
286
|
Interactive Claude session
|
|
287
|
-
└── /
|
|
287
|
+
└── /gsd-t-unattended (launch command)
|
|
288
288
|
├── Pre-flight safety checks (branch, dirty tree)
|
|
289
289
|
└── spawn(detached) → Supervisor process (bin/gsd-t-unattended.js)
|
|
290
290
|
├── writes .gsd-t/.unattended/supervisor.pid
|
|
@@ -296,7 +296,7 @@ Interactive Claude session
|
|
|
296
296
|
→ worker exits → post-worker safety check → next iter
|
|
297
297
|
|
|
298
298
|
In-session watch loop (every 270s via ScheduleWakeup)
|
|
299
|
-
└── /
|
|
299
|
+
└── /gsd-t-unattended-watch
|
|
300
300
|
├── reads supervisor.pid (kill -0 liveness)
|
|
301
301
|
├── reads state.json (status, iter, lastTick)
|
|
302
302
|
└── reschedules or reports final status
|
|
@@ -349,7 +349,7 @@ Closes the M35 parent/child race in `bin/headless-auto-spawn.js`. When the runwa
|
|
|
349
349
|
|
|
350
350
|
### Resume Auto-Reattach
|
|
351
351
|
|
|
352
|
-
`/
|
|
352
|
+
`/gsd-t-resume` Step 0 checks for a live supervisor before any other resume logic. If `supervisor.pid` exists and `kill -0` succeeds and `state.json.status` is non-terminal, the resume command skips normal resume flow entirely, prints the current watch block, and calls `ScheduleWakeup(270, '/gsd-t-unattended-watch', ...)`. The user transparently re-enters the watch loop without any manual step.
|
|
353
353
|
|
|
354
354
|
---
|
|
355
355
|
|
|
@@ -533,7 +533,7 @@ Orchestrator Context Gate — v3.0.0 semantics:
|
|
|
533
533
|
|
|
534
534
|
**Supporting components** (outside the context-meter dataflow):
|
|
535
535
|
- `bin/model-selector.js` — declarative rules table mapping phases to haiku/sonnet/opus; consulted at plan time, never at runtime under pressure
|
|
536
|
-
- `bin/check-headless-sessions.js` — renders the read-back banner on `/
|
|
536
|
+
- `bin/check-headless-sessions.js` — renders the read-back banner on `/gsd-t-resume` and `/gsd-t-status` for completed-but-not-yet-surfaced headless sessions
|
|
537
537
|
- `bin/event-stream.cjs` (M38) — shared library for JSONL event emission and cursor-based tailing; used by supervisor, watch tick, and dashboard
|
|
538
538
|
|
|
539
539
|
**Installer integration** (`bin/gsd-t.js`):
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
## Per-invocation cost (where the regression actually hides)
|
|
22
22
|
|
|
23
|
-
A typical `/
|
|
23
|
+
A typical `/gsd-t-execute` invocation loads:
|
|
24
24
|
|
|
25
25
|
| Item | Tokens | Notes |
|
|
26
26
|
|------|--------|-------|
|
|
@@ -85,7 +85,7 @@ Note: these savings only apply when a command is invoked. If you only ever run `
|
|
|
85
85
|
**Current size**: 9,679 tokens (4.8% of window — always loaded)
|
|
86
86
|
**Target size**: ~4,500 tokens
|
|
87
87
|
**Method**:
|
|
88
|
-
- The entire "Commands Reference" table (51 rows) duplicates `commands/gsd-t-help.md` — DELETE the table, replace with `Run /
|
|
88
|
+
- The entire "Commands Reference" table (51 rows) duplicates `commands/gsd-t-help.md` — DELETE the table, replace with `Run /gsd-t-help for the full command list.`
|
|
89
89
|
- The "Update Notices" / "Auto-Init Guard" / "Playwright Readiness Guard" / "QA Agent" / "Design Verification Agent" / "Red Team" sections (~3,000 tokens combined) are duplicated in the relevant command files. Move them to the command files only and replace with one-line summaries here.
|
|
90
90
|
- The "Pre-Commit Gate" decision tree (~1,500 tokens) is also in project CLAUDE.md — keep one, link from the other
|
|
91
91
|
- The "Document Ripple Completion Gate" (~1,500 tokens) is duplicated in `gsd-t-doc-ripple.md` — reference only
|
package/docs/infrastructure.md
CHANGED
|
@@ -123,7 +123,7 @@ Headless mode enables non-interactive GSD-T execution for CI/CD pipelines and ov
|
|
|
123
123
|
|
|
124
124
|
### headless exec
|
|
125
125
|
|
|
126
|
-
Wraps `claude -p "/
|
|
126
|
+
Wraps `claude -p "/gsd-t-{command} {args}"` for unattended execution.
|
|
127
127
|
|
|
128
128
|
```bash
|
|
129
129
|
gsd-t headless verify --json --timeout=1200 --log
|
|
@@ -314,16 +314,16 @@ The unattended supervisor runs an active GSD-T milestone to completion in a deta
|
|
|
314
314
|
|
|
315
315
|
```bash
|
|
316
316
|
# From within an interactive Claude session:
|
|
317
|
-
/
|
|
317
|
+
/gsd-t-unattended
|
|
318
318
|
|
|
319
319
|
# From the terminal (detached — returns immediately):
|
|
320
320
|
gsd-t unattended --hours=24 --milestone=M36
|
|
321
321
|
|
|
322
322
|
# Watch current run status (in-session, 270s tick):
|
|
323
|
-
/
|
|
323
|
+
/gsd-t-unattended-watch
|
|
324
324
|
|
|
325
325
|
# Request a graceful stop:
|
|
326
|
-
/
|
|
326
|
+
/gsd-t-unattended-stop
|
|
327
327
|
```
|
|
328
328
|
|
|
329
329
|
### CLI Flags
|
|
@@ -395,18 +395,18 @@ kill -0 $(cat .gsd-t/.unattended/supervisor.pid) && echo "alive" || echo "stale
|
|
|
395
395
|
rm .gsd-t/.unattended/supervisor.pid
|
|
396
396
|
|
|
397
397
|
# Or request a graceful stop:
|
|
398
|
-
/
|
|
398
|
+
/gsd-t-unattended-stop
|
|
399
399
|
# (or) touch .gsd-t/.unattended/stop
|
|
400
400
|
```
|
|
401
401
|
|
|
402
402
|
**Watch loop stopped firing**
|
|
403
|
-
- Re-invoke `/
|
|
403
|
+
- Re-invoke `/gsd-t-resume` from a fresh session
|
|
404
404
|
- Step 0 auto-reattach reads `supervisor.pid` — if the supervisor is still alive, it re-enters the watch loop automatically (no manual steps needed)
|
|
405
405
|
|
|
406
406
|
**Supervisor crashed mid-run**
|
|
407
407
|
- The watch loop detects crash via `kill -0` failure
|
|
408
408
|
- Check `.gsd-t/.unattended/run.log` and final `state.json` for diagnostics
|
|
409
|
-
- Resume normally with `/
|
|
409
|
+
- Resume normally with `/gsd-t-resume` — the milestone continues from its last checkpoint
|
|
410
410
|
|
|
411
411
|
---
|
|
412
412
|
|
package/docs/methodology.md
CHANGED
|
@@ -124,7 +124,7 @@ Between v2.74 and v2.75, GSD-T attempted to cope with context pressure through *
|
|
|
124
124
|
|
|
125
125
|
M34 gave GSD-T a real measurement of how much context window each session had consumed. M35 used that signal to refuse starting new work that would exceed the 85% threshold, auto-spawning a detached headless process instead so the user never had to manually run `/clear`. Both milestones still had a ceiling: the headless continuation was a single shot — it ran one Claude session, and if the milestone wasn't complete when that session exhausted its context, a human had to intervene again to trigger the next continuation. Long-running milestones (multi-day builds, large waves) still required periodic human attention to keep the relay going.
|
|
126
126
|
|
|
127
|
-
M36 (v2.77.10) makes the relay automatic and indefinite. The unattended supervisor (`bin/gsd-t-unattended.js`) is a long-lived OS process, fully detached from any Claude Code terminal session, that drives the relay itself: it spawns a fresh `claude -p "/gsd-t-resume"` worker, waits for it to exit, reads the outcome, and immediately spawns the next worker — repeating until the milestone reaches COMPLETED status or a wall-clock cap is hit. Each worker gets a pristine context window. The `/compact` that inevitably fires in a long session is irrelevant because the *next* session has already started fresh. The supervisor IS the orchestrator of runway handoffs. Safety rails (`bin/gsd-t-unattended-safety.js`) prevent infinite-loop scenarios: gutter detection catches stall patterns, blocker sentinels catch unrecoverable errors, and iteration/hour caps ensure the machine doesn't run forever on a broken state. A cross-platform abstraction layer handles macOS sleep-prevention (`caffeinate`), Linux equivalents, and Windows limitations. From the user's perspective: invoke `/
|
|
127
|
+
M36 (v2.77.10) makes the relay automatic and indefinite. The unattended supervisor (`bin/gsd-t-unattended.js`) is a long-lived OS process, fully detached from any Claude Code terminal session, that drives the relay itself: it spawns a fresh `claude -p "/gsd-t-resume"` worker, waits for it to exit, reads the outcome, and immediately spawns the next worker — repeating until the milestone reaches COMPLETED status or a wall-clock cap is hit. Each worker gets a pristine context window. The `/compact` that inevitably fires in a long session is irrelevant because the *next* session has already started fresh. The supervisor IS the orchestrator of runway handoffs. Safety rails (`bin/gsd-t-unattended-safety.js`) prevent infinite-loop scenarios: gutter detection catches stall patterns, blocker sentinels catch unrecoverable errors, and iteration/hour caps ensure the machine doesn't run forever on a broken state. A cross-platform abstraction layer handles macOS sleep-prevention (`caffeinate`), Linux equivalents, and Windows limitations. From the user's perspective: invoke `/gsd-t-unattended`, walk away, and receive a native OS notification when the milestone is done — hours or days later.
|
|
128
128
|
|
|
129
129
|
The in-session watch loop (270-second `ScheduleWakeup` ticks, chosen to stay inside the 5-minute prompt-cache TTL) closes the feedback loop for users who keep a Claude session open. And the `gsd-t-resume` Step 0 auto-reattach means that even a `/clear` or accidental session close is transparent: the next resume detects the live supervisor and silently re-enters the watch loop without any manual step. Taken together, M34 + M35 + M36 form a complete three-layer system: measure the context accurately, refuse to degrade when it runs low, and relay execution automatically across as many fresh sessions as the work requires.
|
|
130
130
|
|
package/docs/neo4j-setup.md
CHANGED
|
@@ -89,7 +89,7 @@ that doesn't exist.
|
|
|
89
89
|
After indexing is complete, run a full codebase scan in each project to generate the baseline analysis. From within each project directory:
|
|
90
90
|
|
|
91
91
|
```
|
|
92
|
-
/
|
|
92
|
+
/gsd-t-scan
|
|
93
93
|
```
|
|
94
94
|
|
|
95
95
|
Or to scan all projects at once, paste this prompt into Claude Code:
|
|
@@ -98,7 +98,7 @@ Or to scan all projects at once, paste this prompt into Claude Code:
|
|
|
98
98
|
For each project listed in ~/.claude/.gsd-t-projects that has source code
|
|
99
99
|
files (.js, .ts, .py, .jsx, .tsx):
|
|
100
100
|
1. cd into the project directory
|
|
101
|
-
2. Run /
|
|
101
|
+
2. Run /gsd-t-scan
|
|
102
102
|
3. Report: project name, scan status, tech debt items found, test count
|
|
103
103
|
|
|
104
104
|
Use team mode with parallel agents. Skip documentation-only projects
|