@mmnto/totem 1.67.0 → 1.68.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/capability/falsification.d.ts +18 -0
- package/dist/capability/falsification.d.ts.map +1 -0
- package/dist/capability/falsification.js +56 -0
- package/dist/capability/falsification.js.map +1 -0
- package/dist/capability/falsification.test.d.ts +2 -0
- package/dist/capability/falsification.test.d.ts.map +1 -0
- package/dist/capability/falsification.test.js +112 -0
- package/dist/capability/falsification.test.js.map +1 -0
- package/dist/capability/regenerate.d.ts +20 -0
- package/dist/capability/regenerate.d.ts.map +1 -0
- package/dist/capability/regenerate.js +0 -0
- package/dist/capability/regenerate.js.map +1 -0
- package/dist/capability/regenerate.test.d.ts +2 -0
- package/dist/capability/regenerate.test.d.ts.map +1 -0
- package/dist/capability/regenerate.test.js +136 -0
- package/dist/capability/regenerate.test.js.map +1 -0
- package/dist/capability/review-catch.d.ts +53 -0
- package/dist/capability/review-catch.d.ts.map +1 -0
- package/dist/capability/review-catch.js +92 -0
- package/dist/capability/review-catch.js.map +1 -0
- package/dist/capability/review-catch.test.d.ts +2 -0
- package/dist/capability/review-catch.test.d.ts.map +1 -0
- package/dist/capability/review-catch.test.js +90 -0
- package/dist/capability/review-catch.test.js.map +1 -0
- package/dist/capability/schema.d.ts +244 -0
- package/dist/capability/schema.d.ts.map +1 -0
- package/dist/capability/schema.js +141 -0
- package/dist/capability/schema.js.map +1 -0
- package/dist/capability/schema.test.d.ts +2 -0
- package/dist/capability/schema.test.d.ts.map +1 -0
- package/dist/capability/schema.test.js +93 -0
- package/dist/capability/schema.test.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/spine/candidate-rule.d.ts +84 -0
- package/dist/spine/candidate-rule.d.ts.map +1 -0
- package/dist/spine/candidate-rule.js +68 -0
- package/dist/spine/candidate-rule.js.map +1 -0
- package/dist/spine/candidate-rule.test.d.ts +2 -0
- package/dist/spine/candidate-rule.test.d.ts.map +1 -0
- package/dist/spine/candidate-rule.test.js +40 -0
- package/dist/spine/candidate-rule.test.js.map +1 -0
- package/dist/spine/classify.d.ts +93 -0
- package/dist/spine/classify.d.ts.map +1 -0
- package/dist/spine/classify.js +190 -0
- package/dist/spine/classify.js.map +1 -0
- package/dist/spine/classify.test.d.ts +2 -0
- package/dist/spine/classify.test.d.ts.map +1 -0
- package/dist/spine/classify.test.js +302 -0
- package/dist/spine/classify.test.js.map +1 -0
- package/dist/spine/compile.d.ts +62 -0
- package/dist/spine/compile.d.ts.map +1 -0
- package/dist/spine/compile.js +204 -0
- package/dist/spine/compile.js.map +1 -0
- package/dist/spine/compile.test.d.ts +2 -0
- package/dist/spine/compile.test.d.ts.map +1 -0
- package/dist/spine/compile.test.js +327 -0
- package/dist/spine/compile.test.js.map +1 -0
- package/dist/spine/extract.d.ts +146 -0
- package/dist/spine/extract.d.ts.map +1 -0
- package/dist/spine/extract.js +227 -0
- package/dist/spine/extract.js.map +1 -0
- package/dist/spine/extract.test.d.ts +2 -0
- package/dist/spine/extract.test.d.ts.map +1 -0
- package/dist/spine/extract.test.js +382 -0
- package/dist/spine/extract.test.js.map +1 -0
- package/dist/spine/ledgers.d.ts +1102 -0
- package/dist/spine/ledgers.d.ts.map +1 -0
- package/dist/spine/ledgers.js +209 -0
- package/dist/spine/ledgers.js.map +1 -0
- package/dist/spine/miner-harness.d.ts +30 -0
- package/dist/spine/miner-harness.d.ts.map +1 -0
- package/dist/spine/miner-harness.js +214 -0
- package/dist/spine/miner-harness.js.map +1 -0
- package/dist/spine/miner-harness.test.d.ts +2 -0
- package/dist/spine/miner-harness.test.d.ts.map +1 -0
- package/dist/spine/miner-harness.test.js +231 -0
- package/dist/spine/miner-harness.test.js.map +1 -0
- package/dist/spine/selection-rule.d.ts +4 -1
- package/dist/spine/selection-rule.d.ts.map +1 -1
- package/dist/spine/selection-rule.js +3 -2
- package/dist/spine/selection-rule.js.map +1 -1
- package/dist/spine/split.d.ts +149 -0
- package/dist/spine/split.d.ts.map +1 -0
- package/dist/spine/split.js +235 -0
- package/dist/spine/split.js.map +1 -0
- package/dist/spine/split.test.d.ts +2 -0
- package/dist/spine/split.test.d.ts.map +1 -0
- package/dist/spine/split.test.js +142 -0
- package/dist/spine/split.test.js.map +1 -0
- package/dist/spine/windtunnel-lock.d.ts +8 -8
- package/package.json +1 -1
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { runFalsificationHarness } from './miner-harness.js';
|
|
3
|
+
const sha = (n) => String(n).padStart(40, '0');
|
|
4
|
+
/**
|
|
5
|
+
* A contract-clean miner run: corpus [1,2,3,4], train [1,2] (both emitted),
|
|
6
|
+
* heldOut [3,4] (controls 3/4), no drops, no held-out fetches, seed-blind.
|
|
7
|
+
*/
|
|
8
|
+
function greenLedgers() {
|
|
9
|
+
return {
|
|
10
|
+
emission: {
|
|
11
|
+
entries: [
|
|
12
|
+
{
|
|
13
|
+
candidateRef: 'c1',
|
|
14
|
+
provenance: { mergedPr: 1, reviewThread: 'rt-1', commitSha: sha(1) },
|
|
15
|
+
classifierDisposition: 'structural',
|
|
16
|
+
routing: 'compile',
|
|
17
|
+
classifierLedgerRef: 'cl-1',
|
|
18
|
+
unverified: true,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
candidateRef: 'c2',
|
|
22
|
+
provenance: { mergedPr: 2, reviewThread: 'rt-2', commitSha: sha(2) },
|
|
23
|
+
classifierDisposition: 'structural',
|
|
24
|
+
routing: 'compile',
|
|
25
|
+
classifierLedgerRef: 'cl-2',
|
|
26
|
+
unverified: true,
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
extractionInputsAttestation: { seedClassesProvided: false },
|
|
30
|
+
},
|
|
31
|
+
drop: { entries: [] },
|
|
32
|
+
classifier: {
|
|
33
|
+
entries: [
|
|
34
|
+
{
|
|
35
|
+
candidateRef: 'cl-1',
|
|
36
|
+
disposition: 'structural',
|
|
37
|
+
stage4Confirmed: true,
|
|
38
|
+
dispositionSource: 'classified',
|
|
39
|
+
stage4Outcome: 'confirmed',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
candidateRef: 'cl-2',
|
|
43
|
+
disposition: 'structural',
|
|
44
|
+
stage4Confirmed: true,
|
|
45
|
+
dispositionSource: 'classified',
|
|
46
|
+
stage4Outcome: 'confirmed',
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
split: {
|
|
51
|
+
split: {
|
|
52
|
+
asOfCommit: sha(100),
|
|
53
|
+
trainPrs: [1, 2],
|
|
54
|
+
heldOutPrs: [3, 4],
|
|
55
|
+
excludedPrs: [],
|
|
56
|
+
positiveControlPrs: [3],
|
|
57
|
+
negativeControlPrs: [4],
|
|
58
|
+
splitRule: { predicate: 'code-touching non-bot', cutIndex: 2 },
|
|
59
|
+
},
|
|
60
|
+
corpus: [1, 2, 3, 4],
|
|
61
|
+
corpusMergeCommits: [1, 2, 3, 4].map((pr) => ({ pr, mergeCommit: sha(pr) })),
|
|
62
|
+
},
|
|
63
|
+
apiUsage: {
|
|
64
|
+
entries: [
|
|
65
|
+
{ targetPr: 1, slice: 'train', fetchKind: 'review-thread' },
|
|
66
|
+
{ targetPr: 2, slice: 'train', fetchKind: 'review-thread' },
|
|
67
|
+
],
|
|
68
|
+
heldOutFetchCount: 0,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
// Deep clone via JSON so mutations don't bleed across cases (no Dates/fns here).
|
|
73
|
+
function clone(x) {
|
|
74
|
+
return JSON.parse(JSON.stringify(x));
|
|
75
|
+
}
|
|
76
|
+
/** Distinct FM clauses the harness reports for a raw ledger object, sorted. */
|
|
77
|
+
function clauses(raw) {
|
|
78
|
+
const r = runFalsificationHarness(raw);
|
|
79
|
+
return [...new Set(r.violations.map((v) => v.clause))].sort();
|
|
80
|
+
}
|
|
81
|
+
describe('runFalsificationHarness — green', () => {
|
|
82
|
+
it('passes a contract-clean miner run (no FM clause holds)', () => {
|
|
83
|
+
const r = runFalsificationHarness(greenLedgers());
|
|
84
|
+
expect(r.ok).toBe(true);
|
|
85
|
+
expect(r.violations).toEqual([]);
|
|
86
|
+
});
|
|
87
|
+
it('allows a train PR in BOTH the emission and drop ledgers (FM(i) is at-least-one, not XOR)', () => {
|
|
88
|
+
const g = clone(greenLedgers());
|
|
89
|
+
// PR 2 already has an emitted candidate (c2); a second candidate from the same
|
|
90
|
+
// PR's review thread is dropped — in-both is legitimate, not a violation.
|
|
91
|
+
g.drop.entries.push({ sourcePr: 2, reasonCode: 'truncated' });
|
|
92
|
+
expect(runFalsificationHarness(g).ok).toBe(true);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe('runFalsificationHarness — each red fixture fails on EXACTLY its clause', () => {
|
|
96
|
+
it('(a) incomplete provenance tuple', () => {
|
|
97
|
+
const g = clone(greenLedgers());
|
|
98
|
+
delete g.emission.entries[0].provenance.commitSha;
|
|
99
|
+
expect(clauses(g)).toEqual(['a']);
|
|
100
|
+
});
|
|
101
|
+
it('(b) candidate minted non-unverified', () => {
|
|
102
|
+
const g = clone(greenLedgers());
|
|
103
|
+
g.emission.entries[0].unverified = false;
|
|
104
|
+
expect(clauses(g)).toEqual(['b']);
|
|
105
|
+
});
|
|
106
|
+
it('(c) behavioral candidate routed to compile', () => {
|
|
107
|
+
const g = clone(greenLedgers());
|
|
108
|
+
g.emission.entries[0].classifierDisposition = 'behavioral';
|
|
109
|
+
expect(clauses(g)).toEqual(['c']);
|
|
110
|
+
});
|
|
111
|
+
it('(c) emission disposition disagrees with the classifier ledger', () => {
|
|
112
|
+
const g = clone(greenLedgers());
|
|
113
|
+
g.classifier.entries[0].disposition = 'behavioral'; // emission cl-1 attests structural
|
|
114
|
+
g.emission.entries[0].routing = 'rag-only'; // isolate the mismatch from compile-routing
|
|
115
|
+
expect(clauses(g)).toEqual(['c']);
|
|
116
|
+
});
|
|
117
|
+
it('(d) out-of-corpus split member', () => {
|
|
118
|
+
const g = clone(greenLedgers());
|
|
119
|
+
g.split.split.heldOutPrs = [3, 4, 99];
|
|
120
|
+
g.split.corpusMergeCommits.push({ pr: 99, mergeCommit: sha(99) });
|
|
121
|
+
expect(clauses(g)).toEqual(['d']);
|
|
122
|
+
});
|
|
123
|
+
it('(e-split) control outside heldOut (slice disjointness)', () => {
|
|
124
|
+
const g = clone(greenLedgers());
|
|
125
|
+
g.split.split.positiveControlPrs = [1]; // a train PR, not in heldOut
|
|
126
|
+
expect(clauses(g)).toEqual(['e-split']);
|
|
127
|
+
});
|
|
128
|
+
it('(e-split) a PR tagged as both positive and negative control', () => {
|
|
129
|
+
const g = clone(greenLedgers());
|
|
130
|
+
g.split.split.negativeControlPrs = [3, 4]; // 3 is already a positive control
|
|
131
|
+
expect(clauses(g)).toEqual(['e-split']);
|
|
132
|
+
});
|
|
133
|
+
it('(e-emission) candidate sourced from a held-out PR', () => {
|
|
134
|
+
const g = clone(greenLedgers());
|
|
135
|
+
g.emission.entries.push({
|
|
136
|
+
candidateRef: 'c3',
|
|
137
|
+
provenance: { mergedPr: 3, reviewThread: 'rt-3', commitSha: sha(3) }, // PR 3 is held-out
|
|
138
|
+
classifierDisposition: 'structural',
|
|
139
|
+
routing: 'compile',
|
|
140
|
+
classifierLedgerRef: 'cl-3',
|
|
141
|
+
unverified: true,
|
|
142
|
+
});
|
|
143
|
+
g.classifier.entries.push({
|
|
144
|
+
candidateRef: 'cl-3',
|
|
145
|
+
disposition: 'structural',
|
|
146
|
+
stage4Confirmed: true,
|
|
147
|
+
dispositionSource: 'classified',
|
|
148
|
+
stage4Outcome: 'confirmed',
|
|
149
|
+
});
|
|
150
|
+
expect(clauses(g)).toEqual(['e-emission']);
|
|
151
|
+
});
|
|
152
|
+
it('(e-emission) provenance commitSha does not match the PR frozen merge commit', () => {
|
|
153
|
+
const g = clone(greenLedgers());
|
|
154
|
+
g.emission.entries[0].provenance.commitSha = sha(99); // PR 1's frozen merge commit is sha(1)
|
|
155
|
+
expect(clauses(g)).toEqual(['e-emission']);
|
|
156
|
+
});
|
|
157
|
+
it('(f) seed class supplied to extraction', () => {
|
|
158
|
+
const g = clone(greenLedgers());
|
|
159
|
+
g.emission.extractionInputsAttestation.seedClassesProvided = true;
|
|
160
|
+
expect(clauses(g)).toEqual(['f']);
|
|
161
|
+
});
|
|
162
|
+
it('(g) silent corpus drop', () => {
|
|
163
|
+
const g = clone(greenLedgers());
|
|
164
|
+
g.split.split.heldOutPrs = [3];
|
|
165
|
+
g.split.split.negativeControlPrs = [];
|
|
166
|
+
expect(clauses(g)).toEqual(['g']);
|
|
167
|
+
});
|
|
168
|
+
it('(h) held-out content fetch', () => {
|
|
169
|
+
const g = clone(greenLedgers());
|
|
170
|
+
g.apiUsage.heldOutFetchCount = 1;
|
|
171
|
+
expect(clauses(g)).toEqual(['h']);
|
|
172
|
+
});
|
|
173
|
+
it('(h) a held-out PR fetched under a mislabeled slice:train', () => {
|
|
174
|
+
const g = clone(greenLedgers());
|
|
175
|
+
// PR 3 is held-out; labeling the fetch "train" must NOT hide it (partition is derived).
|
|
176
|
+
g.apiUsage.entries.push({ targetPr: 3, slice: 'train', fetchKind: 'review-thread' });
|
|
177
|
+
expect(clauses(g)).toEqual(['h']);
|
|
178
|
+
});
|
|
179
|
+
it('(i) train PR processed by neither emission nor drop', () => {
|
|
180
|
+
const g = clone(greenLedgers());
|
|
181
|
+
g.emission.entries.pop(); // remove the PR 2 candidate, do not drop it either
|
|
182
|
+
g.classifier.entries.pop();
|
|
183
|
+
expect(clauses(g)).toEqual(['i']);
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
describe('runFalsificationHarness — stage4 consistency (slice 4; NOT an FM letter)', () => {
|
|
187
|
+
it('flags a confirmed outcome whose stage4Confirmed is false (the OQ4 red craft)', () => {
|
|
188
|
+
const g = clone(greenLedgers());
|
|
189
|
+
g.classifier.entries[0].stage4Confirmed = false; // still stage4Outcome: 'confirmed'
|
|
190
|
+
expect(clauses(g)).toEqual(['stage4-consistency']);
|
|
191
|
+
});
|
|
192
|
+
it('flags stage4Confirmed:true with no recorded outcome (cannot be confirmed without evidence)', () => {
|
|
193
|
+
const g = clone(greenLedgers());
|
|
194
|
+
delete g.classifier.entries[0].stage4Outcome;
|
|
195
|
+
expect(clauses(g)).toEqual(['stage4-consistency']);
|
|
196
|
+
});
|
|
197
|
+
it('flags a compile-rejected outcome marked stage4Confirmed:true', () => {
|
|
198
|
+
const g = clone(greenLedgers());
|
|
199
|
+
g.classifier.entries[0].stage4Outcome = 'compile-rejected'; // stage4Confirmed still true
|
|
200
|
+
expect(clauses(g)).toEqual(['stage4-consistency']);
|
|
201
|
+
});
|
|
202
|
+
it('passes archived-out-of-scope with stage4Confirmed:false (legitimately unconfirmed — agy fold-3)', () => {
|
|
203
|
+
const g = clone(greenLedgers());
|
|
204
|
+
g.classifier.entries[0].stage4Confirmed = false;
|
|
205
|
+
g.classifier.entries[0].stage4Outcome = 'archived-out-of-scope';
|
|
206
|
+
expect(runFalsificationHarness(g).ok).toBe(true);
|
|
207
|
+
});
|
|
208
|
+
it('passes untested-no-matches with stage4Confirmed:false (legitimately unconfirmed)', () => {
|
|
209
|
+
const g = clone(greenLedgers());
|
|
210
|
+
g.classifier.entries[0].stage4Confirmed = false;
|
|
211
|
+
g.classifier.entries[0].stage4Outcome = 'untested-no-matches';
|
|
212
|
+
expect(runFalsificationHarness(g).ok).toBe(true);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
describe('runFalsificationHarness — schema completeness', () => {
|
|
216
|
+
it('rejects a split ledger whose corpusMergeCommits omits a corpus PR', () => {
|
|
217
|
+
const g = clone(greenLedgers());
|
|
218
|
+
g.split.corpusMergeCommits = g.split.corpusMergeCommits.filter((e) => e.pr !== 3);
|
|
219
|
+
const r = runFalsificationHarness(g);
|
|
220
|
+
expect(r.ok).toBe(false);
|
|
221
|
+
expect(r.violations.some((v) => v.clause === 'schema')).toBe(true);
|
|
222
|
+
});
|
|
223
|
+
it('rejects a non-SHA mergeCommit in the split ledger', () => {
|
|
224
|
+
const g = clone(greenLedgers());
|
|
225
|
+
g.split.corpusMergeCommits[0].mergeCommit = 'not-a-sha';
|
|
226
|
+
const r = runFalsificationHarness(g);
|
|
227
|
+
expect(r.ok).toBe(false);
|
|
228
|
+
expect(r.violations.some((v) => v.clause === 'schema')).toBe(true);
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
//# sourceMappingURL=miner-harness.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"miner-harness.test.js","sourceRoot":"","sources":["../../src/spine/miner-harness.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,10 @@ export interface SelectionRuleConfig {
|
|
|
16
16
|
excludeBotPrs: boolean;
|
|
17
17
|
/**
|
|
18
18
|
* Corpus window. `all` = every qualifying PR reachable from `asOfCommit`;
|
|
19
|
-
* `bounded` = the `n` MOST-RECENT qualifying PRs
|
|
19
|
+
* `bounded` = the `n` MOST-RECENT qualifying PRs. "Most recent" is by ANCESTRY
|
|
20
|
+
* (topological) order, NOT commit-date (ADR-110 §6 ancestry-not-timestamp): the
|
|
21
|
+
* caller enumerates `metas` newest-first via `git log --topo-order`, and this
|
|
22
|
+
* function takes the first `n` qualifying — see `resolveSelectionRule`.
|
|
20
23
|
*/
|
|
21
24
|
window: {
|
|
22
25
|
type: 'all';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection-rule.d.ts","sourceRoot":"","sources":["../../src/spine/selection-rule.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,0EAA0E;AAC1E,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,gFAAgF;IAChF,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iEAAiE;IACjE,aAAa,EAAE,OAAO,CAAC;IACvB
|
|
1
|
+
{"version":3,"file":"selection-rule.d.ts","sourceRoot":"","sources":["../../src/spine/selection-rule.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,0EAA0E;AAC1E,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,gFAAgF;IAChF,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iEAAiE;IACjE,aAAa,EAAE,OAAO,CAAC;IACvB;;;;;;OAMG;IACH,MAAM,EAAE;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1D;AAED,kFAAkF;AAClF,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,WAAW,EAAE,OAAO,CAAC;IACrB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,qFAAqF;AACrF,MAAM,WAAW,SAAS;IACxB,wCAAwC;IACxC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,wCAAwC;IACxC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wFAAwF;AACxF,qBAAa,uBAAwB,SAAQ,KAAK;aACpB,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;CAM5C;AAuED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAQ9F;AAID;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAIrD;AAID,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGrE;AAOD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAY5D;AAID;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAKzF;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAyB3F;AAID,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAM1E;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAGzE"}
|
|
@@ -182,8 +182,9 @@ export function resolveSelectionRule(metas, config) {
|
|
|
182
182
|
}
|
|
183
183
|
}
|
|
184
184
|
const isRevertedTarget = (mergeCommit) => revertedTargetShas.some((t) => mergeCommit.toLowerCase().startsWith(t));
|
|
185
|
-
// Qualifying PRs in INPUT order — the caller passes them in git
|
|
186
|
-
// (newest-first
|
|
185
|
+
// Qualifying PRs in INPUT order — the caller passes them in `git log --topo-order`
|
|
186
|
+
// order (ancestry newest-first, NOT commit-date; ADR-110 §6 ancestry-not-timestamp),
|
|
187
|
+
// so a bounded window's "most recent N" is the first N here.
|
|
187
188
|
const qualifying = [];
|
|
188
189
|
const seen = new Set();
|
|
189
190
|
for (const m of metas) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection-rule.js","sourceRoot":"","sources":["../../src/spine/selection-rule.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,iFAAiF;AACjF,+EAA+E;AAC/E,kDAAkD;
|
|
1
|
+
{"version":3,"file":"selection-rule.js","sourceRoot":"","sources":["../../src/spine/selection-rule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type PrMeta, type PrSetDiff } from './selection-rule.js';
|
|
3
|
+
/**
|
|
4
|
+
* ADR-111 §5 — the frozen split artifact, committed before extraction. The
|
|
5
|
+
* concrete `cutIndex` is the deferred window-open scalar (Deferred Decisions);
|
|
6
|
+
* the field is required in the committed artifact, only its value is deferred.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SplitArtifactSchema: z.ZodEffects<z.ZodObject<{
|
|
9
|
+
asOfCommit: z.ZodString;
|
|
10
|
+
/** The OLDER ancestry segment — the mining slice. */
|
|
11
|
+
trainPrs: z.ZodArray<z.ZodNumber, "many">;
|
|
12
|
+
/** The NEWER held-out segment — control evaluation. Controls are tags within this. */
|
|
13
|
+
heldOutPrs: z.ZodArray<z.ZodNumber, "many">;
|
|
14
|
+
/** Explicitly enumerated drops (the atomic revert pairs). */
|
|
15
|
+
excludedPrs: z.ZodArray<z.ZodNumber, "many">;
|
|
16
|
+
/** Positive controls — a designated subset (tag) of `heldOutPrs`, never a separate cover bucket. */
|
|
17
|
+
positiveControlPrs: z.ZodArray<z.ZodNumber, "many">;
|
|
18
|
+
/** Negative controls — a designated subset (tag) of `heldOutPrs`. */
|
|
19
|
+
negativeControlPrs: z.ZodArray<z.ZodNumber, "many">;
|
|
20
|
+
splitRule: z.ZodObject<{
|
|
21
|
+
/** Human-readable predicate expression that generated the corpus (mirrors the windtunnel lock's `selectionRule.predicate`). */
|
|
22
|
+
predicate: z.ZodEffects<z.ZodString, string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* Forward-chronological ancestry cut: `trainPrs` = the `cutIndex` OLDEST
|
|
25
|
+
* corpus PRs (ancestry order), `heldOutPrs` = the newer remainder. Concrete
|
|
26
|
+
* value deferred to window-open (ADR-111 Deferred Decisions).
|
|
27
|
+
*/
|
|
28
|
+
cutIndex: z.ZodNumber;
|
|
29
|
+
}, "strip", z.ZodTypeAny, {
|
|
30
|
+
predicate: string;
|
|
31
|
+
cutIndex: number;
|
|
32
|
+
}, {
|
|
33
|
+
predicate: string;
|
|
34
|
+
cutIndex: number;
|
|
35
|
+
}>;
|
|
36
|
+
}, "strip", z.ZodTypeAny, {
|
|
37
|
+
asOfCommit: string;
|
|
38
|
+
trainPrs: number[];
|
|
39
|
+
heldOutPrs: number[];
|
|
40
|
+
excludedPrs: number[];
|
|
41
|
+
positiveControlPrs: number[];
|
|
42
|
+
negativeControlPrs: number[];
|
|
43
|
+
splitRule: {
|
|
44
|
+
predicate: string;
|
|
45
|
+
cutIndex: number;
|
|
46
|
+
};
|
|
47
|
+
}, {
|
|
48
|
+
asOfCommit: string;
|
|
49
|
+
trainPrs: number[];
|
|
50
|
+
heldOutPrs: number[];
|
|
51
|
+
excludedPrs: number[];
|
|
52
|
+
positiveControlPrs: number[];
|
|
53
|
+
negativeControlPrs: number[];
|
|
54
|
+
splitRule: {
|
|
55
|
+
predicate: string;
|
|
56
|
+
cutIndex: number;
|
|
57
|
+
};
|
|
58
|
+
}>, {
|
|
59
|
+
asOfCommit: string;
|
|
60
|
+
trainPrs: number[];
|
|
61
|
+
heldOutPrs: number[];
|
|
62
|
+
excludedPrs: number[];
|
|
63
|
+
positiveControlPrs: number[];
|
|
64
|
+
negativeControlPrs: number[];
|
|
65
|
+
splitRule: {
|
|
66
|
+
predicate: string;
|
|
67
|
+
cutIndex: number;
|
|
68
|
+
};
|
|
69
|
+
}, {
|
|
70
|
+
asOfCommit: string;
|
|
71
|
+
trainPrs: number[];
|
|
72
|
+
heldOutPrs: number[];
|
|
73
|
+
excludedPrs: number[];
|
|
74
|
+
positiveControlPrs: number[];
|
|
75
|
+
negativeControlPrs: number[];
|
|
76
|
+
splitRule: {
|
|
77
|
+
predicate: string;
|
|
78
|
+
cutIndex: number;
|
|
79
|
+
};
|
|
80
|
+
}>;
|
|
81
|
+
export type SplitArtifact = z.infer<typeof SplitArtifactSchema>;
|
|
82
|
+
/** Thrown when `resolveSplit` cannot produce a clean three-way disjoint cover (Tenet 4, fail-loud). */
|
|
83
|
+
export declare class SplitCoverError extends Error {
|
|
84
|
+
readonly result: SplitCoverResult;
|
|
85
|
+
constructor(result: SplitCoverResult);
|
|
86
|
+
}
|
|
87
|
+
/** Structured result of the §5/§8 split-ledger mechanical check. `ok` iff every diagnostic list is empty. */
|
|
88
|
+
export interface SplitCoverResult {
|
|
89
|
+
ok: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Cover vs the frozen corpus, direction-disambiguated so each side falsifies
|
|
92
|
+
* its own clause: `missing` = a corpus PR assigned to no slice (FM(g), silent
|
|
93
|
+
* drop); `extra` = a slice PR outside the corpus (FM(d), out-of-corpus member).
|
|
94
|
+
*/
|
|
95
|
+
cover: PrSetDiff;
|
|
96
|
+
/** Pairwise PR# intersections of {train, heldOut, excluded} that must be empty (the `⊎` disjointness). */
|
|
97
|
+
overlaps: {
|
|
98
|
+
trainHeldOut: number[];
|
|
99
|
+
trainExcluded: number[];
|
|
100
|
+
heldOutExcluded: number[];
|
|
101
|
+
};
|
|
102
|
+
/** Control PRs not contained in `heldOutPrs` — controls must be tags WITHIN heldOut, not a separate bucket. */
|
|
103
|
+
controlsOutsideHeldOut: number[];
|
|
104
|
+
/** PRs tagged as BOTH a positive and a negative control — a PR cannot be both (per-rule control coherence). */
|
|
105
|
+
controlOverlap: number[];
|
|
106
|
+
/** Merge-commit SHAs appearing in more than one slice — disjoint by merge-commit, not only PR# (revert/target straddle guard). */
|
|
107
|
+
mergeCommitCollisions: string[];
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* The §8 split-ledger check: verifies the split is a three-way disjoint cover of
|
|
111
|
+
* `corpus` (= `selectionRule(asOfCommit)`), that the controls are tags within
|
|
112
|
+
* `heldOutPrs`, and that the slices are disjoint by merge-commit (not only PR#).
|
|
113
|
+
* Pure; the harness asserts `ok` and reads the per-field diffs to pin the exact
|
|
114
|
+
* Falsifying-Metric clause (FM(d) extra / FM(g) missing).
|
|
115
|
+
*/
|
|
116
|
+
export declare function validateSplitCover(split: SplitArtifact, corpus: number[], mergeCommitByPr: ReadonlyMap<number, string>): SplitCoverResult;
|
|
117
|
+
/**
|
|
118
|
+
* Produce a frozen split from the resolved corpus by the forward-chronological
|
|
119
|
+
* ancestry cut. `corpus` is `selectionRule(asOfCommit)` (the cover base);
|
|
120
|
+
* `orderedNewestFirst` is the same ancestry enumeration `resolveSelectionRule`
|
|
121
|
+
* consumes (`git log --topo-order`, newest-first) and MUST cover the corpus.
|
|
122
|
+
* `excludedPrs` (the atomic revert pairs) are removed from train/heldOut but
|
|
123
|
+
* remain in the cover. Validates the result and throws `SplitCoverError` on any
|
|
124
|
+
* cover/disjointness violation (Tenet 4) — a malformed split never freezes.
|
|
125
|
+
*
|
|
126
|
+
* CONTRACT (corpus-scope model A, confirmed by totem-codex's #2200 review; pending
|
|
127
|
+
* strategy-claude's final §5 word): `corpus` is the cover BASE that INCLUDES the
|
|
128
|
+
* PRs later assigned to `excludedPrs` — i.e. `selectionRule` is resolved here with
|
|
129
|
+
* reverts retained, and `excludedPrs` enumerates them explicitly, so
|
|
130
|
+
* `train ⊎ heldOut ⊎ excluded == corpus` holds and every `excludedPr` is a corpus
|
|
131
|
+
* member. (The alternative — `selectionRule(asOfCommit)` pre-excludes reverts yet
|
|
132
|
+
* the split still records them in `excludedPrs` — is NOT supported by the current
|
|
133
|
+
* schema, which rejects excluded PRs outside the corpus; revisit only if strategy
|
|
134
|
+
* pins that model.) The fail-loud `excludedPrs ⊆ corpus` guard below enforces this.
|
|
135
|
+
*/
|
|
136
|
+
export declare function resolveSplit(params: {
|
|
137
|
+
asOfCommit: string;
|
|
138
|
+
corpus: number[];
|
|
139
|
+
orderedNewestFirst: number[];
|
|
140
|
+
excludedPrs: number[];
|
|
141
|
+
cutIndex: number;
|
|
142
|
+
positiveControlPrs?: number[];
|
|
143
|
+
negativeControlPrs?: number[];
|
|
144
|
+
predicate: string;
|
|
145
|
+
mergeCommitByPr: ReadonlyMap<number, string>;
|
|
146
|
+
}): SplitArtifact;
|
|
147
|
+
/** Re-export for callers building the `mergeCommitByPr` map from enumerated metas. */
|
|
148
|
+
export declare function mergeCommitMap(metas: PrMeta[]): Map<number, string>;
|
|
149
|
+
//# sourceMappingURL=split.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split.d.ts","sourceRoot":"","sources":["../../src/spine/split.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAc,KAAK,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAO9E;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;IAG5B,qDAAqD;;IAErD,sFAAsF;;IAEtF,6DAA6D;;IAE7D,oGAAoG;;IAEpG,qEAAqE;;;QAGnE,+HAA+H;;QAI/H;;;;WAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBL,CAAC;AAEL,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,uGAAuG;AACvG,qBAAa,eAAgB,SAAQ,KAAK;aACZ,MAAM,EAAE,gBAAgB;gBAAxB,MAAM,EAAE,gBAAgB;CAMrD;AAED,6GAA6G;AAC7G,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ;;;;OAIG;IACH,KAAK,EAAE,SAAS,CAAC;IACjB,0GAA0G;IAC1G,QAAQ,EAAE;QAAE,YAAY,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAC;QAAC,eAAe,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACzF,+GAA+G;IAC/G,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,+GAA+G;IAC/G,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,kIAAkI;IAClI,qBAAqB,EAAE,MAAM,EAAE,CAAC;CACjC;AA0BD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,MAAM,EAAE,EAChB,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3C,gBAAgB,CA6BlB;AAuBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C,GAAG,aAAa,CAiEhB;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAEnE"}
|