spec-controller 0.1.0-alpha.1 → 0.1.0-alpha.11
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/README.md +112 -0
- package/dist/cli-args.d.ts +73 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +114 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-balance/cli.d.ts +20 -20
- package/dist/cli-balance/cli.d.ts.map +1 -1
- package/dist/cli-balance/cli.js +221 -202
- package/dist/cli-balance/cli.js.map +1 -1
- package/dist/cli-balance/emit/writer.d.ts +1 -1
- package/dist/cli-registry.d.ts +35 -12
- package/dist/cli-registry.d.ts.map +1 -1
- package/dist/cli-registry.js +95 -36
- package/dist/cli-registry.js.map +1 -1
- package/dist/cli.d.ts +5 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -3
- package/dist/cli.js.map +1 -1
- package/dist/corpus/cli.d.ts +34 -0
- package/dist/corpus/cli.d.ts.map +1 -0
- package/dist/corpus/cli.js +125 -0
- package/dist/corpus/cli.js.map +1 -0
- package/dist/deferralTags.d.ts +3 -3
- package/dist/deferralTags.js +3 -3
- package/dist/ingest/gherkinValidation.d.ts +29 -5
- package/dist/ingest/gherkinValidation.d.ts.map +1 -1
- package/dist/ingest/gherkinValidation.js +33 -5
- package/dist/ingest/gherkinValidation.js.map +1 -1
- package/dist/ingest/ingestQualityChecks.d.ts +15 -25
- package/dist/ingest/ingestQualityChecks.d.ts.map +1 -1
- package/dist/ingest/ingestQualityChecks.js +87 -104
- package/dist/ingest/ingestQualityChecks.js.map +1 -1
- package/dist/ingest/ingestScenarios.d.ts +2 -1
- package/dist/ingest/ingestScenarios.d.ts.map +1 -1
- package/dist/ingest/ingestScenarios.js +32 -3
- package/dist/ingest/ingestScenarios.js.map +1 -1
- package/dist/run-management/resolveRunInputs.d.ts +24 -11
- package/dist/run-management/resolveRunInputs.d.ts.map +1 -1
- package/dist/run-management/resolveRunInputs.js +49 -13
- package/dist/run-management/resolveRunInputs.js.map +1 -1
- package/package.json +2 -2
- package/dist/mutation-ratchet/index.d.ts +0 -48
- package/dist/mutation-ratchet/index.d.ts.map +0 -1
- package/dist/mutation-ratchet/index.js +0 -48
- package/dist/mutation-ratchet/index.js.map +0 -1
- package/dist/mutation-ratchet/ratchet.d.ts +0 -129
- package/dist/mutation-ratchet/ratchet.d.ts.map +0 -1
- package/dist/mutation-ratchet/ratchet.js +0 -222
- package/dist/mutation-ratchet/ratchet.js.map +0 -1
- package/dist/mutation-ratchet/ratchetCli.d.ts +0 -57
- package/dist/mutation-ratchet/ratchetCli.d.ts.map +0 -1
- package/dist/mutation-ratchet/ratchetCli.js +0 -139
- package/dist/mutation-ratchet/ratchetCli.js.map +0 -1
- package/dist/mutation-ratchet/reconcile.d.ts +0 -82
- package/dist/mutation-ratchet/reconcile.d.ts.map +0 -1
- package/dist/mutation-ratchet/reconcile.js +0 -67
- package/dist/mutation-ratchet/reconcile.js.map +0 -1
- package/dist/mutation-ratchet/record.d.ts +0 -210
- package/dist/mutation-ratchet/record.d.ts.map +0 -1
- package/dist/mutation-ratchet/record.js +0 -330
- package/dist/mutation-ratchet/record.js.map +0 -1
- package/dist/mutation-ratchet/report.d.ts +0 -83
- package/dist/mutation-ratchet/report.d.ts.map +0 -1
- package/dist/mutation-ratchet/report.js +0 -148
- package/dist/mutation-ratchet/report.js.map +0 -1
- package/dist/mutation-ratchet/verdict.d.ts +0 -177
- package/dist/mutation-ratchet/verdict.d.ts.map +0 -1
- package/dist/mutation-ratchet/verdict.js +0 -387
- package/dist/mutation-ratchet/verdict.js.map +0 -1
package/dist/cli-balance/cli.js
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Usage:
|
|
9
9
|
* pnpm reconcile [--features <dir>] [--vitest <report.json>]
|
|
10
|
-
* [--cucumber <report.json>] [--ci <
|
|
10
|
+
* [--cucumber <report.json>] [--ci-steps <record.json>]
|
|
11
|
+
* [--ci <ci.yml>]
|
|
11
12
|
* [--format <fmt>[:<path>]]
|
|
12
13
|
*/
|
|
13
14
|
import { existsSync, readFileSync } from "node:fs";
|
|
@@ -15,28 +16,13 @@ import { dirname } from "node:path";
|
|
|
15
16
|
import { runReconcile, readEvidenceObligations, readFeatureNames, featureCorpusParseErrors, featureCorpusDuplicateScnIds, } from "../ingest/ingestQualityChecks.js";
|
|
16
17
|
import { planOutput } from "./emit/format.js";
|
|
17
18
|
import { writeOutputs } from "./emit/writer.js";
|
|
18
|
-
import { renderReportFromJson, isBalanced, hasPendingItems, hasBrokenEvidence, } from "@3f-consulting/spec-controller-core";
|
|
19
|
+
import { renderReportFromJson, isBalanced, hasPendingItems, hasBrokenEvidence, hasNothingToReconcile, } from "@3f-consulting/spec-controller-core";
|
|
19
20
|
import { resolveSourceSha, resolveTargetRoot, resolveToolIdentity } from "../run-management/resolveRunInputs.js";
|
|
20
|
-
import { cliRegistry,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const a = argv[i];
|
|
26
|
-
if (a !== undefined && a.startsWith("--")) {
|
|
27
|
-
const key = a.slice(2);
|
|
28
|
-
const value = argv[i + 1];
|
|
29
|
-
if (value !== undefined && !value.startsWith("--")) {
|
|
30
|
-
args[key] = value;
|
|
31
|
-
i++;
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
args[key] = "true";
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return args;
|
|
39
|
-
}
|
|
21
|
+
import { cliRegistry, renderCommandHelp } from "../cli-registry.js";
|
|
22
|
+
// THE ARGV READING AND ITS REGISTRY BOUNDING, SHARED WITH EVERY OTHER COMMAND (3F-3300). Both
|
|
23
|
+
// lived here while `balance` was the only command; a second command needs them, and a second
|
|
24
|
+
// copy of "what did the operator type" is the one thing this tree least wants two of.
|
|
25
|
+
import { parseArgs, checkUnknownFlags } from "../cli-args.js";
|
|
40
26
|
/**
|
|
41
27
|
* Collect the `--format <spec>` values from argv in order (the flag is REPEATABLE, unlike
|
|
42
28
|
* the single-valued flags `parseArgs` records) — the raw specs `planOutput` parses. Empty
|
|
@@ -86,22 +72,6 @@ export function checkLegacyJson(args) {
|
|
|
86
72
|
export function sourceTarget(args) {
|
|
87
73
|
return args["target"] ?? "unknown-target";
|
|
88
74
|
}
|
|
89
|
-
/**
|
|
90
|
-
* Guard the supplied input-file/dir flags at the CLI edge (@SCN-CLI-002). A
|
|
91
|
-
* mistyped `--vitest` / `--cucumber` / `--features` / `--ci` / `--package-json`
|
|
92
|
-
* pointing at a non-existent path used to reconcile silently against ZERO evidence —
|
|
93
|
-
* a terrifying false all-red report meaning "you forgot the reports", not "your code
|
|
94
|
-
* is broken" (the dogfooding fault). The five flags are Examples of ONE boundary
|
|
95
|
-
* rule: a supplied-but-absent input path is a hard error. Scope is existence only
|
|
96
|
-
* (readability / file-vs-dir type-correctness out of scope; `exists` covers the dir
|
|
97
|
-
* flag and the file flags alike).
|
|
98
|
-
*
|
|
99
|
-
* PURE and `@unit`-testable like `checkLegacyJson` / `sourceTarget`: reads the parsed
|
|
100
|
-
* args + an injected `exists` fn (no fs), returns the FIRST supplied-but-absent
|
|
101
|
-
* `(flag, path)` as a typed error naming both — routed to stderr + a non-zero exit by
|
|
102
|
-
* `runBalance` (the shared typed-error surface) — else null. An OMITTED flag is not an
|
|
103
|
-
* error (legitimately optional: simply no evidence of that kind).
|
|
104
|
-
*/
|
|
105
75
|
/**
|
|
106
76
|
* The parsed args, as the reconciler's input paths — the one place a `--flag` name becomes a
|
|
107
77
|
* `ReconcileOptions` key.
|
|
@@ -117,14 +87,33 @@ function reconcileInputsOf(args) {
|
|
|
117
87
|
cucumber: args["cucumber"],
|
|
118
88
|
ci: args["ci"],
|
|
119
89
|
packageJson: args["package-json"],
|
|
120
|
-
|
|
90
|
+
ciSteps: args["ci-steps"],
|
|
121
91
|
};
|
|
122
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Guard the supplied input-file/dir flags at the CLI edge (@SCN-CLI-002). A
|
|
95
|
+
* mistyped `--vitest` / `--cucumber` / `--features` / `--ci` / `--package-json`
|
|
96
|
+
* pointing at a non-existent path used to reconcile silently against ZERO evidence —
|
|
97
|
+
* a terrifying false all-red report meaning "you forgot the reports", not "your code
|
|
98
|
+
* is broken" (the dogfooding fault). These flags are Examples of ONE boundary
|
|
99
|
+
* rule: a supplied-but-absent input path is a hard error, and a flag added to the set
|
|
100
|
+
* inherits it rather than restating it. Scope is existence only
|
|
101
|
+
* (readability / file-vs-dir type-correctness out of scope; `exists` covers the dir
|
|
102
|
+
* flag and the file flags alike).
|
|
103
|
+
*
|
|
104
|
+
* PURE and `@unit`-testable like `checkLegacyJson` / `sourceTarget`: reads the parsed
|
|
105
|
+
* args + an injected `exists` fn (no fs), returns the FIRST supplied-but-absent
|
|
106
|
+
* `(flag, path)` as a typed error naming both — routed to stderr + a non-zero exit by
|
|
107
|
+
* `refuseUnreadableInputs` (the shared typed-error surface) — else null. An OMITTED flag is not an
|
|
108
|
+
* error (legitimately optional: simply no evidence of that kind).
|
|
109
|
+
*/
|
|
123
110
|
export function checkInputsExist(args, exists) {
|
|
124
|
-
// The
|
|
111
|
+
// The input flags in a fixed order — the FIRST supplied-but-absent one is the
|
|
125
112
|
// reported error (deterministic; the operator fixes and re-runs). Keys are the
|
|
126
113
|
// parseArgs form (the `--` stripped); the message names the flag WITH its dashes.
|
|
127
|
-
const flags = [
|
|
114
|
+
const flags = [
|
|
115
|
+
"vitest", "cucumber", "features", "ci", "package-json", "ci-steps",
|
|
116
|
+
];
|
|
128
117
|
for (const flag of flags) {
|
|
129
118
|
const path = args[flag];
|
|
130
119
|
if (path !== undefined && !exists(path)) {
|
|
@@ -139,7 +128,9 @@ export function checkInputsExist(args, exists) {
|
|
|
139
128
|
* read as raw TEXT and scanned for `run:` steps — neither is JSON, neither can crash the
|
|
140
129
|
* process, and on garbage both reconcile normally (verified, 3F-1742 Discovery).
|
|
141
130
|
*/
|
|
142
|
-
const JSON_INPUT_FLAGS = [
|
|
131
|
+
const JSON_INPUT_FLAGS = [
|
|
132
|
+
"vitest", "cucumber", "package-json", "ci-steps",
|
|
133
|
+
];
|
|
143
134
|
/**
|
|
144
135
|
* Guard the READABILITY of the supplied JSON inputs at the CLI edge (@SCN-CLI-014).
|
|
145
136
|
* `checkInputsExist` already guards their PRESENCE — but a path that is present yet
|
|
@@ -151,7 +142,7 @@ const JSON_INPUT_FLAGS = ["vitest", "cucumber", "package-json", "measurements"];
|
|
|
151
142
|
*
|
|
152
143
|
* PURE and `@unit`-testable like its sibling guards: reads the parsed args + an injected
|
|
153
144
|
* `read` fn (no fs), returns the FIRST supplied-but-unparseable `(flag, path, failure)` as
|
|
154
|
-
* a typed error naming all three — routed to stderr + exit 2 by `
|
|
145
|
+
* a typed error naming all three — routed to stderr + exit 2 by `refuseUnreadableInputs` — else null.
|
|
155
146
|
* An omitted flag is not an error, and an unreadable file (a race after the existence
|
|
156
147
|
* check) reports as the same input fault rather than escaping as a crash.
|
|
157
148
|
*/
|
|
@@ -204,43 +195,6 @@ export function checkRenderFromJson(args, read) {
|
|
|
204
195
|
}
|
|
205
196
|
return null;
|
|
206
197
|
}
|
|
207
|
-
/**
|
|
208
|
-
* The registry-bounded flag check at the CLI edge (@SCN-CLI-009). `balance` accepts ONLY
|
|
209
|
-
* the flags its per-command registry scope LISTS (by `name` or `alias`); an unregistered
|
|
210
|
-
* flag — a typo like `--strcit`, a stray `--bogus` — is a usage error, NOT silently
|
|
211
|
-
* swallowed the way the old permissive `parseArgs` did. This is the structural teeth behind
|
|
212
|
-
* "accepted = registry = help": a flag can't affect behaviour without a registry entry (and
|
|
213
|
-
* so, by CLI-008's guard, without appearing in help).
|
|
214
|
-
*
|
|
215
|
-
* PURE and `@unit`-testable like `checkLegacyJson` / `checkInputsExist`: reads the parsed
|
|
216
|
-
* args (keys are the `--`-stripped flag names) + the registry, returns the FIRST unregistered
|
|
217
|
-
* flag as a typed usage error naming it WITH its dashes — routed to stderr + exit 2 by
|
|
218
|
-
* `runBalance` (per 3F-1414's `0` balanced / `1` out-of-balance / `2` usage taxonomy),
|
|
219
|
-
* never exit 1, never a silent reconcile — else null. The global `--store`/`--run-id`
|
|
220
|
-
* modifiers never reach here: the top-level dispatcher (`parseHostInvocation`) consumes them
|
|
221
|
-
* BEFORE `balance` is dispatched, so the bounded parser sees only the command's own args.
|
|
222
|
-
*/
|
|
223
|
-
export function checkUnknownFlags(args, registry) {
|
|
224
|
-
// The accepted set: every balance-scope flag name AND alias, with the leading dashes
|
|
225
|
-
// stripped so it compares against parseArgs's `--`-stripped keys (e.g. "--features" and
|
|
226
|
-
// "-h" become "features" and "h"). Built from the registry alone — the single source — so
|
|
227
|
-
// "accepted = registry" holds by construction.
|
|
228
|
-
const balance = registry.commands.find((command) => command.name === "balance");
|
|
229
|
-
const accepted = new Set();
|
|
230
|
-
for (const flag of balance?.flags ?? []) {
|
|
231
|
-
accepted.add(flag.name.replace(/^-+/, ""));
|
|
232
|
-
for (const alias of flag.aliases ?? [])
|
|
233
|
-
accepted.add(alias.replace(/^-+/, ""));
|
|
234
|
-
}
|
|
235
|
-
// The FIRST parsed flag not in the accepted set is the reported error (Object.keys is
|
|
236
|
-
// argv order, so this is deterministic). The message names the flag WITH its dashes.
|
|
237
|
-
for (const key of Object.keys(args)) {
|
|
238
|
-
if (!accepted.has(key)) {
|
|
239
|
-
return `Unknown flag --${key} for 'spec-controller balance'. Run 'spec-controller balance --help' to see the accepted flags.`;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
return null;
|
|
243
|
-
}
|
|
244
198
|
export function runBalance(argv) {
|
|
245
199
|
// Answer `--help`/`-h` from the command/flag registry (@SCN-CLI-006) BEFORE any
|
|
246
200
|
// parse or reconcile: render the balance command's per-command scope (a line per
|
|
@@ -249,7 +203,7 @@ export function runBalance(argv) {
|
|
|
249
203
|
// while balance runs anyway. The registry is the single source, so a flag that exists is
|
|
250
204
|
// a flag that appears in help — no hand-kept list to drift.
|
|
251
205
|
if (argv.includes("--help") || argv.includes("-h")) {
|
|
252
|
-
process.stdout.write(
|
|
206
|
+
process.stdout.write(renderCommandHelp(cliRegistry, "balance") + "\n");
|
|
253
207
|
return;
|
|
254
208
|
}
|
|
255
209
|
// Capture the run-start instant up front — the run provenance's UTC timestamp,
|
|
@@ -262,13 +216,8 @@ export function runBalance(argv) {
|
|
|
262
216
|
// guard's typed error is routed to stderr + a non-zero exit, exactly as planOutput's error
|
|
263
217
|
// is below (the shared typed-error surface).
|
|
264
218
|
const legacyJsonError = checkLegacyJson(args);
|
|
265
|
-
if (legacyJsonError)
|
|
266
|
-
|
|
267
|
-
// Usage/config error → exit 2 (the enumerated usage code, @SCN-CLI-002), distinct
|
|
268
|
-
// from the out-of-balance verdict code 1 (@SCN-CLI-004): an out-of-balance run must
|
|
269
|
-
// never masquerade as a usage error, nor the reverse.
|
|
270
|
-
process.exit(2);
|
|
271
|
-
}
|
|
219
|
+
if (legacyJsonError)
|
|
220
|
+
exitUsage(legacyJsonError);
|
|
272
221
|
// Registry-bounded parse (@SCN-CLI-009): `balance` accepts ONLY the flags its registry
|
|
273
222
|
// scope LISTS. An unregistered flag — a typo `--strcit`, a stray `--bogus` — is a
|
|
274
223
|
// USAGE error: name it on stderr, set process.exitCode = 2 (the enumerated usage code,
|
|
@@ -277,47 +226,162 @@ export function runBalance(argv) {
|
|
|
277
226
|
// hint; the global `--store`/`--run-id` modifiers were consumed by the dispatcher before
|
|
278
227
|
// balance, so they never reach here. This is the structural teeth behind "accepted =
|
|
279
228
|
// registry = help" — a flag can't affect behaviour without a registry entry.
|
|
280
|
-
const unknownFlagError = checkUnknownFlags(args, cliRegistry);
|
|
229
|
+
const unknownFlagError = checkUnknownFlags(args, cliRegistry, "balance", resolveToolIdentity().toolVersion);
|
|
281
230
|
if (unknownFlagError) {
|
|
282
231
|
process.stderr.write(unknownFlagError + "\n");
|
|
283
232
|
process.exitCode = 2;
|
|
284
233
|
return;
|
|
285
234
|
}
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
//
|
|
291
|
-
//
|
|
292
|
-
//
|
|
293
|
-
//
|
|
294
|
-
//
|
|
235
|
+
if (renderSavedReport(args))
|
|
236
|
+
return;
|
|
237
|
+
refuseUnreadableInputs(args);
|
|
238
|
+
const inputs = reconcileInputsOf(args);
|
|
239
|
+
// Reconcile the obligation-vs-observation evidence into the Ledger. The runtime evidence-observation
|
|
240
|
+
// views (Test volume, the evidence grid) are FOLDS the renderers derive off this Ledger's posted
|
|
241
|
+
// credits (@SCN-RPT-010 / 3F-2103 — the census is retired), so they cannot drift from the
|
|
242
|
+
// reconciler's verdict: they ARE the same rows. `withRuntimeObservations: true` (below) tells the
|
|
243
|
+
// renderers the axis is in play.
|
|
244
|
+
const balance = runReconcile(inputs);
|
|
245
|
+
// Read the scenario-corpus census alongside the balance (@SCN-RPT-008) —
|
|
246
|
+
// the raw-vs-parsed @SCN-occurrence delta over the same discovered feature corpus.
|
|
247
|
+
// A sibling to the balance, threaded to the renderers via writeOutputs like ctx.
|
|
248
|
+
const evidenceObligations = readEvidenceObligations(args["features"]);
|
|
249
|
+
// The static-check kind-counts are a FOLD OVER THE LEDGER (@SCN-USG-001 / 3F-2118) — the
|
|
250
|
+
// renderers count the balance's own posted static-check credits (`staticObservationTally`), so
|
|
251
|
+
// they cannot drift from the reconciler's verdict: they ARE the same rows. The parallel static
|
|
252
|
+
// census is RETIRED; `withStaticChecks: true` (below) tells the renderers the axis is in play.
|
|
253
|
+
// Read the target's feature-code→slug map alongside the balance (@SCN-RPT-006)
|
|
254
|
+
// — the by-feature cut's full-name labels. The 5th sibling, threaded to the MARKDOWN
|
|
255
|
+
// renderer via writeOutputs only (markdown-only; the by-feature cut isn't on JSON).
|
|
256
|
+
const featureNames = readFeatureNames(args["features"]);
|
|
257
|
+
const ctx = runContextOf(args, inputs, runStart);
|
|
258
|
+
// Plan the outputs from the --format specs (no flag → md→stdout) and write them via
|
|
259
|
+
// the writer — the pure plan / impure writer split (@SCN-FMT-001). The plan
|
|
260
|
+
// parse+validate is pure; the writer is the only IO for the emitted report. This is
|
|
261
|
+
// the SOLE output path: the tool emits via --format and holds no storage opinion — the
|
|
262
|
+
// legacy runs/<target>/<ISO>/ auto-archive was removed with @SCN-RUN-001, the
|
|
263
|
+
// caller now routes stored runs (spec-controller's run-management layer).
|
|
264
|
+
const planResult = planOutput(collectFormatSpecs(argv));
|
|
265
|
+
if (!planResult.ok)
|
|
266
|
+
exitUsage(planResult.error);
|
|
267
|
+
writeOutputs(planResult.plan, { balance, ctx, evidenceObligations, withRuntimeObservations: true, withStaticChecks: true, featureNames });
|
|
268
|
+
// The CI gate (@SCN-CLI-004): `balance` is a GATE, not just a reporter. AFTER the report
|
|
269
|
+
// is written in full, map the whole-run verdict to the process exit code. Out-of-balance
|
|
270
|
+
// (ANY reconciling item anywhere: an out-of-balance scenario OR a suspense-row item such
|
|
271
|
+
// as a no-evidence-obligation static-check watermelon) sets process.exitCode = 1 and RETURNS — set,
|
|
272
|
+
// never `process.exit(1)`, so the buffered report is flushed intact rather than truncated
|
|
273
|
+
// mid-write. It exits EXACTLY 1 so it reds a CI build and can't masquerade as the usage
|
|
274
|
+
// error (2, above). An ENUMERATED status, never a count (8-bit wrap → false pass). A
|
|
275
|
+
// balanced run leaves process.exitCode at its default 0 and returns.
|
|
276
|
+
//
|
|
277
|
+
// The --strict escalation (@SCN-CLI-011): Pending Items are run-neutral by DEFAULT
|
|
278
|
+
// (@SCN-PND-008 — they never red a build), but `--strict` is the OPT-IN that fails an
|
|
279
|
+
// OTHERWISE-BALANCED run carrying them, exiting the DISTINCT code 3 (taxonomy 0 balanced /
|
|
280
|
+
// 1 out-of-balance / 2 usage / 3 pending-under-strict / 4 unsound / 5 nothing to reconcile —
|
|
281
|
+
// a Pending Item is not out-of-balance,
|
|
282
|
+
// so it must NEVER share code 1). Out-of-balance DOMINATES: the escalation is checked ONLY in
|
|
283
|
+
// the `isBalanced` branch, so an out-of-balance run exits 1 regardless of --strict. Like the
|
|
284
|
+
// CLI-004 gate this SETS process.exitCode (never process.exit) AFTER writeOutputs, so the
|
|
285
|
+
// buffered report is flushed intact. `--strict` is a registry-LISTED boolean, recorded by
|
|
286
|
+
// parseArgs as the string "true" — presence is what matters, so `!== undefined` reads it.
|
|
287
|
+
//
|
|
288
|
+
// The UNSOUND pre-emption (@SCN-CLI-012): a run carrying BROKEN evidence — a proving suite
|
|
289
|
+
// that failed to COLLECT, so the behaviour was never exercised — exits the DISTINCT code 4
|
|
290
|
+
// (taxonomy 0 balanced / 1 out-of-balance / 2 usage / 3 pending-under-strict / 4 unsound /
|
|
291
|
+
// 5 nothing to reconcile).
|
|
292
|
+
// Exit 1 says "the ledger disagrees"; exit 4 says "the ledger could not be TRUSTED to
|
|
293
|
+
// disagree" — you cannot trust a reconciliation whose evidence never materialised, so
|
|
294
|
+
// unsound DOMINATES.
|
|
295
|
+
//
|
|
296
|
+
// THE ORDER IS LOAD-BEARING, NOT COSMETIC. A broken run is ALWAYS out-of-balance: its
|
|
297
|
+
// `broken` item sits on the SUSPENSE row, so `isBalanced` is already false. Check it AFTER
|
|
298
|
+
// `isBalanced` and the branch is UNREACHABLE — every broken run would exit 1 and the
|
|
299
|
+
// collection failure would stay masked as an honest disagreement (the AWTY dogfood fault,
|
|
300
|
+
// 3F-1642). So `hasBrokenEvidence` is checked FIRST, PRE-EMPTING the balance verdict it
|
|
301
|
+
// would otherwise be swallowed by. @SCN-CLI-004 is a BYSTANDER, not an Update: its fixture
|
|
302
|
+
// is a SOUND out-of-balance run (no broken item), so it falls through this branch and still
|
|
303
|
+
// exits exactly 1 — the pre-emption fires only when evidence genuinely failed to collect.
|
|
304
|
+
//
|
|
305
|
+
// THE NOTHING-TO-RECONCILE PRE-EMPTION (@SCN-CLI-019): a run whose ledger carries ZERO Scenario
|
|
306
|
+
// Reconciliation rows — a target that declared nothing AND produced nothing — exits the DISTINCT
|
|
307
|
+
// code 5. It is its own state: not balanced (no accounts to agree), not out-of-balance (nothing
|
|
308
|
+
// disagrees), not a usage fault (the invocation was valid and `new-client` is a supported
|
|
309
|
+
// adoption state), not unsound (no proof failed; none was owed).
|
|
310
|
+
//
|
|
311
|
+
// IT IS NOT THE UNSOUND PRE-EMPTION ONE CODE FURTHER ON, THOUGH IT LOOKS LIKE IT — measured,
|
|
312
|
+
// because the ticket predicted it was. An empty ledger is MUTUALLY EXCLUSIVE with all three
|
|
313
|
+
// predicates above: with no rows there is no row to carry a broken item, a reconciling item or a
|
|
314
|
+
// Pending Item, so it fires none of them. Moved below `!isBalanced`, this branch STILL returns 5
|
|
315
|
+
// (the prescribed plant stayed green). Its position among the predicates is free, and it is
|
|
316
|
+
// first only so this ladder and `runVerdictSection` read in the SAME order — the shape
|
|
317
|
+
// @SCN-CLI-013's invariant leans on.
|
|
318
|
+
//
|
|
319
|
+
// WHAT IS LOAD-BEARING is its position against the DEFAULT below. "Balanced" is not a branch
|
|
320
|
+
// here, it is the `return 0` a run reaches by failing every test — so there is no "after the
|
|
321
|
+
// balanced case" to append a fifth code to. Appended after that return the branch is dead code
|
|
322
|
+
// and an empty run exits 0 (measured: the plant that DID red). That is why the fault survived a
|
|
323
|
+
// taxonomy that had already grown twice: a fifth code cannot be ADDED to this chain, it has to
|
|
324
|
+
// DISPLACE the default, and nothing about the other three says so.
|
|
325
|
+
//
|
|
326
|
+
// Keyed on the EMPTY LEDGER, never on the empty corpus: a corpus-less run carrying uncited
|
|
327
|
+
// credits HAS a row — its suspense row — and is an ordinary out-of-balance report at exit 1
|
|
328
|
+
// (@SCN-CLI-020). @SCN-CLI-004/005/010/012 are BYSTANDERS: every one of their fixtures carries
|
|
329
|
+
// rows, so none reaches this branch.
|
|
330
|
+
const verdict = verdictExitCode(balance.ledger, args["strict"] !== undefined);
|
|
331
|
+
const code = args["exit-zero"] !== undefined ? exitZeroStatus(verdict) : verdict;
|
|
332
|
+
// Assigned only when NON-ZERO, so a balanced run still LEAVES process.exitCode at its default
|
|
333
|
+
// rather than writing a 0 over it — the distinction @SCN-CLI-005 and @SCN-CLI-010 both rest on.
|
|
334
|
+
if (code !== 0)
|
|
335
|
+
process.exitCode = code;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* A usage or input fault: the message on stderr, then exit 2 — the enumerated usage code
|
|
339
|
+
* (@SCN-CLI-002), distinct from the out-of-balance verdict code 1 (@SCN-CLI-004). An
|
|
340
|
+
* out-of-balance run must never masquerade as a usage error, nor the reverse.
|
|
341
|
+
*/
|
|
342
|
+
function exitUsage(message) {
|
|
343
|
+
process.stderr.write(message + "\n");
|
|
344
|
+
process.exit(2);
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Render-from-saved-JSON mode (@SCN-RMD-007): regenerate the human markdown from a
|
|
348
|
+
* banked spec-reconciliation.json ALONE — no reconcile, no live inputs, no RunContext. Reads
|
|
349
|
+
* the file, JSON.parses it back into the whole-document report model, renders the markdown via
|
|
350
|
+
* renderReport, and writes it to stdout (the same trailing-newline convention as the writer's
|
|
351
|
+
* stdout path). The load-bearing proof that the JSON IS the model — true when it answered the
|
|
352
|
+
* run, so `runBalance` returns before any reconcile.
|
|
353
|
+
*/
|
|
354
|
+
function renderSavedReport(args) {
|
|
355
|
+
// Saved-report READABILITY guard (@SCN-CLI-015). This mode RETURNS before
|
|
356
|
+
// `refuseUnreadableInputs` ever runs, so it honoured NEITHER of its guards: a missing path
|
|
357
|
+
// crashed to ENOENT and a malformed file to SyntaxError, both landing on Node's default exit 1
|
|
358
|
+
// — the out-of-balance code. The missing-path case was a live violation of @SCN-CLI-002's own
|
|
295
359
|
// shipped principle, which the CLI enforced for the five evidence flags and not for this
|
|
296
|
-
// one. The guard therefore runs INSIDE this
|
|
360
|
+
// one. The guard therefore runs INSIDE this mode, ahead of the read (3F-1764).
|
|
297
361
|
const unreadableSavedReportError = checkRenderFromJson(args, (path) => readFileSync(path, "utf8"));
|
|
298
|
-
if (unreadableSavedReportError)
|
|
299
|
-
|
|
300
|
-
process.exit(2);
|
|
301
|
-
}
|
|
362
|
+
if (unreadableSavedReportError)
|
|
363
|
+
exitUsage(unreadableSavedReportError);
|
|
302
364
|
const rehydratePath = args["render-from-json"];
|
|
303
|
-
if (rehydratePath
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
365
|
+
if (rehydratePath === undefined)
|
|
366
|
+
return false;
|
|
367
|
+
const savedReport = readFileSync(rehydratePath, "utf8");
|
|
368
|
+
process.stdout.write(renderReportFromJson(savedReport) + "\n");
|
|
369
|
+
return true;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* The live-input guards, in the order they run: each halts at exit 2 BEFORE any reconcile,
|
|
373
|
+
* because an input the tool cannot read is a usage error, never a verdict.
|
|
374
|
+
*/
|
|
375
|
+
function refuseUnreadableInputs(args) {
|
|
308
376
|
// Input-existence guard (@SCN-CLI-002): a supplied input-file/dir flag pointing at a
|
|
309
377
|
// non-existent path is a HARD ERROR — halt BEFORE reconciling, with a typed message
|
|
310
378
|
// naming the flag + path, never the silent zero-evidence all-red report a mistyped
|
|
311
379
|
// path used to produce (the dogfooding fault). Routed to stderr + a non-zero exit,
|
|
312
|
-
// exactly as the legacy-`--json` guard
|
|
380
|
+
// exactly as the legacy-`--json` guard (the shared typed-error surface). An
|
|
313
381
|
// omitted flag is legitimately optional and passes through untouched.
|
|
314
382
|
const missingInputError = checkInputsExist(args, existsSync);
|
|
315
|
-
if (missingInputError)
|
|
316
|
-
|
|
317
|
-
// Usage/input error → exit 2 (@SCN-CLI-002), distinct from the out-of-balance
|
|
318
|
-
// verdict code 1 (@SCN-CLI-004).
|
|
319
|
-
process.exit(2);
|
|
320
|
-
}
|
|
383
|
+
if (missingInputError)
|
|
384
|
+
exitUsage(missingInputError);
|
|
321
385
|
// Input-READABILITY guard (@SCN-CLI-014): existence is not enough. A report that is
|
|
322
386
|
// PRESENT but UNPARSEABLE (`--vitest /dev/null`, truncated JSON, non-JSON) used to throw
|
|
323
387
|
// mid-parse inside reconcileWithCensus, uncaught — and Node's default exit code is 1, the
|
|
@@ -327,10 +391,8 @@ export function runBalance(argv) {
|
|
|
327
391
|
// reconcile, routing to the same stderr + exit 2 lane: an input the tool cannot read is a
|
|
328
392
|
// usage fault, sibling to a missing path and an unrecognised flag — never a verdict.
|
|
329
393
|
const unparseableInputError = checkInputsParse(args, (path) => readFileSync(path, "utf8"));
|
|
330
|
-
if (unparseableInputError)
|
|
331
|
-
|
|
332
|
-
process.exit(2);
|
|
333
|
-
}
|
|
394
|
+
if (unparseableInputError)
|
|
395
|
+
exitUsage(unparseableInputError);
|
|
334
396
|
// The FEATURE-CORPUS integrity checkpoint (@SCN-CLI-016, 3F-1767). The feature corpus is an
|
|
335
397
|
// input too — the ledger's DEBIT side — and it was read by a hand-rolled TAG-LINE SCAN that
|
|
336
398
|
// never consulted a parser. So a malformed tag line simply stopped being a tag line and its
|
|
@@ -374,31 +436,16 @@ export function runBalance(argv) {
|
|
|
374
436
|
`or Rule: line is inherited by every scenario beneath it — name it on the scenario.)\n`);
|
|
375
437
|
process.exit(2);
|
|
376
438
|
}
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
const evidenceObligations = readEvidenceObligations(args["features"]);
|
|
388
|
-
// The static-check kind-counts are a FOLD OVER THE LEDGER (@SCN-USG-001 / 3F-2118) — the
|
|
389
|
-
// renderers count the balance's own posted static-check credits (`staticObservationTally`), so
|
|
390
|
-
// they cannot drift from the reconciler's verdict: they ARE the same rows. The parallel static
|
|
391
|
-
// census is RETIRED; `withStaticChecks: true` (below) tells the renderers the axis is in play.
|
|
392
|
-
// Read the target's feature-code→slug map alongside the balance (@SCN-RPT-006)
|
|
393
|
-
// — the by-feature cut's full-name labels. The 5th sibling, threaded to the MARKDOWN
|
|
394
|
-
// renderer via writeOutputs only (markdown-only; the by-feature cut isn't on JSON).
|
|
395
|
-
const featureNames = readFeatureNames(args["features"]);
|
|
396
|
-
// Build the run provenance ONCE (project design §1) — a sibling RunContext, the
|
|
397
|
-
// Ledger staying pure — reusing the existing runStart. The target is the
|
|
398
|
-
// operator's --target VERBATIM (unknown-target on omit; Fork A — no
|
|
399
|
-
// resolution, no basename guessing). Source SHA via the read-only target read, with
|
|
400
|
-
// --source-sha as the override (resolveSourceSha).
|
|
401
|
-
const ctx = {
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Build the run provenance ONCE (project design §1) — a sibling RunContext, the
|
|
442
|
+
* Ledger staying pure — reusing the existing runStart. The target is the
|
|
443
|
+
* operator's --target VERBATIM (unknown-target on omit; Fork A — no
|
|
444
|
+
* resolution, no basename guessing). Source SHA via the read-only target read, with
|
|
445
|
+
* --source-sha as the override (resolveSourceSha).
|
|
446
|
+
*/
|
|
447
|
+
function runContextOf(args, inputs, runStart) {
|
|
448
|
+
return {
|
|
402
449
|
target: sourceTarget(args),
|
|
403
450
|
inputs,
|
|
404
451
|
runStart,
|
|
@@ -418,64 +465,36 @@ export function runBalance(argv) {
|
|
|
418
465
|
// the run.yaml manifest.
|
|
419
466
|
...resolveToolIdentity(),
|
|
420
467
|
};
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
// buffered report is flushed intact. `--strict` is a registry-LISTED boolean, recorded by
|
|
452
|
-
// parseArgs as the string "true" — presence is what matters, so `!== undefined` reads it.
|
|
453
|
-
//
|
|
454
|
-
// The UNSOUND pre-emption (@SCN-CLI-012): a run carrying BROKEN evidence — a proving suite
|
|
455
|
-
// that failed to COLLECT, so the behaviour was never exercised — exits the DISTINCT code 4
|
|
456
|
-
// (taxonomy 0 balanced / 1 out-of-balance / 2 usage / 3 pending-under-strict / 4 unsound).
|
|
457
|
-
// Exit 1 says "the ledger disagrees"; exit 4 says "the ledger could not be TRUSTED to
|
|
458
|
-
// disagree" — you cannot trust a reconciliation whose evidence never materialised, so
|
|
459
|
-
// unsound DOMINATES.
|
|
460
|
-
//
|
|
461
|
-
// THE ORDER IS LOAD-BEARING, NOT COSMETIC. A broken run is ALWAYS out-of-balance: its
|
|
462
|
-
// `broken` item sits on the SUSPENSE row, so `isBalanced` is already false. Check it AFTER
|
|
463
|
-
// `isBalanced` and the branch is UNREACHABLE — every broken run would exit 1 and the
|
|
464
|
-
// collection failure would stay masked as an honest disagreement (the AWTY dogfood fault,
|
|
465
|
-
// 3F-1642). So `hasBrokenEvidence` is checked FIRST, PRE-EMPTING the balance verdict it
|
|
466
|
-
// would otherwise be swallowed by. @SCN-CLI-004 is a BYSTANDER, not an Update: its fixture
|
|
467
|
-
// is a SOUND out-of-balance run (no broken item), so it falls through this branch and still
|
|
468
|
-
// exits exactly 1 — the pre-emption fires only when evidence genuinely failed to collect.
|
|
469
|
-
const strict = args["strict"] !== undefined;
|
|
470
|
-
if (hasBrokenEvidence(balance.ledger)) {
|
|
471
|
-
process.exitCode = 4;
|
|
472
|
-
}
|
|
473
|
-
else if (!isBalanced(balance.ledger)) {
|
|
474
|
-
process.exitCode = 1;
|
|
475
|
-
}
|
|
476
|
-
else if (strict && hasPendingItems(balance.ledger)) {
|
|
477
|
-
process.exitCode = 3;
|
|
478
|
-
}
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* THE DOMINANCE LADDER — the whole-run verdict as the enumerated status a consumer's CI branches
|
|
471
|
+
* on, and the ONE place the order argued for above is written down. Extracted from `runBalance`
|
|
472
|
+
* (3F-3344) so the ladder is a named thing with its own reading rather than a tail the reader
|
|
473
|
+
* arrives at, and so the pre-emption argument sits ON it.
|
|
474
|
+
*
|
|
475
|
+
* ENUMERATED, NEVER A COUNT — a count would 8-bit `& 0xFF` wrap into a false pass. Returns 0 for a
|
|
476
|
+
* balanced run; the caller leaves the process's default alone rather than writing that 0 back.
|
|
477
|
+
*/
|
|
478
|
+
function verdictExitCode(ledger, strict) {
|
|
479
|
+
if (hasNothingToReconcile(ledger))
|
|
480
|
+
return 5;
|
|
481
|
+
if (hasBrokenEvidence(ledger))
|
|
482
|
+
return 4;
|
|
483
|
+
if (!isBalanced(ledger))
|
|
484
|
+
return 1;
|
|
485
|
+
if (strict && hasPendingItems(ledger))
|
|
486
|
+
return 3;
|
|
487
|
+
return 0;
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* The codes `--exit-zero` moves to 0 (@SCN-CLI-021, 3F-3100): the two VERDICTS on the target —
|
|
491
|
+
* out-of-balance and pending-under-`--strict`. Enumerated rather than "anything non-zero", because
|
|
492
|
+
* unsound (4) and nothing-to-reconcile (5) are not verdicts but the absence of a trustworthy one,
|
|
493
|
+
* and suppressing a verdict never suppresses that. Usage (2) exits before the ladder is reached.
|
|
494
|
+
*/
|
|
495
|
+
const VERDICT_CODES = new Set([1, 3]);
|
|
496
|
+
function exitZeroStatus(code) {
|
|
497
|
+
return VERDICT_CODES.has(code) ? 0 : code;
|
|
479
498
|
}
|
|
480
499
|
// Only run the balance command when this module is executed directly
|
|
481
500
|
// (`tsx cli-balance/cli.ts`), NOT when imported by the top-level `spec-controller`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli-balance/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli-balance/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ import type { EvidenceObligations } from "@3f-consulting/spec-controller-core";
|
|
|
22
22
|
import type { EvidenceReconciliation } from "@3f-consulting/spec-controller-core";
|
|
23
23
|
/**
|
|
24
24
|
* The reconciliation payloads the writer renders — the balance plus its sibling reads
|
|
25
|
-
* (ctx /
|
|
25
|
+
* (ctx / evidenceObligations / featureNames), exactly the arguments the pure renderers take. Threaded
|
|
26
26
|
* from `cli.ts` (built once, rendered per planned output). `withRuntimeObservations` and
|
|
27
27
|
* `withStaticChecks` are the GATES for the two observation axes (Test volume + the evidence grid;
|
|
28
28
|
* the Static checks cut): the renderers fold BOTH off the Ledger themselves (3F-2103 / 3F-2118 —
|