@tekyzinc/gsd-t 5.17.10 → 5.17.11

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.17.11] - 2026-09-01
6
+
7
+ ### Fixed — every arrow-function export was invisible to the code graph
8
+
9
+ `who-calls logAudit` answered "no callers" for a function called throughout a
10
+ server, while `verifyToken` — three lines away in the same directory — resolved
11
+ fine. The difference was how they were declared:
12
+
13
+ - `export function verifyToken()` → SCIP emits a METHOD descriptor, `verifyToken().`
14
+ - `export const logAudit = async () => {}` → SCIP emits a TERM descriptor, `logAudit.`
15
+
16
+ TypeScript treats an arrow function assigned to a const as a variable, so it gets
17
+ a term. `funcNameFromSymbol` required the `().` shape and discarded everything
18
+ else — on a real server that meant **3,584 term symbols dropped against 1,624
19
+ kept**, more than twice as much data thrown away as used.
20
+
21
+ The references were in the SCIP index the whole time; GSD-T was deleting them on
22
+ read. This was diagnosed in the field as a "scip-typescript coverage limitation" —
23
+ it was not, it was ours.
24
+
25
+ Non-callable terms (`Array.`, imported types) are now admitted and cost nothing:
26
+ a name only resolves when a call site is looking for that exact name, so a type
27
+ reference never matches one. Parameters (`name().(p)`) stay excluded — they end
28
+ in `)`, not `.`.
29
+
30
+ Measured on the same repo, on top of 5.17.10: `server/src/index.ts` went from 30
31
+ to **116** unique resolved symbols, compiler-accurate files 38 → **130**, call
32
+ edges into `server/` 173 → **591**. `logAudit`, `withTransaction` and
33
+ `getAuditContext` all return correct callers, verified against the source.
34
+
35
+ - `bin/gsd-t-scip-reader.cjs`: accept term descriptors alongside method ones
36
+ - `test/m114-nested-tsconfig-graph.test.js`: 4 more tests, mutation-tested
37
+
38
+ **Re-index to pick this up**: `gsd-t graph index`.
39
+
5
40
  ## [5.17.10] - 2026-09-01
6
41
 
7
42
  ### Fixed — the code graph indexed one TypeScript project and called it the whole repo
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # GSD-T: Contract-Driven Development for Claude Code
2
2
 
3
- **v5.17.10** - A methodology for reliable, parallelizable development using Claude Code with optional Agent Teams support.
3
+ **v5.17.11** - 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.
@@ -81,15 +81,33 @@ function loadScipProto() {
81
81
  */
82
82
  function funcNameFromSymbol(symbol) {
83
83
  if (!symbol || typeof symbol !== 'string') return null;
84
- // Only function/method occurrences (end with "()."). Parameters are "name().(p)"
85
- // they don't end with "()." so they're excluded.
86
- if (!/\(\)\.$/.test(symbol)) return null;
87
- // The callable name is the last descriptor segment. Top-level functions are
84
+
85
+ // The name is the last descriptor segment. Top-level functions are
88
86
  // ".../`file.ts`/name()."; methods are ".../`file.ts`/Class#method()." — so the
89
87
  // name follows the LAST '/' OR '#', whichever is later (methods key on '#').
90
88
  const cut = Math.max(symbol.lastIndexOf('/'), symbol.lastIndexOf('#'));
91
89
  const descriptor = cut === -1 ? symbol : symbol.slice(cut + 1);
92
- const m = descriptor.match(/^([A-Za-z_$][\w$]*)\(\)\.$/);
90
+
91
+ // TWO callable descriptor shapes, and missing the second one silently halved
92
+ // the graph. [RULE] scip-accepts-term-and-method-descriptors
93
+ //
94
+ // `name().` — a METHOD descriptor: `export function name() {}`
95
+ // `name.` — a TERM descriptor: `export const name = async () => {}`
96
+ //
97
+ // TypeScript treats an arrow function assigned to a const as a VARIABLE, so
98
+ // SCIP emits a term. Requiring "()." therefore discarded every arrow-function
99
+ // export: on a real server that was 3,584 term symbols dropped against 1,624
100
+ // kept, so `who-calls logAudit` answered "no callers" for a function called
101
+ // throughout the codebase — while `verifyToken`, three lines away but written
102
+ // as `export function`, resolved fine.
103
+ //
104
+ // Non-callable terms (`Array.`, an imported type) are admitted here and cost
105
+ // nothing: a name only resolves when a CALL SITE is looking for that exact
106
+ // name, so a type reference never matches one.
107
+ //
108
+ // Parameters (`name().(p)`) stay excluded — they end in `)`, not `.`.
109
+ let m = descriptor.match(/^([A-Za-z_$][\w$]*)\(\)\.$/); // function / method
110
+ if (!m) m = descriptor.match(/^([A-Za-z_$][\w$]*)\.$/); // term (const arrow fn)
93
111
  return m ? m[1] : null;
94
112
  }
95
113
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tekyzinc/gsd-t",
3
- "version": "5.17.10",
3
+ "version": "5.17.11",
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",