@mmnto/cli 1.5.9 → 1.5.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.
Files changed (97) hide show
  1. package/dist/adapters/github-cli-pr.d.ts +7 -0
  2. package/dist/adapters/github-cli-pr.d.ts.map +1 -1
  3. package/dist/adapters/github-cli-pr.js +31 -1
  4. package/dist/adapters/github-cli-pr.js.map +1 -1
  5. package/dist/adapters/pr-adapter.d.ts +7 -0
  6. package/dist/adapters/pr-adapter.d.ts.map +1 -1
  7. package/dist/commands/check.d.ts +6 -0
  8. package/dist/commands/check.d.ts.map +1 -0
  9. package/dist/commands/check.js +34 -0
  10. package/dist/commands/check.js.map +1 -0
  11. package/dist/commands/check.test.d.ts +2 -0
  12. package/dist/commands/check.test.d.ts.map +1 -0
  13. package/dist/commands/check.test.js +60 -0
  14. package/dist/commands/check.test.js.map +1 -0
  15. package/dist/commands/docs.d.ts +8 -1
  16. package/dist/commands/docs.d.ts.map +1 -1
  17. package/dist/commands/docs.js +13 -10
  18. package/dist/commands/docs.js.map +1 -1
  19. package/dist/commands/docs.test.js +22 -2
  20. package/dist/commands/docs.test.js.map +1 -1
  21. package/dist/commands/extract.d.ts +1 -0
  22. package/dist/commands/extract.d.ts.map +1 -1
  23. package/dist/commands/extract.js +1 -1
  24. package/dist/commands/extract.js.map +1 -1
  25. package/dist/commands/ledger-analyzer.d.ts.map +1 -1
  26. package/dist/commands/ledger-analyzer.js +2 -0
  27. package/dist/commands/ledger-analyzer.js.map +1 -1
  28. package/dist/commands/review-learn.d.ts.map +1 -1
  29. package/dist/commands/review-learn.js +38 -1
  30. package/dist/commands/review-learn.js.map +1 -1
  31. package/dist/commands/shield-incremental.test.d.ts +2 -0
  32. package/dist/commands/shield-incremental.test.d.ts.map +1 -0
  33. package/dist/commands/shield-incremental.test.js +164 -0
  34. package/dist/commands/shield-incremental.test.js.map +1 -0
  35. package/dist/commands/shield.d.ts +9 -0
  36. package/dist/commands/shield.d.ts.map +1 -1
  37. package/dist/commands/shield.js +145 -13
  38. package/dist/commands/shield.js.map +1 -1
  39. package/dist/commands/status.d.ts +2 -0
  40. package/dist/commands/status.d.ts.map +1 -0
  41. package/dist/commands/status.js +88 -0
  42. package/dist/commands/status.js.map +1 -0
  43. package/dist/commands/status.test.d.ts +2 -0
  44. package/dist/commands/status.test.d.ts.map +1 -0
  45. package/dist/commands/status.test.js +131 -0
  46. package/dist/commands/status.test.js.map +1 -0
  47. package/dist/commands/triage-pr.d.ts +4 -1
  48. package/dist/commands/triage-pr.d.ts.map +1 -1
  49. package/dist/commands/triage-pr.js +163 -3
  50. package/dist/commands/triage-pr.js.map +1 -1
  51. package/dist/exemptions/__tests__/exemption-engine.test.d.ts +2 -0
  52. package/dist/exemptions/__tests__/exemption-engine.test.d.ts.map +1 -0
  53. package/dist/exemptions/__tests__/exemption-engine.test.js +317 -0
  54. package/dist/exemptions/__tests__/exemption-engine.test.js.map +1 -0
  55. package/dist/exemptions/exemption-engine.d.ts +27 -0
  56. package/dist/exemptions/exemption-engine.d.ts.map +1 -0
  57. package/dist/exemptions/exemption-engine.js +193 -0
  58. package/dist/exemptions/exemption-engine.js.map +1 -0
  59. package/dist/exemptions/exemption-schema.d.ts +127 -0
  60. package/dist/exemptions/exemption-schema.d.ts.map +1 -0
  61. package/dist/exemptions/exemption-schema.js +32 -0
  62. package/dist/exemptions/exemption-schema.js.map +1 -0
  63. package/dist/exemptions/exemption-store.d.ts +22 -0
  64. package/dist/exemptions/exemption-store.d.ts.map +1 -0
  65. package/dist/exemptions/exemption-store.js +80 -0
  66. package/dist/exemptions/exemption-store.js.map +1 -0
  67. package/dist/git.d.ts +25 -0
  68. package/dist/git.d.ts.map +1 -1
  69. package/dist/git.js +60 -0
  70. package/dist/git.js.map +1 -1
  71. package/dist/git.test.js +98 -2
  72. package/dist/git.test.js.map +1 -1
  73. package/dist/index.js +37 -4
  74. package/dist/index.js.map +1 -1
  75. package/dist/parsers/bot-review-parser.d.ts +8 -0
  76. package/dist/parsers/bot-review-parser.d.ts.map +1 -1
  77. package/dist/parsers/bot-review-parser.js +48 -11
  78. package/dist/parsers/bot-review-parser.js.map +1 -1
  79. package/dist/parsers/bot-review-parser.test.js +108 -1
  80. package/dist/parsers/bot-review-parser.test.js.map +1 -1
  81. package/dist/services/__tests__/deferred-issuer.test.d.ts +2 -0
  82. package/dist/services/__tests__/deferred-issuer.test.d.ts.map +1 -0
  83. package/dist/services/__tests__/deferred-issuer.test.js +114 -0
  84. package/dist/services/__tests__/deferred-issuer.test.js.map +1 -0
  85. package/dist/services/deferred-issuer.d.ts +17 -0
  86. package/dist/services/deferred-issuer.d.ts.map +1 -0
  87. package/dist/services/deferred-issuer.js +64 -0
  88. package/dist/services/deferred-issuer.js.map +1 -0
  89. package/dist/utils/__tests__/milestone-inference.test.d.ts +2 -0
  90. package/dist/utils/__tests__/milestone-inference.test.d.ts.map +1 -0
  91. package/dist/utils/__tests__/milestone-inference.test.js +35 -0
  92. package/dist/utils/__tests__/milestone-inference.test.js.map +1 -0
  93. package/dist/utils/milestone-inference.d.ts +6 -0
  94. package/dist/utils/milestone-inference.d.ts.map +1 -0
  95. package/dist/utils/milestone-inference.js +15 -0
  96. package/dist/utils/milestone-inference.js.map +1 -0
  97. package/package.json +2 -2
@@ -30,7 +30,7 @@ function groupIntoThreads(comments) {
30
30
  threads.push({
31
31
  path: root.path,
32
32
  diffHunk: root.diffHunk,
33
- comments: threadComments.map((c) => ({ author: c.author, body: c.body })),
33
+ comments: threadComments.map((c) => ({ id: c.id, author: c.author, body: c.body })),
34
34
  });
35
35
  }
36
36
  return threads;
@@ -174,8 +174,7 @@ export function formatTriageOutput(prNumber, findings, totalComments, colorize)
174
174
  }
175
175
  return lines.join('\n');
176
176
  }
177
- // ─── Main command ────────────────────────────────────
178
- export async function triagePrCommand(prNumber) {
177
+ export async function triagePrCommand(prNumber, options = {}) {
179
178
  const pc = await import('picocolors');
180
179
  const { TotemConfigError } = await import('@mmnto/totem');
181
180
  const { GitHubCliPrAdapter } = await import('../adapters/github-cli-pr.js');
@@ -238,5 +237,166 @@ export async function triagePrCommand(prNumber) {
238
237
  bold: pc.default.bold,
239
238
  });
240
239
  console.log(output); // totem-ignore — stdout for piping to skill prompt
240
+ // ─── Interactive mode ─────────────────────────────────
241
+ if (!options.interactive)
242
+ return;
243
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
244
+ throw new TotemConfigError('Interactive triage requires a TTY.', 'Run in an interactive terminal, or omit --interactive for non-interactive output.', 'CONFIG_INVALID');
245
+ }
246
+ const { intro, outro, select, multiselect, text, confirm, isCancel, cancel, log: clackLog, } = await import('@clack/prompts');
247
+ intro(`PR #${num} Interactive Triage (${categorized.length} findings)`);
248
+ // Build selection options from categorized findings
249
+ const optionsList = categorized.map((f, i) => {
250
+ const toolAbbrev = f.tool === 'coderabbit' ? 'CR' : f.tool === 'gca' ? 'GCA' : '??';
251
+ const location = f.line != null ? `${f.file}:${f.line}` : f.file;
252
+ const summary = f.body
253
+ .split('\n')
254
+ .find((l) => l.trim())
255
+ ?.slice(0, 60) ?? f.body.slice(0, 60);
256
+ return {
257
+ value: i,
258
+ label: `[${toolAbbrev}/${f.severity}] ${location}`,
259
+ hint: summary.replace(/\n/g, ' '),
260
+ };
261
+ });
262
+ if (optionsList.length === 0) {
263
+ outro('No findings to triage.');
264
+ return;
265
+ }
266
+ const selected = await multiselect({
267
+ message: 'Select findings to act on:',
268
+ options: optionsList,
269
+ required: false,
270
+ });
271
+ if (isCancel(selected)) {
272
+ cancel('Triage cancelled.');
273
+ return;
274
+ }
275
+ const selectedIndices = selected;
276
+ if (selectedIndices.length === 0) {
277
+ outro('No findings selected.');
278
+ return;
279
+ }
280
+ // Process each selected finding
281
+ for (const idx of selectedIndices) {
282
+ const finding = categorized[idx];
283
+ const location = finding.line != null ? `${finding.file}:${finding.line}` : finding.file;
284
+ const summary = finding.body
285
+ .split('\n')
286
+ .find((l) => l.trim())
287
+ ?.slice(0, 80) ?? '';
288
+ clackLog.info(`${location}: ${summary.replace(/\n/g, ' ')}`);
289
+ const action = await select({
290
+ message: `Action for ${location}:`,
291
+ options: [
292
+ { value: 'fix', label: 'Fix — reply "Fixed" on thread' },
293
+ { value: 'defer', label: 'Defer — create issue and reply with link' },
294
+ { value: 'dismiss', label: 'Dismiss — reply with pushback reason' },
295
+ { value: 'skip', label: 'Skip — do nothing' },
296
+ ],
297
+ });
298
+ if (isCancel(action)) {
299
+ cancel('Triage cancelled.');
300
+ return;
301
+ }
302
+ if (action === 'skip')
303
+ continue;
304
+ // Find the thread for this finding (match by file + line)
305
+ const thread = botThreads.find((t) => {
306
+ if (t.path !== finding.file)
307
+ return false;
308
+ if (finding.line == null)
309
+ return true;
310
+ const hunk = t.diffHunk.match(/@@ .+?\+(\d+)/);
311
+ return hunk ? parseInt(hunk[1], 10) === finding.line : true;
312
+ });
313
+ const commentId = thread?.comments[0]?.id;
314
+ if (action === 'fix') {
315
+ if (commentId) {
316
+ const ok = await confirm({ message: `Reply "Fixed" on ${location}?` });
317
+ if (isCancel(ok)) {
318
+ cancel('Triage cancelled.');
319
+ return;
320
+ }
321
+ if (ok) {
322
+ try {
323
+ adapter.replyToComment(num, commentId, 'Fixed');
324
+ log.success(TAG, `Replied "Fixed" on ${location}`);
325
+ }
326
+ catch (err) {
327
+ const msg = err instanceof Error ? err.message : String(err);
328
+ log.warn(TAG, `Failed to reply: ${msg}`);
329
+ }
330
+ }
331
+ }
332
+ else {
333
+ log.dim(TAG, 'No comment ID available for reply.');
334
+ }
335
+ }
336
+ if (action === 'defer') {
337
+ if (thread) {
338
+ const ok = await confirm({ message: `Create deferred issue for ${location}?` });
339
+ if (isCancel(ok)) {
340
+ cancel('Triage cancelled.');
341
+ return;
342
+ }
343
+ if (ok) {
344
+ try {
345
+ const { createDeferredIssue } = await import('../services/deferred-issuer.js');
346
+ const result = createDeferredIssue(adapter, num, thread, undefined, (msg) => log.dim(TAG, msg));
347
+ if (result.skipped) {
348
+ log.dim(TAG, 'Already deferred — skipped.');
349
+ }
350
+ else {
351
+ log.success(TAG, `Created issue: ${result.issueUrl}`);
352
+ }
353
+ }
354
+ catch (err) {
355
+ const msg = err instanceof Error ? err.message : String(err);
356
+ log.warn(TAG, `Failed to create deferred issue: ${msg}`);
357
+ }
358
+ }
359
+ }
360
+ else {
361
+ log.dim(TAG, 'No thread found for this finding.');
362
+ }
363
+ }
364
+ if (action === 'dismiss') {
365
+ const reason = await text({
366
+ message: 'Pushback reason:',
367
+ placeholder: 'e.g., "Intentional — this is by design"',
368
+ validate: (val) => {
369
+ if (!val?.trim())
370
+ return 'Reason is required.';
371
+ return undefined;
372
+ },
373
+ });
374
+ if (isCancel(reason)) {
375
+ cancel('Triage cancelled.');
376
+ return;
377
+ }
378
+ if (commentId) {
379
+ const ok = await confirm({ message: `Reply "${reason}" on ${location}?` });
380
+ if (isCancel(ok)) {
381
+ cancel('Triage cancelled.');
382
+ return;
383
+ }
384
+ if (ok) {
385
+ try {
386
+ adapter.replyToComment(num, commentId, reason);
387
+ log.success(TAG, `Replied on ${location}`);
388
+ }
389
+ catch (err) {
390
+ const msg = err instanceof Error ? err.message : String(err);
391
+ log.warn(TAG, `Failed to reply: ${msg}`);
392
+ }
393
+ }
394
+ }
395
+ else {
396
+ log.dim(TAG, 'No comment ID available for reply.');
397
+ }
398
+ }
399
+ }
400
+ outro('Triage complete.');
241
401
  }
242
402
  //# sourceMappingURL=triage-pr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"triage-pr.js","sourceRoot":"","sources":["../../src/commands/triage-pr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"triage-pr.js","sourceRoot":"","sources":["../../src/commands/triage-pr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=exemption-engine.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exemption-engine.test.d.ts","sourceRoot":"","sources":["../../../src/exemptions/__tests__/exemption-engine.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,317 @@
1
+ import * as fs from 'node:fs';
2
+ import * as os from 'node:os';
3
+ import * as path from 'node:path';
4
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
5
+ import { addManualSuppression, computePatternId, filterExemptedFindings, promoteToShared, recordFalsePositive, } from '../exemption-engine.js';
6
+ import { EMPTY_LOCAL, EMPTY_SHARED, PROMOTION_THRESHOLD } from '../exemption-schema.js';
7
+ import { readLocalExemptions, readSharedExemptions, writeLocalExemptions, writeSharedExemptions, } from '../exemption-store.js';
8
+ // ─── Helpers ───────────────────────────────────────────
9
+ const makeFinding = (message, severity = 'CRITICAL') => ({
10
+ severity,
11
+ confidence: 0.9,
12
+ message,
13
+ });
14
+ // ─── computePatternId ──────────────────────────────────
15
+ describe('computePatternId', () => {
16
+ it('produces stable hash for same message', () => {
17
+ const a = computePatternId('missing error handler in async route');
18
+ const b = computePatternId('missing error handler in async route');
19
+ expect(a).toBe(b);
20
+ });
21
+ it('produces same hash regardless of word order (keywords are sorted)', () => {
22
+ const a = computePatternId('handler missing async');
23
+ const b = computePatternId('async missing handler');
24
+ expect(a).toBe(b);
25
+ });
26
+ it('survives minor rephrasing (stopwords stripped, punctuation removed)', () => {
27
+ const a = computePatternId('the handler is missing in async route');
28
+ const b = computePatternId('handler missing, async route!');
29
+ expect(a).toBe(b);
30
+ });
31
+ it('different messages produce different hashes', () => {
32
+ const a = computePatternId('missing error handler in async route');
33
+ const b = computePatternId('unused variable declared in module');
34
+ expect(a).not.toBe(b);
35
+ });
36
+ it('prefixed with shield:', () => {
37
+ const id = computePatternId('something went wrong');
38
+ expect(id).toMatch(/^shield:[a-f0-9]{64}$/);
39
+ });
40
+ });
41
+ // ─── recordFalsePositive ───────────────────────────────
42
+ describe('recordFalsePositive', () => {
43
+ const pid = computePatternId('missing error handler');
44
+ const msg = 'missing error handler in route';
45
+ it('increments count on first call', () => {
46
+ const { updatedLocal } = recordFalsePositive({ ...EMPTY_LOCAL }, pid, 'shield', msg);
47
+ expect(updatedLocal.patterns[pid]?.count).toBe(1);
48
+ });
49
+ it('increments count on subsequent calls', () => {
50
+ let local = { ...EMPTY_LOCAL };
51
+ ({ updatedLocal: local } = recordFalsePositive(local, pid, 'shield', msg));
52
+ ({ updatedLocal: local } = recordFalsePositive(local, pid, 'shield', msg));
53
+ expect(local.patterns[pid]?.count).toBe(2);
54
+ });
55
+ it('promoted=false for counts 1 and 2', () => {
56
+ let local = { ...EMPTY_LOCAL };
57
+ let promoted;
58
+ ({ updatedLocal: local, promoted } = recordFalsePositive(local, pid, 'shield', msg));
59
+ expect(promoted).toBe(false);
60
+ ({ updatedLocal: local, promoted } = recordFalsePositive(local, pid, 'shield', msg));
61
+ expect(promoted).toBe(false);
62
+ });
63
+ it('promoted=true exactly on count 3 (PROMOTION_THRESHOLD)', () => {
64
+ expect(PROMOTION_THRESHOLD).toBe(3);
65
+ let local = { ...EMPTY_LOCAL };
66
+ ({ updatedLocal: local } = recordFalsePositive(local, pid, 'shield', msg));
67
+ ({ updatedLocal: local } = recordFalsePositive(local, pid, 'shield', msg));
68
+ const { promoted } = recordFalsePositive(local, pid, 'shield', msg);
69
+ expect(promoted).toBe(true);
70
+ });
71
+ it('promoted=false for count 4+ (only triggers once)', () => {
72
+ let local = { ...EMPTY_LOCAL };
73
+ for (let i = 0; i < 3; i++) {
74
+ ({ updatedLocal: local } = recordFalsePositive(local, pid, 'shield', msg));
75
+ }
76
+ const { updatedLocal, promoted } = recordFalsePositive(local, pid, 'shield', msg);
77
+ expect(updatedLocal.patterns[pid]?.count).toBe(4);
78
+ expect(promoted).toBe(false);
79
+ });
80
+ it('tracks unique sources (no duplicates)', () => {
81
+ let local = { ...EMPTY_LOCAL };
82
+ ({ updatedLocal: local } = recordFalsePositive(local, pid, 'shield', msg));
83
+ ({ updatedLocal: local } = recordFalsePositive(local, pid, 'shield', msg));
84
+ ({ updatedLocal: local } = recordFalsePositive(local, pid, 'bot', msg));
85
+ const sources = local.patterns[pid]?.sources;
86
+ expect(sources).toEqual(['shield', 'bot']);
87
+ });
88
+ it('caps sampleMessages at 3', () => {
89
+ let local = { ...EMPTY_LOCAL };
90
+ for (let i = 0; i < 5; i++) {
91
+ ({ updatedLocal: local } = recordFalsePositive(local, pid, 'shield', `msg-${i}`));
92
+ }
93
+ expect(local.patterns[pid]?.sampleMessages).toHaveLength(3);
94
+ expect(local.patterns[pid]?.sampleMessages).toEqual(['msg-0', 'msg-1', 'msg-2']);
95
+ });
96
+ });
97
+ // ─── promoteToShared ───────────────────────────────────
98
+ describe('promoteToShared', () => {
99
+ const pid = computePatternId('missing error handler');
100
+ const makeLocalPattern = () => ({
101
+ count: 3,
102
+ sources: ['shield'],
103
+ lastSeenAt: new Date().toISOString(),
104
+ sampleMessages: ['missing error handler in route'],
105
+ });
106
+ it('adds entry to empty shared exemptions', () => {
107
+ const shared = promoteToShared({ ...EMPTY_SHARED }, pid, makeLocalPattern());
108
+ expect(shared.exemptions).toHaveLength(1);
109
+ expect(shared.exemptions[0]?.patternId).toBe(pid);
110
+ });
111
+ it('skips duplicate patternId (idempotent)', () => {
112
+ let shared = promoteToShared({ ...EMPTY_SHARED }, pid, makeLocalPattern());
113
+ shared = promoteToShared(shared, pid, makeLocalPattern());
114
+ expect(shared.exemptions).toHaveLength(1);
115
+ });
116
+ it('auto-generates label from keywords', () => {
117
+ const shared = promoteToShared({ ...EMPTY_SHARED }, pid, makeLocalPattern());
118
+ const label = shared.exemptions[0]?.label ?? '';
119
+ // label should contain keywords from the sample message
120
+ expect(label.length).toBeGreaterThan(0);
121
+ // keywords are extracted from 'missing error handler in route'
122
+ // "in" is a stopword, so expect something like "error handler missing route"
123
+ expect(label).toContain('handler');
124
+ expect(label).toContain('missing');
125
+ expect(label).toContain('route');
126
+ });
127
+ it("sets promotedBy to 'auto'", () => {
128
+ const shared = promoteToShared({ ...EMPTY_SHARED }, pid, makeLocalPattern());
129
+ expect(shared.exemptions[0]?.promotedBy).toBe('auto');
130
+ });
131
+ });
132
+ // ─── filterExemptedFindings ────────────────────────────
133
+ describe('filterExemptedFindings', () => {
134
+ it('passes through non-matching findings unchanged', () => {
135
+ const findings = [makeFinding('something unique and rare')];
136
+ const shared = { ...EMPTY_SHARED };
137
+ const { filtered, exempted } = filterExemptedFindings(findings, shared);
138
+ expect(filtered).toHaveLength(1);
139
+ expect(exempted).toHaveLength(0);
140
+ expect(filtered[0]?.severity).toBe('CRITICAL');
141
+ });
142
+ it('downgrades matching findings to INFO severity', () => {
143
+ const msg = 'missing error handler in route';
144
+ const pid = computePatternId(msg);
145
+ const shared = {
146
+ version: 1,
147
+ exemptions: [
148
+ {
149
+ patternId: pid,
150
+ label: 'error handler missing route',
151
+ reason: 'Auto-promoted',
152
+ promotedAt: new Date().toISOString(),
153
+ promotedBy: 'auto',
154
+ sampleMessages: [msg],
155
+ },
156
+ ],
157
+ };
158
+ const findings = [makeFinding(msg)];
159
+ const { filtered, exempted } = filterExemptedFindings(findings, shared);
160
+ expect(filtered).toHaveLength(0);
161
+ expect(exempted).toHaveLength(1);
162
+ expect(exempted[0]?.severity).toBe('INFO');
163
+ });
164
+ it('returns exempted findings separately', () => {
165
+ const exemptMsg = 'missing error handler in route';
166
+ const pid = computePatternId(exemptMsg);
167
+ const shared = {
168
+ version: 1,
169
+ exemptions: [
170
+ {
171
+ patternId: pid,
172
+ label: 'test',
173
+ reason: 'test',
174
+ promotedAt: new Date().toISOString(),
175
+ promotedBy: 'auto',
176
+ sampleMessages: [],
177
+ },
178
+ ],
179
+ };
180
+ const findings = [makeFinding(exemptMsg), makeFinding('totally different finding')];
181
+ const { filtered, exempted } = filterExemptedFindings(findings, shared);
182
+ expect(filtered).toHaveLength(1);
183
+ expect(filtered[0]?.message).toBe('totally different finding');
184
+ expect(exempted).toHaveLength(1);
185
+ expect(exempted[0]?.message).toBe(exemptMsg);
186
+ });
187
+ it('handles empty exemptions (no filtering)', () => {
188
+ const findings = [makeFinding('finding one'), makeFinding('finding two')];
189
+ const { filtered, exempted } = filterExemptedFindings(findings, {
190
+ ...EMPTY_SHARED,
191
+ });
192
+ expect(filtered).toHaveLength(2);
193
+ expect(exempted).toHaveLength(0);
194
+ });
195
+ it('matches auto-generated pattern IDs', () => {
196
+ // Simulate the full flow: record 3 FPs, promote, then filter
197
+ const msg = 'unused import detected in module';
198
+ const pid = computePatternId(msg);
199
+ let local = { ...EMPTY_LOCAL };
200
+ for (let i = 0; i < 3; i++) {
201
+ ({ updatedLocal: local } = recordFalsePositive(local, pid, 'shield', msg));
202
+ }
203
+ const shared = promoteToShared({ ...EMPTY_SHARED }, pid, local.patterns[pid]);
204
+ const findings = [makeFinding(msg)];
205
+ const { filtered, exempted } = filterExemptedFindings(findings, shared);
206
+ expect(filtered).toHaveLength(0);
207
+ expect(exempted).toHaveLength(1);
208
+ });
209
+ it('matches manual suppression labels (substring match in message)', () => {
210
+ const shared = addManualSuppression({ ...EMPTY_SHARED }, 'unused import', 'team convention');
211
+ const findings = [makeFinding('There is an unused import detected in the module')];
212
+ const { filtered, exempted } = filterExemptedFindings(findings, shared);
213
+ expect(filtered).toHaveLength(0);
214
+ expect(exempted).toHaveLength(1);
215
+ expect(exempted[0]?.severity).toBe('INFO');
216
+ });
217
+ });
218
+ // ─── addManualSuppression ──────────────────────────────
219
+ describe('addManualSuppression', () => {
220
+ it("adds entry with 'manual:' prefix patternId", () => {
221
+ const shared = addManualSuppression({ ...EMPTY_SHARED }, 'test-label', 'some reason');
222
+ expect(shared.exemptions).toHaveLength(1);
223
+ expect(shared.exemptions[0]?.patternId).toBe('manual:test-label');
224
+ });
225
+ it('skips duplicate labels (idempotent)', () => {
226
+ let shared = addManualSuppression({ ...EMPTY_SHARED }, 'dup-label', 'reason 1');
227
+ shared = addManualSuppression(shared, 'dup-label', 'reason 2');
228
+ expect(shared.exemptions).toHaveLength(1);
229
+ });
230
+ it("sets promotedBy to 'manual'", () => {
231
+ const shared = addManualSuppression({ ...EMPTY_SHARED }, 'my-label', 'reason');
232
+ expect(shared.exemptions[0]?.promotedBy).toBe('manual');
233
+ });
234
+ });
235
+ // ─── exemption-store ───────────────────────────────────
236
+ describe('exemption-store', () => {
237
+ let tmpDir;
238
+ beforeEach(() => {
239
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-exemption-'));
240
+ });
241
+ afterEach(() => {
242
+ fs.rmSync(tmpDir, { recursive: true, force: true });
243
+ });
244
+ // ── readLocalExemptions / writeLocalExemptions ──
245
+ describe('readLocalExemptions / writeLocalExemptions', () => {
246
+ it('round-trips valid data', () => {
247
+ const data = {
248
+ patterns: {
249
+ 'shield:abc123': {
250
+ count: 2,
251
+ sources: ['shield'],
252
+ lastSeenAt: new Date().toISOString(),
253
+ sampleMessages: ['msg one'],
254
+ },
255
+ },
256
+ };
257
+ writeLocalExemptions(tmpDir, data);
258
+ const loaded = readLocalExemptions(tmpDir);
259
+ expect(loaded).toEqual(data);
260
+ });
261
+ it('returns EMPTY_LOCAL for missing file', () => {
262
+ const result = readLocalExemptions(tmpDir);
263
+ expect(result).toEqual(EMPTY_LOCAL);
264
+ });
265
+ it('returns EMPTY_LOCAL for corrupt JSON (calls onWarn)', () => {
266
+ const filePath = path.join(tmpDir, 'exemption-local.json');
267
+ fs.writeFileSync(filePath, '{ not valid json!!!', 'utf-8');
268
+ const warns = [];
269
+ const result = readLocalExemptions(tmpDir, (msg) => warns.push(msg));
270
+ expect(result).toEqual(EMPTY_LOCAL);
271
+ expect(warns.length).toBeGreaterThan(0);
272
+ });
273
+ it('returns EMPTY_LOCAL for invalid schema', () => {
274
+ const filePath = path.join(tmpDir, 'exemption-local.json');
275
+ fs.writeFileSync(filePath, JSON.stringify({ patterns: { foo: { count: 'not-a-number' } } }), 'utf-8');
276
+ const warns = [];
277
+ const result = readLocalExemptions(tmpDir, (msg) => warns.push(msg));
278
+ expect(result).toEqual(EMPTY_LOCAL);
279
+ expect(warns).toHaveLength(1);
280
+ expect(warns[0]).toContain('Corrupt');
281
+ });
282
+ });
283
+ // ── readSharedExemptions / writeSharedExemptions ──
284
+ describe('readSharedExemptions / writeSharedExemptions', () => {
285
+ it('round-trips valid data', () => {
286
+ const data = {
287
+ version: 1,
288
+ exemptions: [
289
+ {
290
+ patternId: 'shield:abc',
291
+ label: 'test label',
292
+ reason: 'test reason',
293
+ promotedAt: new Date().toISOString(),
294
+ promotedBy: 'auto',
295
+ sampleMessages: ['msg one'],
296
+ },
297
+ ],
298
+ };
299
+ writeSharedExemptions(tmpDir, data);
300
+ const loaded = readSharedExemptions(tmpDir);
301
+ expect(loaded).toEqual(data);
302
+ });
303
+ it('returns EMPTY_SHARED for missing file', () => {
304
+ const result = readSharedExemptions(tmpDir);
305
+ expect(result).toEqual(EMPTY_SHARED);
306
+ });
307
+ it('returns EMPTY_SHARED for corrupt JSON (calls onWarn)', () => {
308
+ const filePath = path.join(tmpDir, 'exemptions.json');
309
+ fs.writeFileSync(filePath, '<<<not json>>>', 'utf-8');
310
+ const warns = [];
311
+ const result = readSharedExemptions(tmpDir, (msg) => warns.push(msg));
312
+ expect(result).toEqual(EMPTY_SHARED);
313
+ expect(warns.length).toBeGreaterThan(0);
314
+ });
315
+ });
316
+ });
317
+ //# sourceMappingURL=exemption-engine.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exemption-engine.test.js","sourceRoot":"","sources":["../../../src/exemptions/__tests__/exemption-engine.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ShieldFinding } from '../commands/shield-templates.js';
2
+ import type { ExemptionLocal, ExemptionPattern, ExemptionShared } from './exemption-schema.js';
3
+ export declare function computePatternId(message: string): string;
4
+ export declare function recordFalsePositive(local: ExemptionLocal, patternId: string, source: 'shield' | 'bot', message: string): {
5
+ updatedLocal: ExemptionLocal;
6
+ promoted: boolean;
7
+ };
8
+ export declare function promoteToShared(shared: ExemptionShared, patternId: string, localPattern: ExemptionPattern): ExemptionShared;
9
+ export declare function filterExemptedFindings(findings: ShieldFinding[], shared: ExemptionShared): {
10
+ filtered: ShieldFinding[];
11
+ exempted: ShieldFinding[];
12
+ };
13
+ export declare function isExempted(patternId: string, exemptions: ExemptionShared): boolean;
14
+ export declare function addManualSuppression(shared: ExemptionShared, label: string, reason: string): ExemptionShared;
15
+ export interface TrackResult {
16
+ local: ExemptionLocal;
17
+ shared: ExemptionShared;
18
+ promoted: string[];
19
+ }
20
+ /**
21
+ * Track false positives for a batch of findings. Returns updated local/shared
22
+ * state and a list of promoted pattern messages (for logging).
23
+ */
24
+ export declare function trackFalsePositives(findings: Array<{
25
+ message: string;
26
+ }>, source: 'shield' | 'bot', local: ExemptionLocal, shared: ExemptionShared): TrackResult;
27
+ //# sourceMappingURL=exemption-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exemption-engine.d.ts","sourceRoot":"","sources":["../../src/exemptions/exemption-engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EAEhB,MAAM,uBAAuB,CAAC;AAkE/B,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,QAAQ,GAAG,KAAK,EACxB,OAAO,EAAE,MAAM,GACd;IAAE,YAAY,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CA6BrD;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,gBAAgB,GAC7B,eAAe,CAuBjB;AAYD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,aAAa,EAAE,EACzB,MAAM,EAAE,eAAe,GACtB;IAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CAsB1D;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,GAAG,OAAO,CAElF;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,eAAe,CAsBjB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EACpC,MAAM,EAAE,QAAQ,GAAG,KAAK,EACxB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,eAAe,GACtB,WAAW,CA4Bb"}