@tekyzinc/gsd-t 3.13.12 → 3.13.13

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 CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
  All notable changes to GSD-T are documented here. Updated with each release.
4
4
 
5
+ ## [3.13.13] - 2026-04-17
6
+
7
+ ### Fixed — Stray sweep now matches older-version installer artifacts
8
+
9
+ v3.13.12 shipped the defensive require + DEPRECATED_BIN_STRAYS sweep, but the sweep's safety check was too narrow: it only deleted strays whose bytes matched the **current** source. Projects left behind with a v3.13.11 (or earlier) `bin/gsd-t.js` would not match the current source (different body), so the sweep refused to delete them and those projects stayed crashed.
10
+
11
+ **Fix**: sweep now uses a **signature** check rather than a byte-identity check. A stray is deleted when it starts with `#!/usr/bin/env node` AND contains the verbatim JSDoc header `GSD-T CLI Installer` in the first 400 characters. That combination is unique enough to rule out user-owned files (a user's own script would not contain our header) while matching every historical version of this installer — so older-version artifacts are swept correctly.
12
+
13
+ **Files**:
14
+ - `bin/gsd-t.js` — sweep loop now uses signature match instead of byte-match.
15
+ - `test/bin-gsd-t-resilience.test.js` — new test case covering older-version stray (shebang + header + different body) → must be deleted. Existing byte-match test kept. Existing user-owned test kept.
16
+
17
+ **Tests**: 1239/1239 pass (+1 new assertion vs v3.13.12). E2E: N/A.
18
+
19
+ **Impact**: bee-poc and any other project carrying a pre-v3.13.12 `bin/gsd-t.js` now self-heals on the next `gsd-t update-all` pass after installing v3.13.13.
20
+
5
21
  ## [3.13.12] - 2026-04-17
6
22
 
7
23
  ### Fixed — Project-local `bin/gsd-t.js` crash on missing `debug-ledger.js` + self-heal sweep
package/bin/gsd-t.js CHANGED
@@ -2157,13 +2157,19 @@ function copyBinToolsToProject(projectDir, projectName) {
2157
2157
  let cleaned = 0;
2158
2158
  for (const stray of DEPRECATED_BIN_STRAYS) {
2159
2159
  const strayPath = path.join(projectBinDir, stray);
2160
- const srcPath = path.join(PKG_ROOT, "bin", stray);
2161
2160
  if (!fs.existsSync(strayPath)) continue;
2162
- if (!fs.existsSync(srcPath)) continue;
2163
2161
  try {
2164
2162
  const strayContent = fs.readFileSync(strayPath, "utf8");
2165
- const srcContent = fs.readFileSync(srcPath, "utf8");
2166
- if (strayContent === srcContent) {
2163
+ const head = strayContent.slice(0, 400);
2164
+ // Signature-match any version this installer ever shipped. The marker
2165
+ // is unique enough to rule out user-owned files: node shebang + the
2166
+ // verbatim JSDoc header "GSD-T CLI Installer". Matches every historical
2167
+ // version of bin/gsd-t.js, not just the current one, so older strays
2168
+ // (e.g. v3.13.11 left behind on v3.13.12+) are still swept.
2169
+ const isOurs =
2170
+ head.startsWith("#!/usr/bin/env node") &&
2171
+ head.includes("GSD-T CLI Installer");
2172
+ if (isOurs) {
2167
2173
  fs.unlinkSync(strayPath);
2168
2174
  cleaned++;
2169
2175
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tekyzinc/gsd-t",
3
- "version": "3.13.12",
3
+ "version": "3.13.13",
4
4
  "description": "GSD-T: Contract-Driven Development for Claude Code — 54 slash commands with headless-by-default workflow spawning, unattended supervisor relay with event stream, graph-powered code analysis, real-time agent dashboard, 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",