@mmnto/totem 1.87.0 → 1.89.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 (75) hide show
  1. package/dist/index.d.ts +8 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +6 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/sarif.d.ts +17 -0
  6. package/dist/sarif.d.ts.map +1 -1
  7. package/dist/sarif.js +71 -5
  8. package/dist/sarif.js.map +1 -1
  9. package/dist/sarif.test.js +94 -1
  10. package/dist/sarif.test.js.map +1 -1
  11. package/dist/spine/authored-controls.d.ts +8 -0
  12. package/dist/spine/authored-controls.d.ts.map +1 -1
  13. package/dist/spine/authored-controls.js +15 -5
  14. package/dist/spine/authored-controls.js.map +1 -1
  15. package/dist/spine/authored-controls.test.js +31 -0
  16. package/dist/spine/authored-controls.test.js.map +1 -1
  17. package/dist/spine/authored-freeze-gates.d.ts +45 -0
  18. package/dist/spine/authored-freeze-gates.d.ts.map +1 -0
  19. package/dist/spine/authored-freeze-gates.js +167 -0
  20. package/dist/spine/authored-freeze-gates.js.map +1 -0
  21. package/dist/spine/authored-freeze-gates.test.d.ts +2 -0
  22. package/dist/spine/authored-freeze-gates.test.d.ts.map +1 -0
  23. package/dist/spine/authored-freeze-gates.test.js +159 -0
  24. package/dist/spine/authored-freeze-gates.test.js.map +1 -0
  25. package/dist/spine/authored-rule.d.ts +10 -0
  26. package/dist/spine/authored-rule.d.ts.map +1 -1
  27. package/dist/spine/authored-rule.js +11 -0
  28. package/dist/spine/authored-rule.js.map +1 -1
  29. package/dist/spine/authoring-ledger.d.ts +28 -0
  30. package/dist/spine/authoring-ledger.d.ts.map +1 -1
  31. package/dist/spine/authoring-ledger.js +27 -0
  32. package/dist/spine/authoring-ledger.js.map +1 -1
  33. package/dist/spine/authoring-ledger.test.js +8 -0
  34. package/dist/spine/authoring-ledger.test.js.map +1 -1
  35. package/dist/spine/cert-corpus-seed.d.ts +38 -8
  36. package/dist/spine/cert-corpus-seed.d.ts.map +1 -1
  37. package/dist/spine/cert-corpus-seed.js +52 -1
  38. package/dist/spine/cert-corpus-seed.js.map +1 -1
  39. package/dist/spine/cert-corpus-seed.test.js +76 -0
  40. package/dist/spine/cert-corpus-seed.test.js.map +1 -1
  41. package/dist/spine/frozen-split.d.ts +541 -0
  42. package/dist/spine/frozen-split.d.ts.map +1 -0
  43. package/dist/spine/frozen-split.js +205 -0
  44. package/dist/spine/frozen-split.js.map +1 -0
  45. package/dist/spine/frozen-split.test.d.ts +2 -0
  46. package/dist/spine/frozen-split.test.d.ts.map +1 -0
  47. package/dist/spine/frozen-split.test.js +89 -0
  48. package/dist/spine/frozen-split.test.js.map +1 -0
  49. package/dist/spine/gate2-eligibility.d.ts +33 -0
  50. package/dist/spine/gate2-eligibility.d.ts.map +1 -0
  51. package/dist/spine/gate2-eligibility.js +54 -0
  52. package/dist/spine/gate2-eligibility.js.map +1 -0
  53. package/dist/spine/gate2-eligibility.test.d.ts +2 -0
  54. package/dist/spine/gate2-eligibility.test.d.ts.map +1 -0
  55. package/dist/spine/gate2-eligibility.test.js +252 -0
  56. package/dist/spine/gate2-eligibility.test.js.map +1 -0
  57. package/dist/spine/ledgers.d.ts +24 -0
  58. package/dist/spine/ledgers.d.ts.map +1 -1
  59. package/dist/spine/split.d.ts +16 -0
  60. package/dist/spine/split.d.ts.map +1 -1
  61. package/dist/spine/split.js +13 -0
  62. package/dist/spine/split.js.map +1 -1
  63. package/dist/spine/windtunnel-firing.d.ts +6 -2
  64. package/dist/spine/windtunnel-firing.d.ts.map +1 -1
  65. package/dist/spine/windtunnel-firing.js.map +1 -1
  66. package/dist/spine/windtunnel-lock.d.ts +4 -4
  67. package/dist/spine/windtunnel-scorer-authored.d.ts +70 -0
  68. package/dist/spine/windtunnel-scorer-authored.d.ts.map +1 -0
  69. package/dist/spine/windtunnel-scorer-authored.js +204 -0
  70. package/dist/spine/windtunnel-scorer-authored.js.map +1 -0
  71. package/dist/spine/windtunnel-scorer-authored.test.d.ts +2 -0
  72. package/dist/spine/windtunnel-scorer-authored.test.d.ts.map +1 -0
  73. package/dist/spine/windtunnel-scorer-authored.test.js +455 -0
  74. package/dist/spine/windtunnel-scorer-authored.test.js.map +1 -0
  75. package/package.json +1 -1
@@ -0,0 +1,455 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { firingLabelId } from './windtunnel-lock.js';
3
+ import { computeAuthoredPerRuleControlResults, scoreAuthoredWindtunnel, } from './windtunnel-scorer-authored.js';
4
+ // ─── Helpers ─────────────────────────────────────────
5
+ function makeFiring(ruleId, pr, controlKind, matchedLine = 'const x = 1;', filePath = 'src/foo.ts') {
6
+ return {
7
+ ruleId,
8
+ pr,
9
+ filePath,
10
+ matchedLine,
11
+ controlKind,
12
+ labelId: firingLabelId(ruleId, pr, filePath, matchedLine),
13
+ };
14
+ }
15
+ function posControl(targetRuleId, pr, overrides) {
16
+ return {
17
+ pr,
18
+ targetRuleId,
19
+ filePath: 'src/foo.ts',
20
+ matchedSpan: 'L1-L1',
21
+ ...overrides,
22
+ };
23
+ }
24
+ function nonEmission(targetRuleId, pr, outcome, cls, reason) {
25
+ return {
26
+ targetRuleId,
27
+ pr,
28
+ outcome,
29
+ class: cls,
30
+ ...(reason !== undefined ? { reason } : {}),
31
+ };
32
+ }
33
+ /**
34
+ * A baseline authored input. Exposure floors are all 0 so a clean run reaches the
35
+ * mined scorer's PASS tier unless a test trips a specific guard; `actualExposure`
36
+ * mirrors the mined caller (train-side positive count in the third leg).
37
+ */
38
+ function baseInput(overrides) {
39
+ return {
40
+ firings: [],
41
+ groundTruth: new Map(),
42
+ mintedRuleIds: ['rule-a'],
43
+ cullRateThreshold: 0.5,
44
+ exposureFloors: {
45
+ activeRulesEvaluated: 0,
46
+ filesTouchedInWindow: 0,
47
+ positiveControlsExercised: 0,
48
+ },
49
+ actualExposure: {
50
+ activeRulesEvaluated: 1,
51
+ filesTouchedInWindow: 5,
52
+ positiveControlsExercised: 1,
53
+ },
54
+ authoredControls: { positive: [], nonEmissions: [] },
55
+ heldOutPrs: new Set(),
56
+ ...overrides,
57
+ };
58
+ }
59
+ /** A TP-labeled ground truth for the given firings' labelIds. */
60
+ function labelAll(firings, label) {
61
+ return new Map(firings.map((f) => [f.labelId, label]));
62
+ }
63
+ // ─── Reduction baseline: a clean authored run reduces to a mined PASS ─────────
64
+ describe('reduces to scoreWindtunnel (Q1: reduce, never fork)', () => {
65
+ it('a clean authored run (holding positive control, no FP) → PASS, gate effect none', () => {
66
+ const ctrl = makeFiring('rule-a', 10, 'positive');
67
+ const result = scoreAuthoredWindtunnel(baseInput({
68
+ authoredControls: { positive: [posControl('rule-a', 10)], nonEmissions: [] },
69
+ firings: [ctrl],
70
+ groundTruth: labelAll([ctrl], 'TP'),
71
+ heldOutPrs: new Set([20]),
72
+ }));
73
+ expect(result.verdict).toBe('PASS');
74
+ expect(result.nonVacuity).toBe(true);
75
+ expect(result.authoredControlGate.effect).toBe('none');
76
+ // Join-back key present with 0 — rare-defect (a) shape, no held-out activation.
77
+ expect(result.heldOutActivationsByRule).toEqual({ 'rule-a': 0 });
78
+ });
79
+ });
80
+ // ─── (a) rare-defect: valid train control, zero held-out → PASS + key===0 ─────
81
+ describe('(a) rare-defect: train control fires, heldOut===0, no Gate-2 exemption', () => {
82
+ it('PASS with heldOutActivationsByRule[rule]===0 (present, not omitted)', () => {
83
+ const ctrl = makeFiring('rule-a', 10, 'positive');
84
+ const result = scoreAuthoredWindtunnel(baseInput({
85
+ authoredControls: { positive: [posControl('rule-a', 10)], nonEmissions: [] },
86
+ firings: [ctrl],
87
+ groundTruth: labelAll([ctrl], 'TP'),
88
+ heldOutPrs: new Set([20, 21]),
89
+ }));
90
+ expect(result.verdict).toBe('PASS');
91
+ expect(result.heldOutActivationsByRule).toEqual({ 'rule-a': 0 });
92
+ });
93
+ });
94
+ // ─── (b) train-slice FP → window-wide FAIL ───────────────────────────────────
95
+ describe('(b) train-slice FP → window-wide FAIL', () => {
96
+ it('a corpus firing on a TRAIN pr labeled FP fails the whole window', () => {
97
+ const ctrl = makeFiring('rule-a', 10, 'positive');
98
+ const fp = makeFiring('rule-a', 10, 'corpus', 'bad(train);'); // train pr, not in heldOutPrs
99
+ const result = scoreAuthoredWindtunnel(baseInput({
100
+ authoredControls: { positive: [posControl('rule-a', 10)], nonEmissions: [] },
101
+ firings: [ctrl, fp],
102
+ groundTruth: new Map([
103
+ [ctrl.labelId, 'TP'],
104
+ [fp.labelId, 'FP'],
105
+ ]),
106
+ heldOutPrs: new Set([20]),
107
+ }));
108
+ expect(result.verdict).toBe('FAIL');
109
+ expect(result.precision).not.toBeNull();
110
+ expect(result.authoredControlGate.effect).toBe('none');
111
+ });
112
+ });
113
+ // ─── (c) own-control firing excluded from the held-out count ──────────────────
114
+ describe('(c) O3 excludes a rule’s own control firing from the held-out count', () => {
115
+ it('only controlKind=corpus firings on held-out prs count', () => {
116
+ const ctrl = makeFiring('rule-a', 10, 'positive');
117
+ const heldCorpus = makeFiring('rule-a', 20, 'corpus', 'gen();');
118
+ const heldOwnControl = makeFiring('rule-a', 20, 'positive', 'ctrl-on-held();');
119
+ const result = scoreAuthoredWindtunnel(baseInput({
120
+ authoredControls: { positive: [posControl('rule-a', 10)], nonEmissions: [] },
121
+ firings: [ctrl, heldCorpus, heldOwnControl],
122
+ groundTruth: labelAll([ctrl, heldCorpus], 'TP'),
123
+ heldOutPrs: new Set([20]),
124
+ }));
125
+ // The unlabeled own-control firing on the held-out PR routes to needsAdjudication,
126
+ // so the run is HONEST-NEGATIVE — asserted explicitly so this O3-exclusion scenario's
127
+ // verdict is not silently assumed to PASS (greptile #2283).
128
+ expect(result.verdict).toBe('HONEST-NEGATIVE');
129
+ // The held-out control-kind firing is NOT counted; only the corpus one is.
130
+ expect(result.heldOutActivationsByRule).toEqual({ 'rule-a': 1 });
131
+ });
132
+ });
133
+ // ─── (d) cull symmetry: a culled rule is out of the metric + its keys ─────────
134
+ describe('(d) negative-control cull symmetry', () => {
135
+ it('a culled rule is excluded from heldOutActivationsByRule even with valid held-out firings', () => {
136
+ const neg = makeFiring('rule-a', 99, 'negative', 'near-miss;');
137
+ const heldCorpus = makeFiring('rule-a', 20, 'corpus', 'gen();');
138
+ const result = scoreAuthoredWindtunnel(baseInput({
139
+ authoredControls: { positive: [posControl('rule-a', 10)], nonEmissions: [] },
140
+ firings: [neg, heldCorpus],
141
+ groundTruth: labelAll([heldCorpus], 'TP'),
142
+ heldOutPrs: new Set([20]),
143
+ mintedRuleIds: ['rule-a'],
144
+ }));
145
+ expect(result.culledCount).toBe(1);
146
+ // rule-a is culled → excluded from the metric ENTIRELY (not even a 0 key).
147
+ expect(result.heldOutActivationsByRule).toEqual({});
148
+ });
149
+ });
150
+ // ─── (e) window-wide unlabeled → HONEST-NEGATIVE ──────────────────────────────
151
+ describe('(e) window-wide unlabeled firing → HONEST-NEGATIVE', () => {
152
+ it('an unlabeled corpus firing routes to needsAdjudication → HN', () => {
153
+ const ctrl = makeFiring('rule-a', 10, 'positive');
154
+ const unlabeled = makeFiring('rule-a', 20, 'corpus', 'mystery();');
155
+ const result = scoreAuthoredWindtunnel(baseInput({
156
+ authoredControls: { positive: [posControl('rule-a', 10)], nonEmissions: [] },
157
+ firings: [ctrl, unlabeled],
158
+ groundTruth: labelAll([ctrl], 'TP'), // unlabeled has no entry
159
+ heldOutPrs: new Set([20]),
160
+ }));
161
+ expect(result.verdict).toBe('HONEST-NEGATIVE');
162
+ expect(result.needsAdjudication).toContain(unlabeled.labelId);
163
+ expect(result.authoredControlGate.effect).toBe('none');
164
+ });
165
+ });
166
+ // ─── (f) FP FAIL outranks generalization ──────────────────────────────────────
167
+ describe('(f) FP FAIL outranks generalization', () => {
168
+ it('a heavily generalizing rule with an FP still FAILs; metric stays inert', () => {
169
+ const ctrl = makeFiring('rule-a', 10, 'positive');
170
+ const g1 = makeFiring('rule-a', 20, 'corpus', 'gen-1();');
171
+ const g2 = makeFiring('rule-a', 21, 'corpus', 'gen-2();');
172
+ const g3fp = makeFiring('rule-a', 22, 'corpus', 'gen-3-bad();');
173
+ const result = scoreAuthoredWindtunnel(baseInput({
174
+ authoredControls: { positive: [posControl('rule-a', 10)], nonEmissions: [] },
175
+ firings: [ctrl, g1, g2, g3fp],
176
+ groundTruth: new Map([
177
+ [ctrl.labelId, 'TP'],
178
+ [g1.labelId, 'TP'],
179
+ [g2.labelId, 'TP'],
180
+ [g3fp.labelId, 'FP'],
181
+ ]),
182
+ heldOutPrs: new Set([20, 21, 22]),
183
+ }));
184
+ expect(result.verdict).toBe('FAIL');
185
+ // Metric is verdict-inert: it still reports all 3 held-out activations.
186
+ expect(result.heldOutActivationsByRule).toEqual({ 'rule-a': 3 });
187
+ });
188
+ });
189
+ // ─── (g) exposure counts train-side controls only ─────────────────────────────
190
+ describe('(g) exposure floor counts train-side controls only', () => {
191
+ it('held-out activations do not inflate positiveControlsExercised', () => {
192
+ const ctrl = makeFiring('rule-a', 10, 'positive');
193
+ const held1 = makeFiring('rule-a', 20, 'corpus', 'gen-1();');
194
+ const held2 = makeFiring('rule-a', 21, 'corpus', 'gen-2();');
195
+ const result = scoreAuthoredWindtunnel(baseInput({
196
+ authoredControls: { positive: [posControl('rule-a', 10)], nonEmissions: [] },
197
+ firings: [ctrl, held1, held2],
198
+ groundTruth: labelAll([ctrl, held1, held2], 'TP'),
199
+ heldOutPrs: new Set([20, 21]),
200
+ actualExposure: {
201
+ activeRulesEvaluated: 1,
202
+ filesTouchedInWindow: 5,
203
+ positiveControlsExercised: 1,
204
+ },
205
+ }));
206
+ // Third exposure leg stays the train-side control count (1), unaffected by the 2 held-out firings.
207
+ expect(result.exposureTuple[2]).toBe(1);
208
+ expect(result.heldOutActivationsByRule).toEqual({ 'rule-a': 2 });
209
+ });
210
+ });
211
+ // ─── (codex-1) all-positives-non-emission + no FP must NOT PASS ───────────────
212
+ describe('(codex-1) all positive fixtures culled (illegitimate) + no FP → NOT PASS', () => {
213
+ it('empty positive[] with an illegitimate non-emission FAILs (not a silent PASS)', () => {
214
+ const result = scoreAuthoredWindtunnel(baseInput({
215
+ authoredControls: {
216
+ positive: [],
217
+ nonEmissions: [nonEmission('rule-a', 10, 'fix-shaped', 'illegitimate')],
218
+ },
219
+ firings: [],
220
+ heldOutPrs: new Set([20]),
221
+ }));
222
+ expect(result.verdict).toBe('FAIL');
223
+ expect(result.precision).toBeNull();
224
+ expect(result.authoredControlGate.effect).toBe('fail-illegitimate');
225
+ expect(result.authoredControlGate.illegitimate).toBe(1);
226
+ });
227
+ });
228
+ // ─── (codex-2) mixed emitted + illegitimate must not vanish ───────────────────
229
+ describe('(codex-2) mixed emitted + illegitimate control', () => {
230
+ it('the illegitimate non-emission FAILs even when another fixture emitted a holding control', () => {
231
+ const ctrl = makeFiring('rule-a', 10, 'positive');
232
+ const result = scoreAuthoredWindtunnel(baseInput({
233
+ authoredControls: {
234
+ positive: [posControl('rule-a', 10)],
235
+ nonEmissions: [nonEmission('rule-a', 11, 'over-match', 'illegitimate')],
236
+ },
237
+ firings: [ctrl],
238
+ groundTruth: labelAll([ctrl], 'TP'),
239
+ heldOutPrs: new Set([20]),
240
+ }));
241
+ // Non-vacuity would be satisfied by the emitted control — the illegitimate must still poison it.
242
+ expect(result.nonVacuity).toBe(true);
243
+ expect(result.verdict).toBe('FAIL');
244
+ expect(result.authoredControlGate.effect).toBe('fail-illegitimate');
245
+ });
246
+ });
247
+ // ─── undecidable / deferred non-emission → HONEST-NEGATIVE (not-certifiable) ──
248
+ describe('undecidable / deferred non-emission → HONEST-NEGATIVE (never a silent skip)', () => {
249
+ it('an undecidable non-emission demotes a would-be PASS to HN', () => {
250
+ const ctrl = makeFiring('rule-a', 10, 'positive');
251
+ const result = scoreAuthoredWindtunnel(baseInput({
252
+ authoredControls: {
253
+ positive: [posControl('rule-a', 10)],
254
+ nonEmissions: [
255
+ nonEmission('rule-a', 11, 'needs-adjudication', 'undecidable', 'ambiguous'),
256
+ ],
257
+ },
258
+ firings: [ctrl],
259
+ groundTruth: labelAll([ctrl], 'TP'),
260
+ heldOutPrs: new Set([20]),
261
+ }));
262
+ expect(result.verdict).toBe('HONEST-NEGATIVE');
263
+ expect(result.precision).toBeNull();
264
+ expect(result.authoredControlGate.effect).toBe('honest-negative-not-certifiable');
265
+ expect(result.authoredControlGate.undecidable).toBe(1);
266
+ });
267
+ it('a deferred non-emission is not-certifiable (deferred source)', () => {
268
+ const ctrl = makeFiring('rule-a', 10, 'positive');
269
+ const result = scoreAuthoredWindtunnel(baseInput({
270
+ authoredControls: {
271
+ positive: [posControl('rule-a', 10)],
272
+ nonEmissions: [nonEmission('rule-a', 11, 'unsupported-source', 'deferred')],
273
+ },
274
+ firings: [ctrl],
275
+ groundTruth: labelAll([ctrl], 'TP'),
276
+ heldOutPrs: new Set([20]),
277
+ }));
278
+ expect(result.verdict).toBe('HONEST-NEGATIVE');
279
+ expect(result.authoredControlGate.effect).toBe('honest-negative-not-certifiable');
280
+ expect(result.authoredControlGate.deferred).toBe(1);
281
+ });
282
+ it('illegitimate outranks undecidable when both are present (FAIL, not HN)', () => {
283
+ const result = scoreAuthoredWindtunnel(baseInput({
284
+ authoredControls: {
285
+ positive: [],
286
+ nonEmissions: [
287
+ nonEmission('rule-a', 10, 'needs-adjudication', 'undecidable'),
288
+ nonEmission('rule-a', 11, 'vacuous-silent', 'illegitimate'),
289
+ ],
290
+ },
291
+ firings: [],
292
+ heldOutPrs: new Set([20]),
293
+ }));
294
+ expect(result.verdict).toBe('FAIL');
295
+ expect(result.authoredControlGate.effect).toBe('fail-illegitimate');
296
+ });
297
+ });
298
+ // ─── gate is demote-only: a real FP FAIL keeps its breaching precision ────────
299
+ describe('the non-emission gate is demote-only (mirrors the mined FAIL-tier ordering)', () => {
300
+ it('a real FP FAIL co-occurring with an illegitimate non-emission keeps the FP precision', () => {
301
+ // Build-altitude micro-decision (flagged for strategy couple-on-merge): a structural
302
+ // control defect does not erase a real FP measurement — the run FAILs either way.
303
+ const fp = makeFiring('rule-a', 10, 'corpus', 'bad();');
304
+ const result = scoreAuthoredWindtunnel(baseInput({
305
+ authoredControls: {
306
+ positive: [],
307
+ nonEmissions: [nonEmission('rule-a', 11, 'fix-shaped', 'illegitimate')],
308
+ },
309
+ firings: [fp],
310
+ groundTruth: new Map([[fp.labelId, 'FP']]),
311
+ heldOutPrs: new Set([20]),
312
+ }));
313
+ expect(result.verdict).toBe('FAIL');
314
+ // FP measurement survives the structural gate (the chosen precedence).
315
+ expect(result.precision).not.toBeNull();
316
+ // The COUNT is the presence signal, NOT `effect`: the illegitimate non-emission is
317
+ // recorded even though the demote-only combine left the already-FAIL verdict unchanged
318
+ // (effect stays 'none'). Strategy's couple-on-merge ask + CR — this freezes the
319
+ // "a D4 consumer reads authoredControlGate.illegitimate, never `effect`" contract.
320
+ expect(result.authoredControlGate.illegitimate).toBe(1);
321
+ expect(result.authoredControlGate.effect).toBe('none');
322
+ });
323
+ });
324
+ // ─── multi-rule window: gate is window-level + O3 keys isolated per rule ──────
325
+ describe('multi-rule window (gate is window-level, O3 keys isolated per rule)', () => {
326
+ it('an illegitimate control on rule-b FAILs the window even though rule-a is clean, and O3 keys only rule-a', () => {
327
+ // rule-a: a clean, holding positive control that fires + generalizes on a held-out PR.
328
+ // rule-b: NO positive control (all fixtures illegitimate) — it must poison the WINDOW
329
+ // (not just its own rule) and must NOT leak into the O3 keys (join-back is from positive[]).
330
+ const ctrlA = makeFiring('rule-a', 10, 'positive');
331
+ const heldA = makeFiring('rule-a', 20, 'corpus', 'gen-a();');
332
+ const heldB = makeFiring('rule-b', 20, 'corpus', 'gen-b();');
333
+ const result = scoreAuthoredWindtunnel(baseInput({
334
+ authoredControls: {
335
+ positive: [posControl('rule-a', 10)],
336
+ nonEmissions: [nonEmission('rule-b', 12, 'fix-shaped', 'illegitimate')],
337
+ },
338
+ firings: [ctrlA, heldA, heldB],
339
+ groundTruth: labelAll([ctrlA, heldA, heldB], 'TP'),
340
+ heldOutPrs: new Set([20]),
341
+ mintedRuleIds: ['rule-a', 'rule-b'],
342
+ }));
343
+ // (1) window-level: rule-a's control is clean, yet rule-b's illegitimate non-emission
344
+ // FAILs the whole window (the gate is not scoped to rules lacking a positive control).
345
+ expect(result.verdict).toBe('FAIL');
346
+ expect(result.authoredControlGate.effect).toBe('fail-illegitimate');
347
+ expect(result.authoredControlGate.illegitimate).toBe(1);
348
+ // (2) O3 key isolation: rule-a is keyed (from positive[]) and counts its 1 held-out
349
+ // firing; rule-b fired on a held-out PR but has NO positive control → NOT a key.
350
+ expect(result.heldOutActivationsByRule).toEqual({ 'rule-a': 1 });
351
+ });
352
+ });
353
+ // ─── Option-(i) exercised + non-vacuity semantics (#2291 ruling, 2026-07-04) ──
354
+ describe('option-(i): the §6 emission channel is the exercise proof', () => {
355
+ const CERT1_CONTROLS = {
356
+ positive: [posControl('rule-a', 422), posControl('rule-b', 130), posControl('rule-c', 415)],
357
+ nonEmissions: [],
358
+ };
359
+ it('positiveControlsExercised = |emissions|, OVERRIDING the (mined-channel) input leg', () => {
360
+ // The named D4 masking regression: floors are REAL here (ratified floor 2, not 0).
361
+ // The input leg says 0 — the mined-substrate artifact — but 3 emissions clear it.
362
+ const result = scoreAuthoredWindtunnel(baseInput({
363
+ mintedRuleIds: ['rule-a', 'rule-b', 'rule-c'],
364
+ authoredControls: CERT1_CONTROLS,
365
+ actualExposure: {
366
+ activeRulesEvaluated: 3,
367
+ filesTouchedInWindow: 5,
368
+ positiveControlsExercised: 0, // mined channel: structurally 0 on authored substrate
369
+ },
370
+ exposureFloors: {
371
+ activeRulesEvaluated: 2,
372
+ filesTouchedInWindow: 0,
373
+ positiveControlsExercised: 2, // the ratified floor
374
+ },
375
+ }));
376
+ expect(result.exposureTuple[2]).toBe(3);
377
+ expect(result.verdict).toBe('PASS');
378
+ });
379
+ it('zero positive FIRINGS is NOT a vacuous-FAIL — pre-window anchors have no window substrate', () => {
380
+ // The cert-1 shape: every anchor strictly pre-window ⇒ no controlKind:'positive'
381
+ // firing can ever exist. Under the pre-ruling wiring this was FAIL (vacuous);
382
+ // under option (i) the differential at emission IS the proof.
383
+ const result = scoreAuthoredWindtunnel(baseInput({
384
+ mintedRuleIds: ['rule-a', 'rule-b', 'rule-c'],
385
+ authoredControls: CERT1_CONTROLS,
386
+ firings: [], // nothing fired anywhere in the window
387
+ exposureFloors: {
388
+ activeRulesEvaluated: 2,
389
+ filesTouchedInWindow: 0,
390
+ positiveControlsExercised: 2,
391
+ },
392
+ actualExposure: {
393
+ activeRulesEvaluated: 3,
394
+ filesTouchedInWindow: 5,
395
+ positiveControlsExercised: 0,
396
+ },
397
+ }));
398
+ expect(result.verdict).toBe('PASS');
399
+ expect(result.nonVacuity).toBe(true); // vacuously true — the authored guard is Move 2 + the floor
400
+ });
401
+ it('godot-builtin shape: no admissible fixture ⇒ exercised 0 ⇒ the floor demotes HONEST-NEGATIVE, never FAIL', () => {
402
+ const result = scoreAuthoredWindtunnel(baseInput({
403
+ authoredControls: { positive: [], nonEmissions: [] },
404
+ exposureFloors: {
405
+ activeRulesEvaluated: 0,
406
+ filesTouchedInWindow: 0,
407
+ positiveControlsExercised: 2,
408
+ },
409
+ }));
410
+ expect(result.exposureTuple[2]).toBe(0);
411
+ expect(result.verdict).toBe('HONEST-NEGATIVE');
412
+ expect(result.precision).toBeNull();
413
+ });
414
+ });
415
+ describe('computeAuthoredPerRuleControlResults (the option-(i) C1 sibling)', () => {
416
+ it('positiveControl := differential-held at emission; evidence refs are §6-emission-shaped', () => {
417
+ const map = computeAuthoredPerRuleControlResults({
418
+ firings: [],
419
+ mintedRuleIds: ['rule-a', 'rule-b'],
420
+ authoredControls: { positive: [posControl('rule-a', 422)] },
421
+ });
422
+ expect(map.get('rule-a')).toEqual({
423
+ positiveControl: true,
424
+ negativeControl: true,
425
+ evidenceRefs: ['§6-emission:422:src/foo.ts:L1-L1'],
426
+ });
427
+ // A survivor with NO emission reads false — never inherited from a sibling.
428
+ expect(map.get('rule-b')).toEqual({
429
+ positiveControl: false,
430
+ negativeControl: true,
431
+ evidenceRefs: [],
432
+ });
433
+ });
434
+ it('a rule culled by a negative-control firing is not a survivor — never stamped (mined parity)', () => {
435
+ const map = computeAuthoredPerRuleControlResults({
436
+ firings: [makeFiring('rule-a', 10, 'negative')],
437
+ mintedRuleIds: ['rule-a', 'rule-b'],
438
+ authoredControls: { positive: [posControl('rule-a', 422)] },
439
+ });
440
+ expect(map.has('rule-a')).toBe(false);
441
+ expect(map.get('rule-b')?.negativeControl).toBe(true);
442
+ });
443
+ it('evidence refs never collide with the 64-hex firing labelId key space', () => {
444
+ const map = computeAuthoredPerRuleControlResults({
445
+ firings: [],
446
+ mintedRuleIds: ['rule-a'],
447
+ authoredControls: { positive: [posControl('rule-a', 422)] },
448
+ });
449
+ for (const ref of map.get('rule-a').evidenceRefs) {
450
+ expect(ref.startsWith('§6-emission:')).toBe(true);
451
+ expect(/^[0-9a-f]{64}$/.test(ref)).toBe(false);
452
+ }
453
+ });
454
+ });
455
+ //# sourceMappingURL=windtunnel-scorer-authored.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windtunnel-scorer-authored.test.js","sourceRoot":"","sources":["../../src/spine/windtunnel-scorer-authored.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmnto/totem",
3
- "version": "1.87.0",
3
+ "version": "1.89.0",
4
4
  "description": "Persistent memory and context layer for AI agents",
5
5
  "type": "module",
6
6
  "engines": {