@tekyzinc/gsd-t 2.20.7 → 2.22.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 +417 -398
- package/README.md +5 -2
- package/bin/gsd-t.js +114 -123
- package/commands/gsd-t-complete-milestone.md +13 -2
- package/commands/gsd-t-debug.md +13 -0
- package/commands/gsd-t-execute.md +17 -0
- package/commands/gsd-t-help.md +15 -0
- package/commands/gsd-t-integrate.md +13 -0
- package/commands/gsd-t-partition.md +13 -0
- package/commands/gsd-t-plan.md +13 -0
- package/commands/gsd-t-qa.md +169 -0
- package/commands/gsd-t-quick.md +13 -0
- package/commands/gsd-t-test-sync.md +13 -0
- package/commands/gsd-t-triage-and-merge.md +167 -0
- package/commands/gsd-t-verify.md +19 -1
- package/commands/gsd-t-wave.md +4 -0
- package/docs/GSD-T-README.md +2 -0
- package/docs/architecture.md +82 -0
- package/docs/infrastructure.md +72 -0
- package/docs/requirements.md +43 -0
- package/docs/workflows.md +67 -0
- package/examples/.gsd-t/domains/example-domain/scope.md +13 -15
- package/package.json +2 -2
- package/scripts/gsd-t-heartbeat.js +4 -1
- package/scripts/npm-update-check.js +27 -0
- package/templates/CLAUDE-global.md +433 -414
- package/templates/progress.md +40 -38
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Workflows — GSD-T Framework (@tekyzinc/gsd-t)
|
|
2
|
+
|
|
3
|
+
## Last Updated: 2026-02-18
|
|
4
|
+
|
|
5
|
+
## User Workflows
|
|
6
|
+
|
|
7
|
+
### Install GSD-T
|
|
8
|
+
1. Run `npx @tekyzinc/gsd-t install`
|
|
9
|
+
2. CLI copies commands to `~/.claude/commands/`
|
|
10
|
+
3. CLI sets up global CLAUDE.md if missing
|
|
11
|
+
4. CLI installs heartbeat hooks
|
|
12
|
+
5. User starts Claude Code in their project
|
|
13
|
+
|
|
14
|
+
**Entry point**: `npx @tekyzinc/gsd-t install`
|
|
15
|
+
**Success**: 41 commands available in Claude Code
|
|
16
|
+
**Failure**: CLI reports missing Node.js or permission errors
|
|
17
|
+
|
|
18
|
+
### Initialize a Project
|
|
19
|
+
1. User runs `/gsd-t-init` in Claude Code
|
|
20
|
+
2. Init creates `.gsd-t/` directory structure
|
|
21
|
+
3. Init creates or updates CLAUDE.md
|
|
22
|
+
4. Init creates `docs/` living documents if missing
|
|
23
|
+
5. Init scans existing codebase if code exists
|
|
24
|
+
|
|
25
|
+
**Entry point**: `/gsd-t-init` slash command
|
|
26
|
+
**Success**: Project ready for milestone definition
|
|
27
|
+
**Failure**: Reports what couldn't be created
|
|
28
|
+
|
|
29
|
+
### Full Wave Cycle
|
|
30
|
+
1. User defines milestone via `/gsd-t-milestone`
|
|
31
|
+
2. Partition decomposes into domains + contracts
|
|
32
|
+
3. Plan creates task lists per domain
|
|
33
|
+
4. Execute implements tasks (solo or team)
|
|
34
|
+
5. Test-sync aligns tests with code changes
|
|
35
|
+
6. Integrate wires domains together
|
|
36
|
+
7. Verify runs quality gates
|
|
37
|
+
8. Complete-milestone archives and tags
|
|
38
|
+
|
|
39
|
+
**Entry point**: `/gsd-t-wave` or manual phase-by-phase
|
|
40
|
+
**Success**: Milestone completed, version bumped, git tagged
|
|
41
|
+
**Failure**: Wave pauses at failing phase, user can fix and resume
|
|
42
|
+
|
|
43
|
+
## Technical Workflows
|
|
44
|
+
|
|
45
|
+
### CLI Update Check
|
|
46
|
+
1. CLI reads cached version from `~/.claude/.gsd-t-update-cache`
|
|
47
|
+
2. If cache is older than 1 hour, query npm registry
|
|
48
|
+
3. Compare installed vs. latest using semver
|
|
49
|
+
4. Display update notice if newer version available
|
|
50
|
+
|
|
51
|
+
**Trigger**: Every CLI invocation and `/gsd-t-status`
|
|
52
|
+
**Frequency**: Cached, actual fetch at most once per hour
|
|
53
|
+
|
|
54
|
+
### Heartbeat Event Logging
|
|
55
|
+
1. Claude Code hook fires on tool call or notification
|
|
56
|
+
2. `gsd-t-heartbeat.js` appends JSONL event to `.gsd-t/heartbeat-{session}.jsonl`
|
|
57
|
+
3. Events include timestamp, type, and context
|
|
58
|
+
|
|
59
|
+
**Trigger**: Claude Code hooks (9 event types)
|
|
60
|
+
**Frequency**: On every hooked event during a session
|
|
61
|
+
|
|
62
|
+
## Integration Workflows
|
|
63
|
+
|
|
64
|
+
### npm Publish
|
|
65
|
+
- **Trigger**: Manual `npm publish` after milestone completion
|
|
66
|
+
- **Flow**: Version bumped → CHANGELOG updated → git tagged → npm publish
|
|
67
|
+
- **Verification**: `npx @tekyzinc/gsd-t status` on fresh install
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
# Domain: auth — Example
|
|
2
|
-
|
|
3
|
-
## Responsibility
|
|
4
|
-
Handles all authentication and authorization: user registration, login, JWT token generation and verification, password hashing, and auth middleware for protecting routes.
|
|
5
|
-
|
|
6
|
-
## Files
|
|
7
|
-
- `src/auth/` — all auth service code
|
|
8
|
-
- `src/middleware/auth.py` — auth middleware
|
|
9
|
-
- `tests/auth/` — auth tests
|
|
10
|
-
|
|
11
|
-
##
|
|
12
|
-
-
|
|
13
|
-
|
|
14
|
-
## Outputs (to other domains)
|
|
15
|
-
- api-contract.md: POST /api/auth/login, POST /api/auth/register, GET /api/users/me
|
|
1
|
+
# Domain: auth — Example
|
|
2
|
+
|
|
3
|
+
## Responsibility
|
|
4
|
+
Handles all authentication and authorization: user registration, login, JWT token generation and verification, password hashing, and auth middleware for protecting routes.
|
|
5
|
+
|
|
6
|
+
## Owned Files/Directories
|
|
7
|
+
- `src/auth/` — all auth service code
|
|
8
|
+
- `src/middleware/auth.py` — auth middleware
|
|
9
|
+
- `tests/auth/` — auth tests
|
|
10
|
+
|
|
11
|
+
## NOT Owned (do not modify)
|
|
12
|
+
- `src/db/` — owned by data-layer domain
|
|
13
|
+
- `src/api/` — owned by api domain (except auth endpoints)
|
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.22.0",
|
|
4
|
+
"description": "GSD-T: Contract-Driven Development for Claude Code — 42 slash commands with backlog management, impact analysis, test sync, and milestone archival",
|
|
5
5
|
"author": "Tekyz, Inc.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -55,6 +55,8 @@ process.stdin.on("end", () => {
|
|
|
55
55
|
const event = buildEvent(hook);
|
|
56
56
|
if (event) {
|
|
57
57
|
cleanupOldHeartbeats(gsdtDir);
|
|
58
|
+
// Symlink check — prevent redirection of event data to arbitrary files
|
|
59
|
+
try { if (fs.lstatSync(file).isSymbolicLink()) return; } catch { /* file doesn't exist yet — safe */ }
|
|
58
60
|
fs.appendFileSync(file, JSON.stringify(event) + "\n");
|
|
59
61
|
}
|
|
60
62
|
} catch (e) {
|
|
@@ -69,7 +71,8 @@ function cleanupOldHeartbeats(gsdtDir) {
|
|
|
69
71
|
for (const f of files) {
|
|
70
72
|
if (!f.startsWith("heartbeat-") || !f.endsWith(".jsonl")) continue;
|
|
71
73
|
const fp = path.join(gsdtDir, f);
|
|
72
|
-
const stat = fs.
|
|
74
|
+
const stat = fs.lstatSync(fp);
|
|
75
|
+
if (stat.isSymbolicLink()) continue; // Don't follow symlinks
|
|
73
76
|
if (now - stat.mtimeMs > MAX_AGE_MS) {
|
|
74
77
|
fs.unlinkSync(fp);
|
|
75
78
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Background update check — spawned detached by the CLI to refresh the version cache.
|
|
5
|
+
* Usage: node npm-update-check.js <cache-file-path>
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const https = require("https");
|
|
9
|
+
const fs = require("fs");
|
|
10
|
+
|
|
11
|
+
const cacheFile = process.argv[2];
|
|
12
|
+
if (!cacheFile) process.exit(1);
|
|
13
|
+
|
|
14
|
+
https.get("https://registry.npmjs.org/@tekyzinc/gsd-t/latest",
|
|
15
|
+
{ timeout: 5000 }, (res) => {
|
|
16
|
+
let d = "";
|
|
17
|
+
res.on("data", (c) => d += c);
|
|
18
|
+
res.on("end", () => {
|
|
19
|
+
try {
|
|
20
|
+
const v = JSON.parse(d).version;
|
|
21
|
+
if (v && /^\d+\.\d+\.\d+(-[a-zA-Z0-9.]+)?$/.test(v)) {
|
|
22
|
+
fs.writeFileSync(cacheFile,
|
|
23
|
+
JSON.stringify({ latest: v, timestamp: Date.now() }));
|
|
24
|
+
}
|
|
25
|
+
} catch { /* malformed response — skip */ }
|
|
26
|
+
});
|
|
27
|
+
}).on("error", () => {});
|