@tekyzinc/gsd-t 3.12.12 → 3.12.14

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.
Files changed (59) hide show
  1. package/CHANGELOG.md +103 -26
  2. package/README.md +76 -76
  3. package/bin/design-orchestrator.js +1 -1
  4. package/bin/gsd-t-unattended.cjs +15 -5
  5. package/bin/gsd-t-unattended.js +1 -1
  6. package/bin/gsd-t.js +114 -13
  7. package/bin/headless-auto-spawn.cjs +22 -3
  8. package/bin/headless-auto-spawn.js +12 -1
  9. package/bin/orchestrator.js +26 -0
  10. package/commands/gsd-t-backlog-promote.md +6 -6
  11. package/commands/gsd-t-complete-milestone.md +7 -7
  12. package/commands/gsd-t-design-audit.md +3 -3
  13. package/commands/gsd-t-design-build.md +1 -1
  14. package/commands/gsd-t-design-decompose.md +4 -4
  15. package/commands/gsd-t-execute.md +1 -1
  16. package/commands/gsd-t-feature.md +3 -3
  17. package/commands/gsd-t-gap-analysis.md +3 -3
  18. package/commands/gsd-t-health.md +3 -3
  19. package/commands/gsd-t-help.md +10 -10
  20. package/commands/gsd-t-impact.md +3 -3
  21. package/commands/gsd-t-init-scan-setup.md +5 -5
  22. package/commands/gsd-t-init.md +4 -4
  23. package/commands/gsd-t-log.md +1 -1
  24. package/commands/gsd-t-milestone.md +2 -2
  25. package/commands/gsd-t-pause.md +2 -2
  26. package/commands/gsd-t-prd.md +2 -2
  27. package/commands/gsd-t-project.md +1 -1
  28. package/commands/gsd-t-resume.md +4 -4
  29. package/commands/gsd-t-scan.md +3 -3
  30. package/commands/gsd-t-setup.md +2 -2
  31. package/commands/gsd-t-test-sync.md +1 -1
  32. package/commands/gsd-t-unattended-watch.md +5 -5
  33. package/commands/gsd-t-unattended.md +9 -9
  34. package/commands/gsd-t-wave.md +4 -4
  35. package/commands/gsd.md +17 -17
  36. package/docs/GSD-T-README.md +68 -68
  37. package/docs/architecture.md +8 -8
  38. package/docs/context-budget-recovery-plan.md +2 -2
  39. package/docs/infrastructure.md +7 -7
  40. package/docs/methodology.md +1 -1
  41. package/docs/neo4j-setup.md +2 -2
  42. package/docs/prd-gsd2-hybrid.md +1 -1
  43. package/docs/prd-harness-evolution.md +1 -1
  44. package/docs/requirements.md +2 -2
  45. package/docs/unattended-config.md +1 -1
  46. package/docs/unattended-windows-caveats.md +1 -1
  47. package/docs/workflows.md +1 -1
  48. package/package.json +1 -1
  49. package/scripts/context-meter/threshold.test.js +2 -2
  50. package/scripts/gsd-t-auto-route.js +1 -1
  51. package/scripts/gsd-t-context-meter.e2e.test.js +1 -1
  52. package/scripts/gsd-t-context-meter.test.js +1 -1
  53. package/scripts/gsd-t-design-review-server.js +11 -1
  54. package/scripts/gsd-t-event-writer.js +7 -4
  55. package/scripts/gsd-t-heartbeat.js +11 -1
  56. package/scripts/gsd-t-update-check.js +1 -1
  57. package/templates/CLAUDE-global.md +18 -163
  58. package/templates/stacks/_markdown.md +32 -0
  59. package/templates/stacks/design-to-code.md +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,83 @@
2
2
 
3
3
  All notable changes to GSD-T are documented here. Updated with each release.
4
4
 
5
+ ## [3.12.14] - 2026-04-17
6
+
7
+ ### Fixed — Telemetry Env-Propagation Regression (Tag All Worker Events)
8
+
9
+ v3.12.12 added `GSD_T_COMMAND`/`GSD_T_PHASE` env-var fallbacks to `scripts/gsd-t-event-writer.js` but two critical call sites were missed — producing mostly-null telemetry in production.
10
+
11
+ **Evidence from bee-poc (50 min observation)**: 908 events, only 1/908 had `command` populated; 836 `tool_call` events had command/phase/trace_id all null; only 2 `.gsd-t/token-log.md` rows (both from the outer supervisor process; 37 inner subagents wrote zero rows); supervisor row showed `model=unknown`.
12
+
13
+ **Root causes**:
14
+ 1. `scripts/gsd-t-heartbeat.js::buildEventStreamEntry` — this PostToolUse hook fires on every tool call in every child process (the source of ~90% of events) and hardcoded `{command: null, phase: null, trace_id: null}` into every event it wrote.
15
+ 2. Neither the writer nor the heartbeat read `GSD_T_TRACE_ID` or `GSD_T_MODEL` from env — so even when spawners set them, they never appeared on events.
16
+ 3. Several spawn sites (orchestrator, `spawnClaudeSession`, `runLedgerCompaction`, design-review claude spawn) never set the GSD_T_* env block at all.
17
+
18
+ **Fixes**:
19
+ - `scripts/gsd-t-event-writer.js::buildEvent` now reads `GSD_T_TRACE_ID` and `GSD_T_MODEL` env fallbacks alongside command/phase.
20
+ - `scripts/gsd-t-heartbeat.js::buildEventStreamEntry` replaced hardcoded null triple with `process.env.GSD_T_COMMAND||null` / `GSD_T_PHASE||null` / `GSD_T_TRACE_ID||null`.
21
+ - `bin/headless-auto-spawn.{cjs,js}` workerEnv sets `GSD_T_COMMAND` + `GSD_T_PHASE` + `GSD_T_PROJECT_DIR`, and conditionally forwards parent `GSD_T_TRACE_ID` / `GSD_T_MODEL`. `appendTokenLog` reads `process.env.GSD_T_MODEL` instead of the `"unknown"` literal.
22
+ - `bin/gsd-t-unattended.cjs::_spawnWorker` workerEnv populates the full GSD_T_* block from `state` + env fallbacks. `_appendTokenLog` reads `process.env.GSD_T_MODEL`.
23
+ - `bin/gsd-t.js` three sites patched: `doHeadlessExec` workerEnv, `spawnClaudeSession` (fallback command=`gsd-t-debug` / phase=`debug`), `runLedgerCompaction` (fallback model=`haiku`). `appendHeadlessTokenLog` reads `process.env.GSD_T_MODEL`.
24
+ - `bin/orchestrator.js` new `_buildOrchestratorEnv(opts, projectDir)` helper threaded through `spawnClaude` (sync) and `spawnClaudeAsync`.
25
+ - `scripts/gsd-t-design-review-server.js` claude spawn now injects the GSD_T_* env block.
26
+
27
+ **Reproduction test**: NEW `test/telemetry-env-propagation.test.js` — 6 tests that exercise the REAL production spawn code paths (not hand-rolled mocks): writer + heartbeat env-fallback unit coverage, `autoSpawnHeadless` real-spawn via env-dump shim at `bin/gsd-t.js`, unattended `platform.spawnWorker` with a real env-dump script. Failed 3/6 before fix as expected; 6/6 pass after.
28
+
29
+ **Tests**: Unit 1186/1186 pass. E2E N/A (no `playwright.config.*` or `cypress.config.*`).
30
+
31
+ **Red Team** (opus, adversarial sweep categories: regression-around-fix + original-bug-variants covering context-meter hook and PostToolUse hook paths): verdict **GRUDGING PASS** — 5 additional claude-worker spawn sites found and patched in this same release; no untagged claude-worker spawn paths remain.
32
+
33
+ **Doc ripple**: `.gsd-t/contracts/event-schema-contract.md` new "Env-Var Fallbacks (v3.12.14)" section with flag/env/caller table; `.gsd-t/contracts/headless-default-contract.md` new "Worker Env Propagation (v3.12.14)" section; `.gsd-t/contracts/unattended-supervisor-contract.md` §14b v1.2.0 Worker Env Propagation + version history entry.
34
+
35
+ ## [3.12.13] - 2026-04-17
36
+
37
+ ### Fixed — `/` Prefix Strip Sitewide
38
+
39
+ Claude Code does not namespace local slash commands under `user:`, so every `/gsd-t-*`, `/checkin`, `/branch`, `/Claude-md`, `/global-change` reference produced `Unknown command: /X` errors when the user typed one. This release strips the prefix from every live reference:
40
+
41
+ - **54 command files** in `commands/*.md`
42
+ - **All live docs**: `README.md`, `GSD-T-README.md`, `CHANGELOG.md`, `docs/*.md`, `CLAUDE.md`
43
+ - **All templates**: `templates/CLAUDE-global.md`, `templates/CLAUDE-project.md`, `templates/stacks/*.md`
44
+ - **Scripts and CLI**: `bin/gsd-t.js`, `bin/gsd-t-unattended.js`, `bin/design-orchestrator.js`, `scripts/gsd-t-auto-route.js`, `scripts/gsd-t-update-check.js`
45
+ - **All `.gsd-t/contracts/*.md` and live `.gsd-t/domains/*/scope.md`**
46
+ - **User-global `~/.claude/CLAUDE.md`** (via `sed` in the same pass)
47
+ - Test fixture strings in `test/headless.test.js` preserved — those are regression-test literals asserting `claude -p` rejects the `/` prefix.
48
+ - Historical archives (`.gsd-t/milestones/*`, `.gsd-t/progress-archive/*`, `.gsd-t/continue-here-*`) left untouched as time-capsule records.
49
+
50
+ ### Fixed — `update-all` Now Upgrades the Global CLI Binary
51
+
52
+ v3.12.12's `update-all` propagated command files to `~/.claude/commands/` but never ran `npm install -g @tekyzinc/gsd-t@latest`. Result: the CLI binary stayed stale even after `npm publish`, so new features (like v3.12.12's token-log observability) never activated on user machines that had updated "successfully."
53
+
54
+ `bin/gsd-t.js`:
55
+ - `doUpdateAll()` now calls new `upgradeGlobalBinary()` helper FIRST, which runs `npm install -g @tekyzinc/gsd-t@latest` via `execFileSync({stdio: 'inherit'})`.
56
+ - After upgrade succeeds, the newly-installed on-disk version is compared against the running process's `PKG_VERSION`. If they diverge, `reexecUpdateAll()` hands off to the new binary with `GSDT_POST_UPGRADE=1` to prevent recursion.
57
+ - On upgrade failure (e.g., missing global-npm permissions), logs the error and continues with command-file propagation so the user isn't fully blocked.
58
+ - Upgrade is skipped when `GSDT_POST_UPGRADE=1` is set (re-entry from self-invocation).
59
+
60
+ ### Changed — Global `CLAUDE.md` Size Reduction (−26%)
61
+
62
+ `~/.claude/CLAUDE.md` was 41,131 chars (above Claude Code's 40k auto-warning threshold). Three optimizations trimmed it to 30,272 chars without losing information:
63
+
64
+ 1. **Commands Reference table removed** (~63 lines). The router and `/gsd-t-help` resolve commands dynamically — nothing reads this table at runtime. Replaced with a one-line pointer: *"See `/gsd-t-help` for the complete command list."*
65
+ 2. **Markdown Tables / emoji-padding section extracted** to `templates/stacks/_markdown.md` (32 lines, `_` prefix = universal stack rule, auto-injected by Stack Rules Engine for every subagent spawn). CLAUDE.md now has a one-line pointer at that template.
66
+ 3. **Autonomous Execution Rules subsections tightened** — QA Agent, Design Verification, Red Team, Headless-by-Default Spawn, Unattended Execution each cut from multi-paragraph re-statements to 2–3 lines: rule + enforcement + path to the authoritative contract/protocol file. The contracts (`qa-agent-contract.md`, `headless-default-contract.md`, etc.) and prompts (`red-team-subagent.md`, `design-verify-subagent.md`) remain the source of truth for method specifics.
67
+
68
+ Same edits propagated to `templates/CLAUDE-global.md` so future installs inherit the lean version.
69
+
70
+ ### Changed — Project `CLAUDE.md` Audit
71
+
72
+ Audited `CLAUDE.md` in this repo (the @tekyzinc/gsd-t dev repo itself). Removed a duplicate Destructive Action Guard block (verbatim copy of the global's). Pre-Commit Gate now points at `.gsd-t/contracts/pre-commit-gate.md` (which exists and owns the full checklist) while retaining the 7 repo-specific extensions inline. 7,095 → 6,269 chars (−12%).
73
+
74
+ ### Added — New Stack Rule: `templates/stacks/_markdown.md`
75
+
76
+ Universal (always-injected) stack rule covering markdown-table formatting with emoji. Included in every subagent spawn regardless of detected tech stack, per the Stack Rules Engine's `_`-prefix convention.
77
+
78
+ ### Note — v3.12.12 Supervisor Status
79
+
80
+ The earlier hypothesis that v3.12.12 broke `bin/gsd-t-unattended.cjs` via a missing `require("./debug-ledger.js")` was incorrect. `bin/debug-ledger.js` exists, ships in the package, and has been present since a March commit. The supervisor was running fine on the globally-installed v3.11.11 binary — it simply never picked up v3.12.12's env-var injection because `update-all` never upgraded the binary (see above fix).
81
+
5
82
  ## [3.12.12] - 2026-04-17
6
83
 
7
84
  ### Fixed — Token-Log Observability for Headless/Unattended Workers
@@ -265,9 +342,9 @@ M36 ships the third pillar of the context/runway/autonomy arc (M34 context meter
265
342
  - **`bin/gsd-t-unattended-safety.js`** — safety rails module. Exports: `checkGitBranch` (protected branch list; configurable), `checkWorktreeCleanliness` (dirty-tree guard with whitelist), `checkIterationCap`, `checkWallClockCap`, `validateState`, `detectBlockerSentinel` (scan run.log tail for unrecoverable/dispatch-failed patterns), `detectGutter` (repeated-error / file-thrash / no-progress stall detection). Each check returns `{ ok, reason?, code? }`.
266
343
  - **`bin/gsd-t-unattended-platform.js`** — platform abstraction. Exports: `spawnSupervisor` (detached spawn with `windowsHide`), `preventSleep` / `releaseSleep` (`caffeinate -i` on darwin; no-op on linux/win32), `sendNotification` (osascript on darwin; `notify-send` on linux; toast via PowerShell on win32 — all graceful no-op on failure), `resolveClaudeBin` (`claude.cmd` on win32; `claude` elsewhere + PATH search), `getPlatform`.
267
344
  - **`bin/handoff-lock.js`** — parent/child race guard for headless-auto-spawn. Writes `.gsd-t/.handoff/{session-id}.lock` before detaching; child removes on first iteration. Prevents the parent from reporting "failed" while the child is still starting. Exports: `acquireLock`, `releaseLock`, `waitForRelease`, `isLocked`.
268
- - **`commands/gsd-t-unattended.md`** — `/user:gsd-t-unattended` launch command. Pre-flights (singleton check, safety rails, active milestone), spawns the supervisor via `bin/gsd-t-unattended-platform.js`, polls for `supervisor.pid` + `status=running` (up to 5s), prints the initial watch block, calls `ScheduleWakeup(270, '/user:gsd-t-unattended-watch')`.
269
- - **`commands/gsd-t-unattended-watch.md`** — `/user:gsd-t-unattended-watch` watch tick. Stateless; reads `supervisor.pid` + `state.json`; renders progress or final summary; reschedules via `ScheduleWakeup(270, ...)` on non-terminal status; stops on terminal status or missing PID file.
270
- - **`commands/gsd-t-unattended-stop.md`** — `/user:gsd-t-unattended-stop` stop command. Touches `.gsd-t/.unattended/stop` sentinel; prints reassurance; returns immediately (no kill, no wait).
345
+ - **`commands/gsd-t-unattended.md`** — `/gsd-t-unattended` launch command. Pre-flights (singleton check, safety rails, active milestone), spawns the supervisor via `bin/gsd-t-unattended-platform.js`, polls for `supervisor.pid` + `status=running` (up to 5s), prints the initial watch block, calls `ScheduleWakeup(270, '/gsd-t-unattended-watch')`.
346
+ - **`commands/gsd-t-unattended-watch.md`** — `/gsd-t-unattended-watch` watch tick. Stateless; reads `supervisor.pid` + `state.json`; renders progress or final summary; reschedules via `ScheduleWakeup(270, ...)` on non-terminal status; stops on terminal status or missing PID file.
347
+ - **`commands/gsd-t-unattended-stop.md`** — `/gsd-t-unattended-stop` stop command. Touches `.gsd-t/.unattended/stop` sentinel; prints reassurance; returns immediately (no kill, no wait).
271
348
  - **`.gsd-t/contracts/unattended-supervisor-contract.md` v1.0.0 ACTIVE** — authoritative interface for state file schema (18 fields), PID file lifecycle, sentinel semantics, exit codes 0–8+124, launch handshake, watch tick decision tree, resume auto-reattach handshake, stop mechanism, notification levels, safety rails hook points, and configuration file schema.
272
349
  - **`docs/unattended-windows-caveats.md`** — known Windows limitations: sleep-prevention not supported (no `caffeinate` equivalent wired; `powercfg /requests` path is v2), `claude.cmd` wrapper adds ~500ms per spawn, Windows Defender may scan each worker spawn, notification via PowerShell toast requires non-interactive shell workaround.
273
350
  - **`.claude/settings.json`** (project-shared) — SessionStart hook registered: `node bin/check-headless-sessions.js . 2>/dev/null || true` surfaces completed headless session banners on session start.
@@ -280,7 +357,7 @@ M36 ships the third pillar of the context/runway/autonomy arc (M34 context meter
280
357
 
281
358
  ### Fixed
282
359
 
283
- - **`bin/gsd-t.js` headless dispatch** (Phase 0 P0, committed prior milestone): `mapHeadlessExitCode` now maps `"Unknown command:"` in worker stdout → exit code 5 (`command-dispatch-failed`). Worker invocation no longer prepends `/user:` to command names, preventing "Unknown command:" failures in non-interactive `claude -p` sessions.
360
+ - **`bin/gsd-t.js` headless dispatch** (Phase 0 P0, committed prior milestone): `mapHeadlessExitCode` now maps `"Unknown command:"` in worker stdout → exit code 5 (`command-dispatch-failed`). Worker invocation no longer prepends `/` to command names, preventing "Unknown command:" failures in non-interactive `claude -p` sessions.
284
361
 
285
362
  ### Tests
286
363
 
@@ -294,7 +371,7 @@ M36 ships the third pillar of the context/runway/autonomy arc (M34 context meter
294
371
 
295
372
  ### Migration
296
373
 
297
- After `npm install @tekyzinc/gsd-t@3.10.10`, run `/user:gsd-t-version-update-all` to propagate v3.10.10 to all registered projects. The new command files, `bin/` modules, and contract are written into each project automatically. No existing `.gsd-t/` state is modified.
374
+ After `npm install @tekyzinc/gsd-t@3.10.10`, run `/gsd-t-version-update-all` to propagate v3.10.10 to all registered projects. The new command files, `bin/` modules, and contract are written into each project automatically. No existing `.gsd-t/` state is modified.
298
375
 
299
376
  ---
300
377
 
@@ -309,7 +386,7 @@ After `npm install @tekyzinc/gsd-t@3.10.10`, run `/user:gsd-t-version-update-all
309
386
  - **`bin/model-selector.js`** — declarative phase→tier mapping (≥13 phase mappings) with complexity-signal escalation (`cross_module_refactor`, `security_boundary`, `data_loss_risk`, `contract_design`) that escalates sonnet→opus at plan time. Each command file carries a `## Model Assignment` block.
310
387
  - **`bin/runway-estimator.js`** — `estimateRunway({command, domain_type, remaining_tasks})` reads `.gsd-t/token-metrics.jsonl` via a three-tier query fallback (exact → command+phase → command) and returns `{can_start, projected_end_pct, confidence, recommendation}`. Confidence grading: high ≥50 records, medium ≥10, low <10 (+1.25× skew).
311
388
  - **`bin/headless-auto-spawn.js`** — detached `child_process.spawn({detached:true, stdio:['ignore', fd, fd]}) + child.unref()`. Writes `.gsd-t/headless-sessions/{session-id}.json`, polls with `process.kill(pid, 0)` (timer `.unref()`-ed), marks `status: completed`, posts a macOS `osascript` notification on exit (graceful no-op on non-darwin).
312
- - **`bin/check-headless-sessions.js`** — scans `.gsd-t/headless-sessions/` for `status === 'completed' && surfaced !== true` and renders the read-back banner on `/user:gsd-t-resume` and `/user:gsd-t-status`. Exports `checkCompletedSessions`, `markSurfaced`, `formatBanner`, `printBannerIfAny`, `computeDurationLabel`.
389
+ - **`bin/check-headless-sessions.js`** — scans `.gsd-t/headless-sessions/` for `status === 'completed' && surfaced !== true` and renders the read-back banner on `/gsd-t-resume` and `/gsd-t-status`. Exports `checkCompletedSessions`, `markSurfaced`, `formatBanner`, `printBannerIfAny`, `computeDurationLabel`.
313
390
  - **`bin/token-telemetry.js`** — per-spawn token bracket writes one frozen 18-field JSONL record per subagent spawn to `.gsd-t/token-metrics.jsonl`. Fields: `timestamp, session_id, command, phase, domain, task_id, model, complexity_signals[], input_tokens, output_tokens, duration_seconds, start_pct, end_pct, halt_type, halt_reason, exit_code, run_type, projection_variance`. `halt_type` values: `clean`, `stop-band`, `runway-refuse`, `native-compact` (defect), `crash`.
314
391
  - **`bin/token-optimizer.js`** — at `complete-milestone`, scans the last 3 milestones and appends recalibration recommendations to `.gsd-t/optimization-backlog.md`. Four detection rules: `demote` (opus phase ≥90% success, ≥3 volume), `escalate` (sonnet phase ≥30% failure rate, ≥5 volume), `runway-tune` (projection vs. actual divergence >15%), `investigate` (per-phase p95 > 2× median, ≥10 volume). Fingerprint-based 5-milestone cooldown on rejected items. Exports `detectRecommendations`, `appendToBacklog`, `readBacklog`, `writeBacklog`, `parseBacklog`, `setRecommendationStatus`, `DETECTION_RULES`, `REJECTION_COOLDOWN_MILESTONES`.
315
392
  - **`bin/advisor-integration.js`** — `/advisor` escalation hook; convention-based fallback if no programmable API.
@@ -318,7 +395,7 @@ After `npm install @tekyzinc/gsd-t@3.10.10`, run `/user:gsd-t-version-update-all
318
395
  - **`.gsd-t/contracts/token-telemetry-contract.md` v1.0.0 ACTIVE** — frozen 18-field per-spawn JSONL schema, `halt_type` enum, `run_type` enum.
319
396
  - **`.gsd-t/contracts/runway-estimator-contract.md` v1.0.0 ACTIVE** — pre-flight projection, three-tier query fallback, confidence grading, refusal + headless handoff contract.
320
397
  - **`.gsd-t/contracts/headless-auto-spawn-contract.md` v1.0.0 ACTIVE** — detached continuation, session file schema, macOS notification channel, read-back banner.
321
- - **`commands/gsd-t-optimization-apply.md`** — promotes a backlog recommendation by ID, auto-routes to `/user:gsd-t-quick` or `/user:gsd-t-backlog-promote` based on recommendation type.
398
+ - **`commands/gsd-t-optimization-apply.md`** — promotes a backlog recommendation by ID, auto-routes to `/gsd-t-quick` or `/gsd-t-backlog-promote` based on recommendation type.
322
399
  - **`commands/gsd-t-optimization-reject.md`** — rejects a recommendation with optional `--reason`, sets 5-milestone cooldown. Reason captured in token-log.md + Decision Log.
323
400
  - **`gsd-t metrics` flags** — `--tokens` (per-command/phase token summary), `--halts` (halt-type breakdown; flags any `native-compact` as defect), `--context-window` (trailing 20-run `end_pct` with runway headroom).
324
401
  - **Test coverage**: `test/headless-auto-spawn.test.js` (16 tests — session file schema, completion watcher, read-back banner, non-darwin degradation, E2E shim smoke), `test/token-optimizer.test.js` (19 tests — each rule triggers/skips, parseBacklog round-trip, cooldown filter, OB-T1+OB-T4 integration roundtrip), plus rewrites of `test/token-budget.test.js` around v3.0.0. **~1011/1011 total tests green through Wave 4**.
@@ -358,7 +435,7 @@ After `npm install @tekyzinc/gsd-t@3.10.10`, run `/user:gsd-t-version-update-all
358
435
 
359
436
  ### Propagation
360
437
 
361
- Run `/user:gsd-t-version-update-all` from any registered GSD-T project to propagate v2.76.10 to all projects. The command files, templates, and `bin/` scripts are rewritten in place; project state in `.gsd-t/` is preserved.
438
+ Run `/gsd-t-version-update-all` from any registered GSD-T project to propagate v2.76.10 to all projects. The command files, templates, and `bin/` scripts are rewritten in place; project state in `.gsd-t/` is preserved.
362
439
 
363
440
  ---
364
441
 
@@ -412,7 +489,7 @@ Run `/user:gsd-t-version-update-all` from any registered GSD-T project to propag
412
489
 
413
490
  ### Propagation
414
491
 
415
- After publishing, run `/user:gsd-t-version-update-all` to propagate M34 (hook, config, installer, rewritten token-budget, command file updates, retirement migration) to every registered GSD-T project in a single sweep.
492
+ After publishing, run `/gsd-t-version-update-all` to propagate M34 (hook, config, installer, rewritten token-budget, command file updates, retirement migration) to every registered GSD-T project in a single sweep.
416
493
 
417
494
  ## [2.74.13] - 2026-04-14
418
495
 
@@ -426,7 +503,7 @@ After publishing, run `/user:gsd-t-version-update-all` to propagate M34 (hook, c
426
503
  - **`bin/gsd-t.js`** — `PROJECT_BIN_TOOLS` now includes `task-counter.cjs`. One-line change at `bin/gsd-t.js:1562`.
427
504
  - **`bin/gsd-t.js`** — `doInit()` now calls `copyBinToolsToProject(projectDir, projectName)` after `initGsdtDir`, so newly-initialized projects ship bin tools immediately.
428
505
 
429
- v2.74.12's entire two-layer fix (task-count gate + extracted prompts) is correct — it just needed one line to actually distribute the counter script. Running `/user:gsd-t-version-update-all` after publishing this version will propagate `task-counter.cjs` to every registered project.
506
+ v2.74.12's entire two-layer fix (task-count gate + extracted prompts) is correct — it just needed one line to actually distribute the counter script. Running `/gsd-t-version-update-all` after publishing this version will propagate `task-counter.cjs` to every registered project.
430
507
 
431
508
  ## [2.74.12] - 2026-04-14
432
509
 
@@ -438,7 +515,7 @@ v2.74.12's entire two-layer fix (task-count gate + extracted prompts) is correct
438
515
 
439
516
  #### Fix 1: Real task-count gate (replaces vaporware env-var check)
440
517
  - **NEW `bin/task-counter.cjs`** — deterministic on-disk task counter. State: `.gsd-t/.task-counter`. Config: `.gsd-t/task-counter-config.json` (default limit: 5). Env override: `GSD_T_TASK_LIMIT`. Commands: `increment <kind>`, `status`, `reset`, `should-stop` (exit code 10 at limit). This is the real signal the old self-check *pretended* to be.
441
- - **`commands/gsd-t-execute.md`** — Step 0 resets the counter; Step 3.5 calls `node bin/task-counter.cjs should-stop` as a gate before every task spawn; Step 5 increments after each task. At limit, the orchestrator checkpoints and STOPs — user runs `/clear` then `/user:gsd-t-resume`.
518
+ - **`commands/gsd-t-execute.md`** — Step 0 resets the counter; Step 3.5 calls `node bin/task-counter.cjs should-stop` as a gate before every task spawn; Step 5 increments after each task. At limit, the orchestrator checkpoints and STOPs — user runs `/clear` then `/gsd-t-resume`.
442
519
  - **`commands/gsd-t-wave.md`** — analogous phase-count gate replaces the broken "Wave Orchestrator Context Self-Check."
443
520
  - **`bin/token-budget.js`** — `getSessionStatus()` rewritten to read the task counter instead of env vars. API surface preserved (threshold/pct/consumed/estimated_remaining) so all dependent commands keep working. Graduated-degradation thresholds (warn/downgrade/conserve/stop) now fire on real signal.
444
521
 
@@ -453,7 +530,7 @@ v2.74.12's entire two-layer fix (task-count gate + extracted prompts) is correct
453
530
  - Test suite (`test/token-budget.test.js`) rewritten around the new counter-based `getSessionStatus()`. 36/36 passing.
454
531
 
455
532
  ### Propagation
456
- After publishing, run `/user:gsd-t-version-update-all` to propagate the fix to every registered GSD-T project. Projects will receive the new `bin/task-counter.cjs` and updated command files in a single sweep.
533
+ After publishing, run `/gsd-t-version-update-all` to propagate the fix to every registered GSD-T project. Projects will receive the new `bin/task-counter.cjs` and updated command files in a single sweep.
457
534
 
458
535
  ## [2.74.11] - 2026-04-13
459
536
 
@@ -647,7 +724,7 @@ Build → Measure → **Automated AI Review** (reviewer → fixer → re-review
647
724
  ## [2.71.15] - 2026-04-08
648
725
 
649
726
  ### Changed (design-build command → orchestrator delegate)
650
- - **`gsd-t-design-build.md` now delegates to the JS orchestrator** — the 388-line prompt-based command is replaced with a thin wrapper that runs `gsd-t design-build`. Both `/user:gsd-t-design-build` and `gsd-t design-build` now end up in the same deterministic pipeline. No more prompt-based gates that get skipped.
727
+ - **`gsd-t-design-build.md` now delegates to the JS orchestrator** — the 388-line prompt-based command is replaced with a thin wrapper that runs `gsd-t design-build`. Both `/gsd-t-design-build` and `gsd-t design-build` now end up in the same deterministic pipeline. No more prompt-based gates that get skipped.
651
728
 
652
729
  ## [2.71.14] - 2026-04-08
653
730
 
@@ -762,12 +839,12 @@ BDS horizontal stacked bar cards required 5 user-prompted fix iterations to get
762
839
  ## [2.69.11] - 2026-04-05
763
840
 
764
841
  ### Changed (gsd-t-design-audit)
765
- - **Auto-fix prompt** — after audit completes, if CRITICAL/HIGH deviations found, automatically prompts `/user:gsd-t-quick` with the audit report as source of truth. Re-runs audit after fixes to verify. Up to 2 fix cycles before stopping.
842
+ - **Auto-fix prompt** — after audit completes, if CRITICAL/HIGH deviations found, automatically prompts `/gsd-t-quick` with the audit report as source of truth. Re-runs audit after fixes to verify. Up to 2 fix cycles before stopping.
766
843
 
767
844
  ## [2.69.10] - 2026-04-05
768
845
 
769
846
  ### Added
770
- - **`/user:gsd-t-design-audit` command** — compare a built screen against a Figma design. Node-level Figma decomposition, per-widget comparison tables (10-30+ rows each), severity-rated deviations (CRITICAL/HIGH/MEDIUM/LOW), fidelity percentage. Writes zero code — report only. Usage: `/user:gsd-t-design-audit {Figma URL} {route}`.
847
+ - **`/gsd-t-design-audit` command** — compare a built screen against a Figma design. Node-level Figma decomposition, per-widget comparison tables (10-30+ rows each), severity-rated deviations (CRITICAL/HIGH/MEDIUM/LOW), fidelity percentage. Writes zero code — report only. Usage: `/gsd-t-design-audit {Figma URL} {route}`.
771
848
 
772
849
  ## [2.68.13] - 2026-04-05
773
850
 
@@ -891,7 +968,7 @@ Post-validation comparison of the built BDS Analytics screen against the origina
891
968
  - **Hierarchical design contracts** — `element` → `widget` → `page` contract hierarchy for design-to-code projects. Element contracts are the single source of truth for visual spec (one contract per visual variant, e.g., `chart-bar-stacked-horizontal` and `chart-bar-stacked-vertical` are separate). Widgets compose elements with layout + data binding. Pages compose widgets with routing + grid layout.
892
969
  - **Precedence rule**: element > widget > page. Widgets and pages SELECT and POSITION elements but cannot override element visual spec. Structural drift becomes impossible.
893
970
  - **New templates**: `templates/element-contract.md`, `templates/widget-contract.md`, `templates/page-contract.md`
894
- - **New command**: `/user:gsd-t-design-decompose` — surveys a design (Figma/image/prototype), classifies elements (reuse count ≥2 or non-trivial spec → promoted to element contract), identifies widgets and pages, writes the full contract hierarchy under `.gsd-t/contracts/design/{elements,widgets,pages}/` plus an `INDEX.md` navigation map.
971
+ - **New command**: `/gsd-t-design-decompose` — surveys a design (Figma/image/prototype), classifies elements (reuse count ≥2 or non-trivial spec → promoted to element contract), identifies widgets and pages, writes the full contract hierarchy under `.gsd-t/contracts/design/{elements,widgets,pages}/` plus an `INDEX.md` navigation map.
895
972
 
896
973
  ### Changed
897
974
  - `design-to-code.md` stack rule adds Section 0 explaining flat vs. hierarchical contract modes and detection at execute-time (presence of `.gsd-t/contracts/design/` triggers hierarchical verification: elements first, then widgets, then pages)
@@ -1255,7 +1332,7 @@ Post-validation comparison of the built BDS Analytics screen against the origina
1255
1332
  ## [2.20.5] - 2026-02-16
1256
1333
 
1257
1334
  ### Added
1258
- - **Next Command Hint**: After each GSD-T phase completes, displays the recommended next command (e.g., `Next → /user:gsd-t-partition`). Full successor mapping for all workflow commands. Skipped during auto-advancing (Level 3 mid-wave)
1335
+ - **Next Command Hint**: After each GSD-T phase completes, displays the recommended next command (e.g., `Next → /gsd-t-partition`). Full successor mapping for all workflow commands. Skipped during auto-advancing (Level 3 mid-wave)
1259
1336
 
1260
1337
  ## [2.20.4] - 2026-02-16
1261
1338
 
@@ -1325,7 +1402,7 @@ Post-validation comparison of the built BDS Analytics screen against the origina
1325
1402
  ## [2.17.0] - 2026-02-16
1326
1403
 
1327
1404
  ### Added
1328
- - `/user:gsd-t-log` command — sync progress.md Decision Log with recent git activity by scanning commits since last logged entry
1405
+ - `/gsd-t-log` command — sync progress.md Decision Log with recent git activity by scanning commits since last logged entry
1329
1406
  - Incremental updates (only new commits) and first-time full reconstruction from git history
1330
1407
  - Total commands: 38 GSD-T + 3 utility = 41
1331
1408
 
@@ -1341,7 +1418,7 @@ Post-validation comparison of the built BDS Analytics screen against the origina
1341
1418
  ## [2.16.4] - 2026-02-16
1342
1419
 
1343
1420
  ### Changed
1344
- - Smart router renamed from `/user:gsd-t` to `/user:gsd` — sorts first in autocomplete, shorter to type
1421
+ - Smart router renamed from `/gsd-t` to `/gsd` — sorts first in autocomplete, shorter to type
1345
1422
  - Pre-Commit Gate now requires timestamped progress.md entry (`YYYY-MM-DD HH:MM`) after every completed task, not just architectural decisions
1346
1423
 
1347
1424
  ## [2.16.3] - 2026-02-16
@@ -1352,7 +1429,7 @@ Post-validation comparison of the built BDS Analytics screen against the origina
1352
1429
  ## [2.16.2] - 2026-02-16
1353
1430
 
1354
1431
  ### Changed
1355
- - Smart router renamed from `/user:gsd-t` to `/user:gsd` (reverted in 2.16.3)
1432
+ - Smart router renamed from `/gsd-t` to `/gsd` (reverted in 2.16.3)
1356
1433
 
1357
1434
  ## [2.16.1] - 2026-02-16
1358
1435
 
@@ -1392,7 +1469,7 @@ Post-validation comparison of the built BDS Analytics screen against the origina
1392
1469
  ## [2.15.0] - 2026-02-13
1393
1470
 
1394
1471
  ### Added
1395
- - `/user:gsd-t-gap-analysis` command — requirements gap analysis against existing codebase
1472
+ - `/gsd-t-gap-analysis` command — requirements gap analysis against existing codebase
1396
1473
  - Parses spec into discrete numbered requirements, scans codebase, classifies each as implemented/partial/incorrect/not-implemented
1397
1474
  - Evidence-based classification with file:line references for each requirement
1398
1475
  - Severity levels: Critical (incorrect), High (partial), Medium (not implemented), Low (deferrable)
@@ -1412,12 +1489,12 @@ Post-validation comparison of the built BDS Analytics screen against the origina
1412
1489
 
1413
1490
  ### Changed
1414
1491
  - Update Notices section in CLAUDE-global template now handles both `[GSD-T UPDATE]` (update available) and `[GSD-T]` (up to date) version banners
1415
- - Update command in notification changed from raw npm command to `/user:gsd-t-version-update-all`
1492
+ - Update command in notification changed from raw npm command to `/gsd-t-version-update-all`
1416
1493
 
1417
1494
  ## [2.14.0] - 2026-02-12
1418
1495
 
1419
1496
  ### Added
1420
- - `/user:gsd-t` smart router command — describe what you need in plain language, auto-routes to the correct GSD-T command
1497
+ - `/gsd-t` smart router command — describe what you need in plain language, auto-routes to the correct GSD-T command
1421
1498
  - Intent classification routes to: quick, feature, project, debug, scan, brainstorm, milestone, wave, status, resume, backlog-add, and more
1422
1499
  - Total commands: 36 GSD-T + 3 utility = 39
1423
1500
 
@@ -1446,15 +1523,15 @@ Post-validation comparison of the built BDS Analytics screen against the origina
1446
1523
  ## [2.13.0] - 2026-02-12
1447
1524
 
1448
1525
  ### Added
1449
- - `/user:gsd-t-init-scan-setup` slash command — full project onboarding combining git setup, init, scan, and setup in one command
1526
+ - `/gsd-t-init-scan-setup` slash command — full project onboarding combining git setup, init, scan, and setup in one command
1450
1527
  - Prompts for GitHub repo URL if not already connected; skips if remote exists
1451
1528
  - Total commands: 35 GSD-T + 3 utility = 38
1452
1529
 
1453
1530
  ## [2.12.0] - 2026-02-12
1454
1531
 
1455
1532
  ### Added
1456
- - `/user:gsd-t-version-update` slash command — update GSD-T to latest version from within Claude Code
1457
- - `/user:gsd-t-version-update-all` slash command — update GSD-T + all registered projects from within Claude Code
1533
+ - `/gsd-t-version-update` slash command — update GSD-T to latest version from within Claude Code
1534
+ - `/gsd-t-version-update-all` slash command — update GSD-T + all registered projects from within Claude Code
1458
1535
  - Total commands: 34 GSD-T + 3 utility = 37
1459
1536
 
1460
1537
  ## [2.11.6] - 2026-02-12
package/README.md CHANGED
@@ -43,34 +43,34 @@ cd my-project
43
43
  claude
44
44
 
45
45
  # 2. Full onboarding (git + init + scan + setup in one)
46
- /user:gsd-t-init-scan-setup
46
+ /gsd-t-init-scan-setup
47
47
 
48
48
  # Or step by step:
49
- /user:gsd-t-init my-project
49
+ /gsd-t-init my-project
50
50
 
51
51
  # 4. Define what you're building
52
- /user:gsd-t-milestone "User Authentication System"
52
+ /gsd-t-milestone "User Authentication System"
53
53
 
54
54
  # 5. Let it rip (auto-advances through all phases)
55
- /user:gsd-t-wave
55
+ /gsd-t-wave
56
56
 
57
57
  # Or go phase by phase for more control:
58
- /user:gsd-t-partition
59
- /user:gsd-t-discuss
60
- /user:gsd-t-plan
61
- /user:gsd-t-impact
62
- /user:gsd-t-execute
63
- /user:gsd-t-test-sync
64
- /user:gsd-t-integrate
65
- /user:gsd-t-verify
66
- /user:gsd-t-complete-milestone
58
+ /gsd-t-partition
59
+ /gsd-t-discuss
60
+ /gsd-t-plan
61
+ /gsd-t-impact
62
+ /gsd-t-execute
63
+ /gsd-t-test-sync
64
+ /gsd-t-integrate
65
+ /gsd-t-verify
66
+ /gsd-t-complete-milestone
67
67
  ```
68
68
 
69
69
  ### Resuming After a Break
70
70
 
71
71
  ```bash
72
72
  claude
73
- /user:gsd-t-resume
73
+ /gsd-t-resume
74
74
  ```
75
75
 
76
76
  GSD-T reads all state files and tells you exactly where you left off.
@@ -126,100 +126,100 @@ This will replace changed command files, back up your CLAUDE.md if customized, a
126
126
 
127
127
  | Command | Purpose | Auto |
128
128
  |---------|---------|------|
129
- | `/user:gsd {request}` | Describe what you need → auto-routes to the right command | Manual |
129
+ | `/gsd {request}` | Describe what you need → auto-routes to the right command | Manual |
130
130
  | _(any plain text)_ | Auto-routed via UserPromptSubmit hook — no leading `/` needed | Auto |
131
131
 
132
132
  ### Help & Onboarding
133
133
 
134
134
  | Command | Purpose | Auto |
135
135
  |---------|---------|------|
136
- | `/user:gsd-t-help` | List all commands with descriptions | Manual |
137
- | `/user:gsd-t-help {cmd}` | Detailed help for specific command | Manual |
138
- | `/user:gsd-t-prompt` | Help formulate your idea before committing | Manual |
139
- | `/user:gsd-t-brainstorm` | Creative exploration and idea generation | Manual |
140
- | `/user:gsd-t-prd` | Generate a GSD-T-optimized Product Requirements Document | Manual |
136
+ | `/gsd-t-help` | List all commands with descriptions | Manual |
137
+ | `/gsd-t-help {cmd}` | Detailed help for specific command | Manual |
138
+ | `/gsd-t-prompt` | Help formulate your idea before committing | Manual |
139
+ | `/gsd-t-brainstorm` | Creative exploration and idea generation | Manual |
140
+ | `/gsd-t-prd` | Generate a GSD-T-optimized Product Requirements Document | Manual |
141
141
 
142
142
  ### Project Initialization
143
143
 
144
144
  | Command | Purpose | Auto |
145
145
  |---------|---------|------|
146
- | `/user:gsd-t-setup` | Generate or restructure project CLAUDE.md | Manual |
147
- | `/user:gsd-t-init` | Initialize GSD-T structure in project | Manual |
148
- | `/user:gsd-t-init-scan-setup` | Full onboarding: git + init + scan + setup in one | Manual |
149
- | `/user:gsd-t-project` | Full project → milestone roadmap | Manual |
150
- | `/user:gsd-t-feature` | Major feature → impact analysis + milestones | Manual |
151
- | `/user:gsd-t-scan` | Deep codebase analysis → techdebt.md | Manual |
152
- | `/user:gsd-t-gap-analysis` | Requirements gap analysis — spec vs. existing code | Manual |
153
- | `/user:gsd-t-promote-debt` | Convert techdebt items to milestones | Manual |
154
- | `/user:gsd-t-populate` | Auto-populate docs from existing codebase | Manual |
155
- | `/user:gsd-t-design-decompose` | Decompose design into element/widget/page contracts | Manual |
146
+ | `/gsd-t-setup` | Generate or restructure project CLAUDE.md | Manual |
147
+ | `/gsd-t-init` | Initialize GSD-T structure in project | Manual |
148
+ | `/gsd-t-init-scan-setup` | Full onboarding: git + init + scan + setup in one | Manual |
149
+ | `/gsd-t-project` | Full project → milestone roadmap | Manual |
150
+ | `/gsd-t-feature` | Major feature → impact analysis + milestones | Manual |
151
+ | `/gsd-t-scan` | Deep codebase analysis → techdebt.md | Manual |
152
+ | `/gsd-t-gap-analysis` | Requirements gap analysis — spec vs. existing code | Manual |
153
+ | `/gsd-t-promote-debt` | Convert techdebt items to milestones | Manual |
154
+ | `/gsd-t-populate` | Auto-populate docs from existing codebase | Manual |
155
+ | `/gsd-t-design-decompose` | Decompose design into element/widget/page contracts | Manual |
156
156
 
157
157
  ### Milestone Workflow
158
158
 
159
159
  | Command | Purpose | Auto |
160
160
  |---------|---------|------|
161
- | `/user:gsd-t-milestone` | Define new milestone | Manual |
162
- | `/user:gsd-t-partition` | Decompose into domains + contracts | In wave |
163
- | `/user:gsd-t-discuss` | Multi-perspective design exploration | In wave |
164
- | `/user:gsd-t-plan` | Create atomic task lists per domain (tasks auto-split to fit one context window) | In wave |
165
- | `/user:gsd-t-impact` | Analyze downstream effects | In wave |
166
- | `/user:gsd-t-execute` | Run tasks — task-level fresh dispatch, worktree isolation, adaptive replanning | In wave |
167
- | `/user:gsd-t-test-sync` | Sync tests with code changes | In wave |
168
- | `/user:gsd-t-qa` | QA agent — test generation, execution, gap reporting | Auto-spawned |
161
+ | `/gsd-t-milestone` | Define new milestone | Manual |
162
+ | `/gsd-t-partition` | Decompose into domains + contracts | In wave |
163
+ | `/gsd-t-discuss` | Multi-perspective design exploration | In wave |
164
+ | `/gsd-t-plan` | Create atomic task lists per domain (tasks auto-split to fit one context window) | In wave |
165
+ | `/gsd-t-impact` | Analyze downstream effects | In wave |
166
+ | `/gsd-t-execute` | Run tasks — task-level fresh dispatch, worktree isolation, adaptive replanning | In wave |
167
+ | `/gsd-t-test-sync` | Sync tests with code changes | In wave |
168
+ | `/gsd-t-qa` | QA agent — test generation, execution, gap reporting | Auto-spawned |
169
169
  | *Red Team* | Adversarial QA — finds bugs the builder missed (inverted incentives) | Auto-spawned |
170
- | `/user:gsd-t-doc-ripple` | Automated document ripple — update downstream docs after code changes | Auto-spawned |
171
- | `/user:gsd-t-integrate` | Wire domains together | In wave |
172
- | `/user:gsd-t-verify` | Run quality gates + goal-backward behavior verification | In wave |
173
- | `/user:gsd-t-complete-milestone` | Archive + git tag (goal-backward gate required) | In wave |
170
+ | `/gsd-t-doc-ripple` | Automated document ripple — update downstream docs after code changes | Auto-spawned |
171
+ | `/gsd-t-integrate` | Wire domains together | In wave |
172
+ | `/gsd-t-verify` | Run quality gates + goal-backward behavior verification | In wave |
173
+ | `/gsd-t-complete-milestone` | Archive + git tag (goal-backward gate required) | In wave |
174
174
 
175
175
  ### Unattended Execution
176
176
 
177
177
  | Command | Purpose | Auto |
178
178
  |---------|---------|------|
179
- | `/user:gsd-t-unattended` | Launch detached supervisor — runs active milestone to completion with zero human intervention | Manual |
180
- | `/user:gsd-t-unattended-watch` | Watch tick — fires every 270s via ScheduleWakeup, reports supervisor status | Auto |
181
- | `/user:gsd-t-unattended-stop` | Touch stop sentinel — supervisor halts after current worker finishes | Manual |
179
+ | `/gsd-t-unattended` | Launch detached supervisor — runs active milestone to completion with zero human intervention | Manual |
180
+ | `/gsd-t-unattended-watch` | Watch tick — fires every 270s via ScheduleWakeup, reports supervisor status | Auto |
181
+ | `/gsd-t-unattended-stop` | Touch stop sentinel — supervisor halts after current worker finishes | Manual |
182
182
 
183
183
  ### Automation & Utilities
184
184
 
185
185
  | Command | Purpose | Auto |
186
186
  |---------|---------|------|
187
- | `/user:gsd-t-wave` | Full cycle, auto-advances all phases | Manual |
188
- | `/user:gsd-t-status` | Cross-domain progress view with token breakdown by domain/task/phase | Manual |
189
- | `/user:gsd-t-resume` | Restore context, continue | Manual |
190
- | `/user:gsd-t-quick` | Fast task with GSD-T guarantees | Manual |
191
- | `/user:gsd-t-visualize` | Launch browser dashboard — SSE server + React Flow agent visualization | Manual |
192
- | `/user:gsd-t-debug` | Systematic debugging with state | Manual |
193
- | `/user:gsd-t-metrics` | View task telemetry, process ELO, signal distribution, domain health, and cross-project comparison (`--cross-project`) | Manual |
194
- | `/user:gsd-t-health` | Validate .gsd-t/ structure, optionally repair | Manual |
195
- | `/user:gsd-t-pause` | Save exact position for reliable resume | Manual |
196
- | `/user:gsd-t-log` | Sync progress Decision Log with recent git activity | Manual |
197
- | `/user:gsd-t-version-update` | Update GSD-T to latest version | Manual |
198
- | `/user:gsd-t-version-update-all` | Update GSD-T + all registered projects | Manual |
199
- | `/user:gsd-t-triage-and-merge` | Auto-review, merge, and publish GitHub branches | Manual |
200
- | `/user:gsd-t-design-audit` | Compare built screen against Figma design — structured deviation report | Manual |
201
- | `/user:gsd-t-design-build` | Build from design contracts with two-terminal review (Term 1 builder) | Manual |
202
- | `/user:gsd-t-design-review` | Independent review agent for design build (Term 2 reviewer) | Auto |
187
+ | `/gsd-t-wave` | Full cycle, auto-advances all phases | Manual |
188
+ | `/gsd-t-status` | Cross-domain progress view with token breakdown by domain/task/phase | Manual |
189
+ | `/gsd-t-resume` | Restore context, continue | Manual |
190
+ | `/gsd-t-quick` | Fast task with GSD-T guarantees | Manual |
191
+ | `/gsd-t-visualize` | Launch browser dashboard — SSE server + React Flow agent visualization | Manual |
192
+ | `/gsd-t-debug` | Systematic debugging with state | Manual |
193
+ | `/gsd-t-metrics` | View task telemetry, process ELO, signal distribution, domain health, and cross-project comparison (`--cross-project`) | Manual |
194
+ | `/gsd-t-health` | Validate .gsd-t/ structure, optionally repair | Manual |
195
+ | `/gsd-t-pause` | Save exact position for reliable resume | Manual |
196
+ | `/gsd-t-log` | Sync progress Decision Log with recent git activity | Manual |
197
+ | `/gsd-t-version-update` | Update GSD-T to latest version | Manual |
198
+ | `/gsd-t-version-update-all` | Update GSD-T + all registered projects | Manual |
199
+ | `/gsd-t-triage-and-merge` | Auto-review, merge, and publish GitHub branches | Manual |
200
+ | `/gsd-t-design-audit` | Compare built screen against Figma design — structured deviation report | Manual |
201
+ | `/gsd-t-design-build` | Build from design contracts with two-terminal review (Term 1 builder) | Manual |
202
+ | `/gsd-t-design-review` | Independent review agent for design build (Term 2 reviewer) | Auto |
203
203
 
204
204
  ### Backlog Management
205
205
 
206
206
  | Command | Purpose | Auto |
207
207
  |---------|---------|------|
208
- | `/user:gsd-t-backlog-add` | Capture item, auto-categorize, append to backlog | Manual |
209
- | `/user:gsd-t-backlog-list` | Filtered, ordered view of backlog items | Manual |
210
- | `/user:gsd-t-backlog-move` | Reorder items by position (priority) | Manual |
211
- | `/user:gsd-t-backlog-edit` | Modify backlog entry fields | Manual |
212
- | `/user:gsd-t-backlog-remove` | Drop item with optional reason | Manual |
213
- | `/user:gsd-t-backlog-promote` | Refine, classify, launch GSD-T workflow | Manual |
214
- | `/user:gsd-t-backlog-settings` | Manage types, apps, categories, defaults | Manual |
208
+ | `/gsd-t-backlog-add` | Capture item, auto-categorize, append to backlog | Manual |
209
+ | `/gsd-t-backlog-list` | Filtered, ordered view of backlog items | Manual |
210
+ | `/gsd-t-backlog-move` | Reorder items by position (priority) | Manual |
211
+ | `/gsd-t-backlog-edit` | Modify backlog entry fields | Manual |
212
+ | `/gsd-t-backlog-remove` | Drop item with optional reason | Manual |
213
+ | `/gsd-t-backlog-promote` | Refine, classify, launch GSD-T workflow | Manual |
214
+ | `/gsd-t-backlog-settings` | Manage types, apps, categories, defaults | Manual |
215
215
 
216
216
  ### Git Helpers
217
217
 
218
218
  | Command | Purpose | Auto |
219
219
  |---------|---------|------|
220
- | `/user:branch` | Create and switch to a new git branch | Manual |
221
- | `/user:checkin` | Auto-bump version, stage, commit, and push | Manual |
222
- | `/user:Claude-md` | Reload CLAUDE.md directives mid-session | Manual |
220
+ | `/branch` | Create and switch to a new git branch | Manual |
221
+ | `/checkin` | Auto-bump version, stage, commit, and push | Manual |
222
+ | `/Claude-md` | Reload CLAUDE.md directives mid-session | Manual |
223
223
  | `/global-change` | Apply file changes across all registered GSD-T projects | Manual |
224
224
 
225
225
  ---
@@ -323,17 +323,17 @@ Run the active milestone to completion over hours or days — no human in the lo
323
323
  gsd-t unattended --hours=24
324
324
 
325
325
  # Or from within Claude Code (starts a 270s watch loop)
326
- /user:gsd-t-unattended
326
+ /gsd-t-unattended
327
327
 
328
328
  # Stop (graceful — supervisor halts after the current worker finishes)
329
- /user:gsd-t-unattended-stop
329
+ /gsd-t-unattended-stop
330
330
  ```
331
331
 
332
332
  **How it works:**
333
333
 
334
334
  - `gsd-t unattended` spawns `bin/gsd-t-unattended.js` as a fully detached OS process. The supervisor runs `claude -p` workers in a relay — one worker per iteration — each in a fresh context window. State is written atomically to `.gsd-t/.unattended/state.json` between iterations.
335
- - `/user:gsd-t-unattended` does the same from inside Claude Code, then calls `ScheduleWakeup(270, '/gsd-t-unattended-watch')` to start an in-session watch loop that ticks every 270 seconds and prints progress.
336
- - If you run `/clear` + `/user:gsd-t-resume` during a live run, the resume command auto-detects the running supervisor and re-attaches the watch loop — no re-launch needed.
335
+ - `/gsd-t-unattended` does the same from inside Claude Code, then calls `ScheduleWakeup(270, '/gsd-t-unattended-watch')` to start an in-session watch loop that ticks every 270 seconds and prints progress.
336
+ - If you run `/clear` + `/gsd-t-resume` during a live run, the resume command auto-detects the running supervisor and re-attaches the watch loop — no re-launch needed.
337
337
  - The supervisor halts automatically when: the milestone reaches COMPLETED status, the `--hours` wall-clock cap expires, `--max-iterations` is reached, safety rails detect a stall or unrecoverable error, or the stop sentinel is touched.
338
338
 
339
339
  **Platform support:** macOS and Linux fully supported (including sleep-prevention via `caffeinate` on macOS). Windows is supported except sleep-prevention. See `docs/unattended-windows-caveats.md` for known Windows limitations.
@@ -439,7 +439,7 @@ copy commands\*.md %USERPROFILE%\.claude\commands\
439
439
  cp commands/*.md ~/.claude/commands/
440
440
  ```
441
441
 
442
- Verify with: `/user:gsd-t-help`
442
+ Verify with: `/gsd-t-help`
443
443
 
444
444
  ---
445
445
 
@@ -31,7 +31,7 @@ function discoverWork(projectDir) {
31
31
  const indexPath = path.join(contractsDir, "INDEX.md");
32
32
 
33
33
  if (!fs.existsSync(indexPath)) {
34
- error("No design contracts found. Run /user:gsd-t-design-decompose first.");
34
+ error("No design contracts found. Run /gsd-t-design-decompose first.");
35
35
  process.exit(1);
36
36
  }
37
37
 
@@ -498,7 +498,7 @@ function doUnattended(argv, deps) {
498
498
  console.error(
499
499
  "[gsd-t-unattended] --watch is incompatible with unattended.\n" +
500
500
  "Unattended supervisor is detached by definition.\n" +
501
- "Run /user:gsd-t-unattended-watch from your interactive session to see live activity.",
501
+ "Run /gsd-t-unattended-watch from your interactive session to see live activity.",
502
502
  );
503
503
  return {
504
504
  ok: false,
@@ -1087,8 +1087,10 @@ function _appendTokenLog(projectDir, entry) {
1087
1087
  const note = entry.exitCode === 0
1088
1088
  ? `supervisor iter=${entry.iter}: ok`
1089
1089
  : `supervisor iter=${entry.iter}: exit ${entry.exitCode}`;
1090
+ // v3.12.14: prefer env-var model over the hardcoded "unknown" placeholder.
1091
+ const model = process.env.GSD_T_MODEL || "unknown";
1090
1092
  const row =
1091
- `| ${entry.dtStart} | ${entry.dtEnd} | ${entry.command} | supervisor-iter-${entry.iter} | unknown | ${entry.durationS}s | ${note} | - | - | unknown |\n`;
1093
+ `| ${entry.dtStart} | ${entry.dtEnd} | ${entry.command} | supervisor-iter-${entry.iter} | ${model} | ${entry.durationS}s | ${note} | - | - | unknown |\n`;
1092
1094
  const gsdtDir = path.join(projectDir, ".gsd-t");
1093
1095
  if (!fs.existsSync(gsdtDir)) fs.mkdirSync(gsdtDir, { recursive: true });
1094
1096
  if (!fs.existsSync(logPath)) {
@@ -1119,15 +1121,23 @@ function _appendTokenLog(projectDir, entry) {
1119
1121
  */
1120
1122
  function _spawnWorker(state, opts) {
1121
1123
  const bin = (state && state.claudeBin) || resolveClaudePath();
1122
- // Inject command/phase so event-stream tool_call entries are tagged in worker
1123
- // contexts (Fix 2, v3.12.12). Supervisor always runs gsd-t-resume workers;
1124
- // phase is inferred from state when available.
1124
+ // Inject command/phase/trace/model/project-dir so event-stream tool_call
1125
+ // entries (writer CLI + heartbeat hook) are tagged in worker contexts
1126
+ // (Fix 2, v3.12.12; trace/model/project-dir added v3.12.14 for the
1127
+ // null-telemetry regression fix). Supervisor always runs gsd-t-resume
1128
+ // workers; phase is inferred from state when available. Trace/model flow
1129
+ // through from parent process.env when set.
1125
1130
  const workerEnv = {
1126
1131
  ...process.env,
1127
1132
  GSD_T_UNATTENDED_WORKER: "1",
1128
1133
  GSD_T_COMMAND: "gsd-t-resume",
1129
1134
  GSD_T_PHASE: (state && state.phase) || "execute",
1135
+ GSD_T_PROJECT_DIR: process.env.GSD_T_PROJECT_DIR || opts.cwd || state.projectDir,
1130
1136
  };
1137
+ if (state && state.traceId) workerEnv.GSD_T_TRACE_ID = state.traceId;
1138
+ else if (process.env.GSD_T_TRACE_ID) workerEnv.GSD_T_TRACE_ID = process.env.GSD_T_TRACE_ID;
1139
+ if (state && state.model) workerEnv.GSD_T_MODEL = state.model;
1140
+ else if (process.env.GSD_T_MODEL) workerEnv.GSD_T_MODEL = process.env.GSD_T_MODEL;
1131
1141
  const res = platformSpawnWorker(opts.cwd, opts.timeout, {
1132
1142
  bin,
1133
1143
  args: [
@@ -499,7 +499,7 @@ function doUnattended(argv, deps) {
499
499
  console.error(
500
500
  "[gsd-t-unattended] --watch is incompatible with unattended.\n" +
501
501
  "Unattended supervisor is detached by definition.\n" +
502
- "Run /user:gsd-t-unattended-watch from your interactive session to see live activity.",
502
+ "Run /gsd-t-unattended-watch from your interactive session to see live activity.",
503
503
  );
504
504
  return {
505
505
  ok: false,