@mmnto/totem 1.71.0 → 1.72.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/compiler-schema.d.ts +21 -0
- package/dist/compiler-schema.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/rule-engine.d.ts +11 -1
- package/dist/rule-engine.d.ts.map +1 -1
- package/dist/rule-engine.js +98 -5
- package/dist/rule-engine.js.map +1 -1
- package/dist/rule-engine.test.js +97 -1
- package/dist/rule-engine.test.js.map +1 -1
- package/dist/spine/cert-corpus-seed.d.ts +452 -0
- package/dist/spine/cert-corpus-seed.d.ts.map +1 -0
- package/dist/spine/cert-corpus-seed.js +236 -0
- package/dist/spine/cert-corpus-seed.js.map +1 -0
- package/dist/spine/cert-corpus-seed.test.d.ts +2 -0
- package/dist/spine/cert-corpus-seed.test.d.ts.map +1 -0
- package/dist/spine/cert-corpus-seed.test.js +149 -0
- package/dist/spine/cert-corpus-seed.test.js.map +1 -0
- package/dist/spine/windtunnel-lock.d.ts +9 -0
- package/dist/spine/windtunnel-lock.d.ts.map +1 -1
- package/dist/spine/windtunnel-lock.js +15 -0
- package/dist/spine/windtunnel-lock.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
// ─── #709 Gate-1 cert-corpus materialization — seed manifest + pure producer ──
|
|
2
|
+
//
|
|
3
|
+
// The cert run's SCORING corpus (`split.json`, `pr-diffs.json`, the control dirs,
|
|
4
|
+
// and the lock that pins them) has no producer today — `loadCertRunFixtures`
|
|
5
|
+
// hard-requires them but only `record` (the minted-rules half) writes anything.
|
|
6
|
+
// This module is the PURE half of the producer (panel-ratified, strategy#709):
|
|
7
|
+
// it turns a small CURATED seed manifest + the git-enumerated `PrMeta[]` into the
|
|
8
|
+
// derived corpus + a validated frozen split + the per-held-out-PR control roles,
|
|
9
|
+
// and assembles the windtunnel lock once the I/O-derived integrity shas are known.
|
|
10
|
+
//
|
|
11
|
+
// Boundary (panel OQ1/OQ2): the SEED carries the irreducible answer-key decisions
|
|
12
|
+
// (asOfCommit, selection predicate/config, cutIndex, control designations +
|
|
13
|
+
// positive `targetRuleId`); EVERYTHING else is derived. All git I/O (enumeration,
|
|
14
|
+
// diff resolution, hashing) lives in the CLI; this module is pure + fully testable
|
|
15
|
+
// without git. Reuses `resolveSelectionRule` (corpus) + `resolveSplit` (the
|
|
16
|
+
// validated ancestry-cut split, with all its fail-loud cover/disjointness guards).
|
|
17
|
+
import { z } from 'zod';
|
|
18
|
+
import { resolveSelectionRule } from './selection-rule.js';
|
|
19
|
+
import { mergeCommitMap, resolveSplit } from './split.js';
|
|
20
|
+
import { WindtunnelLockSchema } from './windtunnel-lock.js';
|
|
21
|
+
const COMMIT_SHA_RE = /^[0-9a-f]{40}$/;
|
|
22
|
+
/** A required string that rejects whitespace-only values (`.min(1)` alone would admit `" "`). */
|
|
23
|
+
const nonBlank = (msg) => z.string().trim().min(1, msg);
|
|
24
|
+
// ─── Seed manifest schema (the curated answer-key inputs) ────────────────────
|
|
25
|
+
const CodePathClassifierSeedSchema = z.object({
|
|
26
|
+
includeGlobs: z.array(nonBlank()).min(1, 'includeGlobs must list at least one glob'),
|
|
27
|
+
excludeGlobs: z.array(nonBlank()),
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* Positive controls MUST name the rule expected to fire (fold-1, codex panel):
|
|
31
|
+
* a positive control with no `targetRuleId` silently weakens the non-vacuity
|
|
32
|
+
* contract (`buildFirings` only records a positive target when one is present),
|
|
33
|
+
* so the seed makes it structurally required — the producer never relies on the
|
|
34
|
+
* permissive consumer `ResolvedPrDiffSchema` (where `targetRuleId` is optional).
|
|
35
|
+
*/
|
|
36
|
+
const PositiveControlSeedSchema = z.object({
|
|
37
|
+
pr: z.number().int().positive(),
|
|
38
|
+
targetRuleId: nonBlank('a positive control must name its targetRuleId'),
|
|
39
|
+
});
|
|
40
|
+
export const CertCorpusSeedSchema = z
|
|
41
|
+
.object({
|
|
42
|
+
gate: nonBlank(),
|
|
43
|
+
canonicalPath: nonBlank(),
|
|
44
|
+
repo: nonBlank(),
|
|
45
|
+
// The producer materializes the CERTIFYING scoring corpus; the harness phase
|
|
46
|
+
// has no real corpus to materialize.
|
|
47
|
+
phase: z.literal('certifying'),
|
|
48
|
+
selectionRule: z.object({
|
|
49
|
+
state: z.string(),
|
|
50
|
+
predicate: z.string().refine((s) => s.trim().length > 0, {
|
|
51
|
+
message: 'selectionRule.predicate must be a non-empty expression',
|
|
52
|
+
}),
|
|
53
|
+
window: z.discriminatedUnion('type', [
|
|
54
|
+
z.object({ type: z.literal('all') }),
|
|
55
|
+
z.object({ type: z.literal('bounded'), n: z.number().int().positive() }),
|
|
56
|
+
]),
|
|
57
|
+
asOfCommit: z.string().regex(COMMIT_SHA_RE, 'asOfCommit must be a 40-hex SHA'),
|
|
58
|
+
codePathClassifier: CodePathClassifierSeedSchema,
|
|
59
|
+
excludeRevertPairs: z.boolean().default(true),
|
|
60
|
+
excludeBotPrs: z.boolean().default(true),
|
|
61
|
+
}),
|
|
62
|
+
split: z.object({
|
|
63
|
+
cutIndex: z.number().int().nonnegative(),
|
|
64
|
+
// The atomic revert pairs to drop from train/held-out (kept in the cover).
|
|
65
|
+
// Usually empty when `excludeRevertPairs` already culls reverts at selection.
|
|
66
|
+
excludedPrs: z.array(z.number().int().positive()).default([]),
|
|
67
|
+
}),
|
|
68
|
+
controls: z.object({
|
|
69
|
+
positiveRef: nonBlank(),
|
|
70
|
+
negativeRef: nonBlank(),
|
|
71
|
+
mechanism: nonBlank(),
|
|
72
|
+
positive: z.array(PositiveControlSeedSchema).default([]),
|
|
73
|
+
negative: z.array(z.number().int().positive()).default([]),
|
|
74
|
+
}),
|
|
75
|
+
fpDefinition: z.object({
|
|
76
|
+
rubricRef: z.string(),
|
|
77
|
+
groundTruthRef: z.string(),
|
|
78
|
+
adjudicator: z.string(),
|
|
79
|
+
}),
|
|
80
|
+
cullRateThreshold: z.number().min(0).lt(1),
|
|
81
|
+
exposureDenominator: z.object({
|
|
82
|
+
activeRulesEvaluated: z.object({ floor: z.number().int().min(2) }),
|
|
83
|
+
filesTouchedInWindow: z.object({ floor: z.number().int().nonnegative() }),
|
|
84
|
+
positiveControlsExercised: z.object({ floor: z.number().int().nonnegative() }),
|
|
85
|
+
}),
|
|
86
|
+
})
|
|
87
|
+
.superRefine((seed, ctx) => {
|
|
88
|
+
// Amendment-C seed-level guard (fold-4): reject a contradictory seed BEFORE
|
|
89
|
+
// emit, so a producer bug can never "repair" it by silently moving a control.
|
|
90
|
+
const posPrs = seed.controls.positive.map((p) => p.pr);
|
|
91
|
+
const negPrs = seed.controls.negative;
|
|
92
|
+
const posSet = new Set(posPrs);
|
|
93
|
+
const negSet = new Set(negPrs);
|
|
94
|
+
if (posSet.size !== posPrs.length) {
|
|
95
|
+
ctx.addIssue({
|
|
96
|
+
code: z.ZodIssueCode.custom,
|
|
97
|
+
message: 'controls.positive contains duplicate PRs',
|
|
98
|
+
path: ['controls', 'positive'],
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
if (negSet.size !== negPrs.length) {
|
|
102
|
+
ctx.addIssue({
|
|
103
|
+
code: z.ZodIssueCode.custom,
|
|
104
|
+
message: 'controls.negative contains duplicate PRs',
|
|
105
|
+
path: ['controls', 'negative'],
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
const both = posPrs.filter((pr) => negSet.has(pr));
|
|
109
|
+
if (both.length > 0) {
|
|
110
|
+
ctx.addIssue({
|
|
111
|
+
code: z.ZodIssueCode.custom,
|
|
112
|
+
message: `control PRs tagged BOTH positive and negative: [${both.join(', ')}] (a PR cannot be both)`,
|
|
113
|
+
path: ['controls'],
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
/** Fail-loud producer fault (Tenet 4): a contradictory seed never materializes. */
|
|
118
|
+
export class CertCorpusSeedError extends Error {
|
|
119
|
+
constructor(message) {
|
|
120
|
+
super(`[Totem Error] cert-corpus producer: ${message}`);
|
|
121
|
+
this.name = 'CertCorpusSeedError';
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Pure derivation: corpus + frozen split + held-out control roles from the seed
|
|
126
|
+
* and the git-enumerated `PrMeta[]` (newest-first `--topo-order`, as
|
|
127
|
+
* `enumeratePrMetas` returns). Throws `CertCorpusSeedError` on any contradiction
|
|
128
|
+
* BEFORE emit (Amendment-C: controls must be corpus members; `resolveSplit` then
|
|
129
|
+
* enforces controls ⊆ held-out + the disjoint cover). No git, no I/O.
|
|
130
|
+
*/
|
|
131
|
+
export function deriveCorpus(params) {
|
|
132
|
+
const { seed, metas } = params;
|
|
133
|
+
const config = {
|
|
134
|
+
codePathClassifier: seed.selectionRule.codePathClassifier,
|
|
135
|
+
excludeRevertPairs: seed.selectionRule.excludeRevertPairs,
|
|
136
|
+
excludeBotPrs: seed.selectionRule.excludeBotPrs,
|
|
137
|
+
window: seed.selectionRule.window,
|
|
138
|
+
};
|
|
139
|
+
const corpus = resolveSelectionRule(metas, config);
|
|
140
|
+
if (corpus.length === 0) {
|
|
141
|
+
throw new CertCorpusSeedError(`selectionRule(${seed.selectionRule.asOfCommit}) resolved an EMPTY corpus — no qualifying ` +
|
|
142
|
+
`code-touching PRs. Check the codePathClassifier globs and the enumerated history.`);
|
|
143
|
+
}
|
|
144
|
+
// Amendment-C (fold-4): every designated control must be a corpus member, else
|
|
145
|
+
// the answer key references a PR outside the scored universe (non-vacuity).
|
|
146
|
+
const corpusSet = new Set(corpus);
|
|
147
|
+
const posPrs = seed.controls.positive.map((p) => p.pr);
|
|
148
|
+
const negPrs = seed.controls.negative;
|
|
149
|
+
const outOfCorpus = [...posPrs, ...negPrs].filter((pr) => !corpusSet.has(pr));
|
|
150
|
+
if (outOfCorpus.length > 0) {
|
|
151
|
+
throw new CertCorpusSeedError(`control PRs not in the resolved corpus: [${outOfCorpus.join(', ')}] — controls must be ` +
|
|
152
|
+
`corpus members (Amendment-C / non-vacuity).`);
|
|
153
|
+
}
|
|
154
|
+
// resolveSplit needs corpus-covering ancestry order + merge commits; metas
|
|
155
|
+
// (⊇ corpus) provide both. It fail-loud-validates the cut, excludedPrs ⊆ corpus,
|
|
156
|
+
// controls ⊆ held-out, and the three-way disjoint cover.
|
|
157
|
+
const split = resolveSplit({
|
|
158
|
+
asOfCommit: seed.selectionRule.asOfCommit,
|
|
159
|
+
corpus,
|
|
160
|
+
orderedNewestFirst: metas.map((m) => m.pr),
|
|
161
|
+
excludedPrs: seed.split.excludedPrs,
|
|
162
|
+
cutIndex: seed.split.cutIndex,
|
|
163
|
+
positiveControlPrs: posPrs,
|
|
164
|
+
negativeControlPrs: negPrs,
|
|
165
|
+
predicate: seed.selectionRule.predicate,
|
|
166
|
+
mergeCommitByPr: mergeCommitMap(metas),
|
|
167
|
+
});
|
|
168
|
+
const posSet = new Set(posPrs);
|
|
169
|
+
const negSet = new Set(negPrs);
|
|
170
|
+
const targetByPr = new Map(seed.controls.positive.map((p) => [p.pr, p.targetRuleId]));
|
|
171
|
+
const prDiffRoles = split.heldOutPrs.map((pr) => {
|
|
172
|
+
if (posSet.has(pr))
|
|
173
|
+
return { pr, controlKind: 'positive', targetRuleId: targetByPr.get(pr) };
|
|
174
|
+
if (negSet.has(pr))
|
|
175
|
+
return { pr, controlKind: 'negative' };
|
|
176
|
+
return { pr, controlKind: 'corpus' };
|
|
177
|
+
});
|
|
178
|
+
return { corpus, split, prDiffRoles };
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Assemble + validate the windtunnel lock (pure). The producer authors the WHOLE
|
|
182
|
+
* lock (panel OQ4 — single writer); the I/O-derived integrity shas are passed in.
|
|
183
|
+
* `llmReplaySha` is OMITTED at producer time and stamped later by `freeze` (the
|
|
184
|
+
* two-phase sealed lock, panel OQ-seq). Parses through `WindtunnelLockSchema`, so
|
|
185
|
+
* a malformed assembly (unsorted/duplicate resolvedPrs, bad sha) fails loud here.
|
|
186
|
+
*/
|
|
187
|
+
export function buildWindtunnelLock(params) {
|
|
188
|
+
const { seed, resolvedPrs, integrity } = params;
|
|
189
|
+
const sortedPrs = [...resolvedPrs].sort((a, b) => a.pr - b.pr);
|
|
190
|
+
const lock = {
|
|
191
|
+
schema: 'windtunnel.lock.v1',
|
|
192
|
+
canonicalPath: seed.canonicalPath,
|
|
193
|
+
gate: seed.gate,
|
|
194
|
+
phase: seed.phase,
|
|
195
|
+
corpus: {
|
|
196
|
+
repo: seed.repo,
|
|
197
|
+
selectionRule: {
|
|
198
|
+
state: seed.selectionRule.state,
|
|
199
|
+
predicate: seed.selectionRule.predicate,
|
|
200
|
+
window: seed.selectionRule.window,
|
|
201
|
+
asOfCommit: seed.selectionRule.asOfCommit,
|
|
202
|
+
codePathClassifier: seed.selectionRule.codePathClassifier,
|
|
203
|
+
excludeRevertPairs: seed.selectionRule.excludeRevertPairs,
|
|
204
|
+
excludeBotPrs: seed.selectionRule.excludeBotPrs,
|
|
205
|
+
},
|
|
206
|
+
resolvedPrs: sortedPrs.map((p) => ({
|
|
207
|
+
pr: p.pr,
|
|
208
|
+
mergeCommit: p.mergeCommit,
|
|
209
|
+
baseSha: p.baseSha,
|
|
210
|
+
headSha: p.headSha,
|
|
211
|
+
})),
|
|
212
|
+
},
|
|
213
|
+
fpDefinition: {
|
|
214
|
+
rubricRef: seed.fpDefinition.rubricRef,
|
|
215
|
+
groundTruthRef: seed.fpDefinition.groundTruthRef,
|
|
216
|
+
adjudicator: seed.fpDefinition.adjudicator,
|
|
217
|
+
precisionFloor: 1.0,
|
|
218
|
+
},
|
|
219
|
+
controls: {
|
|
220
|
+
positiveRef: seed.controls.positiveRef,
|
|
221
|
+
negativeRef: seed.controls.negativeRef,
|
|
222
|
+
integrity: {
|
|
223
|
+
mechanism: seed.controls.mechanism,
|
|
224
|
+
fixtureSha: integrity.fixtureSha,
|
|
225
|
+
prDiffsSha: integrity.prDiffsSha,
|
|
226
|
+
// `!== undefined` (not truthy): an explicit `''` must reach the schema and
|
|
227
|
+
// fail its 64-hex regex, never be silently dropped (CR panel — fail-loud).
|
|
228
|
+
...(integrity.llmReplaySha !== undefined ? { llmReplaySha: integrity.llmReplaySha } : {}),
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
cullRateThreshold: seed.cullRateThreshold,
|
|
232
|
+
exposureDenominator: seed.exposureDenominator,
|
|
233
|
+
};
|
|
234
|
+
return WindtunnelLockSchema.parse(lock);
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=cert-corpus-seed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cert-corpus-seed.js","sourceRoot":"","sources":["../../src/spine/cert-corpus-seed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cert-corpus-seed.test.d.ts","sourceRoot":"","sources":["../../src/spine/cert-corpus-seed.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { buildWindtunnelLock, CertCorpusSeedError, CertCorpusSeedSchema, deriveCorpus, } from './cert-corpus-seed.js';
|
|
3
|
+
const sha = (n) => String(n).padStart(40, '0');
|
|
4
|
+
const sha256 = (s) => s.padStart(64, '0');
|
|
5
|
+
/** Newest-first (git --topo-order) PrMeta, all code-touching non-bot by default. */
|
|
6
|
+
function meta(pr, overrides) {
|
|
7
|
+
return {
|
|
8
|
+
pr,
|
|
9
|
+
mergeCommit: sha(pr),
|
|
10
|
+
author: 'Dev <dev@example.com>',
|
|
11
|
+
isBotAuthor: false,
|
|
12
|
+
changedFiles: ['packages/core/src/x.ts'],
|
|
13
|
+
...overrides,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/** PRs 5,4,3,2,1 newest-first → corpus [1..5]. */
|
|
17
|
+
const METAS = [meta(5), meta(4), meta(3), meta(2), meta(1)];
|
|
18
|
+
function seed(overrides) {
|
|
19
|
+
return CertCorpusSeedSchema.parse({
|
|
20
|
+
gate: 'gate-1',
|
|
21
|
+
canonicalPath: '.totem/spine/gate-1/windtunnel.lock.json',
|
|
22
|
+
repo: 'mmnto-ai/liquid-city',
|
|
23
|
+
phase: 'certifying',
|
|
24
|
+
selectionRule: {
|
|
25
|
+
state: 'merged',
|
|
26
|
+
predicate: 'code-touching non-bot non-revert',
|
|
27
|
+
window: { type: 'all' },
|
|
28
|
+
asOfCommit: sha(999),
|
|
29
|
+
codePathClassifier: { includeGlobs: ['packages/**'], excludeGlobs: ['**/*.md'] },
|
|
30
|
+
},
|
|
31
|
+
split: { cutIndex: 2, excludedPrs: [] },
|
|
32
|
+
controls: {
|
|
33
|
+
positiveRef: '.totem/spine/gate-1/controls/positive',
|
|
34
|
+
negativeRef: '.totem/spine/gate-1/controls/negative',
|
|
35
|
+
mechanism: 'git-hash-object',
|
|
36
|
+
positive: [{ pr: 3, targetRuleId: 'rule-abc' }],
|
|
37
|
+
negative: [4],
|
|
38
|
+
},
|
|
39
|
+
fpDefinition: { rubricRef: 'r', groundTruthRef: 'g', adjudicator: 'disposition-derived' },
|
|
40
|
+
cullRateThreshold: 0.1,
|
|
41
|
+
exposureDenominator: {
|
|
42
|
+
activeRulesEvaluated: { floor: 2 },
|
|
43
|
+
filesTouchedInWindow: { floor: 0 },
|
|
44
|
+
positiveControlsExercised: { floor: 1 },
|
|
45
|
+
},
|
|
46
|
+
...overrides,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
describe('deriveCorpus', () => {
|
|
50
|
+
it('derives corpus, ancestry-cut split, and held-out control roles', () => {
|
|
51
|
+
const { corpus, split, prDiffRoles } = deriveCorpus({ seed: seed(), metas: METAS });
|
|
52
|
+
expect(corpus).toEqual([1, 2, 3, 4, 5]);
|
|
53
|
+
// cutIndex 2 → oldest 2 PRs train, remainder held-out.
|
|
54
|
+
expect(split.trainPrs).toEqual([1, 2]);
|
|
55
|
+
expect(split.heldOutPrs).toEqual([3, 4, 5]);
|
|
56
|
+
expect(split.positiveControlPrs).toEqual([3]);
|
|
57
|
+
expect(split.negativeControlPrs).toEqual([4]);
|
|
58
|
+
// pr-diffs covers ONLY the held-out (scored) slice, controls tagged within it.
|
|
59
|
+
expect(prDiffRoles).toEqual([
|
|
60
|
+
{ pr: 3, controlKind: 'positive', targetRuleId: 'rule-abc' },
|
|
61
|
+
{ pr: 4, controlKind: 'negative' },
|
|
62
|
+
{ pr: 5, controlKind: 'corpus' },
|
|
63
|
+
]);
|
|
64
|
+
});
|
|
65
|
+
it('excludes bot + revert PRs from the corpus (selectionRule reuse)', () => {
|
|
66
|
+
const metas = [
|
|
67
|
+
meta(5),
|
|
68
|
+
meta(4, { isBotAuthor: true }),
|
|
69
|
+
meta(3, { revertsSha: sha(2) }), // revert of #2's merge commit
|
|
70
|
+
meta(2),
|
|
71
|
+
meta(1),
|
|
72
|
+
];
|
|
73
|
+
const { corpus, split } = deriveCorpus({
|
|
74
|
+
// corpus shrinks to [1, 5] → cutIndex 1 keeps a non-empty train + held-out.
|
|
75
|
+
seed: seed({
|
|
76
|
+
split: { cutIndex: 1, excludedPrs: [] },
|
|
77
|
+
controls: { ...seed().controls, positive: [], negative: [] },
|
|
78
|
+
}),
|
|
79
|
+
metas,
|
|
80
|
+
});
|
|
81
|
+
// #4 (bot) dropped; #3 (revert) + #2 (its target) dropped as a pair.
|
|
82
|
+
expect(corpus).toEqual([1, 5]);
|
|
83
|
+
expect(split.trainPrs).toEqual([1]);
|
|
84
|
+
expect(split.heldOutPrs).toEqual([5]);
|
|
85
|
+
});
|
|
86
|
+
it('throws (Amendment-C) when a control PR is not a corpus member', () => {
|
|
87
|
+
const s = seed({
|
|
88
|
+
controls: { ...seed().controls, positive: [{ pr: 999, targetRuleId: 'r' }], negative: [4] },
|
|
89
|
+
});
|
|
90
|
+
expect(() => deriveCorpus({ seed: s, metas: METAS })).toThrow(CertCorpusSeedError);
|
|
91
|
+
expect(() => deriveCorpus({ seed: s, metas: METAS })).toThrow(/not in the resolved corpus/);
|
|
92
|
+
});
|
|
93
|
+
it('throws on an empty corpus (no qualifying code-touching PRs)', () => {
|
|
94
|
+
const docsOnly = [meta(1, { changedFiles: ['README.md'] })];
|
|
95
|
+
expect(() => deriveCorpus({ seed: seed(), metas: docsOnly })).toThrow(/EMPTY corpus/);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe('CertCorpusSeedSchema (strict write-side, fold-1 / fold-4)', () => {
|
|
99
|
+
it('rejects a positive control with no targetRuleId', () => {
|
|
100
|
+
expect(() => seed({
|
|
101
|
+
controls: {
|
|
102
|
+
...seed().controls,
|
|
103
|
+
// @ts-expect-error — exercising the runtime guard
|
|
104
|
+
positive: [{ pr: 3 }],
|
|
105
|
+
},
|
|
106
|
+
})).toThrow();
|
|
107
|
+
});
|
|
108
|
+
it('rejects a PR tagged both positive and negative', () => {
|
|
109
|
+
expect(() => seed({
|
|
110
|
+
controls: { ...seed().controls, positive: [{ pr: 3, targetRuleId: 'r' }], negative: [3] },
|
|
111
|
+
})).toThrow(/BOTH positive and negative/);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
describe('buildWindtunnelLock', () => {
|
|
115
|
+
const resolvedPrs = [1, 2, 3, 4, 5].map((pr) => ({
|
|
116
|
+
pr,
|
|
117
|
+
mergeCommit: sha(pr),
|
|
118
|
+
baseSha: sha(pr + 100),
|
|
119
|
+
headSha: sha(pr + 200),
|
|
120
|
+
}));
|
|
121
|
+
it('assembles a schema-valid lock; sorts resolvedPrs; omits llmReplaySha (two-phase)', () => {
|
|
122
|
+
const lock = buildWindtunnelLock({
|
|
123
|
+
seed: seed(),
|
|
124
|
+
resolvedPrs: [...resolvedPrs].reverse(), // unsorted input
|
|
125
|
+
integrity: { fixtureSha: sha(7), prDiffsSha: sha256('abc') },
|
|
126
|
+
});
|
|
127
|
+
expect(lock.corpus.resolvedPrs.map((p) => p.pr)).toEqual([1, 2, 3, 4, 5]);
|
|
128
|
+
expect(lock.controls.integrity.fixtureSha).toBe(sha(7));
|
|
129
|
+
expect(lock.controls.integrity.prDiffsSha).toBe(sha256('abc'));
|
|
130
|
+
expect(lock.controls.integrity.llmReplaySha).toBeUndefined();
|
|
131
|
+
expect(lock.fpDefinition.precisionFloor).toBe(1.0);
|
|
132
|
+
});
|
|
133
|
+
it('stamps llmReplaySha when supplied (the sealed phase)', () => {
|
|
134
|
+
const lock = buildWindtunnelLock({
|
|
135
|
+
seed: seed(),
|
|
136
|
+
resolvedPrs,
|
|
137
|
+
integrity: { fixtureSha: sha(7), prDiffsSha: sha256('abc'), llmReplaySha: sha256('def') },
|
|
138
|
+
});
|
|
139
|
+
expect(lock.controls.integrity.llmReplaySha).toBe(sha256('def'));
|
|
140
|
+
});
|
|
141
|
+
it('fails loud on a malformed integrity sha', () => {
|
|
142
|
+
expect(() => buildWindtunnelLock({
|
|
143
|
+
seed: seed(),
|
|
144
|
+
resolvedPrs,
|
|
145
|
+
integrity: { fixtureSha: 'not-a-sha', prDiffsSha: sha256('abc') },
|
|
146
|
+
})).toThrow();
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
//# sourceMappingURL=cert-corpus-seed.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cert-corpus-seed.test.js","sourceRoot":"","sources":["../../src/spine/cert-corpus-seed.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -176,14 +176,17 @@ export declare const WindtunnelLockSchema: z.ZodEffects<z.ZodObject<{
|
|
|
176
176
|
mechanism: z.ZodString;
|
|
177
177
|
fixtureSha: z.ZodString;
|
|
178
178
|
llmReplaySha: z.ZodOptional<z.ZodString>;
|
|
179
|
+
prDiffsSha: z.ZodOptional<z.ZodString>;
|
|
179
180
|
}, "strip", z.ZodTypeAny, {
|
|
180
181
|
mechanism: string;
|
|
181
182
|
fixtureSha: string;
|
|
182
183
|
llmReplaySha?: string | undefined;
|
|
184
|
+
prDiffsSha?: string | undefined;
|
|
183
185
|
}, {
|
|
184
186
|
mechanism: string;
|
|
185
187
|
fixtureSha: string;
|
|
186
188
|
llmReplaySha?: string | undefined;
|
|
189
|
+
prDiffsSha?: string | undefined;
|
|
187
190
|
}>;
|
|
188
191
|
}, "strip", z.ZodTypeAny, {
|
|
189
192
|
positiveRef: string;
|
|
@@ -192,6 +195,7 @@ export declare const WindtunnelLockSchema: z.ZodEffects<z.ZodObject<{
|
|
|
192
195
|
mechanism: string;
|
|
193
196
|
fixtureSha: string;
|
|
194
197
|
llmReplaySha?: string | undefined;
|
|
198
|
+
prDiffsSha?: string | undefined;
|
|
195
199
|
};
|
|
196
200
|
}, {
|
|
197
201
|
positiveRef: string;
|
|
@@ -200,6 +204,7 @@ export declare const WindtunnelLockSchema: z.ZodEffects<z.ZodObject<{
|
|
|
200
204
|
mechanism: string;
|
|
201
205
|
fixtureSha: string;
|
|
202
206
|
llmReplaySha?: string | undefined;
|
|
207
|
+
prDiffsSha?: string | undefined;
|
|
203
208
|
};
|
|
204
209
|
}>;
|
|
205
210
|
cullRateThreshold: z.ZodNumber;
|
|
@@ -291,6 +296,7 @@ export declare const WindtunnelLockSchema: z.ZodEffects<z.ZodObject<{
|
|
|
291
296
|
mechanism: string;
|
|
292
297
|
fixtureSha: string;
|
|
293
298
|
llmReplaySha?: string | undefined;
|
|
299
|
+
prDiffsSha?: string | undefined;
|
|
294
300
|
};
|
|
295
301
|
};
|
|
296
302
|
cullRateThreshold: number;
|
|
@@ -354,6 +360,7 @@ export declare const WindtunnelLockSchema: z.ZodEffects<z.ZodObject<{
|
|
|
354
360
|
mechanism: string;
|
|
355
361
|
fixtureSha: string;
|
|
356
362
|
llmReplaySha?: string | undefined;
|
|
363
|
+
prDiffsSha?: string | undefined;
|
|
357
364
|
};
|
|
358
365
|
};
|
|
359
366
|
cullRateThreshold: number;
|
|
@@ -417,6 +424,7 @@ export declare const WindtunnelLockSchema: z.ZodEffects<z.ZodObject<{
|
|
|
417
424
|
mechanism: string;
|
|
418
425
|
fixtureSha: string;
|
|
419
426
|
llmReplaySha?: string | undefined;
|
|
427
|
+
prDiffsSha?: string | undefined;
|
|
420
428
|
};
|
|
421
429
|
};
|
|
422
430
|
cullRateThreshold: number;
|
|
@@ -480,6 +488,7 @@ export declare const WindtunnelLockSchema: z.ZodEffects<z.ZodObject<{
|
|
|
480
488
|
mechanism: string;
|
|
481
489
|
fixtureSha: string;
|
|
482
490
|
llmReplaySha?: string | undefined;
|
|
491
|
+
prDiffsSha?: string | undefined;
|
|
483
492
|
};
|
|
484
493
|
};
|
|
485
494
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
@@ -88,6 +88,21 @@ export const WindtunnelLockSchema = z
|
|
|
88
88
|
.string()
|
|
89
89
|
.regex(SHA256_REGEX, 'llmReplaySha must be a 64-hex sha256')
|
|
90
90
|
.optional(),
|
|
91
|
+
// #709 fold-2 (codex panel): an integrity digest over the SCORING source
|
|
92
|
+
// `pr-diffs.json`, which `loadCertRunFixtures` reads independently of the
|
|
93
|
+
// control dirs. `fixtureSha` hashes only the control dirs, so a tampered
|
|
94
|
+
// `corpus`-kind (or any) row in pr-diffs.json would pass every runtime check.
|
|
95
|
+
// ENCODING (pin — greptile panel): this sha256 (64-hex) is taken over the
|
|
96
|
+
// EXACT on-disk `pr-diffs.json` bytes (canonical 2-space JSON + trailing
|
|
97
|
+
// newline, as the producer writes them), so a freeze/run enforcer can
|
|
98
|
+
// `sha256` the file directly — NOT over the compact `canonicalStringify`.
|
|
99
|
+
// STAMPED by the producer; the certifying run/freeze re-derive + assertion
|
|
100
|
+
// that makes it runtime-authoritative is a follow-up slice (#2225) — NOT yet
|
|
101
|
+
// wired here, so the hole is not closed until it lands. Additive-optional:
|
|
102
|
+
// harness locks (no scoring corpus) parse unchanged; once the enforcement
|
|
103
|
+
// lands the certifying path will hard-error if absent (no safe default for
|
|
104
|
+
// an integrity hash).
|
|
105
|
+
prDiffsSha: z.string().regex(SHA256_REGEX, 'prDiffsSha must be a 64-hex sha256').optional(),
|
|
91
106
|
}),
|
|
92
107
|
}),
|
|
93
108
|
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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"}
|