@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.
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/spine/corpus-dispositions.d.ts +274 -0
- package/dist/spine/corpus-dispositions.d.ts.map +1 -0
- package/dist/spine/corpus-dispositions.js +71 -0
- package/dist/spine/corpus-dispositions.js.map +1 -0
- package/dist/spine/corpus-dispositions.test.d.ts +2 -0
- package/dist/spine/corpus-dispositions.test.d.ts.map +1 -0
- package/dist/spine/corpus-dispositions.test.js +55 -0
- package/dist/spine/corpus-dispositions.test.js.map +1 -0
- package/dist/spine/derive-labels.d.ts +99 -0
- package/dist/spine/derive-labels.d.ts.map +1 -0
- package/dist/spine/derive-labels.js +160 -0
- package/dist/spine/derive-labels.js.map +1 -0
- package/dist/spine/derive-labels.test.d.ts +2 -0
- package/dist/spine/derive-labels.test.d.ts.map +1 -0
- package/dist/spine/derive-labels.test.js +179 -0
- package/dist/spine/derive-labels.test.js.map +1 -0
- package/dist/spine/disposition-taxonomy.d.ts +40 -0
- package/dist/spine/disposition-taxonomy.d.ts.map +1 -0
- package/dist/spine/disposition-taxonomy.js +216 -0
- package/dist/spine/disposition-taxonomy.js.map +1 -0
- package/dist/spine/disposition-taxonomy.test.d.ts +2 -0
- package/dist/spine/disposition-taxonomy.test.d.ts.map +1 -0
- package/dist/spine/disposition-taxonomy.test.js +145 -0
- package/dist/spine/disposition-taxonomy.test.js.map +1 -0
- package/dist/spine/windtunnel-firing.d.ts +12 -0
- package/dist/spine/windtunnel-firing.d.ts.map +1 -1
- package/dist/spine/windtunnel-firing.js +6 -1
- package/dist/spine/windtunnel-firing.js.map +1 -1
- package/dist/spine/windtunnel-lock.d.ts +18 -0
- package/dist/spine/windtunnel-lock.d.ts.map +1 -1
- package/dist/spine/windtunnel-lock.js +33 -0
- package/dist/spine/windtunnel-lock.js.map +1 -1
- 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 @@
|
|
|
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":"AACA,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,uBAAuB,CAAC;AAEnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIzD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;IAChD,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,mFAAmF;IACnF,eAAe,EAAE,OAAO,CAAC;IACzB,gFAAgF;IAChF,eAAe,EAAE,OAAO,CAAC;IACzB,uEAAuE;IACvE,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,YAAY,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5F;AAED,0EAA0E;AAC1E,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,UAAU,EAAE,oBAAoB,EAAE,CAAC;gBAChC,UAAU,EAAE,oBAAoB,EAAE;CAkB/C;AAED,6EAA6E;AAC7E,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;gBACvB,eAAe,EAAE,MAAM,EAAE;CAStC;
|
|
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":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAsDrD,0EAA0E;AAC1E,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IACzC,UAAU,CAAyB;IAC5C,YAAY,UAAkC;QAC5C,MAAM,MAAM,GAAG,UAAU;aACtB,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,eAAe,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,YAAY,CAAC,MAAM,YAAY;YAC3F,CAAC,CAAC,YAAY;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC;iBAC5E,IAAI,CAAC,IAAI,CAAC,CAChB;aACA,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,KAAK,CACH,oDAAoD,UAAU,CAAC,MAAM,qBAAqB;YACxF,mFAAmF;YACnF,oCAAoC,MAAM,EAAE,CAC/C,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED,6EAA6E;AAC7E,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,eAAe,CAAW;IACnC,YAAY,eAAyB;QACnC,KAAK,CACH,sCAAsC,eAAe,CAAC,MAAM,gCAAgC;YAC1F,4FAA4F;YAC5F,+DAA+D,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC/F,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;CACF;AAED,wDAAwD;AAExD
|
|
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
|
|
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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"}
|