@mmnto/cli 1.87.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
|
@@ -8,14 +8,155 @@
|
|
|
8
8
|
// strategy seam-review (f)). SLICE B: from-YAML only (interactive is a later
|
|
9
9
|
// upgrade, §8); records are produced + ledgered, not yet fed to the certifying corpus.
|
|
10
10
|
export async function ruleAuthorCommand(opts) {
|
|
11
|
+
const fs = await import('node:fs');
|
|
11
12
|
const path = await import('node:path');
|
|
12
13
|
const { loadConfig, resolveConfigPath } = await import('../utils.js');
|
|
13
|
-
const { runRuleAuthor } = await import('../authored-rule-intake.js');
|
|
14
|
+
const { AUTHORED_RULES_REL, runRuleAuthor } = await import('../authored-rule-intake.js');
|
|
15
|
+
const { resolveGitRoot, safeExec, SPLIT_REF_RE, TotemError } = await import('@mmnto/totem');
|
|
14
16
|
const cwd = process.cwd();
|
|
15
17
|
const config = await loadConfig(resolveConfigPath(cwd));
|
|
16
18
|
const totemDir = path.join(cwd, config.totemDir);
|
|
19
|
+
// ── R1 freeze binding (ADR-112 §5.1/§8): a content-addressed splitRef in the
|
|
20
|
+
// authoring header engages the shared-history proof BEFORE intake — resolve
|
|
21
|
+
// the frozen artifact by ref, prove it on the shared ref (topology-first),
|
|
22
|
+
// and hand the VERIFIED artifact to the git-free intake. A legacy free-text
|
|
23
|
+
// splitRef binds nothing (pre-R1 shape; intake enforces the partition). ──
|
|
24
|
+
let freezeBinding;
|
|
25
|
+
const yamlPath = path.join(totemDir, AUTHORED_RULES_REL);
|
|
26
|
+
let declaredSplitRef;
|
|
27
|
+
let yamlText;
|
|
28
|
+
if (fs.existsSync(yamlPath)) {
|
|
29
|
+
// Cheap header peek (full validation stays in runRuleAuthor): the splitRef line
|
|
30
|
+
// decides whether the proof machinery loads at all (lazy-load discipline).
|
|
31
|
+
yamlText = fs.readFileSync(yamlPath, 'utf-8');
|
|
32
|
+
const m = /^splitRef:\s*["']?(\S+?)["']?\s*$/m.exec(yamlText);
|
|
33
|
+
declaredSplitRef = m?.[1];
|
|
34
|
+
}
|
|
17
35
|
const judgedBy = opts.judgedBy?.trim() || 'static-whitelist@cert-1';
|
|
18
|
-
|
|
36
|
+
if (declaredSplitRef !== undefined && SPLIT_REF_RE.test(declaredSplitRef)) {
|
|
37
|
+
// The §5.4 sandbox is NON-OPTIONAL under a content-addressed binding (#2294
|
|
38
|
+
// couple): a flag whose omission skips the guard is an author-owned knob,
|
|
39
|
+
// which the independence axiom forbids. Gate BEFORE the proof machinery
|
|
40
|
+
// loads — nothing is verified or partially engaged on failure. The legacy
|
|
41
|
+
// free-text lane below binds nothing and is byte-unaffected.
|
|
42
|
+
const lcDir = opts.lcDir?.trim();
|
|
43
|
+
if (lcDir === undefined || lcDir === '') {
|
|
44
|
+
throw new TotemError('GATE_INVALID', 'rule author: the authoring header names a frozen split artifact (content-addressed splitRef), so the §5.4 author sandbox is NON-OPTIONAL — --lc-dir is missing.', 'Pass --lc-dir <path-to-lc-clone> (env: TOTEM_LC_DIR); the sandbox root derives from the frozen artifact alone and its reachability proof must run before intake.');
|
|
45
|
+
}
|
|
46
|
+
const { resolveFrozenSplitByRef, verifySharedFrozenSplit } = await import('../spine-freeze-proof.js');
|
|
47
|
+
const repoRoot = resolveGitRoot(cwd) ?? cwd;
|
|
48
|
+
const resolved = resolveFrozenSplitByRef(totemDir, repoRoot, declaredSplitRef);
|
|
49
|
+
verifySharedFrozenSplit({ repoRoot, resolved, safeExec });
|
|
50
|
+
freezeBinding = { artifact: resolved.artifact };
|
|
51
|
+
console.log(`[RuleAuthor] freeze binding verified: ${resolved.artifact.splitRef} ` +
|
|
52
|
+
`(commitment ${resolved.artifact.freezeCommitment.slice(0, 12)}…, shared-history proof passed)`);
|
|
53
|
+
// §5.2 leakage semantics (#2294 couple, operator option (a)): prove any
|
|
54
|
+
// OUT-OF-WINDOW fixture PR strictly pre-window by ANCESTRY to the artifact's
|
|
55
|
+
// cutBoundarySha — this command is the git-holding boundary; intake consumes
|
|
56
|
+
// the verified set and never proves (the freezeBinding seam). The candidate
|
|
57
|
+
// collection is a best-effort structural walk: a malformed YAML yields no
|
|
58
|
+
// candidates here and intake's own strict parse rejects the file properly.
|
|
59
|
+
let verifiedPreWindowFixturePrs = new Set();
|
|
60
|
+
const { parse: parseYaml } = await import('yaml');
|
|
61
|
+
const declaredFixturePrs = collectDeclaredFixturePrs(yamlText ?? '', parseYaml);
|
|
62
|
+
const inWindow = new Set([
|
|
63
|
+
...resolved.artifact.split.trainPrs,
|
|
64
|
+
...resolved.artifact.split.heldOutPrs,
|
|
65
|
+
]);
|
|
66
|
+
const outOfWindow = declaredFixturePrs.filter((pr) => !inWindow.has(pr));
|
|
67
|
+
if (outOfWindow.length > 0) {
|
|
68
|
+
const { verifyPreWindowFixturePrs } = await import('../spine-fixture-ancestry.js');
|
|
69
|
+
const { isAncestor } = await import('../git.js');
|
|
70
|
+
const { mergeCommitMap, parsePrNumber, parseRevertSha, isBotIdentity } = await import('@mmnto/totem');
|
|
71
|
+
const { enumeratePrMetas } = await import('./spine-windtunnel.js');
|
|
72
|
+
const metas = enumeratePrMetas(resolved.artifact.split.asOfCommit, lcDir, safeExec, {
|
|
73
|
+
parsePrNumber,
|
|
74
|
+
parseRevertSha,
|
|
75
|
+
isBotIdentity,
|
|
76
|
+
});
|
|
77
|
+
verifiedPreWindowFixturePrs = verifyPreWindowFixturePrs({
|
|
78
|
+
fixturePrs: outOfWindow,
|
|
79
|
+
trainPrs: resolved.artifact.split.trainPrs,
|
|
80
|
+
heldOutPrs: resolved.artifact.split.heldOutPrs,
|
|
81
|
+
mergeCommitByPr: mergeCommitMap(metas),
|
|
82
|
+
isAncestorOfCutBoundary: (mc) => isAncestor(lcDir, mc, resolved.artifact.cutBoundarySha),
|
|
83
|
+
});
|
|
84
|
+
console.log(`[RuleAuthor] §5.2 pre-window ancestry: ${verifiedPreWindowFixturePrs.size}/${outOfWindow.length} ` +
|
|
85
|
+
`out-of-window fixture PR(s) proven pre-window (cut boundary ${resolved.artifact.cutBoundarySha.slice(0, 12)}…)`);
|
|
86
|
+
}
|
|
87
|
+
// §5.4: materialize + tear down the derived sandbox to PROVE the boundary sha
|
|
88
|
+
// is reachable from this clone. The root derives from the artifact alone —
|
|
89
|
+
// no author-supplied root/allowlist exists on this surface (independence axiom).
|
|
90
|
+
const { prepareAuthorSandbox, removeAuthorSandbox } = await import('../author-sandbox.js');
|
|
91
|
+
const sandbox = prepareAuthorSandbox({
|
|
92
|
+
lcDir,
|
|
93
|
+
totemDir,
|
|
94
|
+
artifact: resolved.artifact,
|
|
95
|
+
safeExec,
|
|
96
|
+
});
|
|
97
|
+
console.log(`[RuleAuthor] §5.4 author sandbox verified: train tree as of ${sandbox.cutBoundarySha.slice(0, 12)} (derived root, torn down after intake)`);
|
|
98
|
+
let primaryErr;
|
|
99
|
+
try {
|
|
100
|
+
const result = runRuleAuthor(totemDir, {
|
|
101
|
+
judgedBy,
|
|
102
|
+
freezeBinding,
|
|
103
|
+
verifiedPreWindowFixturePrs,
|
|
104
|
+
});
|
|
105
|
+
reportRuleAuthor(result);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
primaryErr = err;
|
|
110
|
+
throw err;
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
try {
|
|
114
|
+
removeAuthorSandbox({ lcDir, root: sandbox.root, safeExec });
|
|
115
|
+
}
|
|
116
|
+
catch (teardownErr) {
|
|
117
|
+
// A throw in `finally` SHADOWS the in-flight error (GCA #2293 round 4):
|
|
118
|
+
// with no primary in flight the teardown failure IS the error (throw);
|
|
119
|
+
// with one, surface the teardown loudly beside it — never replace it.
|
|
120
|
+
if (primaryErr === undefined)
|
|
121
|
+
throw teardownErr;
|
|
122
|
+
console.warn(`[RuleAuthor] WARNING: sandbox teardown failed after a primary error (root kept at ${sandbox.root}): ${teardownErr instanceof Error ? teardownErr.message : String(teardownErr)}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const result = runRuleAuthor(totemDir, { judgedBy, freezeBinding });
|
|
127
|
+
reportRuleAuthor(result);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Best-effort structural walk of the authored YAML for `rules[].positiveFixtures[].pr`
|
|
131
|
+
* — ONLY to decide which PRs need the §5.2 ancestry proof. Anything malformed yields
|
|
132
|
+
* no candidates; `runRuleAuthor`'s strict schema parse remains the real validator.
|
|
133
|
+
*/
|
|
134
|
+
function collectDeclaredFixturePrs(yamlText, parse) {
|
|
135
|
+
let doc;
|
|
136
|
+
try {
|
|
137
|
+
doc = parse(yamlText.replace(/\r\n/g, '\n'));
|
|
138
|
+
// totem-context: intentional best-effort — runRuleAuthor re-parses the identical input strictly and fails loud; this pre-pass only picks ancestry-proof candidates
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
const rules = doc?.rules;
|
|
144
|
+
if (!Array.isArray(rules))
|
|
145
|
+
return [];
|
|
146
|
+
const prs = [];
|
|
147
|
+
for (const r of rules) {
|
|
148
|
+
const fixtures = r?.positiveFixtures;
|
|
149
|
+
if (!Array.isArray(fixtures))
|
|
150
|
+
continue;
|
|
151
|
+
for (const f of fixtures) {
|
|
152
|
+
const pr = f?.pr;
|
|
153
|
+
if (typeof pr === 'number' && Number.isInteger(pr) && pr > 0)
|
|
154
|
+
prs.push(pr);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return prs;
|
|
158
|
+
}
|
|
159
|
+
function reportRuleAuthor(result) {
|
|
19
160
|
console.log(`[RuleAuthor] ${result.records.length} authored rule(s): ` +
|
|
20
161
|
`${result.minted} minted, ${result.revised} revised, ${result.unchanged} unchanged.`);
|
|
21
162
|
for (const rec of result.records) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-author.js","sourceRoot":"","sources":["../../src/commands/rule-author.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,EAAE;AACF,iFAAiF;AACjF,kFAAkF;AAClF,+EAA+E;AAC/E,kFAAkF;AAClF,4EAA4E;AAC5E,6EAA6E;AAC7E,uFAAuF;AAEvF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"rule-author.js","sourceRoot":"","sources":["../../src/commands/rule-author.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AuthoredControlsDeps, GroundTruthLabel, ResolvedPrDiff, SplitArtifact, Stage4VerifierDeps } from '@mmnto/totem';
|
|
2
|
+
import type { FreezeBinding } from '../spine-freeze-proof.js';
|
|
2
3
|
import type { CertifyingCorpus } from './spine-windtunnel.js';
|
|
3
4
|
export interface BuildAuthoredCertifyingCorpusDeps {
|
|
4
5
|
/** `.totem` dir holding `spine/authored-rules.yaml` + the authoring-ledger. */
|
|
@@ -23,6 +24,20 @@ export interface BuildAuthoredCertifyingCorpusDeps {
|
|
|
23
24
|
now: string;
|
|
24
25
|
/** Optional §4 differential-evaluator injection for `deriveAuthoredControls` (defaults to the real one). */
|
|
25
26
|
authoredControlsDeps?: AuthoredControlsDeps;
|
|
27
|
+
/**
|
|
28
|
+
* R1: the PROVEN freeze binding for a content-addressed `expectedSplitRef`
|
|
29
|
+
* (constructed ONLY by `resolveProvenFreezeBinding` at the cert-run boundary —
|
|
30
|
+
* this builder is git-free and never proves). Absent on a legacy free-text run;
|
|
31
|
+
* absent on a content-addressed run ⇒ the intake's total partition fails loud.
|
|
32
|
+
*/
|
|
33
|
+
freezeBinding?: FreezeBinding;
|
|
34
|
+
/**
|
|
35
|
+
* §5.2 leakage semantics (#2294 couple, option (a)): fixture PRs the git-holding
|
|
36
|
+
* run boundary PROVED strictly pre-window by ancestry to the artifact's
|
|
37
|
+
* cutBoundarySha (`verifyPreWindowFixturePrs`). Threaded to the intake gate and
|
|
38
|
+
* the §6 deriver; absent/empty ⇒ strict train-only, byte-unchanged.
|
|
39
|
+
*/
|
|
40
|
+
verifiedPreWindowFixturePrs?: ReadonlySet<number>;
|
|
26
41
|
}
|
|
27
42
|
/**
|
|
28
43
|
* Assemble an AUTHORED `CertifyingCorpus` from `.totem/spine/authored-rules.yaml`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spine-authored-cert-corpus.d.ts","sourceRoot":"","sources":["../../src/commands/spine-authored-cert-corpus.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,oBAAoB,EAEpB,gBAAgB,EAEhB,cAAc,EACd,aAAa,EACb,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,WAAW,iCAAiC;IAChD,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAC;IAKjB;;;;;;OAMG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB,0FAA0F;IAC1F,KAAK,EAAE,aAAa,CAAC;IACrB,uFAAuF;IACvF,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,0EAA0E;IAC1E,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC3C,wEAAwE;IACxE,MAAM,EAAE,kBAAkB,CAAC;IAC3B,mFAAmF;IACnF,GAAG,EAAE,MAAM,CAAC;IACZ,4GAA4G;IAC5G,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"spine-authored-cert-corpus.d.ts","sourceRoot":"","sources":["../../src/commands/spine-authored-cert-corpus.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,oBAAoB,EAEpB,gBAAgB,EAEhB,cAAc,EACd,aAAa,EACb,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,WAAW,iCAAiC;IAChD,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAC;IAKjB;;;;;;OAMG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB,0FAA0F;IAC1F,KAAK,EAAE,aAAa,CAAC;IACrB,uFAAuF;IACvF,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,0EAA0E;IAC1E,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC3C,wEAAwE;IACxE,MAAM,EAAE,kBAAkB,CAAC;IAC3B,mFAAmF;IACnF,GAAG,EAAE,MAAM,CAAC;IACZ,4GAA4G;IAC5G,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;OAKG;IACH,2BAA2B,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACnD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,iCAAiC,GACtC,OAAO,CAAC,gBAAgB,CAAC,CAqO3B"}
|
|
@@ -66,7 +66,20 @@ export async function buildAuthoredCertifyingCorpus(deps) {
|
|
|
66
66
|
// cover (non-empty-but-stale): step-0 empty → no-mint stale → step-3 verdict/binding (Q3 layered).
|
|
67
67
|
// The producer establishes eligibility/identity; NEVER construct AuthoredRuleRecord[] ad hoc or
|
|
68
68
|
// read YAML→record here.
|
|
69
|
-
|
|
69
|
+
// R1: a content-addressed expectedSplitRef binds the run to a FROZEN artifact — the caller
|
|
70
|
+
// resolves + PROVES the binding at the cert-run boundary (`resolveProvenFreezeBinding`) and
|
|
71
|
+
// threads it here, or the intake's own content-ref gate voids the verifyOnly re-derive
|
|
72
|
+
// (CR #2293 round 1: the cert re-derive ran bindingless). This builder stays git-free:
|
|
73
|
+
// it CONSUMES a proven binding, never constructs one (the never-unverified-binding
|
|
74
|
+
// invariant — proof lives with the boundary that has git).
|
|
75
|
+
const authorResult = runRuleAuthor(deps.totemDir, {
|
|
76
|
+
judgedBy,
|
|
77
|
+
verifyOnly: true,
|
|
78
|
+
...(deps.freezeBinding !== undefined ? { freezeBinding: deps.freezeBinding } : {}),
|
|
79
|
+
...(deps.verifiedPreWindowFixturePrs !== undefined
|
|
80
|
+
? { verifiedPreWindowFixturePrs: deps.verifiedPreWindowFixturePrs }
|
|
81
|
+
: {}),
|
|
82
|
+
});
|
|
70
83
|
// 2. rejected.length === 0 precondition: a partially-invalid authored file is broken
|
|
71
84
|
// cert input — never certify the eligible subset (fail loud, not a partial corpus).
|
|
72
85
|
if (authorResult.rejected.length > 0) {
|
|
@@ -165,6 +178,9 @@ export async function buildAuthoredCertifyingCorpus(deps) {
|
|
|
165
178
|
split: deps.split,
|
|
166
179
|
provenanceByRule,
|
|
167
180
|
...(deps.authoredControlsDeps ? { deps: deps.authoredControlsDeps } : {}),
|
|
181
|
+
...(deps.verifiedPreWindowFixturePrs !== undefined
|
|
182
|
+
? { verifiedPreWindowFixturePrs: deps.verifiedPreWindowFixturePrs }
|
|
183
|
+
: {}),
|
|
168
184
|
});
|
|
169
185
|
return {
|
|
170
186
|
rules,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spine-authored-cert-corpus.js","sourceRoot":"","sources":["../../src/commands/spine-authored-cert-corpus.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,EAAE;AACF,iFAAiF;AACjF,oFAAoF;AACpF,qFAAqF;AACrF,gFAAgF;AAChF,qFAAqF;AACrF,oFAAoF;AACpF,6EAA6E;AAC7E,EAAE;AACF,iFAAiF;AACjF,qFAAqF;AACrF,iFAAiF;
|
|
1
|
+
{"version":3,"file":"spine-authored-cert-corpus.js","sourceRoot":"","sources":["../../src/commands/spine-authored-cert-corpus.ts"],"names":[],"mappings":"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"}
|