@kernlang/review 3.3.8 → 3.4.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.
Files changed (116) hide show
  1. package/dist/cache.js +1 -1
  2. package/dist/call-graph.d.ts +10 -0
  3. package/dist/call-graph.js +138 -9
  4. package/dist/call-graph.js.map +1 -1
  5. package/dist/concept-rules/auth-drift.js +2 -0
  6. package/dist/concept-rules/auth-drift.js.map +1 -1
  7. package/dist/concept-rules/auth-propagation-drift.d.ts +10 -0
  8. package/dist/concept-rules/auth-propagation-drift.js +85 -0
  9. package/dist/concept-rules/auth-propagation-drift.js.map +1 -0
  10. package/dist/concept-rules/body-shape-drift.d.ts +32 -0
  11. package/dist/concept-rules/body-shape-drift.js +98 -0
  12. package/dist/concept-rules/body-shape-drift.js.map +1 -0
  13. package/dist/concept-rules/contract-drift.js +3 -1
  14. package/dist/concept-rules/contract-drift.js.map +1 -1
  15. package/dist/concept-rules/contract-method-drift.js +2 -0
  16. package/dist/concept-rules/contract-method-drift.js.map +1 -1
  17. package/dist/concept-rules/cross-stack-utils.d.ts +24 -0
  18. package/dist/concept-rules/cross-stack-utils.js +123 -29
  19. package/dist/concept-rules/cross-stack-utils.js.map +1 -1
  20. package/dist/concept-rules/index.d.ts +4 -2
  21. package/dist/concept-rules/index.js +22 -3
  22. package/dist/concept-rules/index.js.map +1 -1
  23. package/dist/concept-rules/mutation-without-idempotency.d.ts +10 -0
  24. package/dist/concept-rules/mutation-without-idempotency.js +47 -0
  25. package/dist/concept-rules/mutation-without-idempotency.js.map +1 -0
  26. package/dist/concept-rules/request-validation-drift.d.ts +11 -0
  27. package/dist/concept-rules/request-validation-drift.js +99 -0
  28. package/dist/concept-rules/request-validation-drift.js.map +1 -0
  29. package/dist/concept-rules/root-cause.d.ts +4 -0
  30. package/dist/concept-rules/root-cause.js +31 -0
  31. package/dist/concept-rules/root-cause.js.map +1 -0
  32. package/dist/concept-rules/unbounded-collection-query.d.ts +10 -0
  33. package/dist/concept-rules/unbounded-collection-query.js +58 -0
  34. package/dist/concept-rules/unbounded-collection-query.js.map +1 -0
  35. package/dist/concept-rules/unhandled-api-error-shape.d.ts +10 -0
  36. package/dist/concept-rules/unhandled-api-error-shape.js +59 -0
  37. package/dist/concept-rules/unhandled-api-error-shape.js.map +1 -0
  38. package/dist/default-export.d.ts +41 -0
  39. package/dist/default-export.js +76 -0
  40. package/dist/default-export.js.map +1 -0
  41. package/dist/eval.d.ts +67 -0
  42. package/dist/eval.js +177 -0
  43. package/dist/eval.js.map +1 -0
  44. package/dist/external-tools.js +52 -3
  45. package/dist/external-tools.js.map +1 -1
  46. package/dist/file-context.js +32 -13
  47. package/dist/file-context.js.map +1 -1
  48. package/dist/file-role.d.ts +6 -0
  49. package/dist/file-role.js +27 -0
  50. package/dist/file-role.js.map +1 -1
  51. package/dist/framework-seeds.d.ts +46 -0
  52. package/dist/framework-seeds.js +245 -0
  53. package/dist/framework-seeds.js.map +1 -0
  54. package/dist/git-env.d.ts +1 -0
  55. package/dist/git-env.js +25 -0
  56. package/dist/git-env.js.map +1 -0
  57. package/dist/graph.js +246 -21
  58. package/dist/graph.js.map +1 -1
  59. package/dist/index.d.ts +12 -3
  60. package/dist/index.js +314 -96
  61. package/dist/index.js.map +1 -1
  62. package/dist/mappers/ts-concepts.js +730 -1
  63. package/dist/mappers/ts-concepts.js.map +1 -1
  64. package/dist/path-canonical.d.ts +34 -0
  65. package/dist/path-canonical.js +85 -0
  66. package/dist/path-canonical.js.map +1 -0
  67. package/dist/policy.d.ts +22 -0
  68. package/dist/policy.js +47 -0
  69. package/dist/policy.js.map +1 -0
  70. package/dist/project-context.d.ts +135 -0
  71. package/dist/project-context.js +563 -0
  72. package/dist/project-context.js.map +1 -0
  73. package/dist/public-api.d.ts +21 -0
  74. package/dist/public-api.js +17 -2
  75. package/dist/public-api.js.map +1 -1
  76. package/dist/python-fallback.d.ts +2 -0
  77. package/dist/python-fallback.js +506 -0
  78. package/dist/python-fallback.js.map +1 -0
  79. package/dist/reporter.js +106 -1
  80. package/dist/reporter.js.map +1 -1
  81. package/dist/rule-quality.d.ts +58 -0
  82. package/dist/rule-quality.js +357 -0
  83. package/dist/rule-quality.js.map +1 -0
  84. package/dist/rules/base.js +21 -3
  85. package/dist/rules/base.js.map +1 -1
  86. package/dist/rules/dead-code.d.ts +2 -2
  87. package/dist/rules/dead-code.js +88 -4
  88. package/dist/rules/dead-code.js.map +1 -1
  89. package/dist/rules/index.d.ts +22 -0
  90. package/dist/rules/index.js +72 -0
  91. package/dist/rules/index.js.map +1 -1
  92. package/dist/rules/kern-source.d.ts +4 -0
  93. package/dist/rules/kern-source.js +184 -0
  94. package/dist/rules/kern-source.js.map +1 -1
  95. package/dist/rules/react.js +52 -3
  96. package/dist/rules/react.js.map +1 -1
  97. package/dist/rules/suggest-kern-primitive.js +0 -1
  98. package/dist/rules/suggest-kern-primitive.js.map +1 -1
  99. package/dist/semantic-diff.js +2 -0
  100. package/dist/semantic-diff.js.map +1 -1
  101. package/dist/suppression/apply-suppression.js +2 -0
  102. package/dist/suppression/apply-suppression.js.map +1 -1
  103. package/dist/suppression/parse-directives.d.ts +13 -5
  104. package/dist/suppression/parse-directives.js +62 -8
  105. package/dist/suppression/parse-directives.js.map +1 -1
  106. package/dist/suppression/types.d.ts +9 -0
  107. package/dist/suppression/types.js +6 -1
  108. package/dist/suppression/types.js.map +1 -1
  109. package/dist/taint-crossfile.js +15 -8
  110. package/dist/taint-crossfile.js.map +1 -1
  111. package/dist/telemetry.d.ts +126 -0
  112. package/dist/telemetry.js +303 -0
  113. package/dist/telemetry.js.map +1 -0
  114. package/dist/types.d.ts +172 -2
  115. package/dist/types.js.map +1 -1
  116. package/package.json +4 -3
package/dist/cache.js CHANGED
@@ -3,7 +3,7 @@ import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync
3
3
  import { homedir } from 'os';
4
4
  import { dirname, join, resolve } from 'path';
5
5
  // Version stamp for cache invalidation — changes when rules/analyzers change
6
- const REVIEW_CACHE_VERSION = '3.2.3-review-cache-3';
6
+ const REVIEW_CACHE_VERSION = '3.3.9-review-cache-1';
7
7
  const IMPORT_SPECIFIER_RE = /(?:import|export)\s+(?:[^'"`]*?\s+from\s+)?['"]([^'"]+)['"]|import\(\s*['"]([^'"]+)['"]\s*\)/g;
8
8
  const EXTENSION_FALLBACK = {
9
9
  '.js': ['.ts', '.tsx', '.mts', '.cts'],
@@ -58,6 +58,16 @@ export interface CallGraph {
58
58
  orphanFunctions: string[];
59
59
  /** How many calls couldn't be resolved */
60
60
  unresolvedCallCount: number;
61
+ /**
62
+ * Per-file default-export aliasing — Map<filePath, internalName> where
63
+ * internalName is the call-graph-stored name of the file's `export default`
64
+ * (e.g. 'Page' for `export default function Page`). Lets dead-export
65
+ * accept a seed of `(filePath, 'default')` as proof that `(filePath,
66
+ * internalName)` is public, even though the call graph stores the
67
+ * function under its declaration name. Files with anonymous defaults
68
+ * or no default export are not present.
69
+ */
70
+ defaultExportNames: Map<string, string>;
61
71
  }
62
72
  /**
63
73
  * Build a function-level call graph from the import graph.
@@ -23,10 +23,18 @@
23
23
  * Dead export findings from unresolved edges get lower confidence (0.70 vs 0.90).
24
24
  */
25
25
  import { SyntaxKind } from 'ts-morph';
26
+ import { resolveDefaultExportName } from './default-export.js';
27
+ import { classifyFileRoleByPath } from './file-role.js';
26
28
  /** Build a map of local import binding → resolved export target for a source file */
27
29
  function buildImportBindings(sourceFile, graphFiles) {
28
30
  const bindings = new Map();
29
31
  for (const decl of sourceFile.getImportDeclarations()) {
32
+ // Type-only imports are erased at compile time. Recording them as
33
+ // bindings would let `obj.method()` style calls land on the type-only
34
+ // target during call resolution and mark a runtime export reachable
35
+ // even though no runtime reference exists.
36
+ if (decl.isTypeOnly())
37
+ continue;
30
38
  const resolvedSf = resolveImportSourceFile(sourceFile, decl, graphFiles);
31
39
  if (!resolvedSf)
32
40
  continue;
@@ -35,9 +43,17 @@ function buildImportBindings(sourceFile, graphFiles) {
35
43
  continue;
36
44
  // Named imports: import { foo, bar as baz } from './mod'
37
45
  for (const named of decl.getNamedImports()) {
46
+ // Mixed form: `import { foo, type Bar } from './m'` — Bar is erased.
47
+ if (named.isTypeOnly())
48
+ continue;
38
49
  const importedName = named.getName();
39
50
  const localName = named.getAliasNode()?.getText() ?? importedName;
40
- const target = resolveExportBinding(resolvedSf, importedName, graphFiles) ?? {
51
+ // Walk explicit re-export chains when ts-morph can't trace through. Without this,
52
+ // a curated barrel like `export { foo } from './worker'` yields a fallback
53
+ // {targetFile: barrel.ts, targetName: foo} → barrel.ts has no foo decl → call
54
+ // never reaches worker.ts#foo → worker.ts#foo reads as a dead-export FP.
55
+ const target = resolveExportBinding(resolvedSf, importedName, graphFiles) ??
56
+ resolveViaReExportChain(resolvedSf, importedName, graphFiles) ?? {
41
57
  targetFile: resolvedPath,
42
58
  targetName: importedName,
43
59
  };
@@ -91,6 +107,76 @@ function resolveExportBinding(sourceFile, exportName, graphFiles) {
91
107
  return undefined;
92
108
  return resolveBindingFromDeclarations(decls, exportName, graphFiles);
93
109
  }
110
+ /**
111
+ * Walk explicit `export { x } from './y'` chains when ts-morph's
112
+ * `getExportedDeclarations()` (used by `resolveExportBinding`) returns nothing.
113
+ *
114
+ * Resolves only when the chain ends at exactly one concrete declaration in a
115
+ * graph-tracked file. Bare `export * from './y'` is not followed (cannot prove
116
+ * the specific symbol is among the re-exports without globally enumerating).
117
+ * Falls through to `undefined` on ambiguity so the caller's last-resort fallback
118
+ * still applies — but in the common curated-barrel case the chain succeeds and
119
+ * the binding points at the real declaration site.
120
+ *
121
+ * Visited set is keyed by `${filePath}#${exportName}` so a cycle through
122
+ * `(barrel, foo) → (worker, foo) → (barrel, foo)` terminates instead of looping.
123
+ */
124
+ function resolveViaReExportChain(sourceFile, exportName, graphFiles, visited = new Set()) {
125
+ const key = `${sourceFile.getFilePath()}#${exportName}`;
126
+ if (visited.has(key))
127
+ return undefined;
128
+ visited.add(key);
129
+ for (const exportDecl of sourceFile.getExportDeclarations()) {
130
+ if (exportDecl.isTypeOnly())
131
+ continue;
132
+ if (!exportDecl.hasModuleSpecifier())
133
+ continue;
134
+ const namedExports = exportDecl.getNamedExports();
135
+ // `export * from './y'` (no named exports) — cannot prove `exportName`
136
+ // specifically is among the re-exports. Skip rather than overgeneralise.
137
+ if (namedExports.length === 0)
138
+ continue;
139
+ // Find the matching re-export, honouring `export { real as foo } from './y'`:
140
+ // the OUTGOING name is the alias (or the original if no alias). The
141
+ // UPSTREAM lookup must use the original (pre-alias) name.
142
+ let upstreamName;
143
+ for (const ne of namedExports) {
144
+ if (ne.isTypeOnly())
145
+ continue;
146
+ const aliasNode = ne.getAliasNode();
147
+ const outgoingName = aliasNode ? aliasNode.getText() : ne.getName();
148
+ if (outgoingName !== exportName)
149
+ continue;
150
+ upstreamName = ne.getName();
151
+ break;
152
+ }
153
+ if (upstreamName === undefined)
154
+ continue;
155
+ // ts-morph occasionally throws on getModuleSpecifierSourceFile() when the
156
+ // specifier resolves to a module outside the project (npm package, .d.ts
157
+ // shim, etc.). Match resolveImportSourceFile's defensive try/catch.
158
+ let targetSf;
159
+ try {
160
+ targetSf = exportDecl.getModuleSpecifierSourceFile() ?? undefined;
161
+ }
162
+ catch {
163
+ continue;
164
+ }
165
+ if (!targetSf)
166
+ continue;
167
+ if (!graphFiles.has(targetSf.getFilePath()))
168
+ continue;
169
+ // Try a direct resolution at the next hop first. If that also fails,
170
+ // recurse — the next file may itself be a barrel.
171
+ const direct = resolveExportBinding(targetSf, upstreamName, graphFiles);
172
+ if (direct)
173
+ return direct;
174
+ const chained = resolveViaReExportChain(targetSf, upstreamName, graphFiles, visited);
175
+ if (chained)
176
+ return chained;
177
+ }
178
+ return undefined;
179
+ }
94
180
  function resolveDefaultExportBinding(sourceFile, graphFiles) {
95
181
  const symbol = sourceFile.getDefaultExportSymbol();
96
182
  if (!symbol)
@@ -538,42 +624,84 @@ function isBuiltin(name) {
538
624
  * Requires a ts-morph Project with all files loaded.
539
625
  */
540
626
  export function buildCallGraph(graph, project) {
627
+ // ALL internal keys here use gf.canonicalPath (red-team #9). cgProject is
628
+ // seeded with canonical, ts-morph's getFilePath returns canonical,
629
+ // GraphEdge.from/.to are canonical (graph.ts emits canonical) — keeping
630
+ // the call graph in the same key space prevents pnpm/symlink twin entries
631
+ // from silently dropping cross-file bindings. See path-canonical.ts.
541
632
  const graphFiles = new Map();
542
633
  for (const gf of graph.files) {
543
- graphFiles.set(gf.path, gf);
634
+ graphFiles.set(gf.canonicalPath, gf);
544
635
  }
545
636
  const allFunctions = new Map();
546
637
  const fileFunctions = new Map();
547
638
  const importedExportKeys = new Set();
639
+ const defaultExportNames = new Map();
548
640
  // Phase 1: Collect all functions from all files
549
641
  for (const gf of graph.files) {
550
- const sf = project.getSourceFile(gf.path);
642
+ const sf = project.getSourceFile(gf.canonicalPath);
551
643
  if (!sf)
552
644
  continue;
553
- const fns = collectFunctions(sf, gf.path);
554
- fileFunctions.set(gf.path, fns);
645
+ const fns = collectFunctions(sf, gf.canonicalPath);
646
+ fileFunctions.set(gf.canonicalPath, fns);
555
647
  for (const fn of fns) {
556
648
  allFunctions.set(`${fn.filePath}#${fn.name}`, fn);
557
649
  }
650
+ // Step 9b: pre-resolve the file's default-export internal name so
651
+ // dead-export can alias `(filePath, 'default')` seeds against the
652
+ // call-graph-stored name (e.g. 'Page' for `export default function Page`).
653
+ const defaultName = resolveDefaultExportName(sf);
654
+ if (defaultName)
655
+ defaultExportNames.set(gf.canonicalPath, defaultName);
558
656
  }
559
657
  // Phase 2: Extract call sites for each function
560
658
  let unresolvedCount = 0;
561
659
  for (const gf of graph.files) {
562
- const sf = project.getSourceFile(gf.path);
660
+ const sf = project.getSourceFile(gf.canonicalPath);
563
661
  if (!sf)
564
662
  continue;
565
- const fns = fileFunctions.get(gf.path) || [];
663
+ const fns = fileFunctions.get(gf.canonicalPath) || [];
566
664
  const localFnNames = new Set(fns.map((f) => f.name));
567
665
  const importBindings = buildImportBindings(sf, graphFiles);
568
- addImportedExportKeys(importedExportKeys, importBindings);
666
+ // Test files are NOT production consumers. Their imports of a helper
667
+ // (e.g. `import { bar } from './prod-helpers'`) shouldn't make `bar`
668
+ // count as "imported in the analyzed codebase" for dead-export purposes.
669
+ // Without this skip, a helper used only by *.test.ts is silently
670
+ // considered alive — exactly the FP red-team #3 flagged.
671
+ if (classifyFileRoleByPath(gf.canonicalPath) !== 'test') {
672
+ addImportedExportKeys(importedExportKeys, importBindings);
673
+ }
569
674
  const localAliases = buildLocalAliases(sf, localFnNames, importBindings);
570
675
  for (const fn of fns) {
571
676
  fn.calls = extractCallSites(fn, sf, localFnNames, importBindings, localAliases);
572
677
  unresolvedCount += fn.calls.filter((c) => !c.resolved).length;
573
678
  }
679
+ // Step 10 wiring: literal `import('./mod')` (recorded by graph.ts as
680
+ // a `dynamic-import` GraphEdge in step 3) means every export of the
681
+ // target is potentially used — we cannot prove which one. Mark them
682
+ // all as imported. Same test-file skip as the static-import case
683
+ // above so a test-only lazy import doesn't pin production exports.
684
+ if (classifyFileRoleByPath(gf.canonicalPath) !== 'test') {
685
+ for (const edge of gf.importEdges) {
686
+ if (edge.kind !== 'dynamic-import')
687
+ continue;
688
+ const targetFns = fileFunctions.get(edge.to) ?? [];
689
+ for (const fn of targetFns) {
690
+ if (fn.isExported)
691
+ importedExportKeys.add(`${edge.to}#${fn.name}`);
692
+ }
693
+ }
694
+ }
574
695
  }
575
696
  // Phase 3: Link calledBy edges (cross-file)
576
697
  for (const fn of allFunctions.values()) {
698
+ // Skip callers that live in test files. The intent: a production helper
699
+ // whose only callers are *.test.ts should still be flagged dead so the
700
+ // user can spot stale code. Tests still get their own call graph
701
+ // (orphan/dead-logic rules fire on them); they just don't count as
702
+ // evidence that production exports are reachable.
703
+ if (classifyFileRoleByPath(fn.filePath) === 'test')
704
+ continue;
577
705
  for (const call of fn.calls) {
578
706
  if (!call.resolved || !call.targetFile)
579
707
  continue;
@@ -590,7 +718,7 @@ export function buildCallGraph(graph, project) {
590
718
  // this, every method of a singleton-exported class reads as dead.
591
719
  const instantiatedClasses = new Set();
592
720
  for (const gf of graph.files) {
593
- const sf = project.getSourceFile(gf.path);
721
+ const sf = project.getSourceFile(gf.canonicalPath);
594
722
  if (!sf)
595
723
  continue;
596
724
  sf.forEachDescendant((node) => {
@@ -640,6 +768,7 @@ export function buildCallGraph(graph, project) {
640
768
  deadExports,
641
769
  orphanFunctions,
642
770
  unresolvedCallCount: unresolvedCount,
771
+ defaultExportNames,
643
772
  };
644
773
  }
645
774
  //# sourceMappingURL=call-graph.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"call-graph.js","sourceRoot":"","sources":["../src/call-graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"call-graph.js","sourceRoot":"","sources":["../src/call-graph.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,7 @@
26
26
  */
27
27
  import { createFingerprint } from '../types.js';
28
28
  import { API_PATH_RE, CROSS_STACK_EXACT_CONFIDENCE, collectRoutesAcrossGraph, findMatchingRoute, normalizeClientUrl, } from './cross-stack-utils.js';
29
+ import { apiCallRootCause } from './root-cause.js';
29
30
  export function authDrift(ctx) {
30
31
  if (!ctx.allConcepts || ctx.allConcepts.size === 0)
31
32
  return [];
@@ -89,6 +90,7 @@ export function authDrift(ctx) {
89
90
  primarySpan: node.primarySpan,
90
91
  fingerprint: createFingerprint('auth-drift', node.primarySpan.startLine, node.primarySpan.startCol),
91
92
  confidence: node.confidence * CROSS_STACK_EXACT_CONFIDENCE,
93
+ rootCause: apiCallRootCause(node, normalized, node.payload.method, route.node),
92
94
  });
93
95
  }
94
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth-drift.js","sourceRoot":"","sources":["../../src/concept-rules/auth-drift.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-drift.js","sourceRoot":"","sources":["../../src/concept-rules/auth-drift.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Rule: auth-propagation-drift
3
+ *
4
+ * Cross-stack rule — complements `auth-drift` by catching non-raw-fetch API
5
+ * clients (axios/got/ky-style direct calls) that call an authenticated server
6
+ * route without visible auth/session propagation.
7
+ */
8
+ import type { ReviewFinding } from '../types.js';
9
+ import type { ConceptRuleContext } from './index.js';
10
+ export declare function authPropagationDrift(ctx: ConceptRuleContext): ReviewFinding[];
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Rule: auth-propagation-drift
3
+ *
4
+ * Cross-stack rule — complements `auth-drift` by catching non-raw-fetch API
5
+ * clients (axios/got/ky-style direct calls) that call an authenticated server
6
+ * route without visible auth/session propagation.
7
+ */
8
+ import { createFingerprint } from '../types.js';
9
+ import { CROSS_STACK_EXACT_CONFIDENCE, collectRoutesAcrossGraph, findHighConfidenceRouteForMethod, findMatchingRouteForMethod, normalizeClientUrl, } from './cross-stack-utils.js';
10
+ import { apiCallRootCause } from './root-cause.js';
11
+ export function authPropagationDrift(ctx) {
12
+ if (!ctx.allConcepts || ctx.allConcepts.size === 0)
13
+ return [];
14
+ const serverRoutes = collectRoutesAcrossGraph(ctx.allConcepts);
15
+ if (serverRoutes.length === 0)
16
+ return [];
17
+ const authGuardContainers = collectAuthGuardContainers(ctx.allConcepts);
18
+ if (authGuardContainers.size === 0)
19
+ return [];
20
+ const findings = [];
21
+ const localConcepts = ctx.allConcepts.get(ctx.filePath) ?? ctx.concepts;
22
+ for (const node of localConcepts.nodes) {
23
+ if (node.kind !== 'effect' || node.payload.kind !== 'effect' || node.payload.subtype !== 'network')
24
+ continue;
25
+ if (node.payload.authPropagation !== 'absent')
26
+ continue;
27
+ // `auth-drift` owns the raw fetch/no Authorization case for backward
28
+ // compatibility with the existing rule ID. This rule covers richer clients.
29
+ if (node.payload.hasAuthHeader === false)
30
+ continue;
31
+ const target = node.payload.target;
32
+ if (typeof target !== 'string')
33
+ continue;
34
+ const normalized = normalizeClientUrl(target);
35
+ if (!normalized)
36
+ continue;
37
+ const route = ctx.crossStackMode === 'audit'
38
+ ? findMatchingRouteForMethod(normalized, node.payload.method, serverRoutes)
39
+ : findHighConfidenceRouteForMethod(normalized, node.payload.method, serverRoutes);
40
+ if (!route?.node)
41
+ continue;
42
+ const fileGuards = authGuardContainers.get(route.node.primarySpan.file);
43
+ if (!fileGuards)
44
+ continue;
45
+ const routeContainer = route.node.containerId;
46
+ const guardedByContainer = routeContainer !== undefined && fileGuards.routeContainers.has(routeContainer);
47
+ const guardedBySingleRouteFile = fileGuards.totalRoutesInFile === 1;
48
+ if (!guardedByContainer && !guardedBySingleRouteFile)
49
+ continue;
50
+ findings.push({
51
+ source: 'kern',
52
+ ruleId: 'auth-propagation-drift',
53
+ severity: 'warning',
54
+ category: 'bug',
55
+ message: `Client calls authenticated route \`${target}\` without visible auth/session propagation. Add an Authorization/Cookie/session credential path or route this call through an authenticated client wrapper.`,
56
+ primarySpan: node.primarySpan,
57
+ relatedSpans: [route.node.primarySpan],
58
+ fingerprint: createFingerprint('auth-propagation-drift', node.primarySpan.startLine, node.primarySpan.startCol),
59
+ confidence: node.confidence * CROSS_STACK_EXACT_CONFIDENCE,
60
+ rootCause: apiCallRootCause(node, normalized, node.payload.method, route.node),
61
+ });
62
+ }
63
+ return findings;
64
+ }
65
+ function collectAuthGuardContainers(allConcepts) {
66
+ const result = new Map();
67
+ for (const [filePath, map] of allConcepts) {
68
+ const routeContainers = new Set();
69
+ let routeCount = 0;
70
+ for (const node of map.nodes) {
71
+ if (node.kind === 'entrypoint' && node.payload.kind === 'entrypoint' && node.payload.subtype === 'route') {
72
+ routeCount++;
73
+ continue;
74
+ }
75
+ if (node.kind !== 'guard' || node.payload.kind !== 'guard' || node.payload.subtype !== 'auth')
76
+ continue;
77
+ if (node.containerId !== undefined)
78
+ routeContainers.add(node.containerId);
79
+ }
80
+ if (routeContainers.size > 0)
81
+ result.set(filePath, { routeContainers, totalRoutesInFile: routeCount });
82
+ }
83
+ return result;
84
+ }
85
+ //# sourceMappingURL=auth-propagation-drift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-propagation-drift.js","sourceRoot":"","sources":["../../src/concept-rules/auth-propagation-drift.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Rule: body-shape-drift
3
+ *
4
+ * Cross-stack rule — fires when a client `fetch(url, { body: JSON.stringify({ … }) })`
5
+ * omits one or more fields that the matching server handler reads off
6
+ * `req.body` (Express inline handler). Classic LLM-authored drift:
7
+ *
8
+ * client: fetch('/api/users', { body: JSON.stringify({ name }) })
9
+ * server: app.post('/api/users', (req, res) => {
10
+ * const { name, email } = req.body; // ← email never sent
11
+ * ...
12
+ * });
13
+ *
14
+ * V1 is deliberately narrow per the red-team consensus on the body-shape
15
+ * plan:
16
+ * - Express only (no Pydantic/FastAPI cross-file model resolution).
17
+ * - Literal or locally typed JSON payloads on fetch/axios-style clients.
18
+ * - Inline handlers only (imported-identifier handlers stay silent).
19
+ * - Missing-fields direction only (client omits what server needs). The
20
+ * "extra" direction (client sends what server ignores) conflicts with
21
+ * legitimate pass-through handlers and is deferred.
22
+ * - Fires only when BOTH `sentFieldsResolved` and `bodyFieldsResolved`
23
+ * are true. Opaque bodies, wrapper clients, whole-body forwarding all
24
+ * stay silent by design — false negatives are the price of zero
25
+ * false positives.
26
+ *
27
+ * Requires graph mode: the client call and server route live in different
28
+ * files by definition. Single-file review returns no findings.
29
+ */
30
+ import type { ReviewFinding } from '../types.js';
31
+ import type { ConceptRuleContext } from './index.js';
32
+ export declare function bodyShapeDrift(ctx: ConceptRuleContext): ReviewFinding[];
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Rule: body-shape-drift
3
+ *
4
+ * Cross-stack rule — fires when a client `fetch(url, { body: JSON.stringify({ … }) })`
5
+ * omits one or more fields that the matching server handler reads off
6
+ * `req.body` (Express inline handler). Classic LLM-authored drift:
7
+ *
8
+ * client: fetch('/api/users', { body: JSON.stringify({ name }) })
9
+ * server: app.post('/api/users', (req, res) => {
10
+ * const { name, email } = req.body; // ← email never sent
11
+ * ...
12
+ * });
13
+ *
14
+ * V1 is deliberately narrow per the red-team consensus on the body-shape
15
+ * plan:
16
+ * - Express only (no Pydantic/FastAPI cross-file model resolution).
17
+ * - Literal or locally typed JSON payloads on fetch/axios-style clients.
18
+ * - Inline handlers only (imported-identifier handlers stay silent).
19
+ * - Missing-fields direction only (client omits what server needs). The
20
+ * "extra" direction (client sends what server ignores) conflicts with
21
+ * legitimate pass-through handlers and is deferred.
22
+ * - Fires only when BOTH `sentFieldsResolved` and `bodyFieldsResolved`
23
+ * are true. Opaque bodies, wrapper clients, whole-body forwarding all
24
+ * stay silent by design — false negatives are the price of zero
25
+ * false positives.
26
+ *
27
+ * Requires graph mode: the client call and server route live in different
28
+ * files by definition. Single-file review returns no findings.
29
+ */
30
+ import { createFingerprint } from '../types.js';
31
+ import { API_PATH_RE, CROSS_STACK_HEURISTIC_CONFIDENCE, collectRoutesAcrossGraph, findMatchingRoute, normalizeClientUrl, } from './cross-stack-utils.js';
32
+ import { apiCallRootCause } from './root-cause.js';
33
+ export function bodyShapeDrift(ctx) {
34
+ if (!ctx.allConcepts || ctx.allConcepts.size === 0)
35
+ return [];
36
+ const serverRoutes = collectRoutesAcrossGraph(ctx.allConcepts);
37
+ if (serverRoutes.length === 0)
38
+ return [];
39
+ const clientCalls = [];
40
+ for (const [, conceptMap] of ctx.allConcepts) {
41
+ for (const node of conceptMap.nodes) {
42
+ if (node.kind !== 'effect' || node.payload.kind !== 'effect' || node.payload.subtype !== 'network')
43
+ continue;
44
+ if (node.payload.sentFieldsResolved !== true)
45
+ continue;
46
+ const fields = node.payload.sentFields;
47
+ if (!fields)
48
+ continue;
49
+ const target = node.payload.target;
50
+ if (typeof target !== 'string')
51
+ continue;
52
+ const normalized = normalizeClientUrl(target);
53
+ if (!normalized || !API_PATH_RE.test(normalized))
54
+ continue;
55
+ clientCalls.push({ target, normalizedPath: normalized, method: node.payload.method, sentFields: fields, node });
56
+ }
57
+ }
58
+ if (clientCalls.length === 0)
59
+ return [];
60
+ const findings = [];
61
+ const seen = new Set();
62
+ for (const call of clientCalls) {
63
+ if (call.node.primarySpan.file !== ctx.filePath)
64
+ continue;
65
+ const route = findMatchingRoute(call.normalizedPath, serverRoutes);
66
+ if (!route?.node)
67
+ continue;
68
+ if (route.node.payload.kind !== 'entrypoint')
69
+ continue;
70
+ if (route.node.payload.bodyFieldsResolved !== true)
71
+ continue;
72
+ const serverFields = route.node.payload.bodyFields;
73
+ if (!serverFields || serverFields.length === 0)
74
+ continue;
75
+ const missing = serverFields.filter((f) => !call.sentFields.includes(f));
76
+ if (missing.length === 0)
77
+ continue;
78
+ const fingerprint = createFingerprint('body-shape-drift', call.node.primarySpan.startLine, call.node.primarySpan.startCol);
79
+ if (seen.has(fingerprint))
80
+ continue;
81
+ seen.add(fingerprint);
82
+ const missingList = missing.map((f) => `\`${f}\``).join(', ');
83
+ const plural = missing.length === 1 ? 'field' : 'fields';
84
+ findings.push({
85
+ source: 'kern',
86
+ ruleId: 'body-shape-drift',
87
+ severity: 'warning',
88
+ category: 'bug',
89
+ message: `Frontend POSTs to \`${call.normalizedPath}\` without ${plural} ${missingList}, but the matching server handler reads ${missing.length === 1 ? 'it' : 'them'} off \`req.body\`. The handler will see \`undefined\` for the missing ${plural}.`,
90
+ primarySpan: call.node.primarySpan,
91
+ fingerprint,
92
+ confidence: call.node.confidence * CROSS_STACK_HEURISTIC_CONFIDENCE,
93
+ rootCause: apiCallRootCause(call.node, call.normalizedPath, call.method, route.node),
94
+ });
95
+ }
96
+ return findings;
97
+ }
98
+ //# sourceMappingURL=body-shape-drift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body-shape-drift.js","sourceRoot":"","sources":["../../src/concept-rules/body-shape-drift.ts"],"names":[],"mappings":"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"}