@mmnto/totem 1.72.0 → 1.73.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 (37) hide show
  1. package/dist/index.d.ts +6 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +3 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/spine/corpus-dispositions.d.ts +274 -0
  6. package/dist/spine/corpus-dispositions.d.ts.map +1 -0
  7. package/dist/spine/corpus-dispositions.js +71 -0
  8. package/dist/spine/corpus-dispositions.js.map +1 -0
  9. package/dist/spine/corpus-dispositions.test.d.ts +2 -0
  10. package/dist/spine/corpus-dispositions.test.d.ts.map +1 -0
  11. package/dist/spine/corpus-dispositions.test.js +55 -0
  12. package/dist/spine/corpus-dispositions.test.js.map +1 -0
  13. package/dist/spine/derive-labels.d.ts +99 -0
  14. package/dist/spine/derive-labels.d.ts.map +1 -0
  15. package/dist/spine/derive-labels.js +160 -0
  16. package/dist/spine/derive-labels.js.map +1 -0
  17. package/dist/spine/derive-labels.test.d.ts +2 -0
  18. package/dist/spine/derive-labels.test.d.ts.map +1 -0
  19. package/dist/spine/derive-labels.test.js +179 -0
  20. package/dist/spine/derive-labels.test.js.map +1 -0
  21. package/dist/spine/disposition-taxonomy.d.ts +40 -0
  22. package/dist/spine/disposition-taxonomy.d.ts.map +1 -0
  23. package/dist/spine/disposition-taxonomy.js +216 -0
  24. package/dist/spine/disposition-taxonomy.js.map +1 -0
  25. package/dist/spine/disposition-taxonomy.test.d.ts +2 -0
  26. package/dist/spine/disposition-taxonomy.test.d.ts.map +1 -0
  27. package/dist/spine/disposition-taxonomy.test.js +145 -0
  28. package/dist/spine/disposition-taxonomy.test.js.map +1 -0
  29. package/dist/spine/windtunnel-firing.d.ts +12 -0
  30. package/dist/spine/windtunnel-firing.d.ts.map +1 -1
  31. package/dist/spine/windtunnel-firing.js +6 -1
  32. package/dist/spine/windtunnel-firing.js.map +1 -1
  33. package/dist/spine/windtunnel-lock.d.ts +18 -0
  34. package/dist/spine/windtunnel-lock.d.ts.map +1 -1
  35. package/dist/spine/windtunnel-lock.js +33 -0
  36. package/dist/spine/windtunnel-lock.js.map +1 -1
  37. package/package.json +1 -1
@@ -0,0 +1,216 @@
1
+ // ─── #709 ground-truth deriver — slice 5d-i: the closed disposition taxonomy ──
2
+ //
3
+ // The deterministic, LLM-FREE classifier that turns a held-out review thread's
4
+ // human dispositions into a closed taxonomy class, then into a cert-run
5
+ // ground-truth label (TP / FP / UNLABELED). It is the answer-key's labeling
6
+ // primitive: slice 5d-iii enumerates the real `RuleFiring`s (via replay) and
7
+ // joins each to a held-out disposition by span; THIS module decides what that
8
+ // disposition MEANS.
9
+ //
10
+ // Contract (strategy#709 c.4762840182 + c.4764980503, RULED): the label SOURCE is
11
+ // the disposition-derived DRAFT under a CLOSED taxonomy —
12
+ // accepted-fix ⟹ TP
13
+ // declined-as-false-positive ⟹ FP
14
+ // scope · defer · superseded · style · ambiguous ⟹ UNLABELED (omit)
15
+ // inheriting ADR-110/111 unchanged. Zero LLM-judge (that is #710 Phase-2); this
16
+ // is a heuristic over the review text + the binary disposition vocabulary.
17
+ //
18
+ // Why a NEW classifier and not the binary `bot-review-parser` primitive
19
+ // (codex panel, BLOCKING-3): that primitive intentionally over-matches the WHOLE
20
+ // decline vocabulary to `declined` ("a lost lesson, never a laundered one",
21
+ // mmnto-ai/totem#2124) — SAFE for keeping bad lessons out of mining, UNSAFE as a
22
+ // cert FALSE-POSITIVE label. A "declined, tracked for later / too broad for this
23
+ // PR" (a scope/defer decline) is NOT evidence the code is clean; mapping it to FP
24
+ // would FAIL a sound rule. So this classifier PARTITIONS that vocabulary: only an
25
+ // unambiguous correctness rebuttal ("false positive / by design / works as
26
+ // intended") becomes FP; scope/defer/superseded/style declines stay UNLABELED.
27
+ //
28
+ // Conservative-by-construction (codex/gemini/agy/strategy-claude converged): only
29
+ // an UNAMBIGUOUS accepted-fix → TP and an UNAMBIGUOUS declined-as-false-positive →
30
+ // FP; every conflict, soft signal, or absent human disposition → UNLABELED. Under-
31
+ // labeling routes to the scorer's `needsAdjudication` → HONEST-NEGATIVE (Tenet 4
32
+ // fail-soft for the answer key), never a guessed PASS. The resolution flags
33
+ // (`isResolved`/`isOutdated`) are disposition EVIDENCE, not determinative, and are
34
+ // the span-join's concern (5d-iii) — this taxonomy is text-driven only, so a bare
35
+ // `isResolved` thread never becomes TP on the flag alone (codex WARNING-5).
36
+ import { isBotIdentity } from './selection-rule.js';
37
+ // ── Pattern banks (the partition of the decline vocabulary) ──────────────────
38
+ /**
39
+ * accepted-fix signal: a human confirmed the finding was actioned. A commit-SHA
40
+ * or `tracked-in-#` reference alone is NOT here — a tracked reference is a DEFER
41
+ * (the fix is future), and a bare SHA is too noisy to credit as acceptance.
42
+ */
43
+ const FIX_PATTERNS = [
44
+ /\bfixed\b/i,
45
+ // Confirmed-PAST construction only. The bare `addressed`/`applied`/`done` words —
46
+ // and the praise words `good catch`/`nice catch` (CR #2230 round-2) — were dropped:
47
+ // praise is not a fix CONFIRMATION (acknowledging a real finding ≠ acting on it),
48
+ // and the bare words minted false TPs. The canonical bare accept `fixed` is kept
49
+ // ("good catch, fixed!" still credits) but is now guarded against negation by
50
+ // `hasUnnegatedFix` (CR #2230 round-3 — "not fixed yet" no longer a false TP).
51
+ /\b(?:has|have|now)\s+been\s+(?:fixed|addressed|applied)\b/i,
52
+ ];
53
+ /**
54
+ * declined-as-false-positive signal: a CORRECTNESS rebuttal — the human asserts
55
+ * the code is correct and the finding is WRONG. This is the ONLY decline class
56
+ * that becomes an FP label, so the bank is kept tight to genuine correctness
57
+ * claims (not the broad pushback vocabulary the binary primitive matches).
58
+ */
59
+ const FALSE_POSITIVE_PATTERNS = [
60
+ /\bfalse\s+positive\b/i,
61
+ /\bnot\s+a\s+(?:bug|problem|issue|real)\b/i,
62
+ /\b(?:works|working|behaves)\s+as\s+(?:intended|designed|expected)\b/i,
63
+ /\bby\s+design\b/i,
64
+ // Anchored to the AFFIRMATIVE copula. Bare `intentional(ly)` was negation- and
65
+ // future-blind: "this behavior is not intentional" (greptile #2230 :91) and
66
+ // "intentionally structured it, will fix the edge case" (strategy-claude note)
67
+ // both minted a false FP. `is intentional` keeps the genuine rebuttal.
68
+ /\bis\s+intentional\b/i,
69
+ // `correct` REMOVED from both `not …` and `this is …` (GCA #2230 :95). In review,
70
+ // "this is not correct" / "this is correct, I'll fix it" AGREE with the finding
71
+ // (a True Positive) — matching `correct` here inverted the label to FP.
72
+ /\bnot\s+(?:applicable|relevant|an\s+issue)\b/i,
73
+ /\bthis\s+is\s+(?:fine|intended|safe)\b/i,
74
+ /\bincorrect\s+(?:finding|flag|warning|suggestion)\b/i,
75
+ ];
76
+ /** scope decline (UNLABELED): valid finding, not this PR. */
77
+ const SCOPE_PATTERNS = [
78
+ /\bout\s+of\s+scope\b/i,
79
+ /\btoo\s+broad\b/i,
80
+ /\b(?:separate|different|another|its\s+own)\s+PR\b/i,
81
+ /\bnot\s+(?:in\s+)?this\s+PR\b/i,
82
+ /\bunrelated\b/i,
83
+ ];
84
+ /** defer decline (UNLABELED): valid finding, postponed. `won't fix` lands here (conservative — not an FP). */
85
+ const DEFER_PATTERNS = [
86
+ /\bfollow[\s-]?up\b/i,
87
+ /\btracked\s+in\s+#?\d+/i,
88
+ /\bwon'?t\s+fix\b/i,
89
+ /\b(?:later|future|subsequent|backlog)\b/i,
90
+ /\bTODO\b/i, // /i for parity with every other bank (greptile #2230 :112 — "todo: track this")
91
+ ];
92
+ /** superseded decline (UNLABELED): the flagged code is gone. */
93
+ const SUPERSEDED_PATTERNS = [
94
+ /\b(?:refactored|rewritten|removed|deleted|moved)\b/i,
95
+ /\bno\s+longer\s+(?:applies|exists|relevant|present)\b/i,
96
+ /\bobsolete\b/i,
97
+ ];
98
+ /** style decline (UNLABELED): subjective / cosmetic. */
99
+ const STYLE_PATTERNS = [
100
+ /\bnit(?:pick)?\b/i,
101
+ /\b(?:just\s+a\s+)?preference\b/i,
102
+ /\bsubjective\b/i,
103
+ /\bstylistic\b/i,
104
+ /\bcosmetic\b/i,
105
+ ];
106
+ const matchesAny = (text, bank) => bank.some((p) => p.test(text));
107
+ /**
108
+ * A negator that, in the same clause as a fix signal, VOIDS it — "this has not
109
+ * been fixed", "isn't fixed yet", "never addressed". (CR #2230 round-3: the bare
110
+ * `fixed` token was still negation-blind.) Applied ONLY to the FIX bank: none of
111
+ * its patterns are intrinsically negative, so a clause-scoped negator is an
112
+ * unambiguous inversion. The FALSE_POSITIVE bank deliberately does NOT get this —
113
+ * several of its patterns ARE negative constructions ("not a bug", "not applicable").
114
+ */
115
+ const FIX_NEGATOR = /\b(?:not|never|no|without|isn't|wasn't|hasn't|haven't|won't|doesn't|didn't|aren't|weren't)\b/i;
116
+ /**
117
+ * Split into clauses for negation scoping. Breaks on sentence punctuation AND the
118
+ * contrastive conjunctions ("but"/"however"/"though") so "not sure, but I fixed it"
119
+ * keeps the fix in its own un-negated clause. Over-splitting only risks losing a
120
+ * true fix → UNLABELED → honest-negative (the safe direction), never a false TP.
121
+ */
122
+ const splitClauses = (text) => text.split(/[.!?;\n]+|\b(?:but|however|though)\b/i);
123
+ /**
124
+ * A fix is credited only from a clause that matches a FIX pattern and carries no
125
+ * negator — so "fixed" survives ("good catch, fixed!") while "not been fixed yet"
126
+ * and "hasn't fixed it" do not (closing the negation class CR's adjacency-only
127
+ * `not\s+fixed` suggestion left open for the non-adjacent "not been fixed" form).
128
+ */
129
+ const hasUnnegatedFix = (text) => splitClauses(text).some((c) => matchesAny(c, FIX_PATTERNS) && !FIX_NEGATOR.test(c));
130
+ // ── The classifier ───────────────────────────────────────────────────────────
131
+ /**
132
+ * Classify a held-out review thread's disposition under the closed taxonomy.
133
+ *
134
+ * Reads the HUMAN (non-bot) comments only — the human is the one who disposes; a
135
+ * bot's own follow-up is not a disposition (and `isResolved` alone is never TP,
136
+ * codex WARNING-5). Conservative precedence:
137
+ * 1. No human disposition comment → ambiguous (UNLABELED)
138
+ * 2. accepted-fix AND false-positive present → ambiguous (conflicting signals)
139
+ * 3. accepted-fix, no decline of any kind → accepted-fix (TP)
140
+ * 4. false-positive, no fix and no soft decline → declined-as-false-positive (FP)
141
+ * 5. otherwise a soft decline present → scope | defer | superseded | style (UNLABELED)
142
+ * 6. no recognizable signal → ambiguous (UNLABELED)
143
+ *
144
+ * Steps 3/4 require a CLEAN signal: a fix that is also scoped/deferred, or an FP
145
+ * rebuttal that is also a scope/defer decline, collapses to ambiguous — the
146
+ * answer key must not credit a contradictory disposition. This defeats codex's
147
+ * falsifying case ("declined, too broad / tracked for later" never becomes FP).
148
+ */
149
+ export function classifyDisposition(comments) {
150
+ const humanText = comments
151
+ .filter((c) => !isBotIdentity(c.author) && c.body.trim().length > 0)
152
+ .map((c) => c.body);
153
+ if (humanText.length === 0)
154
+ return 'ambiguous';
155
+ const joined = humanText.join('\n');
156
+ // Clause-scoped + negation-aware (CR #2230 round-3): "not fixed yet" / "hasn't
157
+ // been addressed" must not credit a fix. The other banks match on the whole text.
158
+ const fix = hasUnnegatedFix(joined);
159
+ const fp = matchesAny(joined, FALSE_POSITIVE_PATTERNS);
160
+ const scope = matchesAny(joined, SCOPE_PATTERNS);
161
+ const defer = matchesAny(joined, DEFER_PATTERNS);
162
+ const superseded = matchesAny(joined, SUPERSEDED_PATTERNS);
163
+ const style = matchesAny(joined, STYLE_PATTERNS);
164
+ const softDecline = scope || defer || superseded || style;
165
+ // 2. Conflicting label-bearing signals → never credit one over the other.
166
+ if (fix && fp)
167
+ return 'ambiguous';
168
+ // 3. Clean accepted-fix: a fix that is ALSO scoped/deferred is contradictory.
169
+ if (fix && !softDecline)
170
+ return 'accepted-fix';
171
+ // 4. Clean correctness rebuttal: an FP that is ALSO a soft decline is impure.
172
+ if (fp && !softDecline)
173
+ return 'declined-as-false-positive';
174
+ // A label-bearing signal that reached here is IMPURE (it co-occurs with a soft
175
+ // decline — "fixed the related part; the rest is out of scope", "arguably a
176
+ // false positive, but tracked in #99"). We cannot attribute the fix/rebuttal to
177
+ // THIS firing's span, so it credits neither a label nor a soft-decline class.
178
+ if (fix || fp)
179
+ return 'ambiguous';
180
+ // 5. A pure soft decline (no label-bearing signal) → its specific UNLABELED
181
+ // class (precedence: the most label-protective first — a scope/superseded claim
182
+ // is a stronger "do not label" than a style nit).
183
+ if (scope)
184
+ return 'scope';
185
+ if (superseded)
186
+ return 'superseded';
187
+ if (defer)
188
+ return 'defer';
189
+ if (style)
190
+ return 'style';
191
+ // 6. Reached only when fix=false AND fp=false AND no soft-decline matched — the
192
+ // human spoke but carried no recognizable disposition. (Impure label-bearing
193
+ // cases are already caught by the `fix || fp` guard above, never here.)
194
+ return 'ambiguous';
195
+ }
196
+ /**
197
+ * Project a taxonomy class onto a cert-run ground-truth label. The two
198
+ * label-bearing classes map to TP/FP; every UNLABELED class returns `null` — the
199
+ * deriver OMITS the firing's labelId from `ground-truth-labels.json`, and the
200
+ * scorer routes the un-keyed firing to `needsAdjudication` → HONEST-NEGATIVE.
201
+ */
202
+ export function dispositionToLabel(cls) {
203
+ switch (cls) {
204
+ case 'accepted-fix':
205
+ return 'TP';
206
+ case 'declined-as-false-positive':
207
+ return 'FP';
208
+ case 'scope':
209
+ case 'defer':
210
+ case 'superseded':
211
+ case 'style':
212
+ case 'ambiguous':
213
+ return null;
214
+ }
215
+ }
216
+ //# sourceMappingURL=disposition-taxonomy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disposition-taxonomy.js","sourceRoot":"","sources":["../../src/spine/disposition-taxonomy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=disposition-taxonomy.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disposition-taxonomy.test.d.ts","sourceRoot":"","sources":["../../src/spine/disposition-taxonomy.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,145 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { classifyDisposition, dispositionToLabel, } from './disposition-taxonomy.js';
3
+ // A held-out review thread: a bot finding + zero-or-more human replies.
4
+ const BOT = 'coderabbitai[bot]';
5
+ const HUMAN = 'satur8d';
6
+ function thread(...replies) {
7
+ return [
8
+ { author: BOT, body: 'Potential null deref on `foo.bar` here.' },
9
+ ...replies.map((body) => ({ author: HUMAN, body })),
10
+ ];
11
+ }
12
+ describe('classifyDisposition — accepted-fix ⟹ TP', () => {
13
+ it.each([
14
+ 'Fixed in the latest push.',
15
+ 'Good catch — fixed.',
16
+ 'It has now been addressed.',
17
+ 'This has been fixed.',
18
+ 'The fix has been applied.',
19
+ ])('credits an unambiguous fix reply: %s', (reply) => {
20
+ expect(classifyDisposition(thread(reply))).toBe('accepted-fix');
21
+ });
22
+ it('maps accepted-fix → TP', () => {
23
+ expect(dispositionToLabel('accepted-fix')).toBe('TP');
24
+ });
25
+ });
26
+ describe('classifyDisposition — declined-as-false-positive ⟹ FP (correctness rebuttals only)', () => {
27
+ it.each([
28
+ 'This is a false positive — the value is never null here.',
29
+ 'Not a bug, the guard above covers it.',
30
+ 'Works as intended.',
31
+ 'This is by design.',
32
+ 'This is intentional — we want the eager throw.',
33
+ 'Not applicable here.',
34
+ ])('credits an unambiguous correctness rebuttal: %s', (reply) => {
35
+ expect(classifyDisposition(thread(reply))).toBe('declined-as-false-positive');
36
+ });
37
+ it('maps declined-as-false-positive → FP', () => {
38
+ expect(dispositionToLabel('declined-as-false-positive')).toBe('FP');
39
+ });
40
+ });
41
+ describe('classifyDisposition — soft declines ⟹ UNLABELED', () => {
42
+ it('scope: out-of-scope / separate PR', () => {
43
+ expect(classifyDisposition(thread('Out of scope for this PR.'))).toBe('scope');
44
+ expect(classifyDisposition(thread('Will do this in a separate PR.'))).toBe('scope');
45
+ });
46
+ it('defer: follow-up / tracked / won’t fix', () => {
47
+ expect(classifyDisposition(thread('Tracked in #1234, follow-up.'))).toBe('defer');
48
+ expect(classifyDisposition(thread("Won't fix for now."))).toBe('defer');
49
+ });
50
+ it('superseded: the flagged code was refactored away', () => {
51
+ expect(classifyDisposition(thread('Refactored — no longer applies.'))).toBe('superseded');
52
+ });
53
+ it('style: a subjective nit', () => {
54
+ expect(classifyDisposition(thread('Just a nit, leaving as-is.'))).toBe('style');
55
+ });
56
+ it.each(['scope', 'defer', 'superseded', 'style', 'ambiguous'])('every UNLABELED class maps to null: %s', (cls) => {
57
+ expect(dispositionToLabel(cls)).toBeNull();
58
+ });
59
+ });
60
+ describe('classifyDisposition — ambiguous ⟹ UNLABELED (conservative-by-construction)', () => {
61
+ it('no human reply (bot-only thread) is ambiguous — isResolved alone is never TP', () => {
62
+ expect(classifyDisposition([{ author: BOT, body: 'Consider extracting this.' }])).toBe('ambiguous');
63
+ });
64
+ it('an empty / whitespace human reply is ambiguous', () => {
65
+ expect(classifyDisposition(thread(' '))).toBe('ambiguous');
66
+ });
67
+ it('a human reply with no recognizable disposition is ambiguous', () => {
68
+ expect(classifyDisposition(thread('Thanks for the review!'))).toBe('ambiguous');
69
+ });
70
+ it('conflicting fix + false-positive signals collapse to ambiguous', () => {
71
+ expect(classifyDisposition(thread('It is by design, but I fixed it anyway.'))).toBe('ambiguous');
72
+ });
73
+ it('an impure fix (fix + scope) does not credit TP', () => {
74
+ expect(classifyDisposition(thread('Fixed the related part; the rest is out of scope.'))).toBe('ambiguous');
75
+ });
76
+ it('an impure rebuttal (false-positive + defer) does not credit FP', () => {
77
+ expect(classifyDisposition(thread('Arguably a false positive, but tracked in #99 either way.'))).toBe('ambiguous');
78
+ });
79
+ });
80
+ describe("codex's falsifying case — a scope/defer decline must NEVER become FP", () => {
81
+ it('"declined, tracked for later / too broad for this PR" is UNLABELED, not FP', () => {
82
+ const cls = classifyDisposition(thread('Declined — tracked for later, too broad for this PR.'));
83
+ expect(cls).not.toBe('declined-as-false-positive');
84
+ expect(dispositionToLabel(cls)).toBeNull();
85
+ });
86
+ it('the binary primitive would have called this `declined`; we keep it UNLABELED', () => {
87
+ // bare "declined" with no correctness rebuttal is not an FP claim.
88
+ expect(dispositionToLabel(classifyDisposition(thread('Declined.')))).toBeNull();
89
+ });
90
+ });
91
+ describe('classifyDisposition — bot replies are not dispositions', () => {
92
+ it('a bot follow-up does not count as a human fix signal', () => {
93
+ const t = [
94
+ { author: BOT, body: 'Potential issue.' },
95
+ { author: 'greptileai[bot]', body: 'Fixed in the suggested commit.' },
96
+ ];
97
+ expect(classifyDisposition(t)).toBe('ambiguous');
98
+ });
99
+ });
100
+ describe('classifyDisposition — negation / over-match regressions (#2230 bot panel + strategy-claude)', () => {
101
+ // CR #2230 round-4: every negation regression asserts FULLY UNLABELED
102
+ // (dispositionToLabel === null), not just "not the one label" — so a regression
103
+ // to EITHER mislabel (TP or FP) fails the test, not only the expected direction.
104
+ const isUnlabeled = (reply) => dispositionToLabel(classifyDisposition(thread(reply))) === null;
105
+ it('GCA :95 — "this is not correct" / "correct, I will fix it" is an AGREEMENT, neither TP nor FP', () => {
106
+ expect(isUnlabeled('This is not correct.')).toBe(true);
107
+ expect(isUnlabeled('You are correct, I will fix it.')).toBe(true);
108
+ });
109
+ it('greptile :91 — "this behavior is not intentional" is not a false-positive rebuttal', () => {
110
+ expect(isUnlabeled('This behavior is not intentional but matches the contract.')).toBe(true);
111
+ });
112
+ it('strategy-claude — "intentionally structured it, will fix the edge case" is not FP', () => {
113
+ // future-tense "will fix" is not in the fix bank; the anchored `is intentional`
114
+ // no longer trips on the bare adverb → no false FP.
115
+ expect(isUnlabeled('Intentionally structured it this way; will fix the edge case.')).toBe(true);
116
+ });
117
+ it('greptile :78 P1 — negation-blind "not been addressed" / "not applied" is not a fix', () => {
118
+ expect(isUnlabeled('This has not been addressed yet.')).toBe(true);
119
+ expect(isUnlabeled('That was not applied.')).toBe(true);
120
+ });
121
+ it('strategy-claude / greptile — "Well done, but this still needs work" is not a fix', () => {
122
+ expect(isUnlabeled('Well done, but this still needs work.')).toBe(true);
123
+ });
124
+ it('greptile :112 — lowercase "todo: track this" is recognized as a defer', () => {
125
+ expect(classifyDisposition(thread('todo: track this separately.'))).toBe('defer');
126
+ });
127
+ it('CR round-2 — praise words dropped: "not a good catch" / bare "good catch" are unlabeled', () => {
128
+ expect(isUnlabeled('Not a good catch — the guard is in the parent.')).toBe(true);
129
+ // bare praise without a fix confirmation is not an accepted-fix (only "…, fixed" is).
130
+ expect(classifyDisposition(thread('Good catch!'))).toBe('ambiguous');
131
+ });
132
+ it('CR round-3 — `fixed` is negation-guarded: "not fixed yet" / "has not been fixed" are unlabeled', () => {
133
+ for (const reply of [
134
+ "This isn't fixed yet.",
135
+ 'This has not been fixed.',
136
+ 'Never fixed this.',
137
+ 'No, that was not fixed.',
138
+ ]) {
139
+ expect(isUnlabeled(reply)).toBe(true);
140
+ }
141
+ // …but a genuine fix in its own clause still credits, even beside a negated one.
142
+ expect(classifyDisposition(thread('Not sure that was the cause, but I fixed it anyway.'))).toBe('accepted-fix');
143
+ });
144
+ });
145
+ //# sourceMappingURL=disposition-taxonomy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disposition-taxonomy.test.js","sourceRoot":"","sources":["../../src/spine/disposition-taxonomy.test.ts"],"names":[],"mappings":"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"}
@@ -62,6 +62,18 @@ export declare class ArchivedRuleInScopeError extends Error {
62
62
  readonly archivedRuleIds: string[];
63
63
  constructor(archivedRuleIds: string[]);
64
64
  }
65
+ /**
66
+ * Normalize a matched line for the content-based labelId (A2/A3). Trailing
67
+ * whitespace is dropped so cosmetic EOL drift between the post-image and the
68
+ * diff does not split a firing into a new labelId; interior content is
69
+ * preserved (the label must still distinguish genuinely different lines).
70
+ *
71
+ * Exported so the 5d-iii label-deriver's span-join normalizes a disposition's
72
+ * added hunk rows with the EXACT same rule the firing's `matchedLine` uses —
73
+ * the content bind keys on the same bytes the labelId keys on, so the two can
74
+ * never silently drift apart (codex hard fold + the panel anti-drift mandate).
75
+ */
76
+ export declare function normalizeMatchedLine(line: string): string;
65
77
  /**
66
78
  * fold-F — assert no `status:'archived'` rule is in the scored set (Tenet 4).
67
79
  * Called at the scorer input boundary BEFORE the engine runs, so
@@ -1 +1 @@
1
- {"version":3,"file":"windtunnel-firing.d.ts","sourceRoot":"","sources":["../../src/spine/windtunnel-firing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"windtunnel-firing.d.ts","sourceRoot":"","sources":["../../src/spine/windtunnel-firing.ts"],"names":[],"mappings":"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"}
@@ -36,8 +36,13 @@ export class ArchivedRuleInScopeError extends Error {
36
36
  * whitespace is dropped so cosmetic EOL drift between the post-image and the
37
37
  * diff does not split a firing into a new labelId; interior content is
38
38
  * preserved (the label must still distinguish genuinely different lines).
39
+ *
40
+ * Exported so the 5d-iii label-deriver's span-join normalizes a disposition's
41
+ * added hunk rows with the EXACT same rule the firing's `matchedLine` uses —
42
+ * the content bind keys on the same bytes the labelId keys on, so the two can
43
+ * never silently drift apart (codex hard fold + the panel anti-drift mandate).
39
44
  */
40
- function normalizeMatchedLine(line) {
45
+ export function normalizeMatchedLine(line) {
41
46
  return line.replace(/\s+$/, '');
42
47
  }
43
48
  /** The rule id used for firings + ground-truth joins (the lessonHash). */
@@ -1 +1 @@
1
- {"version":3,"file":"windtunnel-firing.js","sourceRoot":"","sources":["../../src/spine/windtunnel-firing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"windtunnel-firing.js","sourceRoot":"","sources":["../../src/spine/windtunnel-firing.ts"],"names":[],"mappings":"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"}
@@ -177,16 +177,22 @@ export declare const WindtunnelLockSchema: z.ZodEffects<z.ZodObject<{
177
177
  fixtureSha: z.ZodString;
178
178
  llmReplaySha: z.ZodOptional<z.ZodString>;
179
179
  prDiffsSha: z.ZodOptional<z.ZodString>;
180
+ corpusDispositionsSha: z.ZodOptional<z.ZodString>;
181
+ groundTruthSha: z.ZodOptional<z.ZodString>;
180
182
  }, "strip", z.ZodTypeAny, {
181
183
  mechanism: string;
182
184
  fixtureSha: string;
183
185
  llmReplaySha?: string | undefined;
184
186
  prDiffsSha?: string | undefined;
187
+ corpusDispositionsSha?: string | undefined;
188
+ groundTruthSha?: string | undefined;
185
189
  }, {
186
190
  mechanism: string;
187
191
  fixtureSha: string;
188
192
  llmReplaySha?: string | undefined;
189
193
  prDiffsSha?: string | undefined;
194
+ corpusDispositionsSha?: string | undefined;
195
+ groundTruthSha?: string | undefined;
190
196
  }>;
191
197
  }, "strip", z.ZodTypeAny, {
192
198
  positiveRef: string;
@@ -196,6 +202,8 @@ export declare const WindtunnelLockSchema: z.ZodEffects<z.ZodObject<{
196
202
  fixtureSha: string;
197
203
  llmReplaySha?: string | undefined;
198
204
  prDiffsSha?: string | undefined;
205
+ corpusDispositionsSha?: string | undefined;
206
+ groundTruthSha?: string | undefined;
199
207
  };
200
208
  }, {
201
209
  positiveRef: string;
@@ -205,6 +213,8 @@ export declare const WindtunnelLockSchema: z.ZodEffects<z.ZodObject<{
205
213
  fixtureSha: string;
206
214
  llmReplaySha?: string | undefined;
207
215
  prDiffsSha?: string | undefined;
216
+ corpusDispositionsSha?: string | undefined;
217
+ groundTruthSha?: string | undefined;
208
218
  };
209
219
  }>;
210
220
  cullRateThreshold: z.ZodNumber;
@@ -297,6 +307,8 @@ export declare const WindtunnelLockSchema: z.ZodEffects<z.ZodObject<{
297
307
  fixtureSha: string;
298
308
  llmReplaySha?: string | undefined;
299
309
  prDiffsSha?: string | undefined;
310
+ corpusDispositionsSha?: string | undefined;
311
+ groundTruthSha?: string | undefined;
300
312
  };
301
313
  };
302
314
  cullRateThreshold: number;
@@ -361,6 +373,8 @@ export declare const WindtunnelLockSchema: z.ZodEffects<z.ZodObject<{
361
373
  fixtureSha: string;
362
374
  llmReplaySha?: string | undefined;
363
375
  prDiffsSha?: string | undefined;
376
+ corpusDispositionsSha?: string | undefined;
377
+ groundTruthSha?: string | undefined;
364
378
  };
365
379
  };
366
380
  cullRateThreshold: number;
@@ -425,6 +439,8 @@ export declare const WindtunnelLockSchema: z.ZodEffects<z.ZodObject<{
425
439
  fixtureSha: string;
426
440
  llmReplaySha?: string | undefined;
427
441
  prDiffsSha?: string | undefined;
442
+ corpusDispositionsSha?: string | undefined;
443
+ groundTruthSha?: string | undefined;
428
444
  };
429
445
  };
430
446
  cullRateThreshold: number;
@@ -489,6 +505,8 @@ export declare const WindtunnelLockSchema: z.ZodEffects<z.ZodObject<{
489
505
  fixtureSha: string;
490
506
  llmReplaySha?: string | undefined;
491
507
  prDiffsSha?: string | undefined;
508
+ corpusDispositionsSha?: string | undefined;
509
+ groundTruthSha?: string | undefined;
492
510
  };
493
511
  };
494
512
  cullRateThreshold: number;
@@ -1 +1 @@
1
- {"version":3,"file":"windtunnel-lock.d.ts","sourceRoot":"","sources":["../../src/spine/windtunnel-lock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyI7B,CAAC;AAEL,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,yBAAyB,EAAE,MAAM,GAChC,MAAM,CAMR"}
1
+ {"version":3,"file":"windtunnel-lock.d.ts","sourceRoot":"","sources":["../../src/spine/windtunnel-lock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0K7B,CAAC;AAEL,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,yBAAyB,EAAE,MAAM,GAChC,MAAM,CAMR"}
@@ -103,6 +103,39 @@ export const WindtunnelLockSchema = z
103
103
  // lands the certifying path will hard-error if absent (no safe default for
104
104
  // an integrity hash).
105
105
  prDiffsSha: z.string().regex(SHA256_REGEX, 'prDiffsSha must be a 64-hex sha256').optional(),
106
+ // #709 fold-2 sibling (5d-ii): an integrity digest over the frozen
107
+ // `corpus-dispositions.json` — the held-out disposition PROVENANCE the
108
+ // label-deriver classifies into the answer key. Unlike `prDiffsSha` (run-
109
+ // critical, the scoring source the run reads), this is a PROVENANCE digest:
110
+ // the deriver verifies it before deriving (Prop-285 §6.6 crystallized-
111
+ // hallucination guard — a tampered disposition would silently flip a label),
112
+ // and `freeze` surfaces a provenance warn. ENCODING (mirrors prDiffsSha):
113
+ // sha256 (64-hex) over the EXACT on-disk `corpus-dispositions.json` bytes
114
+ // (canonical 2-space JSON + trailing newline, CRLF→LF-normalized), so an
115
+ // enforcer can `sha256` the file directly. STAMPED by `fetch-dispositions`;
116
+ // the deriver re-derives + hard-fails on mismatch (5d-iii). Additive-
117
+ // optional: locks with no disposition source parse unchanged.
118
+ corpusDispositionsSha: z
119
+ .string()
120
+ .regex(SHA256_REGEX, 'corpusDispositionsSha must be a 64-hex sha256')
121
+ .optional(),
122
+ // #709 5d-iii: an integrity digest over the frozen `ground-truth-labels.json`
123
+ // — the cert-run ANSWER KEY (firingLabelId → TP|FP) the deriver produces from
124
+ // the dispositions. Run-critical like `prDiffsSha`: the certifying run reads
125
+ // the MATERIALIZED frozen labels (never re-derives), so the digest is what
126
+ // makes "the answer key the run graded against is the one the deriver emitted"
127
+ // verifiable. ENCODING (mirrors prDiffsSha / corpusDispositionsSha): sha256
128
+ // (64-hex) over the EXACT on-disk `ground-truth-labels.json` bytes (canonical
129
+ // 2-space JSON + trailing newline, CRLF→LF-normalized), so an enforcer can
130
+ // `sha256` the file directly. STAMPED by `derive-labels` (5d-iii-i); the run's
131
+ // `loadCertRunFixtures` verify-then-parses it on a single read + `freeze` warns
132
+ // (5d-iii-ii). Additive-optional: locks with no derived answer key parse
133
+ // unchanged; once the run-enforcement lands the certifying path hard-errors if
134
+ // absent (no safe default for an integrity hash).
135
+ groundTruthSha: z
136
+ .string()
137
+ .regex(SHA256_REGEX, 'groundTruthSha must be a 64-hex sha256')
138
+ .optional(),
106
139
  }),
107
140
  }),
108
141
  cullRateThreshold: z
@@ -1 +1 @@
1
- {"version":3,"file":"windtunnel-lock.js","sourceRoot":"","sources":["../../src/spine/windtunnel-lock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"windtunnel-lock.js","sourceRoot":"","sources":["../../src/spine/windtunnel-lock.ts"],"names":[],"mappings":"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"}