@tekyzinc/gsd-t 2.71.17 → 2.71.19
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 +6 -0
- package/bin/orchestrator.js +16 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to GSD-T are documented here. Updated with each release.
|
|
4
4
|
|
|
5
|
+
## [2.71.18] - 2026-04-08
|
|
6
|
+
|
|
7
|
+
### Fixed (orchestrator — Claude permissions and timeouts)
|
|
8
|
+
- **Added `--dangerously-skip-permissions` to Claude spawns** — builder, reviewer, and fixer Claude instances couldn't write files in non-interactive `-p` mode. They ran successfully but produced zero output files because permission prompts can't be answered in piped mode.
|
|
9
|
+
- **Increased fixer timeout from 2min to 10min** — fixer was getting SIGTERM'd (exit code 143) trying to create 15 components in 120s. Now uses the same timeout as the builder (default 600s).
|
|
10
|
+
|
|
5
11
|
## [2.71.17] - 2026-04-08
|
|
6
12
|
|
|
7
13
|
### Fixed (orchestrator — auto-review cycle limit)
|
package/bin/orchestrator.js
CHANGED
|
@@ -179,13 +179,17 @@ ${BOLD}Phases:${RESET} ${this.wf.phases.join(" → ")}
|
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
-
spawnClaude(projectDir, prompt, timeout) {
|
|
182
|
+
spawnClaude(projectDir, prompt, timeout, opts = {}) {
|
|
183
183
|
const start = Date.now();
|
|
184
184
|
let output = "";
|
|
185
185
|
let exitCode = 0;
|
|
186
186
|
|
|
187
|
+
// Build args: -p for print mode, --dangerously-skip-permissions so spawned
|
|
188
|
+
// Claude can write files without interactive permission prompts
|
|
189
|
+
const args = ["-p", "--dangerously-skip-permissions", prompt];
|
|
190
|
+
|
|
187
191
|
try {
|
|
188
|
-
output = execFileSync("claude",
|
|
192
|
+
output = execFileSync("claude", args, {
|
|
189
193
|
encoding: "utf8",
|
|
190
194
|
timeout: timeout || this.wf.defaults?.timeout || 600_000,
|
|
191
195
|
stdio: ["pipe", "pipe", "pipe"],
|
|
@@ -565,6 +569,14 @@ ${BOLD}Phases:${RESET} ${this.wf.phases.join(" → ")}
|
|
|
565
569
|
warn(`Claude exited with code ${buildResult.exitCode} after ${buildResult.duration}s`);
|
|
566
570
|
}
|
|
567
571
|
|
|
572
|
+
// Log build output for debugging
|
|
573
|
+
const buildLogDir = path.join(this.getReviewDir(projectDir), "build-logs");
|
|
574
|
+
ensureDir(buildLogDir);
|
|
575
|
+
fs.writeFileSync(
|
|
576
|
+
path.join(buildLogDir, `${phase}-build.log`),
|
|
577
|
+
`Exit code: ${buildResult.exitCode}\nDuration: ${buildResult.duration}s\nPrompt length: ${prompt.length}\n\n--- OUTPUT ---\n${buildResult.output.slice(0, 20000)}`
|
|
578
|
+
);
|
|
579
|
+
|
|
568
580
|
// 6c. Collect built paths
|
|
569
581
|
const builtPaths = items.map(item =>
|
|
570
582
|
item.sourcePath || (this.wf.guessPaths ? this.wf.guessPaths(phase, item) : "")
|
|
@@ -629,7 +641,7 @@ ${BOLD}Phases:${RESET} ${this.wf.phases.join(" → ")}
|
|
|
629
641
|
: this._defaultAutoFixPrompt(phase, issues);
|
|
630
642
|
|
|
631
643
|
log(`\n${CYAN} ⚙${RESET} Spawning fixer Claude for ${issues.length} issue(s)...`);
|
|
632
|
-
const fixResult = this.spawnClaude(projectDir, fixPrompt,
|
|
644
|
+
const fixResult = this.spawnClaude(projectDir, fixPrompt, opts.timeout || 600_000);
|
|
633
645
|
if (fixResult.exitCode === 0) success(`Fixer finished in ${fixResult.duration}s`);
|
|
634
646
|
else warn(`Fixer exited with code ${fixResult.exitCode}`);
|
|
635
647
|
|
|
@@ -670,7 +682,7 @@ ${BOLD}Phases:${RESET} ${this.wf.phases.join(" → ")}
|
|
|
670
682
|
? this.wf.buildFixPrompt(phase, feedback.needsWork)
|
|
671
683
|
: this._defaultFixPrompt(phase, feedback.needsWork);
|
|
672
684
|
info(`Spawning Claude to apply ${feedback.needsWork.length} fixes...`);
|
|
673
|
-
const fixResult = this.spawnClaude(projectDir, fixPrompt,
|
|
685
|
+
const fixResult = this.spawnClaude(projectDir, fixPrompt, opts.timeout || 600_000);
|
|
674
686
|
if (fixResult.exitCode === 0) success("Fixes applied");
|
|
675
687
|
else warn(`Fix attempt returned code ${fixResult.exitCode}`);
|
|
676
688
|
} else {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tekyzinc/gsd-t",
|
|
3
|
-
"version": "2.71.
|
|
3
|
+
"version": "2.71.19",
|
|
4
4
|
"description": "GSD-T: Contract-Driven Development for Claude Code — 56 slash commands with headless CI/CD mode, graph-powered code analysis, real-time agent dashboard, execution intelligence, task telemetry, doc-ripple enforcement, backlog management, impact analysis, test sync, milestone archival, and PRD generation",
|
|
5
5
|
"author": "Tekyz, Inc.",
|
|
6
6
|
"license": "MIT",
|