@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.
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cert-corpus-seed.test.d.ts.map
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0H7B,CAAC;AAEL,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,yBAAyB,EAAE,MAAM,GAChC,MAAM,CAMR"}
1
+ {"version":3,"file":"windtunnel-lock.d.ts","sourceRoot":"","sources":["../../src/spine/windtunnel-lock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmnto/totem",
3
- "version": "1.71.0",
3
+ "version": "1.72.0",
4
4
  "description": "Persistent memory and context layer for AI agents",
5
5
  "type": "module",
6
6
  "engines": {