@tekyzinc/gsd-t 5.11.29 → 5.11.30

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,41 @@
2
2
 
3
3
  All notable changes to GSD-T are documented here. Updated with each release.
4
4
 
5
+ ## [5.11.30] - 2026-08-11
6
+
7
+ ### Fixed — the scan crashed before any finder ran: `slices is not defined`
8
+
9
+ The Atos scan died after 4 agents (preflight, probe, graph-wiring) with a
10
+ JavaScript reference error. Nothing was written; no finder ever started.
11
+
12
+ 618: slices = budgetPlan.slices; // never declared at this scope
13
+
14
+ v5.11.26 added that assignment to a bare name. v5.11.27 then added a
15
+ `const slices` INSIDE a helper function — a different scope entirely, which made
16
+ the name look declared to anyone skimming the file. The workflow sandbox runs in
17
+ strict mode, where assigning to an undeclared name throws.
18
+
19
+ `slices` is now declared where the code that uses it runs, starting as the
20
+ probe's own carve so the budget-failed branch needs no assignment at all.
21
+
22
+ **Nothing caught this, which is the more important half.** `node --check` parses
23
+ an undeclared assignment happily — it is legal syntax, and only strict mode makes
24
+ it an error, at runtime. The sandbox lint checks banned requires and `args`
25
+ handling, not scope. No test executes this path, because the workflow only runs
26
+ against a real project.
27
+
28
+ - `templates/workflows/gsd-t-scan.workflow.js`: `let slices = rawSlices` at the
29
+ scope that runs them.
30
+ - `test/m112-workflow-undeclared-assignment.test.js`: a static check over every
31
+ workflow for an assignment to a name its scope never declares, with a
32
+ function-body map so an `if`/`else` block is not mistaken for a nested scope.
33
+
34
+ The check was itself wrong twice before it worked, and the meta-test is what
35
+ caught it: the first version tested a hand-written sample with the offending line
36
+ at column zero and passed while missing the real bug, which is indented two
37
+ spaces inside an `if`. Verified against the actual shipped file — it reports
38
+ line 618 there and passes the fixed one.
39
+
5
40
  ## [5.11.29] - 2026-08-11
6
41
 
7
42
  ### Fixed — 20 of 27 projects had no usable code graph, and nothing said so
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # GSD-T: Contract-Driven Development for Claude Code
2
2
 
3
- **v5.11.29** - A methodology for reliable, parallelizable development using Claude Code with optional Agent Teams support.
3
+ **v5.11.30** - A methodology for reliable, parallelizable development using Claude Code with optional Agent Teams support.
4
4
 
5
5
  **Eliminates context rot** — task-level fresh dispatch (one subagent per task, ~10-20% context each) means compaction never triggers.
6
6
  **Compaction-proof debug loops** — `gsd-t headless --debug-loop` runs test-fix-retest cycles as separate `claude -p` sessions. A JSONL debug ledger persists all hypothesis/fix/learning history across fresh sessions. Anti-repetition preamble injection prevents retrying failed hypotheses. Escalation tiers (sonnet → opus → human) and a hard iteration ceiling enforced externally.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tekyzinc/gsd-t",
3
- "version": "5.11.29",
3
+ "version": "5.11.30",
4
4
  "description": "GSD-T: Contract-Driven Development for Claude Code \u2014 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",
@@ -602,6 +602,21 @@ const budgetPlan = await runCli(
602
602
  "slice-budget"
603
603
  );
604
604
 
605
+ // What the finders will actually run. Declared HERE, at the scope that uses it.
606
+ //
607
+ // [RULE] slices-declared-at-the-scope-that-runs-them
608
+ //
609
+ // v5.11.26 assigned to a bare `slices` that was never declared anywhere, and
610
+ // v5.11.27 added a `const slices` inside probePlaceholderFaults() — a different
611
+ // scope entirely. The workflow sandbox runs in strict mode, so the assignment
612
+ // below threw `slices is not defined` and killed the Atos scan after 4 agents,
613
+ // before a single finder ran. Nothing had checked it: `node --check` parses an
614
+ // undeclared assignment happily, and no test executed this path.
615
+ //
616
+ // It starts as the probe's own slices, so the failure branch below needs no
617
+ // assignment — an unmeasured plan still runs what the probe carved.
618
+ let slices = rawSlices;
619
+
605
620
  if (budgetPlan && budgetPlan.ok && Array.isArray(budgetPlan.slices) && budgetPlan.slices.length) {
606
621
  const a = budgetPlan.after || {};
607
622
  if (budgetPlan.slices.length > rawSlices.length) {