@tekyzinc/gsd-t 2.24.7 → 2.28.12

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.
@@ -2,6 +2,23 @@
2
2
 
3
3
  You are checking the current state of the project across all domains.
4
4
 
5
+ ## Launch via Subagent
6
+
7
+ To keep the main conversation context lean, run status via a Task subagent.
8
+
9
+ **If you are the orchestrating agent** (you received the slash command directly):
10
+ Spawn a fresh subagent using the Task tool:
11
+ ```
12
+ subagent_type: general-purpose
13
+ model: haiku
14
+ prompt: "You are running gsd-t-status. Working directory: {current project root}
15
+ Read .gsd-t/progress.md and execute the full status report workflow."
16
+ ```
17
+ Wait for the subagent to complete. Relay its output to the user. **Do not read files yourself.**
18
+
19
+ **If you are the spawned subagent** (your prompt says "running gsd-t-status"):
20
+ Continue below.
21
+
5
22
  ## Read These Files
6
23
 
7
24
  1. `.gsd-t/progress.md`
@@ -21,18 +21,17 @@ Identify:
21
21
  - Naming conventions
22
22
  - Test run commands (from package.json scripts, Makefile, or CI config)
23
23
 
24
- ## Step 2: Spawn QA Agent
24
+ ## Step 2: Contract Coverage Audit
25
25
 
26
- Spawn the QA teammate to assist with test coverage analysis:
26
+ Perform inline contract testing and gap analysis:
27
27
 
28
- ```
29
- Teammate "qa": Read commands/gsd-t-qa.md for your full instructions.
30
- Phase context: test-sync. Read .gsd-t/contracts/ for contract definitions.
31
- Audit test coverage against contracts. Identify gaps and stale tests.
32
- Report: coverage gaps, stale tests, and recommended test tasks.
33
- ```
28
+ 1. Read all contracts in `.gsd-t/contracts/` — identify the interface each one defines
29
+ 2. For each contract, check whether a test file exists that validates it
30
+ 3. Run the full test suite: `npm test` (or project equivalent)
31
+ 4. Identify gaps: contracts with no tests, stale tests referencing removed APIs, uncovered code paths
32
+ 5. Report: coverage gaps, stale tests, and recommended test tasks
34
33
 
35
- QA agent works alongside the test sync process. QA failure blocks test-sync completion.
34
+ Test-sync cannot complete if critical contract gaps remain unaddressed.
36
35
 
37
36
  ## Step 3: Map Code to Tests
38
37
 
@@ -12,18 +12,17 @@ Read:
12
12
  5. `docs/requirements.md` — original requirements
13
13
  6. All source code
14
14
 
15
- ## Step 2: Spawn QA Agent
15
+ ## Step 2: Full Test Audit (Inline)
16
16
 
17
- Spawn the QA teammate to run the full test audit:
17
+ Run the full test audit directly:
18
18
 
19
- ```
20
- Teammate "qa": Read commands/gsd-t-qa.md for your full instructions.
21
- Phase context: verify. Read .gsd-t/contracts/ for contract definitions.
22
- Run full test audit contract tests, acceptance tests, E2E suite.
23
- Report: comprehensive test results with pass/fail counts and coverage gaps.
24
- ```
19
+ 1. Run the full test suite: `npm test` (or project equivalent) — record pass/fail counts
20
+ 2. Read all contracts in `.gsd-t/contracts/` verify each has at least one test validating it
21
+ 3. Check acceptance criteria from domain task lists — verify each is tested
22
+ 4. Run E2E suite if `playwright.config.*` exists
23
+ 5. Report: comprehensive test results with pass/fail counts and coverage gaps
25
24
 
26
- QA failure blocks verification completion.
25
+ Verification cannot complete if any test fails or critical contract gaps remain.
27
26
 
28
27
  ## Step 3: Define Verification Dimensions
29
28
 
@@ -40,6 +39,12 @@ Standard dimensions (adjust based on project):
40
39
  5. **E2E Tests**: Run the FULL Playwright suite — all specs must pass. If new features lack specs, create them before proceeding.
41
40
  6. **Security**: Auth flows, input validation, data exposure, dependencies
42
41
  7. **Integration Integrity**: Do the seams between domains hold under stress?
42
+ 8. **Requirements Traceability Close-Out**: Mark verified requirements as complete and report orphans:
43
+ - Read `docs/requirements.md` traceability table (added by plan phase)
44
+ - For each REQ-ID that is fully implemented and tested: update Status to `complete` in the traceability table
45
+ - **Orphan report**: List any REQ-IDs with no task mapping (planning gap) and any tasks with no REQ-ID (potential scope creep)
46
+ - Orphaned requirements = WARN (not blocking unless critical)
47
+ - Update `docs/requirements.md` with the close-out results
43
48
 
44
49
  ## Step 4: Execute Verification
45
50
 
@@ -101,12 +106,7 @@ Teammate assignments:
101
106
  - Secret/credential handling
102
107
  Report: severity-ranked findings.
103
108
 
104
- - Teammate "qa": Read commands/gsd-t-qa.md for your full instructions.
105
- Phase context: verify. Read .gsd-t/contracts/ for contract definitions.
106
- Run full test audit — contract tests, acceptance tests, E2E suite.
107
- Report: comprehensive test results with pass/fail counts and coverage gaps.
108
-
109
- Lead: Collect all reports (including QA), synthesize, create remediation plan.
109
+ Lead: After receiving teammate reports, spawn a Task subagent to run the full test suite and contract audit. Collect all reports, synthesize, create remediation plan.
110
110
  ```
111
111
 
112
112
  ## Step 5: Compile Verification Report
@@ -120,14 +120,18 @@ Spawn agent → `commands/gsd-t-complete-milestone.md`
120
120
 
121
121
  ### Between Each Phase
122
122
 
123
- After each agent completes:
124
- 1. Read `.gsd-t/progress.md` to verify the phase updated status correctly
125
- 2. Report brief status to user:
123
+ After each agent completes, run this spot-check before proceeding:
124
+
125
+ 1. **Status check**: Read `.gsd-t/progress.md` — verify the phase updated status correctly (no FAILED markers, status matches expected phase completion state)
126
+ 2. **Git check**: Run `git log --oneline -5` — verify commits were made during this phase (if execute/integrate: at least one commit per task completed)
127
+ 3. **Filesystem check**: Verify key output files exist on disk — e.g., for partition: `.gsd-t/domains/*/scope.md` and `.gsd-t/contracts/` files; for execute: newly created source files; for verify: `.gsd-t/verify-report.md`. Do not trust agent-reported completions alone.
128
+ 4. Report to user:
126
129
  ```
127
130
  ✅ {Phase} complete — {agent's one-line summary}
131
+ 📋 Spot-check: {N} commits | {N} output files verified | no FAILED markers
128
132
  ```
129
- 3. If status was NOT updated correctly: report error and stop
130
- 4. Proceed to next phase
133
+ 5. If spot-check fails: report the discrepancy, re-spawn the phase agent once to correct it, then re-verify. If still failing: stop and report to user.
134
+ 6. Proceed to next phase
131
135
 
132
136
  ## Step 4: Autonomy Behavior
133
137
 
@@ -112,6 +112,8 @@ GSD-T reads all state files and tells you exactly where you left off.
112
112
  | `/user:gsd-t-resume` | Restore context, continue | Manual |
113
113
  | `/user:gsd-t-quick` | Fast task with GSD-T guarantees | Manual |
114
114
  | `/user:gsd-t-debug` | Systematic debugging with state | Manual |
115
+ | `/user:gsd-t-health` | Validate .gsd-t/ structure, optionally repair | Manual |
116
+ | `/user:gsd-t-pause` | Save exact position for reliable resume | Manual |
115
117
  | `/user:gsd-t-log` | Sync progress Decision Log with recent git activity | Manual |
116
118
  | `/user:gsd-t-version-update` | Update GSD-T to latest version | Manual |
117
119
  | `/user:gsd-t-version-update-all` | Update GSD-T + all registered projects | Manual |
@@ -1,6 +1,6 @@
1
1
  # Architecture — GSD-T Framework (@tekyzinc/gsd-t)
2
2
 
3
- ## Last Updated: 2026-02-18 (Post-M9)
3
+ ## Last Updated: 2026-02-18 (Post-M13, Scan #6)
4
4
 
5
5
  ## System Overview
6
6
 
@@ -14,7 +14,7 @@ The framework has no runtime — it is consumed entirely by Claude Code's slash
14
14
 
15
15
  ### CLI Installer (bin/gsd-t.js)
16
16
  - **Purpose**: Install, update, diagnose, and manage GSD-T across projects
17
- - **Location**: `bin/gsd-t.js` (1,298 lines, 81 functions, 49 exports)
17
+ - **Location**: `bin/gsd-t.js` (1,438 lines, 81+ functions, all ≤ 30 lines)
18
18
  - **Dependencies**: Node.js built-ins only (fs, path, os, child_process, https)
19
19
  - **Subcommands**: install, update, status, doctor, init, uninstall, update-all, register, changelog
20
20
  - **Organization**: Configuration → Guard section → Helpers → Heartbeat → Commands → Install/Update → Init → Status → Uninstall → Update-All → Doctor → Register → Update Check → Help → Main dispatch
@@ -23,7 +23,7 @@ The framework has no runtime — it is consumed entirely by Claude Code's slash
23
23
  ### Slash Commands (commands/*.md)
24
24
  - **Purpose**: Define the GSD-T methodology as executable workflows for Claude Code
25
25
  - **Location**: `commands/`
26
- - **Count**: 43 (39 GSD-T workflow + 4 utility: gsd, branch, checkin, Claude-md)
26
+ - **Count**: 45 (41 GSD-T workflow + 4 utility: gsd, branch, checkin, Claude-md) — includes gsd-t-health and gsd-t-pause added in M13
27
27
  - **Format**: Pure markdown with step-numbered instructions, team mode blocks, document ripple sections, and $ARGUMENTS terminator
28
28
 
29
29
  ### Templates (templates/*.md)
@@ -36,6 +36,8 @@ The framework has no runtime — it is consumed entirely by Claude Code's slash
36
36
  - **gsd-t-heartbeat.js** (181 lines, 6 functions, 5 exports): Real-time event logging via Claude Code hooks. Captures 9 event types as structured JSONL. Input capped at 1MB. Session ID validated. Path traversal protection. Secret scrubbing via `scrubSecrets()`/`scrubUrl()` (M5). Notification message + title scrubbing (M8/M9). EVENT_HANDLERS map pattern (M6). Auto-cleanup after 7 days (SessionStart only, M6).
37
37
  - **npm-update-check.js** (43 lines): Background npm registry version checker. Spawned detached by CLI when update cache is stale. Path validation within `~/.claude/` (M5). Symlink check before write (M5). 1MB response limit (M5).
38
38
  - **gsd-t-fetch-version.js** (26 lines, NEW in M6): Synchronous npm registry fetch. Called by `fetchVersionSync()` via `execFileSync`. HTTPS-only, 5s timeout, 1MB limit. Silent failure on errors (caller validates).
39
+ - **gsd-t-tools.js** (163 lines, NEW in M13): State utility CLI returning compact JSON. Subcommands: state get/set (progress.md), validate (required file presence), parse progress --section, list domains/contracts, git pre-commit-check, template scope/tasks. Zero external dependencies. NOTE: No module.exports — untestable as module (TD-066).
40
+ - **gsd-t-statusline.js** (94 lines, NEW in M13): Context usage bar + project state for Claude Code `statusLine` setting. Reads CLAUDE_CONTEXT_TOKENS_USED/MAX env vars for usage percentage. Color-coded bar (green <50%, yellow <70%, orange <85%, red ≥85%). NOTE: No module.exports — untestable as module (TD-066).
39
41
 
40
42
  ### Examples (examples/)
41
43
  - **Purpose**: Reference project structure and settings
@@ -51,6 +53,8 @@ npm install @tekyzinc/gsd-t → bin/gsd-t.js install
51
53
  ├── Copy/append templates/CLAUDE-global.md → ~/.claude/CLAUDE.md
52
54
  ├── Copy scripts/gsd-t-heartbeat.js → ~/.claude/scripts/
53
55
  ├── Configure 9 hooks in ~/.claude/settings.json
56
+ ├── Copy scripts/gsd-t-tools.js → ~/.claude/scripts/ (installUtilityScripts, M13)
57
+ ├── Copy scripts/gsd-t-statusline.js → ~/.claude/scripts/ (installUtilityScripts, M13)
54
58
  └── Write version to ~/.claude/.gsd-t-version
55
59
  ```
56
60
 
@@ -101,6 +105,9 @@ Three-tier configuration:
101
105
  | `backlog-settings.md` | Types, apps, categories | backlog-add/edit/settings | backlog-settings, init |
102
106
  | `techdebt.md` | Prioritized tech debt | promote-debt, scan | scan |
103
107
  | `scan/*.md` | Codebase analysis | scan (synthesis), setup | scan (teammates) |
108
+ | `CONTEXT.md` | Discuss phase output — Locked Decisions, Deferred Ideas | plan (reads + enforces) | discuss |
109
+ | `continue-here-{ts}.md` | Pause/resume checkpoint — exact position | resume (reads + deletes) | pause |
110
+ | `deferred-items.md` | Log of unresolved issues from execute/quick/debug | (manual review) | execute, quick, debug |
104
111
 
105
112
  ## Data Models
106
113
 
@@ -142,23 +149,51 @@ PARTITION → DISCUSS → PLAN → IMPACT → EXECUTE → TEST-SYNC → INTEGRAT
142
149
 
143
150
  | Phase | Mode | QA Agent | Why |
144
151
  |-------|------|----------|-----|
145
- | Partition | Solo only | YES test skeletons | Needs full cross-domain context |
152
+ | Partition | Solo only | NO (removed M10) | Was unnecessary overhead |
146
153
  | Discuss | Solo only | No | Always pauses for user input (even Level 3) |
147
- | Plan | Solo only | YES acceptance scenarios | Needs full cross-domain context |
154
+ | Plan | Solo only | NO (removed M10) | Was unnecessary overhead |
148
155
  | Impact | Solo only | No | Cross-cutting analysis |
149
- | Execute | Solo or Team | YES continuous testing | Tasks within domains are independent |
150
- | Test-Sync | Solo only | YES coverage audit | Sequential verification |
151
- | Integrate | Solo only | YES boundary tests | Needs to see all seams |
152
- | Verify | Solo or Team | YES full audit | Dimensions are independent |
153
- | Complete | Solo only | YES final gate | Archival and tagging |
156
+ | Execute | Solo or Team | Task subagent (M10) | Each task gets QA after completion |
157
+ | Test-Sync | Solo only | Inline (M10) | Sequential contract coverage audit |
158
+ | Integrate | Solo only | Task subagent (M10) | Cross-domain integration tests |
159
+ | Verify | Solo or Team | Inline (M10) | Full audit runs directly |
160
+ | Complete | Solo only | Inline (M10) | Final gate runs directly |
154
161
 
155
162
  ### Wave Orchestrator (Agent-Per-Phase Model)
156
163
 
157
164
  The wave command spawns an independent agent for each phase via the Task tool with `bypassPermissions`. Each phase agent gets a fresh ~200K token context window, eliminating context accumulation and mid-wave compaction. The orchestrator itself stays lightweight (~30KB), reading only `progress.md` and `CLAUDE.md`. State handoff between phases occurs through `.gsd-t/` files.
158
165
 
159
- ### QA Agent Integration
166
+ ### QA Agent Integration (Updated M10)
160
167
 
161
- 10 commands spawn a QA teammate (`commands/gsd-t-qa.md`) for test-driven contract enforcement. QA behavior is phase-dependent: test skeletons during partition, continuous testing during execute, full audit during verify. QA failure blocks phase completion (user override available). Communication protocol: `QA: {PASS|FAIL} — {summary}`.
168
+ QA runs inline or as Task subagent depending on phase (M10 refactor). Removed from partition and plan (were unnecessary). execute and integrate spawn QA as Task subagent after each domain checkpoint. test-sync, verify, and complete-milestone run QA inline. QA failure blocks phase completion (user override available).
169
+
170
+ ### Execution Quality (M11)
171
+
172
+ **Deviation Rules**: 4-rule protocol added to execute, quick, debug: (1) Bug → fix up to 3 attempts, then defer; (2) Missing dependency → add minimum; (3) Blocker → fix and log; (4) Architectural change → STOP, apply Destructive Action Guard.
173
+
174
+ **Per-Task Commits**: execute enforces `feat({domain}/task-{N})` commit format after each task. Wave spot-check verifies commits were made.
175
+
176
+ **Between-Phase Spot-Check (Wave)**: After each phase agent completes, wave reads progress.md (status), runs git log (commits), and verifies filesystem output. Re-spawns phase agent once on failure. Stops and reports to user if still failing.
177
+
178
+ ### Planning Intelligence (M12)
179
+
180
+ **CONTEXT.md**: discuss phase creates `.gsd-t/CONTEXT.md` with three sections: Locked Decisions (plan MUST implement), Deferred Ideas (plan must NOT implement), Claude's Discretion (implementation details left to executor). Plan reads CONTEXT.md and fails validation if any Locked Decision has no task mapping.
181
+
182
+ **Plan Validation**: After creating task lists, plan spawns a Task subagent to validate REQ coverage, Locked Decision mapping, task completeness, contract existence. Max 3 fix iterations before stopping and reporting to user.
183
+
184
+ **REQ Traceability**: Plan writes a traceability table to docs/requirements.md mapping REQ-IDs to domain/task/status. Verify marks matched requirements complete.
185
+
186
+ ### Tooling & UX (M13)
187
+
188
+ **gsd-t-tools.js**: State utility CLI for Claude Code agents. Reduces token-heavy markdown parsing with compact JSON responses. Installed to `~/.claude/scripts/`. See Hook Scripts section.
189
+
190
+ **gsd-t-statusline.js**: Visual context usage bar for Claude Code `statusLine` setting. Shows milestone, status, version, and context percentage. Installed to `~/.claude/scripts/`.
191
+
192
+ **gsd-t-health**: New command — validates .gsd-t/ structure against 12 required items. `--repair` creates missing files from templates. Step 0 subagent pattern.
193
+
194
+ **gsd-t-pause**: New command — creates `.gsd-t/continue-here-{timestamp}.md` with exact position snapshot. More precise than progress.md alone.
195
+
196
+ **gsd-t-resume** (updated): Reads continue-here files first (most recent by timestamp), falls back to progress.md. Deletes continue-here file after reading.
162
197
 
163
198
  ### Test Suite (test/)
164
199
  - **helpers.test.js** (27 tests): Pure helper functions — validateProjectName, applyTokens, isNewerVersion, normalizeEol, etc.
@@ -166,7 +201,7 @@ The wave command spawns an independent agent for each phase via the Task tool wi
166
201
  - **security.test.js** (30 tests): Security functions — scrubSecrets (18), scrubUrl (5), summarize integration (4), hasSymlinkInPath (3)
167
202
  - **cli-quality.test.js** (22 tests): M6 refactored functions — buildEvent (10), readProjectDeps (3), readPyContent (2), insertGuardSection (3), readUpdateCache (1), addHeartbeatHook (3)
168
203
  - **Runner**: Node.js built-in (`node --test`), zero test dependencies
169
- - **Total**: 116 tests, all passing
204
+ - **Total**: 125 tests, all passing (post-M9)
170
205
 
171
206
  ## Security Model
172
207
 
@@ -193,10 +228,15 @@ The wave command spawns an independent agent for each phase via the Task tool wi
193
228
  | 2026-02-16 | Team mode default for scan | Parallel scanning faster, better results | Solo sequential scan |
194
229
  | 2026-02-17 | QA Agent as cross-cutting concern | Mandatory test-driven contracts for all code phases | Optional testing, deferred testing |
195
230
  | 2026-02-17 | Agent-per-phase wave orchestration | Fresh context window per phase, eliminates compaction | Inline execution (original approach) |
231
+ | 2026-02-18 | QA refactor — remove from partition/plan, Task subagent for execute/integrate | QA on partition/plan added overhead with little value; Task subagent gives QA fresh context | Teammate QA (original), no QA |
232
+ | 2026-02-18 | Deviation Rules + 3-attempt limit | Prevents infinite loops; auto-fixes bugs without blocking; escalates architectural changes | Manual escalation only, no auto-fix |
233
+ | 2026-02-18 | CONTEXT.md from discuss phase | Structured handoff between discuss and plan; fidelity enforcement on Locked Decisions | Free-form decisions in progress.md |
234
+ | 2026-02-18 | gsd-t-tools.js as state utility CLI | Reduces token-heavy markdown parsing; compact JSON responses save ~50K tokens/wave | Parsing progress.md inline (original) |
235
+ | 2026-02-18 | continue-here files for pause/resume | More precise than progress.md; captures exact task+next-action, not just phase | progress.md alone (less precise) |
196
236
 
197
237
  ## Known Architecture Concerns
198
238
 
199
- 1. **CLI single-file size**: bin/gsd-t.js at 1,298 lines exceeds the 200-line convention, but splitting adds complexity for questionable benefit given zero-dependency constraint. Accepted deviation.
239
+ 1. **CLI single-file size**: bin/gsd-t.js at 1,438 lines exceeds the 200-line convention, but splitting adds complexity for questionable benefit given zero-dependency constraint. Accepted deviation.
200
240
  2. **Four-file synchronization**: Any command change requires updating README, GSD-T-README, CLAUDE-global template, and gsd-t-help. Manual process — no automated validation.
201
241
  3. **Pre-Commit Gate unenforced**: Mental checklist in CLAUDE.md, not a git hook or CI check.
202
242
  4. **Progress.md Decision Log growth**: Unbounded append-only log. May need periodic archival strategy for long-lived projects.
@@ -1,6 +1,6 @@
1
1
  # Infrastructure — GSD-T Framework (@tekyzinc/gsd-t)
2
2
 
3
- ## Last Updated: 2026-02-18 (Scan #5)
3
+ ## Last Updated: 2026-02-18 (Post-M13, Scan #6)
4
4
 
5
5
  ## Quick Reference
6
6
 
@@ -30,7 +30,7 @@ node bin/gsd-t.js status
30
30
 
31
31
  ### Testing
32
32
  ```bash
33
- # Run automated test suite (116 tests, zero dependencies)
33
+ # Run automated test suite (125 tests, zero dependencies)
34
34
  npm test
35
35
 
36
36
  # Test CLI subcommands manually
@@ -40,8 +40,12 @@ node bin/gsd-t.js doctor
40
40
  node bin/gsd-t.js init test-project
41
41
 
42
42
  # Validate command files exist
43
- ls commands/*.md | wc -l # Should be 43
43
+ ls commands/*.md | wc -l # Should be 45
44
44
  ls templates/*.md | wc -l # Should be 9
45
+
46
+ # Test new utility scripts
47
+ node scripts/gsd-t-tools.js validate
48
+ node scripts/gsd-t-tools.js git pre-commit-check
45
49
  ```
46
50
 
47
51
  ### Scripts
@@ -50,6 +54,8 @@ ls templates/*.md | wc -l # Should be 9
50
54
  | `scripts/gsd-t-heartbeat.js` | Claude Code hook event logger (JSONL output, secret scrubbing) |
51
55
  | `scripts/npm-update-check.js` | Background npm registry version checker (path-validated) |
52
56
  | `scripts/gsd-t-fetch-version.js` | Synchronous npm registry fetch (5s timeout, 1MB limit) |
57
+ | `scripts/gsd-t-tools.js` | State utility CLI — state get/set, validate, list, git check, template read (NEW M13) |
58
+ | `scripts/gsd-t-statusline.js` | Context usage bar + project state for Claude Code statusLine setting (NEW M13) |
53
59
 
54
60
  ## Distribution
55
61
 
@@ -62,9 +68,11 @@ ls templates/*.md | wc -l # Should be 9
62
68
  ### Installed Locations
63
69
  | What | Where |
64
70
  |------|-------|
65
- | Slash commands (43 files) | `~/.claude/commands/` |
71
+ | Slash commands (45 files) | `~/.claude/commands/` |
66
72
  | Global config | `~/.claude/CLAUDE.md` |
67
73
  | Heartbeat script | `~/.claude/scripts/gsd-t-heartbeat.js` |
74
+ | State utility CLI | `~/.claude/scripts/gsd-t-tools.js` |
75
+ | Statusline script | `~/.claude/scripts/gsd-t-statusline.js` |
68
76
  | Hook configuration | `~/.claude/settings.json` (hooks section) |
69
77
  | Version file | `~/.claude/.gsd-t-version` |
70
78
  | Update cache | `~/.claude/.gsd-t-update-check` |
@@ -74,9 +82,9 @@ ls templates/*.md | wc -l # Should be 9
74
82
 
75
83
  ```
76
84
  get-stuff-done-teams/
77
- ├── bin/gsd-t.js — CLI installer (~1,300 lines, zero dependencies)
78
- ├── commands/ — 43 slash command files (39 GSD-T + 4 utility)
79
- ├── scripts/ — 3 hook/utility scripts
85
+ ├── bin/gsd-t.js — CLI installer (~1,438 lines, zero dependencies)
86
+ ├── commands/ — 45 slash command files (41 GSD-T + 4 utility)
87
+ ├── scripts/ — 5 hook/utility scripts (added gsd-t-tools.js, gsd-t-statusline.js in M13)
80
88
  ├── templates/ — 9 document templates
81
89
  ├── examples/ — Reference project structure
82
90
  ├── docs/ — Methodology + living docs
@@ -1,13 +1,13 @@
1
1
  # Requirements — GSD-T Framework (@tekyzinc/gsd-t)
2
2
 
3
- ## Last Updated: 2026-02-18 (Scan #5)
3
+ ## Last Updated: 2026-02-18 (Post-M13, Scan #6)
4
4
 
5
5
  ## Functional Requirements
6
6
 
7
7
  | ID | Requirement | Priority | Status | Tests |
8
8
  |----|-------------|----------|--------|-------|
9
9
  | REQ-001 | CLI installer with install, update, status, doctor, init, uninstall, update-all, register, changelog subcommands | P1 | complete | manual CLI testing |
10
- | REQ-002 | 39 GSD-T workflow slash commands for Claude Code (incl. QA agent) | P1 | complete | validated by use |
10
+ | REQ-002 | 41 GSD-T workflow slash commands for Claude Code (incl. QA agent, health, pause) | P1 | complete | validated by use |
11
11
  | REQ-003 | 4 utility commands (gsd smart router, branch, checkin, Claude-md) | P1 | complete | validated by use |
12
12
  | REQ-004 | Backlog management system (7 commands: add, list, move, edit, remove, promote, settings) | P1 | complete | validated by use |
13
13
  | REQ-005 | Contract-driven development with domain partitioning | P1 | complete | validated by use |
@@ -19,6 +19,10 @@
19
19
  | REQ-011 | Triage and merge — auto-review, score, merge safe GitHub branches | P2 | complete | validated by use |
20
20
  | REQ-012 | QA Agent — test-driven contract enforcement spawned in 10 phases | P1 | complete | validated by use |
21
21
  | REQ-013 | Wave orchestrator — agent-per-phase execution with fresh context windows | P1 | complete | validated by use |
22
+ | REQ-014 | Token Efficiency — QA refactored (removed from partition/plan, Task subagent for execute/integrate, inline for test-sync/verify) | P2 | complete (M10) | validated by use |
23
+ | REQ-015 | Execution Quality — Deviation Rules (4-rule, 3-attempt), per-task commits, wave spot-check | P2 | complete (M11) | validated by use |
24
+ | REQ-016 | Planning Intelligence — CONTEXT.md from discuss, plan fidelity enforcement, plan validation subagent, REQ traceability | P2 | complete (M12) | validated by use |
25
+ | REQ-017 | Tooling & UX — gsd-t-tools.js state CLI, gsd-t-statusline.js context bar, gsd-t-health command, gsd-t-pause command | P2 | complete (M13) | validated by use |
22
26
 
23
27
  ## Technical Requirements
24
28
 
@@ -52,13 +56,20 @@
52
56
  | REQ-007 | test/security.test.js | Heartbeat security (scrubSecrets, scrubUrl) | passing (30 tests) |
53
57
  | REQ-002–005, 008–013 | manual | Workflow validation by use | passing |
54
58
 
55
- **Total automated tests**: 116 across 4 test files (M4, M5, M6). Runner: `node --test` (zero dependencies).
59
+ **Total automated tests**: 125 across 4 test files (M4: 64, M5: 30, M6: 22, M9: 9). Runner: `node --test` (zero dependencies).
56
60
 
57
61
  ## Gaps Identified
58
62
 
59
- ### Open (Scan #5 — 2026-02-18)
60
- - 10 new LOW items: TD-056 through TD-065 (cosmetic code quality, documentation fixes, contract alignment)
61
- - See `.gsd-t/techdebt.md` for full list (all LOW severity, no functional issues)
63
+ ### Open (Scan #6 — 2026-02-18, Post-M10-M13)
64
+ - 14 new items: TD-066 through TD-079 (1 high: untestable new scripts; 5 medium: contract drift + doc staleness + stateSet injection; 7 low: cleanup)
65
+ - See `.gsd-t/techdebt.md` for full list
66
+
67
+ ### Resolved (Milestone 9 + Milestones 10-13, 2026-02-18)
68
+ - ~~Scan #5 items (TD-056-TD-065)~~ — RESOLVED (M9, Cleanup Sprint)
69
+ - ~~Token efficiency gaps~~ — RESOLVED (M10)
70
+ - ~~Execution quality gaps (no deviation rules, no per-task commits)~~ — RESOLVED (M11)
71
+ - ~~Planning intelligence gaps (no CONTEXT.md, no plan validation)~~ — RESOLVED (M12)
72
+ - ~~Tooling gaps (no state CLI, no statusline, no health command, no pause)~~ — RESOLVED (M13)
62
73
 
63
74
  ### Resolved (Milestones 3-8, 2026-02-18/19)
64
75
  - ~~All scan #4 items (TD-044-TD-055)~~ — RESOLVED (M8)
package/docs/workflows.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Workflows — GSD-T Framework (@tekyzinc/gsd-t)
2
2
 
3
- ## Last Updated: 2026-02-18 (Scan #5)
3
+ ## Last Updated: 2026-02-18 (Post-M13, Scan #6)
4
4
 
5
5
  ## User Workflows
6
6
 
7
7
  ### Install GSD-T
8
8
  1. Run `npx @tekyzinc/gsd-t install`
9
- 2. CLI copies 43 commands to `~/.claude/commands/`
9
+ 2. CLI copies 45 commands to `~/.claude/commands/`
10
10
  3. CLI sets up global CLAUDE.md if missing (appends with separator if exists)
11
11
  4. CLI installs heartbeat script to `~/.claude/scripts/`
12
12
  5. CLI configures 9 hooks in `~/.claude/settings.json`
@@ -14,7 +14,8 @@
14
14
  7. User starts Claude Code in their project
15
15
 
16
16
  **Entry point**: `npx @tekyzinc/gsd-t install`
17
- **Success**: 43 commands available in Claude Code
17
+ 5b. CLI installs gsd-t-tools.js and gsd-t-statusline.js to `~/.claude/scripts/` (M13)
18
+ **Success**: 45 commands available in Claude Code
18
19
  **Failure**: CLI reports missing Node.js or permission errors
19
20
 
20
21
  ### Initialize a Project
@@ -41,9 +42,14 @@
41
42
  9. **Verify**: Run 7 quality gate dimensions (functional, contracts, quality, tests, E2E, security, integration)
42
43
  10. **Complete**: Archive to `.gsd-t/milestones/`, bump version, git tag
43
44
 
45
+ Additional wave behaviors (M10-M12):
46
+ - **M10**: QA removed from partition/plan; execute/integrate spawn QA as Task subagent; test-sync/verify/complete run QA inline
47
+ - **M11**: Per-task commits (`feat({domain}/task-{N})`) enforced; between-phase spot-check (status + git + filesystem); Deviation Rules in execute (4-rule protocol, 3-attempt limit)
48
+ - **M12**: discuss creates CONTEXT.md (Locked Decisions); plan reads CONTEXT.md + runs plan validation subagent (max 3 iterations); REQ traceability table in requirements.md; verify marks requirements complete
49
+
44
50
  **Entry point**: `/gsd-t-wave` (auto-advances) or manual phase-by-phase
45
51
  **Success**: Milestone completed, version bumped, git tagged
46
- **Failure**: Wave pauses at failing phase; user can fix and resume
52
+ **Failure**: Wave pauses at failing phase; spot-check re-spawns phase agent once before stopping
47
53
 
48
54
  ### Autonomy Levels
49
55
  | Level | Behavior |
@@ -106,11 +112,45 @@ Every commit must pass applicable checks:
106
112
  6. Tech debt tracking (discovered/fixed?)
107
113
  7. Test execution (affected tests pass?)
108
114
 
115
+ ### Pause and Resume (M13)
116
+
117
+ **Pause workflow** (`/gsd-t-pause`):
118
+ 1. Command reads progress.md + domains/*/tasks.md to identify exact position
119
+ 2. Creates `.gsd-t/continue-here-{YYYYMMDDTHHMMSS}.md` with: milestone, phase, version, last completed action, next action, open items, user note
120
+ 3. File persists until consumed by resume
121
+ 4. Multiple pauses create multiple files; resume reads most recent by timestamp
122
+
123
+ **Resume workflow** (`/gsd-t-resume`):
124
+ 1. Same-session: skip file reads, use conversation context
125
+ 2. Cross-session: glob `.gsd-t/continue-here-*.md`, read most recent
126
+ 3. Resume from "Next Action" field in continue-here file (more precise than progress.md alone)
127
+ 4. Delete continue-here file after reading
128
+
129
+ ### CONTEXT.md Workflow (M12)
130
+
131
+ 1. `discuss` phase completes design decisions
132
+ 2. Writes `.gsd-t/CONTEXT.md`:
133
+ - **Locked Decisions**: specific decisions the plan MUST implement
134
+ - **Deferred Ideas**: good ideas NOT in scope (plan must NOT implement)
135
+ - **Claude's Discretion**: implementation details left open
136
+ 3. `plan` reads CONTEXT.md; every Locked Decision must map to at least one task
137
+ 4. Plan validation subagent (Task tool) verifies mapping before finalizing plan
138
+ 5. CONTEXT.md persists after plan phase; deleted manually if desired
139
+ 6. If discuss is skipped (structured skip), CONTEXT.md is not created; plan handles gracefully
140
+
141
+ ### Project Health Check (M13)
142
+
143
+ 1. User invokes `/gsd-t-health [--repair]`
144
+ 2. Health spawns as Task subagent (fresh context)
145
+ 3. Checks 12 items: 5 root files, 3 directories, 4 docs, active milestone domains, version consistency, status validity, Decision Log, contract integrity
146
+ 4. Reports status as HEALTHY (0 issues), DEGRADED (1-3), or BROKEN (4+ or critical missing)
147
+ 5. With `--repair`: creates missing files from templates (MISSING items only; INVALID items flagged for user)
148
+
109
149
  ## Integration Workflows
110
150
 
111
151
  ### npm Publish
112
152
  - **Trigger**: Manual `npm publish` after milestone completion
113
- - **Pre-publish gate**: `prepublishOnly: "npm test"` runs 116 tests before publish (M8)
153
+ - **Pre-publish gate**: `prepublishOnly: "npm test"` runs 125 tests before publish (M8)
114
154
  - **Flow**: Version bumped → CHANGELOG updated → git tagged → `npm publish` → tests run automatically → published
115
155
  - **Verification**: `npx @tekyzinc/gsd-t status` on fresh install
116
156
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "env": {
3
- "ANTHROPIC_MODEL": "claude-opus-4-6",
3
+ "ANTHROPIC_MODEL": "claude-sonnet-4-6",
4
4
  "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
5
5
  },
6
6
  "permissions": {
@@ -13,5 +13,6 @@
13
13
  ],
14
14
  "defaultMode": "dontAsk"
15
15
  },
16
- "alwaysThinkingEnabled": true
16
+ "alwaysThinkingEnabled": true,
17
+ "statusLine": "node ~/.claude/scripts/gsd-t-statusline.js"
17
18
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tekyzinc/gsd-t",
3
- "version": "2.24.7",
4
- "description": "GSD-T: Contract-Driven Development for Claude Code — 43 slash commands with backlog management, impact analysis, test sync, and milestone archival",
3
+ "version": "2.28.12",
4
+ "description": "GSD-T: Contract-Driven Development for Claude Code — 45 slash commands with backlog management, impact analysis, test sync, and milestone archival",
5
5
  "author": "Tekyz, Inc.",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -92,9 +92,9 @@ function cleanupOldHeartbeats(gsdtDir) {
92
92
 
93
93
  const EVENT_HANDLERS = {
94
94
  SessionStart: (h) => ({ evt: "session_start", data: { source: h.source, model: h.model } }),
95
- PostToolUse: (h) => ({ evt: "tool", tool: h.tool_name, data: summarize(h.tool_name, h.tool_input) }),
96
- SubagentStart: (h) => ({ evt: "agent_spawn", data: { agent_id: h.agent_id, agent_type: h.agent_type } }),
97
- SubagentStop: (h) => ({ evt: "agent_stop", data: { agent_id: h.agent_id, agent_type: h.agent_type } }),
95
+ PostToolUse: (h) => ({ evt: "tool", tool: h.tool_name, agent_id: h.agent_id || null, data: summarize(h.tool_name, h.tool_input) }),
96
+ SubagentStart: (h) => ({ evt: "agent_spawn", data: { agent_id: h.agent_id, agent_type: h.agent_type, parent_id: h.parent_agent_id || h.session_id } }),
97
+ SubagentStop: (h) => ({ evt: "agent_stop", data: { agent_id: h.agent_id, agent_type: h.agent_type, parent_id: h.parent_agent_id || h.session_id } }),
98
98
  TaskCompleted: (h) => ({ evt: "task_done", data: { task: h.task_subject, agent: h.teammate_name } }),
99
99
  TeammateIdle: (h) => ({ evt: "agent_idle", data: { agent: h.teammate_name, team: h.team_name } }),
100
100
  Notification: (h) => ({ evt: "notification", data: { message: scrubSecrets(h.message), title: scrubSecrets(h.title) } }),
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+ // gsd-t-statusline.js — GSD-T status line for Claude Code
4
+ // Outputs compact project status for display in Claude Code's statusLine setting.
5
+ //
6
+ // Configure in ~/.claude/settings.json:
7
+ // "statusLine": "node ~/.claude/scripts/gsd-t-statusline.js"
8
+ //
9
+ // Context usage is read from CLAUDE_CONTEXT_TOKENS_USED and
10
+ // CLAUDE_CONTEXT_TOKENS_MAX environment variables if available.
11
+ // Falls back to GSD-T project state only.
12
+ //
13
+ // Zero external dependencies.
14
+
15
+ const fs = require('fs');
16
+ const path = require('path');
17
+
18
+ // ─── ANSI colors ─────────────────────────────────────────────────────────────
19
+ const GREEN = '\x1b[32m';
20
+ const YELLOW = '\x1b[33m';
21
+ const RED = '\x1b[31m';
22
+ const RESET = '\x1b[0m';
23
+ const DIM = '\x1b[2m';
24
+ const BOLD = '\x1b[1m';
25
+ const ORANGE = '\x1b[38;5;208m'; // 256-color orange
26
+
27
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
28
+
29
+ function findProjectRoot() {
30
+ let dir = process.cwd();
31
+ while (dir !== path.dirname(dir)) {
32
+ if (fs.existsSync(path.join(dir, '.gsd-t'))) return dir;
33
+ dir = path.dirname(dir);
34
+ }
35
+ return null;
36
+ }
37
+
38
+ function readProgress(root) {
39
+ const p = path.join(root, '.gsd-t', 'progress.md');
40
+ if (!fs.existsSync(p)) return null;
41
+ try { return fs.readFileSync(p, 'utf8'); } catch { return null; }
42
+ }
43
+
44
+ function extract(content, key) {
45
+ const m = content.match(new RegExp(`^## ${key}:\\s*(.+)`, 'm'));
46
+ return m ? m[1].trim() : null;
47
+ }
48
+
49
+ function contextBar(pct) {
50
+ // pct: 0-100
51
+ const barLen = 10;
52
+ const filled = Math.round((pct / 100) * barLen);
53
+ const empty = barLen - filled;
54
+ let color;
55
+ if (pct < 50) color = GREEN;
56
+ else if (pct < 70) color = YELLOW;
57
+ else if (pct < 85) color = ORANGE;
58
+ else color = RED;
59
+ return `${color}${'█'.repeat(filled)}${DIM}${'░'.repeat(empty)}${RESET} ${color}${pct}%${RESET}`;
60
+ }
61
+
62
+ // ─── Main ─────────────────────────────────────────────────────────────────────
63
+
64
+ const root = findProjectRoot();
65
+
66
+ // Context usage from env vars (provided by Claude Code if available)
67
+ const tokensUsed = parseInt(process.env.CLAUDE_CONTEXT_TOKENS_USED || '0', 10);
68
+ const tokensMax = parseInt(process.env.CLAUDE_CONTEXT_TOKENS_MAX || '0', 10);
69
+ const hasContext = tokensMax > 0;
70
+ const ctxPct = hasContext ? Math.min(100, Math.round((tokensUsed / tokensMax) * 100)) : null;
71
+
72
+ // GSD-T project state
73
+ let projectPart = '';
74
+ if (root) {
75
+ const content = readProgress(root);
76
+ if (content) {
77
+ const milestone = extract(content, 'Milestone') || extract(content, 'Current Milestone') || '—';
78
+ const status = extract(content, 'Status') || '—';
79
+ const version = extract(content, 'Version') || '';
80
+ const vStr = version ? ` ${DIM}v${version}${RESET}` : '';
81
+ projectPart = `${BOLD}${milestone}${RESET} ${DIM}${status}${RESET}${vStr}`;
82
+ }
83
+ } else {
84
+ projectPart = `${DIM}(no gsd-t project)${RESET}`;
85
+ }
86
+
87
+ // Context bar
88
+ let contextPart = '';
89
+ if (ctxPct !== null) {
90
+ contextPart = ` │ ctx ${contextBar(ctxPct)}`;
91
+ }
92
+
93
+ const line = `gsd-t │ ${projectPart}${contextPart}`;
94
+ process.stdout.write(line + '\n');