@tekyzinc/gsd-t 2.8.1 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +113 -0
- package/README.md +5 -3
- package/bin/gsd-t.js +102 -55
- package/commands/checkin.md +11 -4
- package/commands/gsd-t-help.md +7 -0
- package/commands/gsd-t-setup.md +213 -0
- package/docs/GSD-T-README.md +1 -0
- package/package.json +4 -3
- package/templates/CLAUDE-global.md +1 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to GSD-T are documented here. Updated with each release.
|
|
4
|
+
|
|
5
|
+
## [2.10.0] - 2026-02-10
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- `CHANGELOG.md` release notes document with full version history
|
|
9
|
+
- `changelog` CLI subcommand — opens changelog in the browser (`gsd-t changelog`)
|
|
10
|
+
- Clickable version links in CLI output (OSC 8 hyperlinks to changelog)
|
|
11
|
+
- `checkin` command now auto-updates CHANGELOG.md on every version bump
|
|
12
|
+
- `update-all` now creates CHANGELOG.md for registered projects that don't have one
|
|
13
|
+
|
|
14
|
+
## [2.9.0] - 2026-02-10
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- `gsd-t-setup` command — generates or restructures project CLAUDE.md by scanning codebase, detecting tech stack/conventions, and removing global duplicates
|
|
18
|
+
|
|
19
|
+
## [2.8.1] - 2026-02-10
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
- Workflow Preferences section in global and project CLAUDE.md templates (Research Policy, Phase Flow defaults with per-project override support)
|
|
23
|
+
|
|
24
|
+
## [2.8.0] - 2026-02-10
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
- Backlog management system: 7 new commands (`backlog-add`, `backlog-list`, `backlog-move`, `backlog-edit`, `backlog-remove`, `backlog-promote`, `backlog-settings`)
|
|
28
|
+
- 2 new templates (`backlog.md`, `backlog-settings.md`)
|
|
29
|
+
- Backlog initialization in `gsd-t-init` with auto-category derivation
|
|
30
|
+
- Backlog summary in `gsd-t-status` report
|
|
31
|
+
- Backlog section in `gsd-t-help`
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
- Updated `gsd-t-init`, `gsd-t-status`, `gsd-t-help`, CLAUDE-global template, README with backlog integration
|
|
35
|
+
|
|
36
|
+
## [2.7.0] - 2026-02-09
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
- `update-all` CLI command — updates global install + all registered project CLAUDE.md files
|
|
40
|
+
- `register` CLI command — manually register a project in the GSD-T project registry
|
|
41
|
+
- Auto-registration on `gsd-t init`
|
|
42
|
+
- Project registry at `~/.claude/.gsd-t-projects`
|
|
43
|
+
|
|
44
|
+
## [2.6.0] - 2026-02-09
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
- Destructive Action Guard — mandatory safeguard requiring explicit user approval before destructive or structural changes (schema drops, architecture replacements, module removal)
|
|
48
|
+
- Guard enforced in global CLAUDE.md, project template, and all execution commands
|
|
49
|
+
|
|
50
|
+
## [2.5.0] - 2026-02-09
|
|
51
|
+
|
|
52
|
+
### Changed
|
|
53
|
+
- Audited all 27 command files — added Document Ripple and Test Verification steps to 15 commands that were missing them
|
|
54
|
+
- All code-modifying commands now enforce doc updates and test runs before completion
|
|
55
|
+
|
|
56
|
+
## [2.4.0] - 2026-02-09
|
|
57
|
+
|
|
58
|
+
### Added
|
|
59
|
+
- Automatic version bumping in `checkin` command — determines patch/minor/major from change type
|
|
60
|
+
|
|
61
|
+
## [2.3.0] - 2026-02-09
|
|
62
|
+
|
|
63
|
+
### Added
|
|
64
|
+
- Branch Guard — prevents commits on wrong branch by checking `Expected branch` in CLAUDE.md
|
|
65
|
+
|
|
66
|
+
## [2.2.1] - 2026-02-09
|
|
67
|
+
|
|
68
|
+
### Fixed
|
|
69
|
+
- `gsd-t-discuss` now stops for user review when manually invoked (was auto-continuing even in manual mode)
|
|
70
|
+
|
|
71
|
+
## [2.2.0] - 2026-02-09
|
|
72
|
+
|
|
73
|
+
### Added
|
|
74
|
+
- E2E test support in `test-sync`, `verify`, and `execute` commands
|
|
75
|
+
|
|
76
|
+
## [2.1.0] - 2026-02-09
|
|
77
|
+
|
|
78
|
+
### Added
|
|
79
|
+
- `gsd-t-populate` command — auto-populate living docs from existing codebase
|
|
80
|
+
- Semantic versioning system tracked in `progress.md`
|
|
81
|
+
- Auto-update README on version changes
|
|
82
|
+
|
|
83
|
+
## [2.0.2] - 2026-02-07
|
|
84
|
+
|
|
85
|
+
### Changed
|
|
86
|
+
- `gsd-t-init` now creates all 4 living document templates (`requirements.md`, `architecture.md`, `workflows.md`, `infrastructure.md`)
|
|
87
|
+
- `gsd-t-scan` cross-populates findings into living docs
|
|
88
|
+
|
|
89
|
+
## [2.0.1] - 2026-02-07
|
|
90
|
+
|
|
91
|
+
### Fixed
|
|
92
|
+
- Added `gsd-t-brainstorm` to all 4 reference files (README, GSD-T-README, CLAUDE-global, gsd-t-help)
|
|
93
|
+
- Fixed workflow diagram alignment
|
|
94
|
+
|
|
95
|
+
## [2.0.0] - 2026-02-07
|
|
96
|
+
|
|
97
|
+
### Added
|
|
98
|
+
- Renamed package to `@tekyzinc/gsd-t`
|
|
99
|
+
- `gsd-t-brainstorm` command — creative exploration, rethinking, and idea generation
|
|
100
|
+
- Initialized GSD-T state (`.gsd-t/` directory) on itself
|
|
101
|
+
|
|
102
|
+
### Changed
|
|
103
|
+
- Complete framework rewrite from GSD to GSD-T (contract-driven development)
|
|
104
|
+
- npm package with CLI installer (`bin/gsd-t.js`)
|
|
105
|
+
- 6 CLI subcommands: install, update, init, status, doctor, uninstall
|
|
106
|
+
|
|
107
|
+
## [1.0.0] - 2026-02-07
|
|
108
|
+
|
|
109
|
+
### Added
|
|
110
|
+
- Initial GSD-T framework implementation
|
|
111
|
+
- Full milestone workflow: partition, discuss, plan, impact, execute, test-sync, integrate, verify, complete
|
|
112
|
+
- Agent Teams support for parallel execution
|
|
113
|
+
- Living documents system (requirements, architecture, workflows, infrastructure)
|
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ A methodology for reliable, parallelizable development using Claude Code with op
|
|
|
18
18
|
npx @tekyzinc/gsd-t install
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
This installs
|
|
21
|
+
This installs 32 GSD-T commands + 3 utility commands to `~/.claude/commands/` and the global CLAUDE.md to `~/.claude/CLAUDE.md`. Works on Windows, Mac, and Linux.
|
|
22
22
|
|
|
23
23
|
### Start Using It
|
|
24
24
|
|
|
@@ -72,6 +72,7 @@ npx @tekyzinc/gsd-t init [name] # Scaffold GSD-T project (auto-registers)
|
|
|
72
72
|
npx @tekyzinc/gsd-t register # Register current directory as a GSD-T project
|
|
73
73
|
npx @tekyzinc/gsd-t status # Check installation + version
|
|
74
74
|
npx @tekyzinc/gsd-t doctor # Diagnose common issues
|
|
75
|
+
npx @tekyzinc/gsd-t changelog # Open changelog in the browser
|
|
75
76
|
npx @tekyzinc/gsd-t uninstall # Remove commands (keeps project files)
|
|
76
77
|
```
|
|
77
78
|
|
|
@@ -101,6 +102,7 @@ This will replace changed command files, back up your CLAUDE.md if customized, a
|
|
|
101
102
|
|
|
102
103
|
| Command | Purpose |
|
|
103
104
|
|---------|---------|
|
|
105
|
+
| `/user:gsd-t-setup` | Generate or restructure project CLAUDE.md |
|
|
104
106
|
| `/user:gsd-t-init` | Initialize GSD-T structure in project |
|
|
105
107
|
| `/user:gsd-t-project` | Full project → milestone roadmap |
|
|
106
108
|
| `/user:gsd-t-feature` | Major feature → impact analysis + milestones |
|
|
@@ -268,8 +270,8 @@ get-stuff-done-teams/
|
|
|
268
270
|
├── LICENSE
|
|
269
271
|
├── bin/
|
|
270
272
|
│ └── gsd-t.js # CLI installer
|
|
271
|
-
├── commands/ #
|
|
272
|
-
│ ├── gsd-t-*.md #
|
|
273
|
+
├── commands/ # 35 slash commands
|
|
274
|
+
│ ├── gsd-t-*.md # 32 GSD-T workflow commands
|
|
273
275
|
│ ├── branch.md # Git branch helper
|
|
274
276
|
│ ├── checkin.md # Auto-version + commit/push helper
|
|
275
277
|
│ └── Claude-md.md # Reload CLAUDE.md directives
|
package/bin/gsd-t.js
CHANGED
|
@@ -12,11 +12,13 @@
|
|
|
12
12
|
* npx @tekyzinc/gsd-t status — Show what's installed and check for updates
|
|
13
13
|
* npx @tekyzinc/gsd-t uninstall — Remove GSD-T commands (leaves project files alone)
|
|
14
14
|
* npx @tekyzinc/gsd-t doctor — Diagnose common issues
|
|
15
|
+
* npx @tekyzinc/gsd-t changelog — Open changelog in the browser
|
|
15
16
|
*/
|
|
16
17
|
|
|
17
18
|
const fs = require("fs");
|
|
18
19
|
const path = require("path");
|
|
19
20
|
const os = require("os");
|
|
21
|
+
const { execSync } = require("child_process");
|
|
20
22
|
|
|
21
23
|
// ─── Configuration ───────────────────────────────────────────────────────────
|
|
22
24
|
|
|
@@ -35,6 +37,7 @@ const PKG_EXAMPLES = path.join(PKG_ROOT, "examples");
|
|
|
35
37
|
|
|
36
38
|
// Read our version from package.json
|
|
37
39
|
const PKG_VERSION = require(path.join(PKG_ROOT, "package.json")).version;
|
|
40
|
+
const CHANGELOG_URL = "https://github.com/Tekyz-Inc/get-stuff-done-teams/blob/main/CHANGELOG.md";
|
|
38
41
|
|
|
39
42
|
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
40
43
|
|
|
@@ -64,6 +67,12 @@ function info(msg) {
|
|
|
64
67
|
function heading(msg) {
|
|
65
68
|
console.log(`\n${BOLD}${msg}${RESET}`);
|
|
66
69
|
}
|
|
70
|
+
function link(text, url) {
|
|
71
|
+
return `\x1b]8;;${url}\x07${text}\x1b]8;;\x07`;
|
|
72
|
+
}
|
|
73
|
+
function versionLink(ver) {
|
|
74
|
+
return link(`v${ver || PKG_VERSION}`, CHANGELOG_URL);
|
|
75
|
+
}
|
|
67
76
|
|
|
68
77
|
function ensureDir(dir) {
|
|
69
78
|
if (!fs.existsSync(dir)) {
|
|
@@ -140,7 +149,7 @@ function doInstall(opts = {}) {
|
|
|
140
149
|
const isUpdate = opts.update || false;
|
|
141
150
|
const verb = isUpdate ? "Updating" : "Installing";
|
|
142
151
|
|
|
143
|
-
heading(`${verb} GSD-T
|
|
152
|
+
heading(`${verb} GSD-T ${versionLink()}`);
|
|
144
153
|
log("");
|
|
145
154
|
|
|
146
155
|
// 1. Create ~/.claude/commands/ if needed
|
|
@@ -224,7 +233,7 @@ function doInstall(opts = {}) {
|
|
|
224
233
|
log("");
|
|
225
234
|
log(` Commands: ${gsdtCommands.length} GSD-T + ${utilityCommands.length} utility commands in ~/.claude/commands/`);
|
|
226
235
|
log(` Config: ~/.claude/CLAUDE.md`);
|
|
227
|
-
log(` Version: ${
|
|
236
|
+
log(` Version: ${versionLink()}`);
|
|
228
237
|
log("");
|
|
229
238
|
log(`${BOLD}Quick Start:${RESET}`);
|
|
230
239
|
log(` ${DIM}$${RESET} cd your-project`);
|
|
@@ -245,7 +254,7 @@ function doUpdate() {
|
|
|
245
254
|
const installedVersion = getInstalledVersion();
|
|
246
255
|
|
|
247
256
|
if (installedVersion === PKG_VERSION) {
|
|
248
|
-
heading(`GSD-T
|
|
257
|
+
heading(`GSD-T ${versionLink()}`);
|
|
249
258
|
info("Already up to date!");
|
|
250
259
|
log("");
|
|
251
260
|
log(" To force a reinstall, run:");
|
|
@@ -255,7 +264,7 @@ function doUpdate() {
|
|
|
255
264
|
}
|
|
256
265
|
|
|
257
266
|
if (installedVersion) {
|
|
258
|
-
heading(`Updating GSD-T:
|
|
267
|
+
heading(`Updating GSD-T: ${versionLink(installedVersion)} → ${versionLink()}`);
|
|
259
268
|
}
|
|
260
269
|
|
|
261
270
|
doInstall({ update: true });
|
|
@@ -372,12 +381,12 @@ function doStatus() {
|
|
|
372
381
|
// Installed version
|
|
373
382
|
const installedVersion = getInstalledVersion();
|
|
374
383
|
if (installedVersion) {
|
|
375
|
-
success(`Installed version: ${installedVersion}`);
|
|
384
|
+
success(`Installed version: ${versionLink(installedVersion)}`);
|
|
376
385
|
if (installedVersion !== PKG_VERSION) {
|
|
377
|
-
warn(`Latest version: ${
|
|
386
|
+
warn(`Latest version: ${versionLink()}`);
|
|
378
387
|
info(`Run 'npx @tekyzinc/gsd-t update' to update`);
|
|
379
388
|
} else {
|
|
380
|
-
success(`Up to date (latest: ${
|
|
389
|
+
success(`Up to date (latest: ${versionLink()})`);
|
|
381
390
|
}
|
|
382
391
|
} else {
|
|
383
392
|
error("GSD-T not installed");
|
|
@@ -502,7 +511,7 @@ function doUpdateAll() {
|
|
|
502
511
|
if (installedVersion !== PKG_VERSION) {
|
|
503
512
|
doInstall({ update: true });
|
|
504
513
|
} else {
|
|
505
|
-
heading(`GSD-T
|
|
514
|
+
heading(`GSD-T ${versionLink()}`);
|
|
506
515
|
success("Global commands already up to date");
|
|
507
516
|
}
|
|
508
517
|
|
|
@@ -531,6 +540,7 @@ function doUpdateAll() {
|
|
|
531
540
|
for (const projectDir of projects) {
|
|
532
541
|
const projectName = path.basename(projectDir);
|
|
533
542
|
const claudeMd = path.join(projectDir, "CLAUDE.md");
|
|
543
|
+
let projectUpdated = false;
|
|
534
544
|
|
|
535
545
|
// Check project still exists
|
|
536
546
|
if (!fs.existsSync(projectDir)) {
|
|
@@ -548,56 +558,77 @@ function doUpdateAll() {
|
|
|
548
558
|
const content = fs.readFileSync(claudeMd, "utf8");
|
|
549
559
|
|
|
550
560
|
// Check if the project CLAUDE.md needs the Destructive Action Guard
|
|
551
|
-
if (content.includes("Destructive Action Guard")) {
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
561
|
+
if (!content.includes("Destructive Action Guard")) {
|
|
562
|
+
const guardSection = [
|
|
563
|
+
"",
|
|
564
|
+
"",
|
|
565
|
+
"# Destructive Action Guard (MANDATORY)",
|
|
566
|
+
"",
|
|
567
|
+
"**NEVER perform destructive or structural changes without explicit user approval.** This applies at ALL autonomy levels.",
|
|
568
|
+
"",
|
|
569
|
+
"Before any of these actions, STOP and ask the user:",
|
|
570
|
+
"- DROP TABLE, DROP COLUMN, DROP INDEX, TRUNCATE, DELETE without WHERE",
|
|
571
|
+
"- Renaming or removing database tables or columns",
|
|
572
|
+
"- Schema migrations that lose data or break existing queries",
|
|
573
|
+
"- Replacing an existing architecture pattern (e.g., normalized → denormalized)",
|
|
574
|
+
"- Removing or replacing existing files/modules that contain working functionality",
|
|
575
|
+
"- Changing ORM models in ways that conflict with the existing database schema",
|
|
576
|
+
"- Removing API endpoints or changing response shapes that existing clients depend on",
|
|
577
|
+
"- Any change that would require other parts of the system to be rewritten",
|
|
578
|
+
"",
|
|
579
|
+
'**Rule: "Adapt new code to existing structures, not the other way around."**',
|
|
580
|
+
"",
|
|
581
|
+
].join("\n");
|
|
582
|
+
|
|
583
|
+
let newContent;
|
|
584
|
+
const preCommitMatch = content.match(/\n(#{1,3} Pre-Commit Gate)/);
|
|
585
|
+
const dontDoMatch = content.match(/\n(#{1,3} Don't Do These Things)/);
|
|
586
|
+
|
|
587
|
+
if (preCommitMatch) {
|
|
588
|
+
newContent = content.replace(
|
|
589
|
+
"\n" + preCommitMatch[1],
|
|
590
|
+
guardSection + "\n" + preCommitMatch[1]
|
|
591
|
+
);
|
|
592
|
+
} else if (dontDoMatch) {
|
|
593
|
+
newContent = content.replace(
|
|
594
|
+
"\n" + dontDoMatch[1],
|
|
595
|
+
guardSection + "\n" + dontDoMatch[1]
|
|
596
|
+
);
|
|
597
|
+
} else {
|
|
598
|
+
newContent = content + guardSection;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
fs.writeFileSync(claudeMd, newContent);
|
|
602
|
+
success(`${projectName} — added Destructive Action Guard`);
|
|
603
|
+
projectUpdated = true;
|
|
555
604
|
}
|
|
556
605
|
|
|
557
|
-
//
|
|
558
|
-
const
|
|
559
|
-
|
|
560
|
-
""
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
"
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
'**Rule: "Adapt new code to existing structures, not the other way around."**',
|
|
576
|
-
"",
|
|
577
|
-
].join("\n");
|
|
578
|
-
|
|
579
|
-
let newContent;
|
|
580
|
-
// Match headings at any level (# or ## or ###)
|
|
581
|
-
const preCommitMatch = content.match(/\n(#{1,3} Pre-Commit Gate)/);
|
|
582
|
-
const dontDoMatch = content.match(/\n(#{1,3} Don't Do These Things)/);
|
|
583
|
-
|
|
584
|
-
if (preCommitMatch) {
|
|
585
|
-
newContent = content.replace(
|
|
586
|
-
"\n" + preCommitMatch[1],
|
|
587
|
-
guardSection + "\n" + preCommitMatch[1]
|
|
588
|
-
);
|
|
589
|
-
} else if (dontDoMatch) {
|
|
590
|
-
newContent = content.replace(
|
|
591
|
-
"\n" + dontDoMatch[1],
|
|
592
|
-
guardSection + "\n" + dontDoMatch[1]
|
|
593
|
-
);
|
|
594
|
-
} else {
|
|
595
|
-
newContent = content + guardSection;
|
|
606
|
+
// Create CHANGELOG.md if it doesn't exist
|
|
607
|
+
const changelogPath = path.join(projectDir, "CHANGELOG.md");
|
|
608
|
+
if (!fs.existsSync(changelogPath)) {
|
|
609
|
+
const today = new Date().toISOString().split("T")[0];
|
|
610
|
+
const changelogContent = [
|
|
611
|
+
"# Changelog",
|
|
612
|
+
"",
|
|
613
|
+
"All notable changes to this project are documented here.",
|
|
614
|
+
"",
|
|
615
|
+
`## [0.1.0] - ${today}`,
|
|
616
|
+
"",
|
|
617
|
+
"### Added",
|
|
618
|
+
"- Initial changelog created by GSD-T",
|
|
619
|
+
"",
|
|
620
|
+
].join("\n");
|
|
621
|
+
fs.writeFileSync(changelogPath, changelogContent);
|
|
622
|
+
success(`${projectName} — created CHANGELOG.md`);
|
|
623
|
+
projectUpdated = true;
|
|
596
624
|
}
|
|
597
625
|
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
626
|
+
if (projectUpdated) {
|
|
627
|
+
updated++;
|
|
628
|
+
} else {
|
|
629
|
+
info(`${projectName} — already up to date`);
|
|
630
|
+
skipped++;
|
|
631
|
+
}
|
|
601
632
|
}
|
|
602
633
|
|
|
603
634
|
// Summary
|
|
@@ -628,7 +659,6 @@ function doDoctor() {
|
|
|
628
659
|
}
|
|
629
660
|
|
|
630
661
|
// 2. Claude Code installed?
|
|
631
|
-
const { execSync } = require("child_process");
|
|
632
662
|
try {
|
|
633
663
|
const claudeVersion = execSync("claude --version 2>&1", { encoding: "utf8" }).trim();
|
|
634
664
|
success(`Claude Code: ${claudeVersion}`);
|
|
@@ -746,6 +776,19 @@ function doRegister() {
|
|
|
746
776
|
log("");
|
|
747
777
|
}
|
|
748
778
|
|
|
779
|
+
function doChangelog() {
|
|
780
|
+
const openCmd =
|
|
781
|
+
process.platform === "win32" ? "start" :
|
|
782
|
+
process.platform === "darwin" ? "open" : "xdg-open";
|
|
783
|
+
try {
|
|
784
|
+
execSync(`${openCmd} ${CHANGELOG_URL}`, { stdio: "ignore" });
|
|
785
|
+
success(`Opened changelog in browser`);
|
|
786
|
+
} catch {
|
|
787
|
+
// Fallback: print the URL
|
|
788
|
+
log(`\n ${CHANGELOG_URL}\n`);
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
|
|
749
792
|
function showHelp() {
|
|
750
793
|
log("");
|
|
751
794
|
log(`${BOLD}GSD-T${RESET} — Contract-Driven Development for Claude Code`);
|
|
@@ -762,6 +805,7 @@ function showHelp() {
|
|
|
762
805
|
log(` ${CYAN}status${RESET} Show installation status + check for updates`);
|
|
763
806
|
log(` ${CYAN}uninstall${RESET} Remove GSD-T commands (keeps project files)`);
|
|
764
807
|
log(` ${CYAN}doctor${RESET} Diagnose common issues`);
|
|
808
|
+
log(` ${CYAN}changelog${RESET} Open changelog in the browser`);
|
|
765
809
|
log(` ${CYAN}help${RESET} Show this help`);
|
|
766
810
|
log("");
|
|
767
811
|
log(`${BOLD}Examples:${RESET}`);
|
|
@@ -807,6 +851,9 @@ switch (command) {
|
|
|
807
851
|
case "doctor":
|
|
808
852
|
doDoctor();
|
|
809
853
|
break;
|
|
854
|
+
case "changelog":
|
|
855
|
+
doChangelog();
|
|
856
|
+
break;
|
|
810
857
|
case "help":
|
|
811
858
|
case "--help":
|
|
812
859
|
case "-h":
|
package/commands/checkin.md
CHANGED
|
@@ -20,11 +20,18 @@ Automatically stage, commit, and push all updated files to GitHub with automatic
|
|
|
20
20
|
8. Update the version in `package.json`
|
|
21
21
|
9. If `.gsd-t/progress.md` exists, check for a `## Version` line and update it (or add one after the `## Date` line)
|
|
22
22
|
|
|
23
|
+
### Release Notes
|
|
24
|
+
|
|
25
|
+
10. If `CHANGELOG.md` exists in the project root, prepend an entry for this version:
|
|
26
|
+
- Use the format: `## [X.Y.Z] - YYYY-MM-DD` followed by `### Added`, `### Changed`, `### Fixed`, or `### Removed` subsections as appropriate
|
|
27
|
+
- Summarize the changes in 1-3 bullet points per subsection
|
|
28
|
+
- Place the new entry directly after the file header (before any existing version entries)
|
|
29
|
+
|
|
23
30
|
### Commit and Push
|
|
24
31
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
11. Stage all changes (including the version bump and changelog) with `git add -A`
|
|
33
|
+
12. Create a commit with a descriptive message summarizing the changes. Include `(vX.Y.Z)` at the end of the first line. Example: `fix: resolve branch guard edge case (v2.3.1)`
|
|
34
|
+
13. Push to origin with `git push`
|
|
35
|
+
14. Confirm success to the user, including the old → new version
|
|
29
36
|
|
|
30
37
|
Use the standard commit message format with Co-Authored-By line.
|
package/commands/gsd-t-help.md
CHANGED
|
@@ -15,6 +15,7 @@ GETTING STARTED
|
|
|
15
15
|
───────────────────────────────────────────────────────────────────────────────
|
|
16
16
|
prompt Help formulate your idea before committing to a command
|
|
17
17
|
brainstorm Creative exploration, rethinking, and idea generation
|
|
18
|
+
setup Generate or restructure project CLAUDE.md
|
|
18
19
|
init Initialize GSD-T structure in current project
|
|
19
20
|
project New project → requirements → milestone roadmap
|
|
20
21
|
feature Major feature → impact analysis → milestones
|
|
@@ -131,6 +132,12 @@ Use these when user asks for help on a specific command:
|
|
|
131
132
|
- **Use when**: You want to explore ideas, challenge assumptions, or break out of tunnel vision
|
|
132
133
|
- **Modes**: Ideation, Enhancement, Rethink, Unstuck, Blue Sky
|
|
133
134
|
|
|
135
|
+
### setup
|
|
136
|
+
- **Summary**: Generate or restructure the project-level CLAUDE.md
|
|
137
|
+
- **Auto-invoked**: No
|
|
138
|
+
- **Creates/Updates**: `CLAUDE.md`
|
|
139
|
+
- **Use when**: Starting a new project, migrating from GSD, or restructuring an existing CLAUDE.md to complement the global one
|
|
140
|
+
|
|
134
141
|
### init
|
|
135
142
|
- **Summary**: Initialize GSD-T directory structure in current project
|
|
136
143
|
- **Auto-invoked**: No
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# GSD-T: Setup — Generate or Restructure Project CLAUDE.md
|
|
2
|
+
|
|
3
|
+
You are generating or restructuring the project-level CLAUDE.md for the current project. The goal is a well-structured file that complements the global `~/.claude/CLAUDE.md` without duplicating it.
|
|
4
|
+
|
|
5
|
+
## Step 1: Read Global Context
|
|
6
|
+
|
|
7
|
+
Read `~/.claude/CLAUDE.md` to understand what's already covered globally:
|
|
8
|
+
- Prime Directives
|
|
9
|
+
- GSD-T workflow, commands, living documents
|
|
10
|
+
- Versioning, Destructive Action Guard, Pre-Commit Gate
|
|
11
|
+
- Autonomous Execution Rules, Workflow Preferences defaults
|
|
12
|
+
- Code Standards defaults
|
|
13
|
+
|
|
14
|
+
**Rule**: Anything in the global file should NOT be repeated in the project file. The project file only contains project-specific information and overrides.
|
|
15
|
+
|
|
16
|
+
## Step 2: Scan the Project
|
|
17
|
+
|
|
18
|
+
Gather as much as possible automatically:
|
|
19
|
+
|
|
20
|
+
### 2a: Project Identity
|
|
21
|
+
- Project name from `package.json`, `pyproject.toml`, `go.mod`, `Cargo.toml`, repo name, or directory name
|
|
22
|
+
- Description from package manifest or README
|
|
23
|
+
|
|
24
|
+
### 2b: Tech Stack Detection
|
|
25
|
+
Scan for and identify:
|
|
26
|
+
- **Language**: from file extensions, configs (`tsconfig.json`, `pyproject.toml`, `go.mod`, etc.)
|
|
27
|
+
- **Framework**: from dependencies (`package.json`, `requirements.txt`, `Pipfile`, etc.)
|
|
28
|
+
- **Database**: from dependencies, config files, docker-compose, `.env` vars
|
|
29
|
+
- **Frontend**: from dependencies, directory structure (`client/`, `src/components/`)
|
|
30
|
+
- **Testing**: from test configs (`vitest.config`, `pytest.ini`, `jest.config`, etc.)
|
|
31
|
+
- **Deployment**: from `Dockerfile`, CI/CD configs, cloud configs
|
|
32
|
+
|
|
33
|
+
### 2c: Project Structure
|
|
34
|
+
- Scan directories to build "Where Things Live" table
|
|
35
|
+
- Identify key entry points, config files, and module boundaries
|
|
36
|
+
|
|
37
|
+
### 2d: Existing Conventions
|
|
38
|
+
- **Naming**: Sample 5-10 files and functions to detect naming patterns (snake_case, camelCase, kebab-case, PascalCase)
|
|
39
|
+
- **File organization**: Flat, feature-based, layer-based?
|
|
40
|
+
- **Import style**: Absolute, relative, aliases?
|
|
41
|
+
|
|
42
|
+
### 2e: Existing Documentation
|
|
43
|
+
- Check for `docs/` directory and which living documents exist
|
|
44
|
+
- Check for `.gsd-t/` directory (already initialized?)
|
|
45
|
+
- Check for `.env.example` or environment docs
|
|
46
|
+
|
|
47
|
+
### 2f: Git State
|
|
48
|
+
- Current branch (for Branch Guard)
|
|
49
|
+
- Remote URL (for reference)
|
|
50
|
+
|
|
51
|
+
## Step 3: Check Existing CLAUDE.md
|
|
52
|
+
|
|
53
|
+
### If CLAUDE.md exists:
|
|
54
|
+
|
|
55
|
+
Read it and categorize every section:
|
|
56
|
+
|
|
57
|
+
1. **Project-specific (KEEP)**: Overview, Tech Stack, Branch Guard, Where Things Live, Conventions, Testing, Environment Variables, Deployed URLs, Reference Projects, project-specific "Don't Do" rules
|
|
58
|
+
2. **Global duplicate (REMOVE)**: Anything that duplicates the global CLAUDE.md — Prime Directives, GSD-T workflow descriptions, Destructive Action Guard (unless project-specific additions), Pre-Commit Gate, Autonomous Execution Rules
|
|
59
|
+
3. **GSD/legacy sections (MIGRATE)**: `## GSD Workflow Preferences` or similar → extract project-specific preferences into `## Workflow Preferences` using the new format
|
|
60
|
+
4. **Stale content (FLAG)**: Sections that reference outdated tech, removed features, or incorrect paths
|
|
61
|
+
|
|
62
|
+
Present findings to user:
|
|
63
|
+
```
|
|
64
|
+
CLAUDE.md Analysis:
|
|
65
|
+
KEEP: {N} project-specific sections
|
|
66
|
+
REMOVE: {N} sections that duplicate global CLAUDE.md
|
|
67
|
+
MIGRATE: {N} GSD sections → Workflow Preferences format
|
|
68
|
+
FLAG: {N} potentially stale sections
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### If no CLAUDE.md exists:
|
|
72
|
+
|
|
73
|
+
Note: "No existing CLAUDE.md — will generate from scratch."
|
|
74
|
+
|
|
75
|
+
## Step 4: Ask Targeted Questions
|
|
76
|
+
|
|
77
|
+
Only ask what could NOT be auto-detected. Skip questions where the answer is already clear from scanning.
|
|
78
|
+
|
|
79
|
+
**Potential questions** (ask only if not auto-detected):
|
|
80
|
+
|
|
81
|
+
1. **Branch Guard**: "Which branch should commits target?" (skip if only `main` or `master` exists)
|
|
82
|
+
2. **Autonomy Level**: "What autonomy level? Level 1 (Supervised), Level 2 (Standard — default), Level 3 (Full Auto)" (skip if existing CLAUDE.md already declares it)
|
|
83
|
+
3. **Workflow Preferences**: "Any overrides to the global defaults? (Research Policy, Phase Flow)" (skip if user has no overrides)
|
|
84
|
+
4. **Deployed URLs**: "Production, staging, and local URLs?" (skip if found in .env or existing docs)
|
|
85
|
+
5. **Project-specific rules**: "Any 'never do' rules specific to this project?" (skip if existing CLAUDE.md already has them)
|
|
86
|
+
|
|
87
|
+
**Do NOT ask about**:
|
|
88
|
+
- Tech stack (auto-detected)
|
|
89
|
+
- Naming conventions (auto-detected)
|
|
90
|
+
- Testing framework (auto-detected)
|
|
91
|
+
- File structure (auto-detected)
|
|
92
|
+
- Anything already covered by the global CLAUDE.md
|
|
93
|
+
|
|
94
|
+
## Step 5: Generate CLAUDE.md
|
|
95
|
+
|
|
96
|
+
Build the file using this structure. Include only sections that have real content — omit empty sections entirely.
|
|
97
|
+
|
|
98
|
+
```markdown
|
|
99
|
+
# {Project Name}
|
|
100
|
+
|
|
101
|
+
## Branch Guard
|
|
102
|
+
**Expected branch**: {branch}
|
|
103
|
+
|
|
104
|
+
## Project Overview
|
|
105
|
+
{Brief description — what problem does this solve and for whom?}
|
|
106
|
+
|
|
107
|
+
### Architecture
|
|
108
|
+
{High-level architecture summary if the project has one — e.g., "Three-tier WebSocket bridge" with a diagram. Keep it concise. Details belong in docs/architecture.md}
|
|
109
|
+
|
|
110
|
+
## Where Things Live
|
|
111
|
+
|
|
112
|
+
| Need to find... | Look here |
|
|
113
|
+
|-----------------|-----------|
|
|
114
|
+
| {component} | {path} |
|
|
115
|
+
|
|
116
|
+
## Key Technologies
|
|
117
|
+
{Bulleted list of language, framework, database, testing, etc.}
|
|
118
|
+
|
|
119
|
+
## Documentation
|
|
120
|
+
- Requirements: docs/requirements.md
|
|
121
|
+
- Architecture: docs/architecture.md
|
|
122
|
+
- Workflows: docs/workflows.md
|
|
123
|
+
- Infrastructure: docs/infrastructure.md
|
|
124
|
+
|
|
125
|
+
## Autonomy Level
|
|
126
|
+
**Level {N} — {Name}** (pause at {description})
|
|
127
|
+
|
|
128
|
+
## Workflow Preferences
|
|
129
|
+
<!-- Override global defaults. Delete what you don't need to override. -->
|
|
130
|
+
|
|
131
|
+
### Research Policy
|
|
132
|
+
{project-specific overrides, or omit section}
|
|
133
|
+
|
|
134
|
+
### Phase Flow
|
|
135
|
+
{project-specific overrides, or omit section}
|
|
136
|
+
|
|
137
|
+
## Testing
|
|
138
|
+
{Framework, file organization, naming, running instructions}
|
|
139
|
+
|
|
140
|
+
## Code Patterns to Follow
|
|
141
|
+
{Project-specific conventions that differ from or extend global defaults}
|
|
142
|
+
|
|
143
|
+
### Naming Conventions
|
|
144
|
+
{If different from global defaults}
|
|
145
|
+
|
|
146
|
+
## Running the App
|
|
147
|
+
{Dev server, build commands, first-time setup}
|
|
148
|
+
|
|
149
|
+
## Environment Variables
|
|
150
|
+
| Variable | Purpose | Default |
|
|
151
|
+
|----------|---------|---------|
|
|
152
|
+
| {VAR} | {purpose} | {default} |
|
|
153
|
+
|
|
154
|
+
## Deployed URLs
|
|
155
|
+
- **Production**: {url}
|
|
156
|
+
- **Staging**: {url}
|
|
157
|
+
- **Local**: http://localhost:{port}
|
|
158
|
+
|
|
159
|
+
## Don't Do These Things
|
|
160
|
+
{Project-specific rules only — don't repeat global rules}
|
|
161
|
+
|
|
162
|
+
## GSD-T Workflow
|
|
163
|
+
This project uses contract-driven development.
|
|
164
|
+
- State: .gsd-t/progress.md
|
|
165
|
+
- Contracts: .gsd-t/contracts/
|
|
166
|
+
- Domains: .gsd-t/domains/
|
|
167
|
+
|
|
168
|
+
## Current Status
|
|
169
|
+
See `.gsd-t/progress.md` for current milestone/phase state.
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Section Rules:
|
|
173
|
+
- **NEVER duplicate** global CLAUDE.md content (Destructive Action Guard, Pre-Commit Gate, Prime Directives, etc.)
|
|
174
|
+
- **ALWAYS include**: Branch Guard, GSD-T Workflow, Current Status
|
|
175
|
+
- **Include if relevant**: Where Things Live, Testing, Code Patterns, Environment Variables
|
|
176
|
+
- **Omit if empty**: Deployed URLs (if not deployed), Architecture (if trivial), Workflow Preferences (if no overrides)
|
|
177
|
+
|
|
178
|
+
## Step 6: Present and Confirm
|
|
179
|
+
|
|
180
|
+
Show the generated CLAUDE.md content to the user with a summary:
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
Generated CLAUDE.md for {Project Name}:
|
|
184
|
+
Sections: {N} ({list of section names})
|
|
185
|
+
Auto-detected: {tech stack, conventions, structure}
|
|
186
|
+
From existing: {N} sections preserved
|
|
187
|
+
Removed: {N} global duplicates
|
|
188
|
+
|
|
189
|
+
{Show the full generated content}
|
|
190
|
+
|
|
191
|
+
Write this as CLAUDE.md? (This will replace the existing file if one exists.)
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Wait for user confirmation before writing.
|
|
195
|
+
|
|
196
|
+
## Step 7: Write and Verify
|
|
197
|
+
|
|
198
|
+
1. Write the CLAUDE.md file
|
|
199
|
+
2. Verify it's valid markdown (no broken tables, unclosed code blocks)
|
|
200
|
+
3. If `.gsd-t/progress.md` exists, log the setup in the Decision Log
|
|
201
|
+
|
|
202
|
+
## Document Ripple
|
|
203
|
+
|
|
204
|
+
### Always update:
|
|
205
|
+
1. **`.gsd-t/progress.md`** — Log "Project CLAUDE.md generated/restructured via gsd-t-setup" in Decision Log (if .gsd-t/ exists)
|
|
206
|
+
|
|
207
|
+
### Skip: No other files are affected by CLAUDE.md generation.
|
|
208
|
+
|
|
209
|
+
## Test Verification
|
|
210
|
+
|
|
211
|
+
No tests to run — this command produces a configuration file, not code.
|
|
212
|
+
|
|
213
|
+
$ARGUMENTS
|
package/docs/GSD-T-README.md
CHANGED
|
@@ -71,6 +71,7 @@ GSD-T reads all state files and tells you exactly where you left off.
|
|
|
71
71
|
|
|
72
72
|
| Command | Purpose |
|
|
73
73
|
|---------|---------|
|
|
74
|
+
| `/user:gsd-t-setup` | Generate or restructure project CLAUDE.md |
|
|
74
75
|
| `/user:gsd-t-init` | Initialize GSD-T structure in project |
|
|
75
76
|
| `/user:gsd-t-project` | Full project → milestone roadmap |
|
|
76
77
|
| `/user:gsd-t-feature` | Major feature → impact analysis + milestones |
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tekyzinc/gsd-t",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "GSD-T: Contract-Driven Development for Claude Code —
|
|
3
|
+
"version": "2.10.0",
|
|
4
|
+
"description": "GSD-T: Contract-Driven Development for Claude Code — 35 slash commands with backlog management, impact analysis, test sync, and milestone archival",
|
|
5
5
|
"author": "Tekyz, Inc.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
"commands/",
|
|
26
26
|
"templates/",
|
|
27
27
|
"examples/",
|
|
28
|
-
"docs/"
|
|
28
|
+
"docs/",
|
|
29
|
+
"CHANGELOG.md"
|
|
29
30
|
],
|
|
30
31
|
"engines": {
|
|
31
32
|
"node": ">=16.0.0"
|
|
@@ -34,6 +34,7 @@ PROJECT or FEATURE or SCAN
|
|
|
34
34
|
| `/user:gsd-t-feature` | Major feature → impact analysis + milestones |
|
|
35
35
|
| `/user:gsd-t-scan` | Deep codebase analysis → techdebt.md |
|
|
36
36
|
| `/user:gsd-t-promote-debt` | Convert debt items to milestones |
|
|
37
|
+
| `/user:gsd-t-setup` | Generate or restructure project CLAUDE.md |
|
|
37
38
|
| `/user:gsd-t-init` | Initialize project structure |
|
|
38
39
|
| `/user:gsd-t-milestone` | Define new milestone |
|
|
39
40
|
| `/user:gsd-t-partition` | Decompose into domains + contracts |
|