@mmnto/cli 1.88.0 → 1.89.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/author-sandbox.d.ts +32 -0
- package/dist/author-sandbox.d.ts.map +1 -0
- package/dist/author-sandbox.js +95 -0
- package/dist/author-sandbox.js.map +1 -0
- package/dist/authored-rule-intake-prewindow.test.d.ts +2 -0
- package/dist/authored-rule-intake-prewindow.test.d.ts.map +1 -0
- package/dist/authored-rule-intake-prewindow.test.js +84 -0
- package/dist/authored-rule-intake-prewindow.test.js.map +1 -0
- package/dist/authored-rule-intake.d.ts +21 -1
- package/dist/authored-rule-intake.d.ts.map +1 -1
- package/dist/authored-rule-intake.js +56 -1
- package/dist/authored-rule-intake.js.map +1 -1
- package/dist/commands/authored-whitelist.d.ts.map +1 -1
- package/dist/commands/authored-whitelist.js +19 -8
- package/dist/commands/authored-whitelist.js.map +1 -1
- package/dist/commands/eject.d.ts.map +1 -1
- package/dist/commands/eject.js +10 -6
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/eject.test.js +5 -1
- package/dist/commands/eject.test.js.map +1 -1
- package/dist/commands/init-templates.d.ts +4 -0
- package/dist/commands/init-templates.d.ts.map +1 -1
- package/dist/commands/init-templates.js +25 -1
- package/dist/commands/init-templates.js.map +1 -1
- package/dist/commands/init.test.js +8 -3
- package/dist/commands/init.test.js.map +1 -1
- package/dist/commands/rule-author-command.test.js +29 -2
- package/dist/commands/rule-author-command.test.js.map +1 -1
- package/dist/commands/rule-author-teardown.test.d.ts +2 -0
- package/dist/commands/rule-author-teardown.test.d.ts.map +1 -0
- package/dist/commands/rule-author-teardown.test.js +123 -0
- package/dist/commands/rule-author-teardown.test.js.map +1 -0
- package/dist/commands/rule-author.d.ts +1 -0
- package/dist/commands/rule-author.d.ts.map +1 -1
- package/dist/commands/rule-author.js +143 -2
- package/dist/commands/rule-author.js.map +1 -1
- package/dist/commands/spine-authored-cert-corpus.d.ts +15 -0
- package/dist/commands/spine-authored-cert-corpus.d.ts.map +1 -1
- package/dist/commands/spine-authored-cert-corpus.js +17 -1
- package/dist/commands/spine-authored-cert-corpus.js.map +1 -1
- package/dist/commands/spine-authored-cert-corpus.test.js +440 -4
- package/dist/commands/spine-authored-cert-corpus.test.js.map +1 -1
- package/dist/commands/spine-authored-materialize.d.ts +55 -0
- package/dist/commands/spine-authored-materialize.d.ts.map +1 -0
- package/dist/commands/spine-authored-materialize.js +315 -0
- package/dist/commands/spine-authored-materialize.js.map +1 -0
- package/dist/commands/spine-cert-materialize.d.ts.map +1 -1
- package/dist/commands/spine-cert-materialize.js +17 -0
- package/dist/commands/spine-cert-materialize.js.map +1 -1
- package/dist/commands/spine-cert-persist.d.ts +17 -1
- package/dist/commands/spine-cert-persist.d.ts.map +1 -1
- package/dist/commands/spine-cert-persist.js +17 -5
- package/dist/commands/spine-cert-persist.js.map +1 -1
- package/dist/commands/spine-cert-persist.test.js +60 -0
- package/dist/commands/spine-cert-persist.test.js.map +1 -1
- package/dist/commands/spine-cert-run-corpus.d.ts +18 -28
- package/dist/commands/spine-cert-run-corpus.d.ts.map +1 -1
- package/dist/commands/spine-cert-run-corpus.js +162 -21
- package/dist/commands/spine-cert-run-corpus.js.map +1 -1
- package/dist/commands/spine-derive-labels.d.ts.map +1 -1
- package/dist/commands/spine-derive-labels.js +9 -1
- package/dist/commands/spine-derive-labels.js.map +1 -1
- package/dist/commands/spine-freeze-orchestration.test.d.ts +2 -0
- package/dist/commands/spine-freeze-orchestration.test.d.ts.map +1 -0
- package/dist/commands/spine-freeze-orchestration.test.js +468 -0
- package/dist/commands/spine-freeze-orchestration.test.js.map +1 -0
- package/dist/commands/spine-freeze-split.d.ts +10 -0
- package/dist/commands/spine-freeze-split.d.ts.map +1 -0
- package/dist/commands/spine-freeze-split.js +131 -0
- package/dist/commands/spine-freeze-split.js.map +1 -0
- package/dist/commands/spine-windtunnel.d.ts +35 -0
- package/dist/commands/spine-windtunnel.d.ts.map +1 -1
- package/dist/commands/spine-windtunnel.js +47 -7
- package/dist/commands/spine-windtunnel.js.map +1 -1
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -1
- package/dist/spine-fixture-ancestry.d.ts +20 -0
- package/dist/spine-fixture-ancestry.d.ts.map +1 -0
- package/dist/spine-fixture-ancestry.js +46 -0
- package/dist/spine-fixture-ancestry.js.map +1 -0
- package/dist/spine-fixture-ancestry.test.d.ts +2 -0
- package/dist/spine-fixture-ancestry.test.d.ts.map +1 -0
- package/dist/spine-fixture-ancestry.test.js +62 -0
- package/dist/spine-fixture-ancestry.test.js.map +1 -0
- package/dist/spine-freeze-proof.d.ts +89 -0
- package/dist/spine-freeze-proof.d.ts.map +1 -0
- package/dist/spine-freeze-proof.js +237 -0
- package/dist/spine-freeze-proof.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
// ─── ADR-112 §5.1/§6/§8 Slice D5 — the AUTHORED cert-corpus materializer ─────
|
|
2
|
+
//
|
|
3
|
+
// The SIBLING of the mined `materializeCommand` (spine-cert-materialize.ts), NOT a
|
|
4
|
+
// branch inside it: the authored producer freezes a WINDOW-WIDE scoring substrate
|
|
5
|
+
// (train ∪ held-out) with train-side controls + a mechanical `frozenAt`, whereas
|
|
6
|
+
// the mined producer freezes a held-out-only substrate with held-out control tags.
|
|
7
|
+
// A single kind-branch would be one function doing two disjoint jobs (Tenet-9). The
|
|
8
|
+
// materialize command ENTRY resolves `seed.producerKind` ONCE and dispatches here.
|
|
9
|
+
//
|
|
10
|
+
// Freeze-vs-run division (D1/D2.5): this FREEZES the substrate (split.json with
|
|
11
|
+
// `frozenAt`, the window-wide pr-diffs.json, the train-side control dirs, the lock
|
|
12
|
+
// with `producerKind:'authored'` + `authored:{expectedSplitRef}`). The RUN side
|
|
13
|
+
// (`buildAuthoredCertifyingCorpus`) COMPILES the rules + derives the §6 controls;
|
|
14
|
+
// `derive-labels` stamps `groundTruthSha`. So materialize does NEITHER — it reads
|
|
15
|
+
// the effective authoring-ledger for the split-binding + the train-side control
|
|
16
|
+
// fixture PRs, runs the §5.1/§5.3 freeze gates, and pins the substrate.
|
|
17
|
+
import { createHash } from 'node:crypto';
|
|
18
|
+
import * as fs from 'node:fs';
|
|
19
|
+
import * as path from 'node:path';
|
|
20
|
+
function uniqueSorted(xs) {
|
|
21
|
+
return [...new Set(xs)].sort((a, b) => a - b);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Materialize the AUTHORED cert-run scoring corpus. Fail-loud (Tenet-4) throughout:
|
|
25
|
+
* an empty corpus, an empty/mixed-split-ref ledger, or any §5.1/§5.3 freeze-gate
|
|
26
|
+
* violation THROWS before a byte is written (detect-never-repair — the materializer
|
|
27
|
+
* never re-freezes a leaked split). Writes the lock WITHOUT `groundTruthSha`
|
|
28
|
+
* (`derive-labels` stamps it) and WITHOUT `llmReplaySha` (no LLM stage on the
|
|
29
|
+
* authored path); the two-phase seal is `derive-labels` → `freeze`.
|
|
30
|
+
*/
|
|
31
|
+
export async function materializeAuthored(ctx, depsOverride = {}) {
|
|
32
|
+
const { resolveSelectionRule, resolveSplit, mergeCommitMap, buildWindtunnelLock, canonicalStringify, readAuthoringLedger, foldEffectiveLedgerEntries, assertAuthoredFreezePreconditions, TotemError, parsePrNumber, parseRevertSha, isBotIdentity, } = await import('@mmnto/totem');
|
|
33
|
+
// Lazy-load the sibling CLI command modules (packages/cli/** convention — CR Major).
|
|
34
|
+
const { resolvePrGit } = await import('./spine-cert-materialize.js');
|
|
35
|
+
const { computeFixtureSha, enumeratePrMetas } = await import('./spine-windtunnel.js');
|
|
36
|
+
const { isAncestor } = await import('../git.js');
|
|
37
|
+
const { seed, lcDir, repoRoot, cwd, totemDir, resolveWithinRepo, safeExec } = ctx;
|
|
38
|
+
const deps = {
|
|
39
|
+
enumerateMetas: depsOverride.enumerateMetas ??
|
|
40
|
+
((asOf) => enumeratePrMetas(asOf, lcDir, safeExec, { parsePrNumber, parseRevertSha, isBotIdentity })),
|
|
41
|
+
resolvePrDiff: depsOverride.resolvePrDiff ?? ((mc) => resolvePrGit(lcDir, mc, safeExec)),
|
|
42
|
+
computeControlFixtureSha: depsOverride.computeControlFixtureSha ??
|
|
43
|
+
((dirs) => computeFixtureSha(dirs, repoRoot, safeExec)),
|
|
44
|
+
isAncestor: depsOverride.isAncestor ?? ((commit, of) => isAncestor(lcDir, commit, of)),
|
|
45
|
+
};
|
|
46
|
+
// 1. Enumerate + resolve the corpus (pure).
|
|
47
|
+
const metas = deps.enumerateMetas(seed.selectionRule.asOfCommit);
|
|
48
|
+
const corpus = resolveSelectionRule(metas, {
|
|
49
|
+
codePathClassifier: seed.selectionRule.codePathClassifier,
|
|
50
|
+
excludeRevertPairs: seed.selectionRule.excludeRevertPairs,
|
|
51
|
+
excludeBotPrs: seed.selectionRule.excludeBotPrs,
|
|
52
|
+
window: seed.selectionRule.window,
|
|
53
|
+
});
|
|
54
|
+
if (corpus.length === 0) {
|
|
55
|
+
throw new TotemError('CONFIG_INVALID', 'authored materialize: selectionRule resolved an EMPTY corpus — no qualifying code-touching PRs.', 'Check the seed codePathClassifier globs + the enumerated history.');
|
|
56
|
+
}
|
|
57
|
+
// 2. Bind the freeze. TWO shapes (the seed schema enforces exactly-one-of):
|
|
58
|
+
// R1 (frozenSplitRef): the FROZEN ARTIFACT is the single source (codex fold-5) —
|
|
59
|
+
// load it, prove it on the shared ref (topology-first), re-derive the split from
|
|
60
|
+
// the pinned inputs ONLY to assert byte-equality (a detector, never a repair),
|
|
61
|
+
// and consume artifact.split verbatim (split.json below is its byte-identical copy).
|
|
62
|
+
// Legacy D5 (frozenAt): the seed carries the recorded pre-authoring instant and the
|
|
63
|
+
// split resolves from seed params — NEVER a materialize-`now()` stamp (#2287
|
|
64
|
+
// couple HOLD); byte-unchanged for existing fixtures.
|
|
65
|
+
let split;
|
|
66
|
+
let frozenAt;
|
|
67
|
+
let frozenArtifactBinding;
|
|
68
|
+
if (seed.split.frozenSplitRef !== undefined) {
|
|
69
|
+
const { resolveFrozenSplitByRef, verifySharedFrozenSplit, freezeProofFailure } = await import('../spine-freeze-proof.js');
|
|
70
|
+
const { computeCorpusIntegrity } = await import('@mmnto/totem');
|
|
71
|
+
const resolved = resolveFrozenSplitByRef(totemDir, repoRoot, seed.split.frozenSplitRef);
|
|
72
|
+
const proof = verifySharedFrozenSplit({
|
|
73
|
+
repoRoot,
|
|
74
|
+
resolved,
|
|
75
|
+
safeExec,
|
|
76
|
+
sharedRef: ctx.sharedRef,
|
|
77
|
+
});
|
|
78
|
+
const artifact = resolved.artifact;
|
|
79
|
+
// Seed↔artifact consistency (a divergence is two homes drifting — fail loud, Tenet-20).
|
|
80
|
+
const divergences = [];
|
|
81
|
+
if (seed.selectionRule.asOfCommit !== artifact.split.asOfCommit) {
|
|
82
|
+
divergences.push(`asOfCommit: seed ${seed.selectionRule.asOfCommit} vs artifact ${artifact.split.asOfCommit}`);
|
|
83
|
+
}
|
|
84
|
+
if (seed.split.cutIndex !== artifact.split.splitRule.cutIndex) {
|
|
85
|
+
divergences.push(`cutIndex: seed ${seed.split.cutIndex} vs artifact ${artifact.split.splitRule.cutIndex}`);
|
|
86
|
+
}
|
|
87
|
+
if (seed.selectionRule.predicate !== artifact.selectionPins.predicate) {
|
|
88
|
+
divergences.push('selectionRule.predicate differs from the artifact selectionPins');
|
|
89
|
+
}
|
|
90
|
+
if (divergences.length > 0) {
|
|
91
|
+
throw freezeProofFailure('seed-artifact-divergence', `the seed diverges from the frozen split it names (${artifact.splitRef}): ${divergences.join('; ')}`, 'Update the seed to match the frozen artifact (the artifact is the source; the seed only names it).');
|
|
92
|
+
}
|
|
93
|
+
// Re-derive from the pinned inputs and ASSERT — corpus integrity first, then the
|
|
94
|
+
// full split byte-compare (detect-never-repair; a mismatch writes nothing).
|
|
95
|
+
const rederivedIntegrity = computeCorpusIntegrity(corpus, mergeCommitMap(metas));
|
|
96
|
+
const rederived = resolveSplit({
|
|
97
|
+
asOfCommit: artifact.split.asOfCommit,
|
|
98
|
+
corpus,
|
|
99
|
+
orderedNewestFirst: metas.map((m) => m.pr),
|
|
100
|
+
excludedPrs: artifact.split.excludedPrs,
|
|
101
|
+
cutIndex: artifact.split.splitRule.cutIndex,
|
|
102
|
+
positiveControlPrs: [],
|
|
103
|
+
negativeControlPrs: [],
|
|
104
|
+
predicate: artifact.selectionPins.predicate,
|
|
105
|
+
mergeCommitByPr: mergeCommitMap(metas),
|
|
106
|
+
frozenAt: artifact.split.frozenAt,
|
|
107
|
+
});
|
|
108
|
+
if (rederivedIntegrity !== artifact.corpusIntegrity ||
|
|
109
|
+
canonicalStringify(rederived) !== canonicalStringify(artifact.split)) {
|
|
110
|
+
throw freezeProofFailure('rederive-mismatch', `re-deriving the split from the artifact's pinned inputs does not reproduce the frozen split ${artifact.splitRef} — the lc history at ${artifact.split.asOfCommit.slice(0, 12)} no longer yields the frozen membership (history rewrite, or a tampered artifact the integrity check could not see)`, 'Never repair: investigate the lc clone/history; a legitimate window change is a NEW freeze via a new PR.');
|
|
111
|
+
}
|
|
112
|
+
split = artifact.split;
|
|
113
|
+
frozenAt = artifact.split.frozenAt; // schema-required on a frozen artifact
|
|
114
|
+
frozenArtifactBinding = { artifact, introducingCommit: proof.introducingCommit };
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
const seedFrozenAt = seed.split.frozenAt;
|
|
118
|
+
if (seedFrozenAt === undefined) {
|
|
119
|
+
throw new TotemError('GATE_INVALID', 'authored materialize: the seed binds no freeze — the split must be frozen BEFORE ' +
|
|
120
|
+
'authoring (ADR-112 §5.1) and bound via split.frozenSplitRef (frozen artifact) or ' +
|
|
121
|
+
'split.frozenAt (legacy recorded instant); materialize must not stamp its own clock ' +
|
|
122
|
+
'(a materialize-now freeze is necessarily after authoring ⇒ the Q3 temporal gate ' +
|
|
123
|
+
'would always fail).', 'Freeze the split BEFORE authoring (`totem spine freeze-split`) and name it via split.frozenSplitRef.');
|
|
124
|
+
}
|
|
125
|
+
frozenAt = seedFrozenAt;
|
|
126
|
+
// Authored controls are train-side (derived at RUN from the rules), so the split carries NO
|
|
127
|
+
// held-out control tags — positive/negative control PRs are [] (the mined notion is inapplicable).
|
|
128
|
+
split = resolveSplit({
|
|
129
|
+
asOfCommit: seed.selectionRule.asOfCommit,
|
|
130
|
+
corpus,
|
|
131
|
+
orderedNewestFirst: metas.map((m) => m.pr),
|
|
132
|
+
excludedPrs: seed.split.excludedPrs,
|
|
133
|
+
cutIndex: seed.split.cutIndex,
|
|
134
|
+
positiveControlPrs: [],
|
|
135
|
+
negativeControlPrs: [],
|
|
136
|
+
predicate: seed.selectionRule.predicate,
|
|
137
|
+
mergeCommitByPr: mergeCommitMap(metas),
|
|
138
|
+
frozenAt,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
// 3. Effective authoring-ledger → the single split-binding + the train-side control PRs.
|
|
142
|
+
const ledger = readAuthoringLedger(totemDir);
|
|
143
|
+
if (ledger.length === 0) {
|
|
144
|
+
throw new TotemError('GATE_INVALID', 'authored materialize: the authoring-ledger is empty — there are no authored rules to freeze.', 'Run `totem rule author` to author + record rules before materializing the cert corpus.');
|
|
145
|
+
}
|
|
146
|
+
const effective = foldEffectiveLedgerEntries(ledger);
|
|
147
|
+
const splitRefs = new Set(effective.map((e) => e.splitRef));
|
|
148
|
+
if (splitRefs.size !== 1) {
|
|
149
|
+
throw new TotemError('GATE_INVALID', `authored materialize: the authoring-ledger records ${splitRefs.size} distinct splitRef values ` +
|
|
150
|
+
`([${[...splitRefs].join(', ')}]) — a single cert corpus binds ONE frozen split.`, 'Author the whole set under one frozen split; multi-split corpora are out of scope (ADR-112 §5).');
|
|
151
|
+
}
|
|
152
|
+
const expectedSplitRef = [...splitRefs][0];
|
|
153
|
+
// 3.5 R1 — the frozen-artifact ledger chain (compose-never-replace with the Q gates below):
|
|
154
|
+
// the ledger must bind THIS artifact ((b) leg: per-entry freezeCommitment — a re-frozen
|
|
155
|
+
// split orphans every stale entry loudly, t1) and every effective entry must have entered
|
|
156
|
+
// shared history STRICTLY LATER than the freeze by ancestry ((a) leg, t3).
|
|
157
|
+
if (frozenArtifactBinding !== undefined) {
|
|
158
|
+
const { assertLedgerEntriesAfterFreeze, freezeProofFailure } = await import('../spine-freeze-proof.js');
|
|
159
|
+
const { AUTHORING_LEDGER_DIR, AUTHORING_LEDGER_FILE } = await import('@mmnto/totem');
|
|
160
|
+
const artifact = frozenArtifactBinding.artifact;
|
|
161
|
+
if (expectedSplitRef !== artifact.splitRef) {
|
|
162
|
+
throw freezeProofFailure('ledger-ref-mismatch', `the effective authoring-ledger binds splitRef ${expectedSplitRef}, but the seed names the frozen artifact ${artifact.splitRef} — the rules were authored under a different (or re-frozen) split`, 'Re-author the set under the current frozen artifact, or materialize against the split the ledger binds.');
|
|
163
|
+
}
|
|
164
|
+
for (const e of effective) {
|
|
165
|
+
if (e.freezeCommitment === undefined) {
|
|
166
|
+
throw freezeProofFailure('entry-commitment-absent', `authoring-ledger entry for '${e.ruleId}' carries no freezeCommitment — it was authored without the R1 binding, so the (b) chain cannot anchor it to ${artifact.splitRef}`, 'Re-run `totem rule author` under the frozen artifact so every effective entry chains the commitment.');
|
|
167
|
+
}
|
|
168
|
+
if (e.freezeCommitment !== artifact.freezeCommitment) {
|
|
169
|
+
throw freezeProofFailure('entry-commitment-mismatch', `authoring-ledger entry for '${e.ruleId}' chains freezeCommitment ${e.freezeCommitment.slice(0, 12)}… but the frozen artifact carries ${artifact.freezeCommitment.slice(0, 12)}… — the split was re-frozen after this entry (t1: the entry is orphaned)`, 'Re-author the orphaned rule(s) under the current freeze; a re-freeze deliberately invalidates the prior chain.');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const ledgerRelPath = path
|
|
173
|
+
.relative(repoRoot, path.join(totemDir, AUTHORING_LEDGER_DIR, AUTHORING_LEDGER_FILE))
|
|
174
|
+
.replace(/\\/g, '/');
|
|
175
|
+
assertLedgerEntriesAfterFreeze({
|
|
176
|
+
repoRoot,
|
|
177
|
+
ledgerRelPath,
|
|
178
|
+
entries: effective.map((e) => ({ ruleId: e.ruleId, entry: e })),
|
|
179
|
+
freezeIntroducingCommit: frozenArtifactBinding.introducingCommit,
|
|
180
|
+
safeExec,
|
|
181
|
+
sharedRef: ctx.sharedRef,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
// 3.7 §5.2 pre-window ancestry (the #2294-couple leakage ruling, option (a)): prove any
|
|
185
|
+
// out-of-window fixture PR strictly pre-window against the frozen artifact's
|
|
186
|
+
// cutBoundarySha — the materializer is a git-holding boundary, so it RE-DERIVES the
|
|
187
|
+
// proof itself (detect-never-repair; never trusts an upstream claim). Legacy path
|
|
188
|
+
// (no frozen artifact ⇒ no cut boundary) keeps the strict semantics byte-unchanged.
|
|
189
|
+
const posFixturePrs = uniqueSorted(effective.flatMap((e) => e.positiveFixturePrs));
|
|
190
|
+
let verifiedPreWindow = new Set();
|
|
191
|
+
if (frozenArtifactBinding !== undefined) {
|
|
192
|
+
const { verifyPreWindowFixturePrs } = await import('../spine-fixture-ancestry.js');
|
|
193
|
+
const boundary = frozenArtifactBinding.artifact.cutBoundarySha;
|
|
194
|
+
verifiedPreWindow = verifyPreWindowFixturePrs({
|
|
195
|
+
fixturePrs: posFixturePrs,
|
|
196
|
+
trainPrs: split.trainPrs,
|
|
197
|
+
heldOutPrs: split.heldOutPrs,
|
|
198
|
+
mergeCommitByPr: mergeCommitMap(metas),
|
|
199
|
+
isAncestorOfCutBoundary: (mc) => deps.isAncestor(mc, boundary),
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
// 4. §5.1/§5.3 freeze gates (Q2 held-out floor + Q3 temporal + Q3 membership) — fail-loud,
|
|
203
|
+
// compose-never-replace, BEFORE any write (detect-never-repair, sensor-not-actuator).
|
|
204
|
+
assertAuthoredFreezePreconditions(split, effective, verifiedPreWindow);
|
|
205
|
+
// Non-vacuity gate BEFORE any write AND any per-PR git work (greptile P2; hoisted above the
|
|
206
|
+
// step-5 resolution loop per CR round-2): if no rule declares a train-side positive fixture,
|
|
207
|
+
// the §5 integrity gate (fixtureSha) has nothing to hash — fail loud HERE, knowable from the
|
|
208
|
+
// effective ledger alone, so a vacuous ledger costs zero `resolvePrDiff` shell-outs and keeps
|
|
209
|
+
// the "no bytes written on gate failure" invariant the Q2/Q3 freeze gates uphold.
|
|
210
|
+
if (posFixturePrs.length === 0) {
|
|
211
|
+
throw new TotemError('GATE_INVALID', 'authored materialize: no positive-control fixture PRs in the effective authoring-ledger — the ' +
|
|
212
|
+
'§5 integrity gate (fixtureSha) has nothing to hash.', 'Author at least one rule with a positiveFixture anchored train-slice or strictly pre-window (non-vacuity, ADR-112 §5.2/§6).');
|
|
213
|
+
}
|
|
214
|
+
// 5. Resolve git base/head/diff for EVERY corpus PR (fail-loud, non-empty per resolvePrGit).
|
|
215
|
+
const mergeByPr = new Map(metas.map((m) => [m.pr, m.mergeCommit]));
|
|
216
|
+
const gitByPr = new Map();
|
|
217
|
+
for (const pr of corpus) {
|
|
218
|
+
const mc = mergeByPr.get(pr);
|
|
219
|
+
if (mc === undefined) {
|
|
220
|
+
throw new TotemError('CONFIG_INVALID', `authored materialize: corpus PR #${pr} has no enumerated merge commit.`, 'Verify the lc clone is complete at asOfCommit.');
|
|
221
|
+
}
|
|
222
|
+
gitByPr.set(pr, deps.resolvePrDiff(mc));
|
|
223
|
+
}
|
|
224
|
+
const resolvedPrs = corpus.map((pr) => {
|
|
225
|
+
const g = gitByPr.get(pr);
|
|
226
|
+
return { pr, mergeCommit: mergeByPr.get(pr), baseSha: g.baseSha, headSha: g.headSha };
|
|
227
|
+
});
|
|
228
|
+
// 5.5 §5.2 pre-window fixtures are NOT corpus members, but their diffs feed the control
|
|
229
|
+
// dirs + fixtureSha (step 8) — resolve them here from the same full enumeration
|
|
230
|
+
// (`resolvePrGit` is history-position-independent). A verified PR always has a merge
|
|
231
|
+
// commit (the ancestry derivation only admits resolvable PRs), so the loop is total.
|
|
232
|
+
for (const pr of posFixturePrs) {
|
|
233
|
+
if (gitByPr.has(pr) || !verifiedPreWindow.has(pr))
|
|
234
|
+
continue;
|
|
235
|
+
gitByPr.set(pr, deps.resolvePrDiff(mergeByPr.get(pr)));
|
|
236
|
+
}
|
|
237
|
+
// Fixture-membership guard BEFORE any write (CR round-2, outside-diff): unreachable by
|
|
238
|
+
// construction TODAY (Q3 membership asserts fixtures ⊆ train ∪ verified-pre-window, and
|
|
239
|
+
// both legs land in gitByPr above), but if a future regression ever broke that chain, the
|
|
240
|
+
// throw must leave ZERO bytes — the same "no bytes on gate failure" invariant every other
|
|
241
|
+
// gate in this function upholds. Defense-in-depth stays consistent with the invariant.
|
|
242
|
+
for (const pr of posFixturePrs) {
|
|
243
|
+
if (!gitByPr.has(pr)) {
|
|
244
|
+
throw new TotemError('GATE_INVALID', `authored materialize: positive-control fixture PR #${pr} is neither in the resolved corpus nor a proven pre-window fixture.`, 'Every positive fixture must be a train-slice corpus member or strictly pre-window by ancestry (ADR-112 §5.2).');
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// 6. WINDOW-WIDE substrate (codex #1/#2): pr-diffs.json over `train ∪ heldOut` (NOT the mined
|
|
248
|
+
// held-out-only shape), so train-side controls + window-wide FP scoring (§5.3/§9) have their
|
|
249
|
+
// firing substrate. Control ROLES are the run-derived §6 channel, so every window PR is a
|
|
250
|
+
// plain `corpus` diff here (build-altitude call — see the spec couple flags).
|
|
251
|
+
const windowPrs = uniqueSorted([...split.trainPrs, ...split.heldOutPrs]);
|
|
252
|
+
const prDiffs = windowPrs.map((pr) => ({
|
|
253
|
+
pr,
|
|
254
|
+
diff: gitByPr.get(pr).diff,
|
|
255
|
+
controlKind: 'corpus',
|
|
256
|
+
}));
|
|
257
|
+
// 7. Write split.json + pr-diffs.json (canonical, sorted-key, LF + trailing newline; atomic).
|
|
258
|
+
const gate1Dir = ctx.outDir
|
|
259
|
+
? path.resolve(cwd, ctx.outDir)
|
|
260
|
+
: resolveWithinRepo(path.dirname(seed.canonicalPath), 'seed.canonicalPath directory');
|
|
261
|
+
fs.mkdirSync(gate1Dir, { recursive: true });
|
|
262
|
+
const writeCanonical = (file, value) => {
|
|
263
|
+
const text = `${canonicalStringify(value, 2)}\n`;
|
|
264
|
+
const tmp = `${file}.tmp`;
|
|
265
|
+
fs.writeFileSync(tmp, text, 'utf-8');
|
|
266
|
+
fs.renameSync(tmp, file);
|
|
267
|
+
return text;
|
|
268
|
+
};
|
|
269
|
+
writeCanonical(path.join(gate1Dir, 'split.json'), split);
|
|
270
|
+
const prDiffsText = writeCanonical(path.join(gate1Dir, 'pr-diffs.json'), prDiffs);
|
|
271
|
+
const prDiffsSha = createHash('sha256')
|
|
272
|
+
.update(prDiffsText.replace(/\r\n/g, '\n'), 'utf-8')
|
|
273
|
+
.digest('hex');
|
|
274
|
+
// 8. Control dirs — the positive-control fixture PRs (from the ledger; the freeze gate
|
|
275
|
+
// already asserted each is ⊆ train ∪ verified-pre-window). Negatives are synthetic
|
|
276
|
+
// near-misses (no corpus PR), so the negative dir is empty. The `<pr>.diff` is the
|
|
277
|
+
// SAME resolved diff (single-source).
|
|
278
|
+
const posDir = resolveWithinRepo(seed.controls.positiveRef, 'seed.controls.positiveRef');
|
|
279
|
+
const negDir = resolveWithinRepo(seed.controls.negativeRef, 'seed.controls.negativeRef');
|
|
280
|
+
for (const dir of [posDir, negDir]) {
|
|
281
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
282
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
283
|
+
}
|
|
284
|
+
// `posFixturePrs` was non-vacuity-checked AND membership-checked against `gitByPr` before any
|
|
285
|
+
// write, so every fixture PR resolves here (the `!` is upheld by the pre-write guard above).
|
|
286
|
+
for (const pr of posFixturePrs) {
|
|
287
|
+
fs.writeFileSync(path.join(posDir, `${pr}.diff`), gitByPr.get(pr).diff, 'utf-8');
|
|
288
|
+
}
|
|
289
|
+
// POST-write integrity SENSOR (not a precondition gate): it hashes the control dirs it just
|
|
290
|
+
// wrote, so it cannot precede its own write (CR round-2 asked; declined for this half). With
|
|
291
|
+
// non-vacuity + membership both pre-write, a null here means `computeControlFixtureSha` itself
|
|
292
|
+
// misbehaved — fail loud; a re-run is safe (control dirs are rm+recreated, writes atomic).
|
|
293
|
+
const fixtureSha = deps.computeControlFixtureSha([posDir, negDir]);
|
|
294
|
+
if (!fixtureSha) {
|
|
295
|
+
throw new TotemError('GATE_INVALID', 'authored materialize: no positive-control fixture diffs were written — the §5 integrity gate ' +
|
|
296
|
+
'(fixtureSha) has nothing to hash.', 'Author at least one rule with a positiveFixture anchored train-slice or strictly pre-window (non-vacuity, ADR-112 §5.2/§6).');
|
|
297
|
+
}
|
|
298
|
+
// 9. Assemble + write the lock (producerKind:'authored' + authored.expectedSplitRef; no
|
|
299
|
+
// groundTruthSha — derive-labels stamps it; no llmReplaySha — no authored LLM stage).
|
|
300
|
+
const lock = buildWindtunnelLock({
|
|
301
|
+
seed,
|
|
302
|
+
resolvedPrs,
|
|
303
|
+
integrity: { fixtureSha, prDiffsSha },
|
|
304
|
+
producerKind: 'authored',
|
|
305
|
+
authored: { expectedSplitRef },
|
|
306
|
+
});
|
|
307
|
+
writeCanonical(path.join(gate1Dir, path.basename(seed.canonicalPath)), lock);
|
|
308
|
+
console.error(`[AuthoredCertMaterialize] gate1Dir: ${gate1Dir}`);
|
|
309
|
+
console.error(` producerKind: authored · expectedSplitRef: ${expectedSplitRef} · frozenAt: ${frozenAt}`);
|
|
310
|
+
console.error(` corpus: ${corpus.length} PR(s) · window (scored): ${windowPrs.length} (train ${split.trainPrs.length} ∪ held-out ${split.heldOutPrs.length})`);
|
|
311
|
+
console.error(` positive-control fixtures: ${posFixturePrs.length} · fixtureSha: ${fixtureSha}`);
|
|
312
|
+
console.error(` prDiffsSha: ${prDiffsSha}`);
|
|
313
|
+
console.error(` groundTruthSha: (pending — run \`spine windtunnel derive-labels\` then \`freeze\` to seal)`);
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=spine-authored-materialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spine-authored-materialize.js","sourceRoot":"","sources":["../../src/commands/spine-authored-materialize.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,EAAE;AACF,mFAAmF;AACnF,kFAAkF;AAClF,iFAAiF;AACjF,mFAAmF;AACnF,oFAAoF;AACpF,mFAAmF;AACnF,EAAE;AACF,gFAAgF;AAChF,mFAAmF;AACnF,gFAAgF;AAChF,kFAAkF;AAClF,kFAAkF;AAClF,gFAAgF;AAChF,wEAAwE;AAExE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAuDlC,SAAS,YAAY,CAAC,EAAY;IAChC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAA+B,EAC/B,eAAiD,EAAE;IAEnD,MAAM,EACJ,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,0BAA0B,EAC1B,iCAAiC,EACjC,UAAU,EACV,aAAa,EACb,cAAc,EACd,aAAa,GACd,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IACjC,qFAAqF;IACrF,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;IACrE,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACtF,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAEjD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;IAElF,MAAM,IAAI,GAA4B;QACpC,cAAc,EACZ,YAAY,CAAC,cAAc;YAC3B,CAAC,CAAC,IAAI,EAAE,EAAE,CACR,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,CAAC;QAC9F,aAAa,EAAE,YAAY,CAAC,aAAa,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QACxF,wBAAwB,EACtB,YAAY,CAAC,wBAAwB;YACrC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzD,UAAU,EAAE,YAAY,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;KACvF,CAAC;IAEF,4CAA4C;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,EAAE;QACzC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB;QACzD,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB;QACzD,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa;QAC/C,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;KAClC,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,UAAU,CAClB,gBAAgB,EAChB,iGAAiG,EACjG,mEAAmE,CACpE,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,oFAAoF;IACpF,sFAAsF;IACtF,oFAAoF;IACpF,0FAA0F;IAC1F,uFAAuF;IACvF,kFAAkF;IAClF,2DAA2D;IAC3D,IAAI,KAAK,CAAC;IACV,IAAI,QAAgB,CAAC;IACrB,IAAI,qBAKS,CAAC;IACd,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,GAC5E,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAC3C,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACxF,MAAM,KAAK,GAAG,uBAAuB,CAAC;YACpC,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAEnC,wFAAwF;QACxF,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,KAAK,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAChE,WAAW,CAAC,IAAI,CACd,oBAAoB,IAAI,CAAC,aAAa,CAAC,UAAU,gBAAgB,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,CAC7F,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC9D,WAAW,CAAC,IAAI,CACd,kBAAkB,IAAI,CAAC,KAAK,CAAC,QAAQ,gBAAgB,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CACzF,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,KAAK,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;YACtE,WAAW,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,kBAAkB,CACtB,0BAA0B,EAC1B,qDAAqD,QAAQ,CAAC,QAAQ,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACpG,oGAAoG,CACrG,CAAC;QACJ,CAAC;QAED,iFAAiF;QACjF,4EAA4E;QAC5E,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QACjF,MAAM,SAAS,GAAG,YAAY,CAAC;YAC7B,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU;YACrC,MAAM;YACN,kBAAkB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAW;YACvC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ;YAC3C,kBAAkB,EAAE,EAAE;YACtB,kBAAkB,EAAE,EAAE;YACtB,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,SAAS;YAC3C,eAAe,EAAE,cAAc,CAAC,KAAK,CAAC;YACtC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ;SAClC,CAAC,CAAC;QACH,IACE,kBAAkB,KAAK,QAAQ,CAAC,eAAe;YAC/C,kBAAkB,CAAC,SAAS,CAAC,KAAK,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,EACpE,CAAC;YACD,MAAM,kBAAkB,CACtB,mBAAmB,EACnB,+FAA+F,QAAQ,CAAC,QAAQ,wBAAwB,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,qHAAqH,EACnS,0GAA0G,CAC3G,CAAC;QACJ,CAAC;QAED,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QACvB,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAS,CAAC,CAAC,uCAAuC;QAC5E,qBAAqB,GAAG,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC;IACnF,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QACzC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,UAAU,CAClB,cAAc,EACd,mFAAmF;gBACjF,mFAAmF;gBACnF,qFAAqF;gBACrF,kFAAkF;gBAClF,qBAAqB,EACvB,sGAAsG,CACvG,CAAC;QACJ,CAAC;QACD,QAAQ,GAAG,YAAY,CAAC;QACxB,4FAA4F;QAC5F,mGAAmG;QACnG,KAAK,GAAG,YAAY,CAAC;YACnB,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU;YACzC,MAAM;YACN,kBAAkB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;YACnC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;YAC7B,kBAAkB,EAAE,EAAE;YACtB,kBAAkB,EAAE,EAAE;YACtB,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS;YACvC,eAAe,EAAE,cAAc,CAAC,KAAK,CAAC;YACtC,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,yFAAyF;IACzF,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,UAAU,CAClB,cAAc,EACd,8FAA8F,EAC9F,wFAAwF,CACzF,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,UAAU,CAClB,cAAc,EACd,sDAAsD,SAAS,CAAC,IAAI,4BAA4B;YAC9F,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,mDAAmD,EACnF,iGAAiG,CAClG,CAAC;IACJ,CAAC;IACD,MAAM,gBAAgB,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAE,CAAC;IAE5C,4FAA4F;IAC5F,4FAA4F;IAC5F,8FAA8F;IAC9F,+EAA+E;IAC/E,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,GAC1D,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAC3C,MAAM,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACrF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC;QAChD,IAAI,gBAAgB,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC3C,MAAM,kBAAkB,CACtB,qBAAqB,EACrB,iDAAiD,gBAAgB,4CAA4C,QAAQ,CAAC,QAAQ,mEAAmE,EACjM,yGAAyG,CAC1G,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBACrC,MAAM,kBAAkB,CACtB,yBAAyB,EACzB,+BAA+B,CAAC,CAAC,MAAM,gHAAgH,QAAQ,CAAC,QAAQ,EAAE,EAC1K,sGAAsG,CACvG,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB,EAAE,CAAC;gBACrD,MAAM,kBAAkB,CACtB,2BAA2B,EAC3B,+BAA+B,CAAC,CAAC,MAAM,6BAA6B,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,qCAAqC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,0EAA0E,EACxP,gHAAgH,CACjH,CAAC;YACJ,CAAC;QACH,CAAC;QACD,MAAM,aAAa,GAAG,IAAI;aACvB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,EAAE,qBAAqB,CAAC,CAAC;aACpF,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACvB,8BAA8B,CAAC;YAC7B,QAAQ;YACR,aAAa;YACb,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAC/D,uBAAuB,EAAE,qBAAqB,CAAC,iBAAiB;YAChE,QAAQ;YACR,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC,CAAC;IACL,CAAC;IAED,wFAAwF;IACxF,iFAAiF;IACjF,wFAAwF;IACxF,sFAAsF;IACtF,wFAAwF;IACxF,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACnF,IAAI,iBAAiB,GAAwB,IAAI,GAAG,EAAU,CAAC;IAC/D,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;QACnF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC/D,iBAAiB,GAAG,yBAAyB,CAAC;YAC5C,UAAU,EAAE,aAAa;YACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,eAAe,EAAE,cAAc,CAAC,KAAK,CAAC;YACtC,uBAAuB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC;SAC/D,CAAC,CAAC;IACL,CAAC;IAED,2FAA2F;IAC3F,yFAAyF;IACzF,iCAAiC,CAAC,KAAK,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAEvE,4FAA4F;IAC5F,6FAA6F;IAC7F,6FAA6F;IAC7F,8FAA8F;IAC9F,kFAAkF;IAClF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,UAAU,CAClB,cAAc,EACd,gGAAgG;YAC9F,qDAAqD,EACvD,6HAA6H,CAC9H,CAAC;IACJ,CAAC;IAED,6FAA6F;IAC7F,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IACnD,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,MAAM,IAAI,UAAU,CAClB,gBAAgB,EAChB,oCAAoC,EAAE,kCAAkC,EACxE,gDAAgD,CACjD,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,WAAW,GAAsB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACvD,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;QAC3B,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,wFAAwF;IACxF,oFAAoF;IACpF,yFAAyF;IACzF,yFAAyF;IACzF,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,uFAAuF;IACvF,wFAAwF;IACxF,0FAA0F;IAC1F,0FAA0F;IAC1F,uFAAuF;IACvF,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,UAAU,CAClB,cAAc,EACd,sDAAsD,EAAE,qEAAqE,EAC7H,+GAA+G,CAChH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,8FAA8F;IAC9F,gGAAgG;IAChG,6FAA6F;IAC7F,iFAAiF;IACjF,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACrC,EAAE;QACF,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,IAAI;QAC3B,WAAW,EAAE,QAAiB;KAC/B,CAAC,CAAC,CAAC;IAEJ,8FAA8F;IAC9F,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM;QACzB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;QAC/B,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,8BAA8B,CAAC,CAAC;IACxF,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,KAAc,EAAU,EAAE;QAC9D,MAAM,IAAI,GAAG,GAAG,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC;QACjD,MAAM,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC;QAC1B,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACrC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC;IAClF,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC;SACpC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC;SACnD,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjB,uFAAuF;IACvF,sFAAsF;IACtF,sFAAsF;IACtF,yCAAyC;IACzC,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;IACzF,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QACnC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,8FAA8F;IAC9F,6FAA6F;IAC7F,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;QAC/B,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACpF,CAAC;IACD,4FAA4F;IAC5F,6FAA6F;IAC7F,+FAA+F;IAC/F,2FAA2F;IAC3F,MAAM,UAAU,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,UAAU,CAClB,cAAc,EACd,+FAA+F;YAC7F,mCAAmC,EACrC,6HAA6H,CAC9H,CAAC;IACJ,CAAC;IAED,wFAAwF;IACxF,yFAAyF;IACzF,MAAM,IAAI,GAAG,mBAAmB,CAAC;QAC/B,IAAI;QACJ,WAAW;QACX,SAAS,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE;QACrC,YAAY,EAAE,UAAU;QACxB,QAAQ,EAAE,EAAE,gBAAgB,EAAE;KAC/B,CAAC,CAAC;IACH,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAE7E,OAAO,CAAC,KAAK,CAAC,uCAAuC,QAAQ,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,KAAK,CACX,gDAAgD,gBAAgB,gBAAgB,QAAQ,EAAE,CAC3F,CAAC;IACF,OAAO,CAAC,KAAK,CACX,aAAa,MAAM,CAAC,MAAM,6BAA6B,SAAS,CAAC,MAAM,WAAW,KAAK,CAAC,QAAQ,CAAC,MAAM,eAAe,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CACjJ,CAAC;IACF,OAAO,CAAC,KAAK,CAAC,gCAAgC,aAAa,CAAC,MAAM,kBAAkB,UAAU,EAAE,CAAC,CAAC;IAClG,OAAO,CAAC,KAAK,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,CACX,8FAA8F,CAC/F,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spine-cert-materialize.d.ts","sourceRoot":"","sources":["../../src/commands/spine-cert-materialize.ts"],"names":[],"mappings":"AAsBA,KAAK,UAAU,GAAG,cAAc,cAAc,EAAE,QAAQ,CAAC;AAgBzD,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,UAAU,GACnB,eAAe,CAqBjB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,0GAA0G;IAC1G,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6GAA6G;IAC7G,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"spine-cert-materialize.d.ts","sourceRoot":"","sources":["../../src/commands/spine-cert-materialize.ts"],"names":[],"mappings":"AAsBA,KAAK,UAAU,GAAG,cAAc,cAAc,EAAE,QAAQ,CAAC;AAgBzD,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,UAAU,GACnB,eAAe,CAqBjB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,0GAA0G;IAC1G,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6GAA6G;IAC7G,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsNhF"}
|
|
@@ -88,6 +88,23 @@ export async function materializeCommand(opts) {
|
|
|
88
88
|
throw new TotemError('CONFIG_INVALID', `cert-corpus materialize: seed manifest invalid:\n${issues}`, 'Fix the seed manifest and retry.');
|
|
89
89
|
}
|
|
90
90
|
const seed = seedParse.data;
|
|
91
|
+
// ADR-112 §7/§8 D5 — single kind-resolution: read the producer ONCE and dispatch the whole
|
|
92
|
+
// materializer here. Authored runs the window-wide sibling (freeze gates + train-side controls
|
|
93
|
+
// + `frozenAt`); mined falls through BYTE-UNCHANGED below. No producerKind branch downstream.
|
|
94
|
+
if ((seed.producerKind ?? 'mined') === 'authored') {
|
|
95
|
+
const { materializeAuthored } = await import('./spine-authored-materialize.js');
|
|
96
|
+
await materializeAuthored({
|
|
97
|
+
seed,
|
|
98
|
+
lcDir,
|
|
99
|
+
repoRoot,
|
|
100
|
+
cwd,
|
|
101
|
+
totemDir: path.join(repoRoot, '.totem'),
|
|
102
|
+
outDir: opts.outDir,
|
|
103
|
+
resolveWithinRepo,
|
|
104
|
+
safeExec,
|
|
105
|
+
});
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
91
108
|
// 2. Enumerate PRs off the clone, then derive (pure) — corpus + split + roles.
|
|
92
109
|
let metas;
|
|
93
110
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spine-cert-materialize.js","sourceRoot":"","sources":["../../src/commands/spine-cert-materialize.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spine-cert-materialize.js","sourceRoot":"","sources":["../../src/commands/spine-cert-materialize.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CompiledRule, LegitimacyProjectionSkip, ProvenanceRecord, RuleFiring, WindtunnelVerdict } from '@mmnto/totem';
|
|
1
|
+
import type { CompiledRule, Gate2Eligibility, LegitimacyProjectionSkip, PerRuleControlResult, ProvenanceRecord, RuleFiring, WindtunnelVerdict } from '@mmnto/totem';
|
|
2
2
|
export interface CertPersistInput {
|
|
3
3
|
/** The scorer verdict for this run. */
|
|
4
4
|
verdict: WindtunnelVerdict;
|
|
@@ -28,6 +28,22 @@ export interface CertPersistInput {
|
|
|
28
28
|
nowIso: string;
|
|
29
29
|
/** Corpus identity for the report (the lock's asOfCommit). */
|
|
30
30
|
asOfCommit: string;
|
|
31
|
+
/**
|
|
32
|
+
* ADR-112 §5.3 Slice D4 (strategy Q2) — the downstream, VERDICT-INERT Gate-2-eligible
|
|
33
|
+
* set for an authored run (`survivors ∩ {heldOut>0}`, §1(k)-guarded + illegitimate-window
|
|
34
|
+
* disqualifier). Absent on mined runs. Persisted as a top-level report field (a sibling of
|
|
35
|
+
* `verdict`, NOT folded into it): it is DERIVED from the verdict, never part of it, so the
|
|
36
|
+
* durable artifact keeps the two altitudes legibly separate.
|
|
37
|
+
*/
|
|
38
|
+
gate2?: Gate2Eligibility;
|
|
39
|
+
/**
|
|
40
|
+
* Option-(i) ruling (#2291, operator 2026-07-04) — the AUTHORED C1 map, computed
|
|
41
|
+
* at the §8 single home from the §4 differential HELD AT EMISSION. When present
|
|
42
|
+
* it REPLACES the mined fire-on-target derivation below (which is structurally
|
|
43
|
+
* unsatisfiable for pre-window anchors, §5.2). Absent on mined runs — the mined
|
|
44
|
+
* derivation stays byte-unchanged.
|
|
45
|
+
*/
|
|
46
|
+
perRuleControls?: Map<string, PerRuleControlResult>;
|
|
31
47
|
}
|
|
32
48
|
export interface CertPersistResult {
|
|
33
49
|
/** True iff PASS-survivors were written to the cert output (PASS only). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spine-cert-persist.d.ts","sourceRoot":"","sources":["../../src/commands/spine-cert-persist.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,YAAY,EACZ,wBAAwB,EACxB,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAItB,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,+EAA+E;IAC/E,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,qDAAqD;IACrD,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,+DAA+D;IAC/D,sBAAsB,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,yEAAyE;IACzE,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,4DAA4D;IAC5D,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAChD;;;;;OAKG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAC9B,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"spine-cert-persist.d.ts","sourceRoot":"","sources":["../../src/commands/spine-cert-persist.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAItB,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,+EAA+E;IAC/E,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,qDAAqD;IACrD,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,+DAA+D;IAC/D,sBAAsB,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,yEAAyE;IACzE,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,4DAA4D;IAC5D,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAChD;;;;;OAKG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAC9B,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,iBAAiB;IAChC,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC;IACnB,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gFAAgF;IAChF,KAAK,EAAE,wBAAwB,EAAE,CAAC;CACnC;AAUD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAmG5B"}
|
|
@@ -28,11 +28,14 @@ function timestampSlug(nowIso) {
|
|
|
28
28
|
*/
|
|
29
29
|
export async function persistCertifyingOutcome(input) {
|
|
30
30
|
const { computePerRuleControlResults, projectLegitimacy, buildCertifiedRulesFile, saveCompiledRulesFile, } = await import('@mmnto/totem');
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
// Sibling-selection, data-driven (option (i)): an authored caller hands in the
|
|
32
|
+
// emission-proven C1 map; the mined derivation runs only when none was handed.
|
|
33
|
+
const perRuleControls = input.perRuleControls ??
|
|
34
|
+
computePerRuleControlResults({
|
|
35
|
+
firings: input.firings,
|
|
36
|
+
mintedRuleIds: input.mintedRuleIds,
|
|
37
|
+
positiveControlTargets: input.positiveControlTargets,
|
|
38
|
+
});
|
|
36
39
|
// fold-B — survivor-only, PASS-only legitimacy projection.
|
|
37
40
|
const projection = projectLegitimacy({
|
|
38
41
|
verdict: input.verdict,
|
|
@@ -56,6 +59,15 @@ export async function persistCertifyingOutcome(input) {
|
|
|
56
59
|
generatedAt: input.nowIso,
|
|
57
60
|
asOfCommit: input.asOfCommit,
|
|
58
61
|
verdict: input.verdict,
|
|
62
|
+
// D4 (strategy Q2): verdict-inert Gate-2 eligibility, authored runs only. Top-level
|
|
63
|
+
// sibling of `verdict` — derived from it, never part of it (mined runs omit the key).
|
|
64
|
+
...(input.gate2 ? { gate2: input.gate2 } : {}),
|
|
65
|
+
// #2298 (greptile outside-diff): the C1 per-rule control results, BOTH lanes —
|
|
66
|
+
// for an authored run this is the ONLY durable record of WHY a rule read
|
|
67
|
+
// positiveControl:true (the `§6-emission:` evidence never appears in `firings`);
|
|
68
|
+
// for a mined run it is derivable from `firings` but persisted for symmetry.
|
|
69
|
+
// Sorted by ruleId so the report is byte-stable across runs.
|
|
70
|
+
perRuleControls: Object.fromEntries([...perRuleControls.entries()].sort(([a], [b]) => a.localeCompare(b))),
|
|
59
71
|
persisted,
|
|
60
72
|
stampedRuleIds: projection.stamped.map((r) => r.lessonHash),
|
|
61
73
|
skips: projection.skips,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spine-cert-persist.js","sourceRoot":"","sources":["../../src/commands/spine-cert-persist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"spine-cert-persist.js","sourceRoot":"","sources":["../../src/commands/spine-cert-persist.ts"],"names":[],"mappings":"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"}
|
|
@@ -118,5 +118,65 @@ describe('persistCertifyingOutcome', () => {
|
|
|
118
118
|
const result = await persistCertifyingOutcome(baseInput(makeVerdict('PASS')));
|
|
119
119
|
expect(path.basename(result.reportPath)).toMatch(/^run-20260620T235959-[0-9a-f]{12}\.json$/);
|
|
120
120
|
});
|
|
121
|
+
it('authored run ⟹ the verdict-inert gate2 set persists as a TOP-LEVEL report field, not folded into verdict (D4 Q2)', async () => {
|
|
122
|
+
const gate2 = {
|
|
123
|
+
eligibleRuleIds: ['r1'],
|
|
124
|
+
survivors: [
|
|
125
|
+
{ ruleId: 'r1', heldOutActivations: 3, gate2Eligible: true },
|
|
126
|
+
{ ruleId: 'r2', heldOutActivations: 0, gate2Eligible: false },
|
|
127
|
+
],
|
|
128
|
+
windowDisqualified: false,
|
|
129
|
+
};
|
|
130
|
+
const result = await persistCertifyingOutcome({ ...baseInput(makeVerdict('PASS')), gate2 });
|
|
131
|
+
const report = JSON.parse(fs.readFileSync(result.reportPath, 'utf-8'));
|
|
132
|
+
// Serialized in full (shape, not just presence) as a top-level sibling of `verdict`.
|
|
133
|
+
expect(report.gate2).toEqual(gate2);
|
|
134
|
+
// Altitude separation: gate2 is DERIVED from the verdict, never part of it.
|
|
135
|
+
expect('gate2' in report.verdict).toBe(false);
|
|
136
|
+
});
|
|
137
|
+
it('mined/default run ⟹ the report OMITS the gate2 key entirely (not null)', async () => {
|
|
138
|
+
const result = await persistCertifyingOutcome(baseInput(makeVerdict('PASS')));
|
|
139
|
+
const report = JSON.parse(fs.readFileSync(result.reportPath, 'utf-8'));
|
|
140
|
+
// Key is absent, not serialized-as-null — a mined run has no Gate-2 emission.
|
|
141
|
+
expect('gate2' in report).toBe(false);
|
|
142
|
+
});
|
|
143
|
+
it('option (i): a handed-in authored C1 map REPLACES the mined derivation and persists in the report', async () => {
|
|
144
|
+
// Authored shape: ZERO positive firings (pre-window anchors have no window
|
|
145
|
+
// substrate) — the emission-proven map alone must stamp the survivor AND
|
|
146
|
+
// survive into the durable report (greptile #2298 outside-diff: without it,
|
|
147
|
+
// an auditor cannot see WHY positiveControl read true without a re-run).
|
|
148
|
+
const perRuleControls = new Map([
|
|
149
|
+
[
|
|
150
|
+
'r1',
|
|
151
|
+
{
|
|
152
|
+
positiveControl: true,
|
|
153
|
+
negativeControl: true,
|
|
154
|
+
evidenceRefs: ['§6-emission:422:src/foo.rs:L10-L12'],
|
|
155
|
+
},
|
|
156
|
+
],
|
|
157
|
+
]);
|
|
158
|
+
const result = await persistCertifyingOutcome({
|
|
159
|
+
...baseInput(makeVerdict('PASS')),
|
|
160
|
+
firings: [],
|
|
161
|
+
positiveControlTargets: [],
|
|
162
|
+
perRuleControls,
|
|
163
|
+
});
|
|
164
|
+
expect(result.persisted).toBe(true);
|
|
165
|
+
expect(result.stampedCount).toBe(1);
|
|
166
|
+
const report = JSON.parse(fs.readFileSync(result.reportPath, 'utf-8'));
|
|
167
|
+
expect(report.perRuleControls).toEqual({
|
|
168
|
+
r1: {
|
|
169
|
+
positiveControl: true,
|
|
170
|
+
negativeControl: true,
|
|
171
|
+
evidenceRefs: ['§6-emission:422:src/foo.rs:L10-L12'],
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
it('the mined lane also persists its (fire-on-target-derived) C1 map in the report', async () => {
|
|
176
|
+
const result = await persistCertifyingOutcome(baseInput(makeVerdict('PASS')));
|
|
177
|
+
const report = JSON.parse(fs.readFileSync(result.reportPath, 'utf-8'));
|
|
178
|
+
expect(report.perRuleControls.r1.positiveControl).toBe(true);
|
|
179
|
+
expect(report.perRuleControls.r1.evidenceRefs).toEqual(['label-r1-pos']);
|
|
180
|
+
});
|
|
121
181
|
});
|
|
122
182
|
//# sourceMappingURL=spine-cert-persist.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spine-cert-persist.test.js","sourceRoot":"","sources":["../../src/commands/spine-cert-persist.test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"spine-cert-persist.test.js","sourceRoot":"","sources":["../../src/commands/spine-cert-persist.test.ts"],"names":[],"mappings":"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"}
|