@skillsmith/core 0.10.0 → 0.11.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 (129) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/analysis/tree-sitter/pythonIncremental.d.ts +23 -0
  4. package/dist/src/analysis/tree-sitter/pythonIncremental.d.ts.map +1 -1
  5. package/dist/src/analysis/tree-sitter/pythonIncremental.hardening.test.js +137 -0
  6. package/dist/src/analysis/tree-sitter/pythonIncremental.hardening.test.js.map +1 -1
  7. package/dist/src/analysis/tree-sitter/pythonIncremental.js +83 -10
  8. package/dist/src/analysis/tree-sitter/pythonIncremental.js.map +1 -1
  9. package/dist/src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.js +6 -1
  10. package/dist/src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.js.map +1 -1
  11. package/dist/src/config/audit-notify-state.d.ts +46 -0
  12. package/dist/src/config/audit-notify-state.d.ts.map +1 -0
  13. package/dist/src/config/audit-notify-state.js +55 -0
  14. package/dist/src/config/audit-notify-state.js.map +1 -0
  15. package/dist/src/config/audit-notify-state.test.d.ts +9 -0
  16. package/dist/src/config/audit-notify-state.test.d.ts.map +1 -0
  17. package/dist/src/config/audit-notify-state.test.js +63 -0
  18. package/dist/src/config/audit-notify-state.test.js.map +1 -0
  19. package/dist/src/config/index.d.ts +10 -0
  20. package/dist/src/config/index.d.ts.map +1 -1
  21. package/dist/src/config/index.js.map +1 -1
  22. package/dist/src/exports/services.d.ts +1 -1
  23. package/dist/src/exports/services.d.ts.map +1 -1
  24. package/dist/src/exports/services.js +3 -1
  25. package/dist/src/exports/services.js.map +1 -1
  26. package/dist/src/index.d.ts +4 -1
  27. package/dist/src/index.d.ts.map +1 -1
  28. package/dist/src/index.js +7 -1
  29. package/dist/src/index.js.map +1 -1
  30. package/dist/src/logging/context.d.ts +58 -0
  31. package/dist/src/logging/context.d.ts.map +1 -0
  32. package/dist/src/logging/context.js +62 -0
  33. package/dist/src/logging/context.js.map +1 -0
  34. package/dist/src/logging/context.test.d.ts +14 -0
  35. package/dist/src/logging/context.test.d.ts.map +1 -0
  36. package/dist/src/logging/context.test.js +88 -0
  37. package/dist/src/logging/context.test.js.map +1 -0
  38. package/dist/src/logging/index.d.ts +13 -0
  39. package/dist/src/logging/index.d.ts.map +1 -0
  40. package/dist/src/logging/index.js +12 -0
  41. package/dist/src/logging/index.js.map +1 -0
  42. package/dist/src/logging/logger.d.ts +71 -0
  43. package/dist/src/logging/logger.d.ts.map +1 -0
  44. package/dist/src/logging/logger.js +264 -0
  45. package/dist/src/logging/logger.js.map +1 -0
  46. package/dist/src/logging/logger.test.d.ts +9 -0
  47. package/dist/src/logging/logger.test.d.ts.map +1 -0
  48. package/dist/src/logging/logger.test.js +320 -0
  49. package/dist/src/logging/logger.test.js.map +1 -0
  50. package/dist/src/logging/redact.d.ts +35 -0
  51. package/dist/src/logging/redact.d.ts.map +1 -0
  52. package/dist/src/logging/redact.js +152 -0
  53. package/dist/src/logging/redact.js.map +1 -0
  54. package/dist/src/logging/redact.test.d.ts +8 -0
  55. package/dist/src/logging/redact.test.d.ts.map +1 -0
  56. package/dist/src/logging/redact.test.js +330 -0
  57. package/dist/src/logging/redact.test.js.map +1 -0
  58. package/dist/src/logging/rotation.d.ts +75 -0
  59. package/dist/src/logging/rotation.d.ts.map +1 -0
  60. package/dist/src/logging/rotation.js +284 -0
  61. package/dist/src/logging/rotation.js.map +1 -0
  62. package/dist/src/logging/rotation.test.d.ts +11 -0
  63. package/dist/src/logging/rotation.test.d.ts.map +1 -0
  64. package/dist/src/logging/rotation.test.js +132 -0
  65. package/dist/src/logging/rotation.test.js.map +1 -0
  66. package/dist/src/logging/types.d.ts +69 -0
  67. package/dist/src/logging/types.d.ts.map +1 -0
  68. package/dist/src/logging/types.js +9 -0
  69. package/dist/src/logging/types.js.map +1 -0
  70. package/dist/src/security/index.d.ts +2 -0
  71. package/dist/src/security/index.d.ts.map +1 -1
  72. package/dist/src/security/index.js +4 -0
  73. package/dist/src/security/index.js.map +1 -1
  74. package/dist/src/security/scanner/SecurityScanner.hostile-update.d.ts +46 -0
  75. package/dist/src/security/scanner/SecurityScanner.hostile-update.d.ts.map +1 -0
  76. package/dist/src/security/scanner/SecurityScanner.hostile-update.js +209 -0
  77. package/dist/src/security/scanner/SecurityScanner.hostile-update.js.map +1 -0
  78. package/dist/src/security/scanner/index.d.ts +2 -1
  79. package/dist/src/security/scanner/index.d.ts.map +1 -1
  80. package/dist/src/security/scanner/index.js +2 -0
  81. package/dist/src/security/scanner/index.js.map +1 -1
  82. package/dist/src/security/scanner/types.d.ts +21 -0
  83. package/dist/src/security/scanner/types.d.ts.map +1 -1
  84. package/dist/src/services/skill-installation.io.d.ts.map +1 -1
  85. package/dist/src/services/skill-installation.io.js +19 -2
  86. package/dist/src/services/skill-installation.io.js.map +1 -1
  87. package/dist/src/sync/access-token.d.ts +27 -0
  88. package/dist/src/sync/access-token.d.ts.map +1 -0
  89. package/dist/src/sync/access-token.js +40 -0
  90. package/dist/src/sync/access-token.js.map +1 -0
  91. package/dist/src/sync/audit-notify-client.d.ts +83 -0
  92. package/dist/src/sync/audit-notify-client.d.ts.map +1 -0
  93. package/dist/src/sync/audit-notify-client.js +126 -0
  94. package/dist/src/sync/audit-notify-client.js.map +1 -0
  95. package/dist/src/sync/audit-notify-client.test.d.ts +14 -0
  96. package/dist/src/sync/audit-notify-client.test.d.ts.map +1 -0
  97. package/dist/src/sync/audit-notify-client.test.js +133 -0
  98. package/dist/src/sync/audit-notify-client.test.js.map +1 -0
  99. package/dist/src/sync/index.d.ts +1 -0
  100. package/dist/src/sync/index.d.ts.map +1 -1
  101. package/dist/src/sync/index.js +2 -0
  102. package/dist/src/sync/index.js.map +1 -1
  103. package/dist/src/sync/inventory-client.d.ts.map +1 -1
  104. package/dist/src/sync/inventory-client.js +5 -16
  105. package/dist/src/sync/inventory-client.js.map +1 -1
  106. package/dist/src/telemetry/posthog.d.ts +15 -0
  107. package/dist/src/telemetry/posthog.d.ts.map +1 -1
  108. package/dist/src/telemetry/posthog.js +6 -1
  109. package/dist/src/telemetry/posthog.js.map +1 -1
  110. package/dist/src/telemetry/wrap.bench.js +5 -0
  111. package/dist/src/telemetry/wrap.bench.js.map +1 -1
  112. package/dist/src/telemetry/wrap.correlation.test.d.ts +20 -0
  113. package/dist/src/telemetry/wrap.correlation.test.d.ts.map +1 -0
  114. package/dist/src/telemetry/wrap.correlation.test.js +174 -0
  115. package/dist/src/telemetry/wrap.correlation.test.js.map +1 -0
  116. package/dist/src/telemetry/wrap.d.ts.map +1 -1
  117. package/dist/src/telemetry/wrap.gate.test.js +5 -0
  118. package/dist/src/telemetry/wrap.gate.test.js.map +1 -1
  119. package/dist/src/telemetry/wrap.js +111 -52
  120. package/dist/src/telemetry/wrap.js.map +1 -1
  121. package/dist/src/telemetry/wrap.marker.test.js +5 -0
  122. package/dist/src/telemetry/wrap.marker.test.js.map +1 -1
  123. package/dist/src/telemetry/wrap.test.js +10 -0
  124. package/dist/src/telemetry/wrap.test.js.map +1 -1
  125. package/dist/src/types.d.ts +6 -0
  126. package/dist/src/types.d.ts.map +1 -1
  127. package/dist/tests/security/scanner-regression-guard.test.js +179 -1
  128. package/dist/tests/security/scanner-regression-guard.test.js.map +1 -1
  129. package/package.json +7 -2
@@ -19,6 +19,14 @@
19
19
  import type { ParseResult } from '../types.js';
20
20
  import type { TreeSitterLanguage, TreeSitterParser } from './manager.js';
21
21
  import { type QueryCtor } from './pythonExtractor.js';
22
+ /**
23
+ * Full-jitter backoff: a random point in `[0, base * 2^(attempt-1))` ms for the
24
+ * 1-based `attempt` that just failed. Jitter (not a fixed delay) is deliberate —
25
+ * the failure mode is many workers colliding during WASM instantiation, so a
26
+ * fixed delay would make them retry in lockstep and collide again (SMI-5567,
27
+ * plan-review finding #11). Exported for unit testing of the jitter bounds.
28
+ */
29
+ export declare function jitteredInitBackoffMs(attempt: number): number;
22
30
  /** Resolve the path to the Python WASM grammar distributed via tree-sitter-wasms. */
23
31
  export declare function resolvePythonWasmPath(): string;
24
32
  /** Options for PythonIncrementalParser. */
@@ -27,6 +35,17 @@ export interface PythonIncrementalParserOptions {
27
35
  maxTrees?: number;
28
36
  /** Override path to the Python WASM grammar (tests). */
29
37
  wasmPath?: string;
38
+ /**
39
+ * Bounded attempts to boot the WASM runtime + grammar under transient
40
+ * contention (default 3). SMI-5567.
41
+ */
42
+ maxInitAttempts?: number;
43
+ /**
44
+ * Backoff (ms) to wait before the next init attempt, given the 1-based
45
+ * attempt number that just failed. Defaults to {@link jitteredInitBackoffMs}.
46
+ * Tests inject `() => 0` for deterministic, delay-free runs. SMI-5567.
47
+ */
48
+ initBackoffMs?: (attempt: number) => number;
30
49
  }
31
50
  /** Resolver that returns the WASM dependencies. Exposed for tests. */
32
51
  export interface WebTreeSitterDeps {
@@ -47,6 +66,8 @@ export declare class PythonIncrementalParser {
47
66
  private readonly maxTrees;
48
67
  private readonly wasmPath;
49
68
  private readonly loader;
69
+ private readonly maxInitAttempts;
70
+ private readonly initBackoffMs;
50
71
  private readonly cache;
51
72
  private parser;
52
73
  private language;
@@ -89,5 +110,7 @@ export declare class PythonIncrementalParser {
89
110
  private touch;
90
111
  private evictLRU;
91
112
  private safeDelete;
113
+ /** Free a parser allocated on a failed init attempt (SMI-5567). */
114
+ private safeDeleteParser;
92
115
  }
93
116
  //# sourceMappingURL=pythonIncremental.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pythonIncremental.d.ts","sourceRoot":"","sources":["../../../../src/analysis/tree-sitter/pythonIncremental.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAI9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAkB,MAAM,cAAc,CAAA;AACxF,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAY/F,qFAAqF;AACrF,wBAAgB,qBAAqB,IAAI,MAAM,CAsC9C;AAWD,2CAA2C;AAC3C,MAAM,WAAW,8BAA8B;IAC7C,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,gBAAgB,CAAA;IAClC,QAAQ,EAAE;QAAE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;KAAE,CAAA;IAC7D,KAAK,EAAE,SAAS,CAAA;IAChB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B;AAED,oEAAoE;AACpE,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAuBlE;;;GAGG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,UAAU,CAAI;gBAGpB,OAAO,GAAE,8BAAmC,EAC5C,MAAM,GAAE,mBAAmC;IAO7C,yEAAyE;IACzE,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,gFAAgF;IAChF,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC;;;OAGG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAK3E;;;;;;OAMG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IA8DhE,gEAAgE;IAChE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOlC,0CAA0C;IAC1C,OAAO,IAAI,IAAI;IAgBf,kEAAkE;IAClE,IAAI,SAAS,IAAI,MAAM,CAEtB;YAMa,UAAU;YAWV,MAAM;IA2BpB,OAAO,CAAC,KAAK;IAYb,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,UAAU;CAOnB"}
1
+ {"version":3,"file":"pythonIncremental.d.ts","sourceRoot":"","sources":["../../../../src/analysis/tree-sitter/pythonIncremental.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAI9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAkB,MAAM,cAAc,CAAA;AACxF,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAA;AA6B/F;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED,qFAAqF;AACrF,wBAAgB,qBAAqB,IAAI,MAAM,CAsC9C;AAWD,2CAA2C;AAC3C,MAAM,WAAW,8BAA8B;IAC7C,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;CAC5C;AAED,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,gBAAgB,CAAA;IAClC,QAAQ,EAAE;QAAE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;KAAE,CAAA;IAC7D,KAAK,EAAE,SAAS,CAAA;IAChB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B;AAED,oEAAoE;AACpE,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAuBlE;;;GAGG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,UAAU,CAAI;gBAGpB,OAAO,GAAE,8BAAmC,EAC5C,MAAM,GAAE,mBAAmC;IAS7C,yEAAyE;IACzE,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,gFAAgF;IAChF,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC;;;OAGG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAK3E;;;;;;OAMG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IA8DhE,gEAAgE;IAChE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOlC,0CAA0C;IAC1C,OAAO,IAAI,IAAI;IAgBf,kEAAkE;IAClE,IAAI,SAAS,IAAI,MAAM,CAEtB;YAMa,UAAU;YAWV,MAAM;IA0DpB,OAAO,CAAC,KAAK;IAYb,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,UAAU;IAQlB,mEAAmE;IACnE,OAAO,CAAC,gBAAgB;CAOzB"}
@@ -226,4 +226,141 @@ describe('SMI-4316 · doInit catch emits one-shot warn', () => {
226
226
  expect(initWarns).toHaveLength(0);
227
227
  });
228
228
  });
229
+ /**
230
+ * A loader stub that counts every WASM resource it hands out. `initFailUntil`
231
+ * makes `init()` throw while `initCalls < initFailUntil` (so it first succeeds
232
+ * on the Nth call); `langLoadFailUntil` does the same for `Language.load()`
233
+ * (which throws only after a `Parser` has been constructed, exercising the
234
+ * partial-parser-cleanup path).
235
+ */
236
+ function makeCountingLoader(opts) {
237
+ const state = {
238
+ initCalls: 0,
239
+ parserConstructed: 0,
240
+ parserDeleted: 0,
241
+ langLoadCalls: 0,
242
+ languagesCreated: 0,
243
+ };
244
+ const loader = async () => {
245
+ const ParserStub = class {
246
+ constructor() {
247
+ state.parserConstructed += 1;
248
+ }
249
+ setLanguage() { }
250
+ parse() {
251
+ return {};
252
+ }
253
+ delete() {
254
+ state.parserDeleted += 1;
255
+ }
256
+ };
257
+ const deps = {
258
+ init: async () => {
259
+ state.initCalls += 1;
260
+ if (opts.initFailUntil && state.initCalls < opts.initFailUntil) {
261
+ throw new Error(`init boom #${state.initCalls}`);
262
+ }
263
+ },
264
+ Parser: ParserStub,
265
+ Language: {
266
+ load: async () => {
267
+ state.langLoadCalls += 1;
268
+ if (opts.langLoadFailUntil && state.langLoadCalls < opts.langLoadFailUntil) {
269
+ throw new Error(`language load boom #${state.langLoadCalls}`);
270
+ }
271
+ state.languagesCreated += 1;
272
+ return {};
273
+ },
274
+ },
275
+ // Constructable, args ignored — PythonQuerySet just `new Query(lang, src)`s.
276
+ Query: class {
277
+ constructor(..._args) {
278
+ void _args;
279
+ }
280
+ },
281
+ };
282
+ return deps;
283
+ };
284
+ return { loader, state };
285
+ }
286
+ describe('SMI-5567 · doInit bounded retry', () => {
287
+ beforeEach(() => {
288
+ loggerSpies.warn.mockReset();
289
+ resetRateLimiter();
290
+ existsSyncMock.mockReturnValue(true);
291
+ });
292
+ it('recovers when init() fails N-1 times then succeeds within the budget', async () => {
293
+ const { PythonIncrementalParser } = await getSUT();
294
+ // init fails on calls 1 and 2, succeeds on call 3 (== budget of 3).
295
+ const { loader, state } = makeCountingLoader({ initFailUntil: 3 });
296
+ const parser = new PythonIncrementalParser({ wasmPath: '/fake/python.wasm', maxInitAttempts: 3, initBackoffMs: () => 0 }, loader);
297
+ await parser.ensureReady();
298
+ expect(state.initCalls).toBe(3);
299
+ expect(parser.isReady).toBe(true);
300
+ expect(parser.hasFailedInit).toBe(false);
301
+ // No warn on a successful (recovered) init.
302
+ expect(loggerSpies.warn).not.toHaveBeenCalled();
303
+ });
304
+ it('applies the injected backoff once per inter-attempt gap (jitter wiring)', async () => {
305
+ const { PythonIncrementalParser } = await getSUT();
306
+ const { loader } = makeCountingLoader({ initFailUntil: 3 });
307
+ const backoff = vi.fn((_attempt) => 0);
308
+ const parser = new PythonIncrementalParser({ wasmPath: '/fake/python.wasm', maxInitAttempts: 3, initBackoffMs: backoff }, loader);
309
+ await parser.ensureReady();
310
+ // Backoff fires between attempts only: after attempt 1 and attempt 2, never
311
+ // after the final (3rd) attempt. It is called with the just-failed 1-based
312
+ // attempt number, so a fixed delay is impossible by construction.
313
+ expect(backoff.mock.calls.map((c) => c[0])).toEqual([1, 2]);
314
+ expect(parser.isReady).toBe(true);
315
+ });
316
+ it('does not leak or double-instantiate across a failed-then-retried init', async () => {
317
+ const { PythonIncrementalParser } = await getSUT();
318
+ // Language.load fails on calls 1 and 2 (AFTER a Parser was constructed each
319
+ // time), succeeds on call 3. This is the partial-parser-cleanup path.
320
+ const { loader, state } = makeCountingLoader({ langLoadFailUntil: 3 });
321
+ const parser = new PythonIncrementalParser({ wasmPath: '/fake/python.wasm', maxInitAttempts: 3, initBackoffMs: () => 0 }, loader);
322
+ await parser.ensureReady();
323
+ expect(parser.isReady).toBe(true);
324
+ expect(parser.hasFailedInit).toBe(false);
325
+ // One Parser constructed per attempt (3), but the two from the failed
326
+ // attempts were freed — exactly one survives.
327
+ expect(state.parserConstructed).toBe(3);
328
+ expect(state.parserDeleted).toBe(2);
329
+ expect(state.parserConstructed - state.parserDeleted).toBe(1);
330
+ // Exactly one Language survived — no double-instantiation of the grammar.
331
+ expect(state.languagesCreated).toBe(1);
332
+ });
333
+ it('fails gracefully and diagnosably when the retry budget is exhausted', async () => {
334
+ const { PythonIncrementalParser } = await getSUT();
335
+ // Never succeeds within 3 attempts.
336
+ const { loader, state } = makeCountingLoader({ initFailUntil: 99 });
337
+ const parser = new PythonIncrementalParser({ wasmPath: '/fake/python.wasm', maxInitAttempts: 3, initBackoffMs: () => 0 }, loader);
338
+ await parser.ensureReady();
339
+ expect(state.initCalls).toBe(3); // bounded — did not loop unbounded
340
+ expect(parser.isReady).toBe(false);
341
+ expect(parser.hasFailedInit).toBe(true);
342
+ // A single diagnostic warn carrying the actual last error + attempt count,
343
+ // so a recurrence doesn't require re-deriving the SMI-5567 analysis.
344
+ expect(loggerSpies.warn).toHaveBeenCalledTimes(1);
345
+ const [message, payload] = loggerSpies.warn.mock.calls[0];
346
+ expect(message).toContain('init failed');
347
+ const p = payload;
348
+ expect(p.attempts).toBe(3);
349
+ expect(p.error).toBe('init boom #3'); // the LAST error, not a generic flag
350
+ expect(typeof p.stack).toBe('string');
351
+ });
352
+ it('jitteredInitBackoffMs is bounded per attempt and NOT a fixed delay', async () => {
353
+ const { jitteredInitBackoffMs } = await getSUT();
354
+ const attempt1 = Array.from({ length: 200 }, () => jitteredInitBackoffMs(1));
355
+ const attempt2 = Array.from({ length: 200 }, () => jitteredInitBackoffMs(2));
356
+ // Full-jitter bounds: [0, base*2^(n-1)). base = 25 → attempt1 < 25, attempt2 < 50.
357
+ expect(Math.min(...attempt1)).toBeGreaterThanOrEqual(0);
358
+ expect(Math.max(...attempt1)).toBeLessThan(25);
359
+ expect(Math.max(...attempt2)).toBeLessThan(50);
360
+ // Later attempts back off further (wider ceiling).
361
+ expect(Math.max(...attempt2)).toBeGreaterThan(Math.max(...attempt1) - 1);
362
+ // Jitter: the samples must spread, not collapse to a single fixed value.
363
+ expect(new Set(attempt1.map((v) => Math.round(v))).size).toBeGreaterThan(1);
364
+ });
365
+ });
229
366
  //# sourceMappingURL=pythonIncremental.hardening.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pythonIncremental.hardening.test.js","sourceRoot":"","sources":["../../../../src/analysis/tree-sitter/pythonIncremental.hardening.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pythonIncremental.hardening.test.js","sourceRoot":"","sources":["../../../../src/analysis/tree-sitter/pythonIncremental.hardening.test.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,32 @@ function firstLine(s) {
30
30
  }
31
31
  /** Maximum number of cached trees (per SMI-1309 / SMI-4293 spec). */
32
32
  const DEFAULT_MAX_TREES = 100;
33
+ /**
34
+ * SMI-5567: bounded attempts to boot the WASM runtime + grammar. Under
35
+ * full-suite parallel vitest load (or real concurrent usage), many workers
36
+ * boot their own web-tree-sitter runtime at once and instantiation can fail
37
+ * transiently; a small bounded retry recovers instead of permanently falling
38
+ * back to regex. Retrying `Parser.init()` is safe: web-tree-sitter guards the
39
+ * emscripten module behind a module-level singleton (`initializeBinding`:
40
+ * `if (!Module) Module = await createModule()`), and a failed instantiation
41
+ * leaves that singleton null — so a retry re-instantiates cleanly with no
42
+ * double-init or leaked partial module. Verified against web-tree-sitter@0.25.10
43
+ * source + an empirical failed-then-retried probe.
44
+ */
45
+ const DEFAULT_MAX_INIT_ATTEMPTS = 3;
46
+ /** Base backoff (ms) for the jittered init retry. */
47
+ const INIT_BACKOFF_BASE_MS = 25;
48
+ /**
49
+ * Full-jitter backoff: a random point in `[0, base * 2^(attempt-1))` ms for the
50
+ * 1-based `attempt` that just failed. Jitter (not a fixed delay) is deliberate —
51
+ * the failure mode is many workers colliding during WASM instantiation, so a
52
+ * fixed delay would make them retry in lockstep and collide again (SMI-5567,
53
+ * plan-review finding #11). Exported for unit testing of the jitter bounds.
54
+ */
55
+ export function jitteredInitBackoffMs(attempt) {
56
+ const ceiling = INIT_BACKOFF_BASE_MS * 2 ** Math.max(0, attempt - 1);
57
+ return Math.random() * ceiling;
58
+ }
33
59
  /** Resolve the path to the Python WASM grammar distributed via tree-sitter-wasms. */
34
60
  export function resolvePythonWasmPath() {
35
61
  // Caller is inside packages/core/dist or packages/core/src; tree-sitter-wasms
@@ -74,6 +100,8 @@ export class PythonIncrementalParser {
74
100
  maxTrees;
75
101
  wasmPath;
76
102
  loader;
103
+ maxInitAttempts;
104
+ initBackoffMs;
77
105
  cache = new Map();
78
106
  parser = null;
79
107
  language = null;
@@ -85,6 +113,8 @@ export class PythonIncrementalParser {
85
113
  this.maxTrees = options.maxTrees ?? DEFAULT_MAX_TREES;
86
114
  this.wasmPath = options.wasmPath ?? resolvePythonWasmPath();
87
115
  this.loader = loader;
116
+ this.maxInitAttempts = Math.max(1, options.maxInitAttempts ?? DEFAULT_MAX_INIT_ATTEMPTS);
117
+ this.initBackoffMs = options.initBackoffMs ?? jitteredInitBackoffMs;
88
118
  }
89
119
  /** True when the WASM runtime and Python grammar loaded successfully. */
90
120
  get isReady() {
@@ -222,15 +252,46 @@ export class PythonIncrementalParser {
222
252
  }
223
253
  }
224
254
  async doInit() {
255
+ // SMI-5567: bounded, jittered retry around the WASM boot + grammar load.
256
+ // Only the fallible boot sequence is retried; `this.loader()` (the module
257
+ // import) is deterministic — a failed import won't recover — so it stays
258
+ // outside the loop and fails fast without incurring backoff delays.
259
+ let lastError = null;
260
+ let attemptsMade = 0;
225
261
  try {
226
262
  const deps = await this.loader();
227
- await deps.init();
228
- const parser = new deps.Parser();
229
- const language = await deps.Language.load(this.wasmPath);
230
- parser.setLanguage(language);
231
- this.parser = parser;
232
- this.language = language;
233
- this.queries = new PythonQuerySet(deps.Query, language);
263
+ for (let attempt = 1; attempt <= this.maxInitAttempts; attempt += 1) {
264
+ attemptsMade = attempt;
265
+ let parser = null;
266
+ try {
267
+ await deps.init();
268
+ parser = new deps.Parser();
269
+ const language = await deps.Language.load(this.wasmPath);
270
+ parser.setLanguage(language);
271
+ // Commit only after every step succeeds, so a mid-sequence failure
272
+ // never leaves a half-initialised parser visible via `isReady`.
273
+ this.parser = parser;
274
+ this.language = language;
275
+ this.queries = new PythonQuerySet(deps.Query, language);
276
+ return;
277
+ }
278
+ catch (error) {
279
+ lastError = error;
280
+ // Free the WASM parser allocated on this failed attempt so repeated
281
+ // retries can't accumulate orphaned parser handles in the WASM heap
282
+ // (a retry re-instantiates the runtime cleanly — see the module-level
283
+ // note on DEFAULT_MAX_INIT_ATTEMPTS).
284
+ if (parser)
285
+ this.safeDeleteParser(parser);
286
+ if (attempt < this.maxInitAttempts) {
287
+ const delayMs = this.initBackoffMs(attempt);
288
+ if (delayMs > 0)
289
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
290
+ }
291
+ }
292
+ }
293
+ // Every attempt failed — surface the real last error to the catch below.
294
+ throw lastError instanceof Error ? lastError : new Error(String(lastError));
234
295
  }
235
296
  catch (error) {
236
297
  this.initFailed = true;
@@ -238,11 +299,14 @@ export class PythonIncrementalParser {
238
299
  this.language = null;
239
300
  this.queries = null;
240
301
  // One-shot warn per parser instance: fires at most once in `doInit`.
241
- // Log `{ wasmPath, error, stack }` for operator diagnostics; the WASM
242
- // path is not secret, the stack points inside web-tree-sitter /
243
- // resolvePythonWasmPath, not user source.
302
+ // Log `{ wasmPath, attempts, error, stack }` for operator diagnostics
303
+ // surfacing the actual last error's message (not just flipping
304
+ // `initFailed`) so a recurrence is diagnosable without re-deriving the
305
+ // SMI-5567 analysis. The WASM path is not secret; the stack points inside
306
+ // web-tree-sitter / resolvePythonWasmPath, not user source.
244
307
  logger.warn('Python tree-sitter init failed; regex fallback in use', {
245
308
  wasmPath: this.wasmPath,
309
+ attempts: attemptsMade,
246
310
  error: error instanceof Error ? error.message : String(error),
247
311
  stack: error instanceof Error ? error.stack : undefined,
248
312
  });
@@ -283,5 +347,14 @@ export class PythonIncrementalParser {
283
347
  // Already-deleted trees throw; swallow for robustness.
284
348
  }
285
349
  }
350
+ /** Free a parser allocated on a failed init attempt (SMI-5567). */
351
+ safeDeleteParser(parser) {
352
+ try {
353
+ parser.delete();
354
+ }
355
+ catch {
356
+ // A parser that failed mid-boot may not be fully constructed; ignore.
357
+ }
358
+ }
286
359
  }
287
360
  //# sourceMappingURL=pythonIncremental.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pythonIncremental.js","sourceRoot":"","sources":["../../../../src/analysis/tree-sitter/pythonIncremental.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pythonIncremental.js","sourceRoot":"","sources":["../../../../src/analysis/tree-sitter/pythonIncremental.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAEnC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAiB,MAAM,mBAAmB,CAAA;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAEvD,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAkB,MAAM,sBAAsB,CAAA;AAE/F,MAAM,MAAM,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAA;AAEtD,sGAAsG;AACtG,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAA;AACjD,CAAC;AAED,qEAAqE;AACrE,MAAM,iBAAiB,GAAG,GAAG,CAAA;AAE7B;;;;;;;;;;;GAWG;AACH,MAAM,yBAAyB,GAAG,CAAC,CAAA;AAEnC,qDAAqD;AACrD,MAAM,oBAAoB,GAAG,EAAE,CAAA;AAE/B;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,MAAM,OAAO,GAAG,oBAAoB,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAA;IACpE,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAA;AAChC,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,qBAAqB;IACnC,8EAA8E;IAC9E,4DAA4D;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACzD,MAAM,UAAU,GAAG;QACjB,kCAAkC;QAClC,IAAI,CAAC,OAAO,CACV,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,cAAc,EACd,mBAAmB,EACnB,KAAK,EACL,yBAAyB,CAC1B;QACD,+DAA+D;QAC/D,IAAI,CAAC,OAAO,CACV,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,cAAc,EACd,mBAAmB,EACnB,KAAK,EACL,yBAAyB,CAC1B;KACF,CAAA;IACD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAA;IAChD,CAAC;IACD,sEAAsE;IACtE,sEAAsE;IACtE,uCAAuC;IACvC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAA;AACtB,CAAC;AAyCD,MAAM,aAAa,GAAwB,KAAK,IAAI,EAAE;IACpD,kEAAkE;IAClE,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAI3C,CAAA;IACD,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,sDAAsD;QACtD,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,SAAS,GAAI,GAAG,CAAC,MAAoD,CAAC,IAAI,CAAA;YAChF,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;gBACpC,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAClC,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IACjB,QAAQ,CAAQ;IAChB,QAAQ,CAAQ;IAChB,MAAM,CAAqB;IAC3B,eAAe,CAAQ;IACvB,aAAa,CAA6B;IAC1C,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC/C,MAAM,GAA4B,IAAI,CAAA;IACtC,QAAQ,GAA8B,IAAI,CAAA;IAC1C,OAAO,GAA0B,IAAI,CAAA;IACrC,WAAW,GAAyB,IAAI,CAAA;IACxC,UAAU,GAAG,KAAK,CAAA;IAClB,UAAU,GAAG,CAAC,CAAA;IAEtB,YACE,UAA0C,EAAE,EAC5C,SAA8B,aAAa;QAE3C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAA;QACrD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,qBAAqB,EAAE,CAAA;QAC3D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,eAAe,IAAI,yBAAyB,CAAC,CAAA;QACxF,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,qBAAqB,CAAA;IACrE,CAAC;IAED,yEAAyE;IACzE,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAA;IAChF,CAAC;IAED,gFAAgF;IAChF,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;IACzB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,OAAe,EAAE,QAAgB;QAC3C,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC1C,CAAC;IAED;;;;;;OAMG;IACH,SAAS,CAAC,OAAe,EAAE,QAAgB;QACzC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAA0B,CAAA;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAyB,CAAA;QAE9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACvC,IAAI,IAAoB,CAAA;YACxB,IAAI,YAAY,GAAuB,IAAI,CAAA;YAE3C,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;gBACrD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,gEAAgE;oBAChE,kCAAkC;oBAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;oBAC5B,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;oBAClB,YAAY,GAAG,MAAM,CAAC,UAAU,CAAA;gBAClC,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,GAAa,aAAa,CAClC,MAAM,CAAC,OAAO,EACd,OAAO,EACP,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,OAAO,CACb,CAAA;oBACD,yDAAyD;oBACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAA8C,CAAA;oBACtE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACnB,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;oBACzC,uDAAuD;oBACvD,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI;wBAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;oBACtD,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;gBACrC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;YACrC,CAAC;YAED,IAAI,YAAY;gBAAE,OAAO,YAAY,CAAA;YACrC,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;YAChE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACtC,IAAI,KAAK;gBAAE,KAAK,CAAC,UAAU,GAAG,MAAM,CAAA;YACpC,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oEAAoE;YACpE,qEAAqE;YACrE,oEAAoE;YACpE,mEAAmE;YACnE,oEAAoE;YACpE,IAAI,WAAW,CAAC,gBAAgB,QAAQ,EAAE,CAAC,EAAE,CAAC;gBAC5C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACtE,MAAM,CAAC,IAAI,CAAC,uDAAuD,EAAE;oBACnE,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC;iBAC1B,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;YACzB,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,UAAU,CAAC,QAAgB;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC7B,CAAC;IAED,0CAA0C;IAC1C,OAAO;QACL,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACpE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAClB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;IACzB,CAAC;IAED,kEAAkE;IAClE,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;IACxB,CAAC;IAED,mEAAmE;IACnE,UAAU;IACV,mEAAmE;IAE3D,KAAK,CAAC,UAAU;QACtB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU;YAAE,OAAM;QAC3C,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,WAAW,CAAA;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QAChC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAA;QACxB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACzB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,MAAM;QAClB,yEAAyE;QACzE,0EAA0E;QAC1E,yEAAyE;QACzE,oEAAoE;QACpE,IAAI,SAAS,GAAY,IAAI,CAAA;QAC7B,IAAI,YAAY,GAAG,CAAC,CAAA;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;YAChC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;gBACpE,YAAY,GAAG,OAAO,CAAA;gBACtB,IAAI,MAAM,GAA4B,IAAI,CAAA;gBAC1C,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;oBACjB,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAA;oBAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;oBACxD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;oBAC5B,mEAAmE;oBACnE,gEAAgE;oBAChE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;oBACpB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;oBACxB,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;oBACvD,OAAM;gBACR,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,SAAS,GAAG,KAAK,CAAA;oBACjB,oEAAoE;oBACpE,oEAAoE;oBACpE,sEAAsE;oBACtE,sCAAsC;oBACtC,IAAI,MAAM;wBAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA;oBACzC,IAAI,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;wBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;wBAC3C,IAAI,OAAO,GAAG,CAAC;4BAAE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;oBAC/E,CAAC;gBACH,CAAC;YACH,CAAC;YACD,yEAAyE;YACzE,MAAM,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;YACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;YACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;YACnB,qEAAqE;YACrE,wEAAwE;YACxE,+DAA+D;YAC/D,uEAAuE;YACvE,0EAA0E;YAC1E,4DAA4D;YAC5D,MAAM,CAAC,IAAI,CAAC,uDAAuD,EAAE;gBACnE,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aACxD,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAgB,EAAE,IAAoB,EAAE,OAAe;QACnE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClE,IAAI,CAAC,QAAQ,EAAE,CAAA;QACjB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;YACvB,IAAI;YACJ,OAAO;YACP,QAAQ,EAAE,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI;SACjB,CAAC,CAAA;IACJ,CAAC;IAEO,KAAK,CAAC,QAAgB,EAAE,KAAkB;QAChD,KAAK,CAAC,QAAQ,GAAG,EAAE,IAAI,CAAC,UAAU,CAAA;QAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IACjC,CAAC;IAEO,QAAQ;QACd,IAAI,SAAS,GAAkB,IAAI,CAAA;QACnC,IAAI,MAAM,GAAG,QAAQ,CAAA;QACrB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,QAAQ,GAAG,MAAM,EAAE,CAAC;gBAC5B,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAA;gBACvB,SAAS,GAAG,GAAG,CAAA;YACjB,CAAC;QACH,CAAC;QACD,IAAI,SAAS;YAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;IAC3C,CAAC;IAEO,UAAU,CAAC,IAAoB;QACrC,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,EAAE,CAAA;QACf,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;QACzD,CAAC;IACH,CAAC;IAED,mEAAmE;IAC3D,gBAAgB,CAAC,MAAwB;QAC/C,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,EAAE,CAAA;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,sEAAsE;QACxE,CAAC;IACH,CAAC;CACF"}
@@ -151,7 +151,12 @@ describe('Python query extraction vs regex baseline (finding H3)', () => {
151
151
  queryParser.dispose();
152
152
  });
153
153
  it('boots the WASM parser for the regression guard', () => {
154
- expect(queryParser.isReady).toBe(true);
154
+ // SMI-5567: report *why* a boot failure happened (hasFailedInit), not just
155
+ // that isReady is false — a future flake under parallel WASM-init contention
156
+ // should be diagnosable from the assertion message alone.
157
+ expect(queryParser.isReady, `WASM parser did not boot for the regression guard: isReady=${queryParser.isReady}, ` +
158
+ `hasFailedInit=${queryParser.hasFailedInit} (true ⇒ retry budget exhausted; ` +
159
+ `see PythonIncrementalParser.doInit + the logger.warn payload for the last error)`).toBe(true);
155
160
  });
156
161
  for (const fixture of FIXTURES) {
157
162
  it(`query extraction ⊇ regex baseline for fixture "${fixture.name}"`, () => {
@@ -1 +1 @@
1
- {"version":3,"file":"queryExtractionMatchesOrExceedsRegex.test.js","sourceRoot":"","sources":["../../../../src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queryExtractionMatchesOrExceedsRegex.test.js","sourceRoot":"","sources":["../../../../src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Continuous-audit email digest state (SMI-5541 Wave 2C Stage 2).
3
+ *
4
+ * Persists two fields under the `audit` namespace of `~/.skillsmith/config.json`
5
+ * to make the background auto-notify (MCP-startup) throttled and non-spammy:
6
+ *
7
+ * - `lastNotifyAt` — an ISO timestamp gating how often the background scan +
8
+ * push runs (reuses the 24h `shouldAutoPush` throttle from `device-identity`).
9
+ * - `lastDigestHash` — the sha256 of the findings we last EMAILED, so an
10
+ * identical security picture is not re-emailed the next day (client-side
11
+ * dedup, independent of the server's own consent/nothing-to-report gates).
12
+ *
13
+ * The SERVER remains the source of truth for consent (`audit_email_enabled`);
14
+ * these fields are purely local rate-limiting + dedup and never gate whether an
15
+ * explicit `sklx audit security --email` push is attempted.
16
+ *
17
+ * @module @skillsmith/core/config/audit-notify-state
18
+ */
19
+ /** The persisted background auto-notify state. */
20
+ export interface AuditNotifyState {
21
+ /** ISO timestamp of the last background digest attempt, or `undefined`. */
22
+ lastNotifyAt?: string;
23
+ /** sha256 of the last-emailed findings, or `undefined` if never emailed. */
24
+ lastDigestHash?: string;
25
+ }
26
+ /**
27
+ * Return the persisted auto-notify state (both fields may be `undefined`).
28
+ *
29
+ * Pure read — no side effects.
30
+ */
31
+ export declare function getAuditNotifyState(): AuditNotifyState;
32
+ /**
33
+ * Advance the auto-notify throttle timestamp, and optionally record the hash of
34
+ * the just-emailed findings.
35
+ *
36
+ * `lastNotifyAt` is ALWAYS updated (so the background run backs off for the
37
+ * throttle window regardless of outcome). `lastDigestHash` is updated only when
38
+ * `hash` is supplied — a caller records it after a successful send, and omits it
39
+ * on a not-consented / not-verified outcome so a later opt-in still re-pushes
40
+ * the same findings. Any existing `deviceId`/`lastPushAt` etc. are preserved.
41
+ *
42
+ * @param timestampIso - ISO 8601 timestamp (e.g. `new Date().toISOString()`).
43
+ * @param hash - sha256 of the emailed findings; omit to leave the stored hash.
44
+ */
45
+ export declare function recordAuditNotify(timestampIso: string, hash?: string): void;
46
+ //# sourceMappingURL=audit-notify-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-notify-state.d.ts","sourceRoot":"","sources":["../../../src/config/audit-notify-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAMtD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAS3E"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Continuous-audit email digest state (SMI-5541 Wave 2C Stage 2).
3
+ *
4
+ * Persists two fields under the `audit` namespace of `~/.skillsmith/config.json`
5
+ * to make the background auto-notify (MCP-startup) throttled and non-spammy:
6
+ *
7
+ * - `lastNotifyAt` — an ISO timestamp gating how often the background scan +
8
+ * push runs (reuses the 24h `shouldAutoPush` throttle from `device-identity`).
9
+ * - `lastDigestHash` — the sha256 of the findings we last EMAILED, so an
10
+ * identical security picture is not re-emailed the next day (client-side
11
+ * dedup, independent of the server's own consent/nothing-to-report gates).
12
+ *
13
+ * The SERVER remains the source of truth for consent (`audit_email_enabled`);
14
+ * these fields are purely local rate-limiting + dedup and never gate whether an
15
+ * explicit `sklx audit security --email` push is attempted.
16
+ *
17
+ * @module @skillsmith/core/config/audit-notify-state
18
+ */
19
+ import { loadConfig, saveConfig } from './index.js';
20
+ /**
21
+ * Return the persisted auto-notify state (both fields may be `undefined`).
22
+ *
23
+ * Pure read — no side effects.
24
+ */
25
+ export function getAuditNotifyState() {
26
+ const audit = loadConfig().audit;
27
+ return {
28
+ lastNotifyAt: audit?.lastNotifyAt,
29
+ lastDigestHash: audit?.lastDigestHash,
30
+ };
31
+ }
32
+ /**
33
+ * Advance the auto-notify throttle timestamp, and optionally record the hash of
34
+ * the just-emailed findings.
35
+ *
36
+ * `lastNotifyAt` is ALWAYS updated (so the background run backs off for the
37
+ * throttle window regardless of outcome). `lastDigestHash` is updated only when
38
+ * `hash` is supplied — a caller records it after a successful send, and omits it
39
+ * on a not-consented / not-verified outcome so a later opt-in still re-pushes
40
+ * the same findings. Any existing `deviceId`/`lastPushAt` etc. are preserved.
41
+ *
42
+ * @param timestampIso - ISO 8601 timestamp (e.g. `new Date().toISOString()`).
43
+ * @param hash - sha256 of the emailed findings; omit to leave the stored hash.
44
+ */
45
+ export function recordAuditNotify(timestampIso, hash) {
46
+ const existing = loadConfig().audit;
47
+ saveConfig({
48
+ audit: {
49
+ ...existing,
50
+ lastNotifyAt: timestampIso,
51
+ ...(hash !== undefined ? { lastDigestHash: hash } : {}),
52
+ },
53
+ });
54
+ }
55
+ //# sourceMappingURL=audit-notify-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-notify-state.js","sourceRoot":"","sources":["../../../src/config/audit-notify-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAUnD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,KAAK,CAAA;IAChC,OAAO;QACL,YAAY,EAAE,KAAK,EAAE,YAAY;QACjC,cAAc,EAAE,KAAK,EAAE,cAAc;KACtC,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,YAAoB,EAAE,IAAa;IACnE,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC,KAAK,CAAA;IACnC,UAAU,CAAC;QACT,KAAK,EAAE;YACL,GAAG,QAAQ;YACX,YAAY,EAAE,YAAY;YAC1B,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * SMI-5541: Continuous-audit email digest state tests.
3
+ *
4
+ * Uses the same HOME-mutation harness as `device-identity.test.ts` so each test
5
+ * begins with a blank `~/.skillsmith/config.json` and exercises the real
6
+ * `loadConfig`/`saveConfig` round-trip (not a mock).
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=audit-notify-state.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-notify-state.test.d.ts","sourceRoot":"","sources":["../../../src/config/audit-notify-state.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}