spec-controller 0.1.0-alpha.44 → 0.1.0-alpha.46
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/cli-allocate/cli.d.ts.map +1 -1
- package/dist/cli-allocate/cli.js +13 -14
- package/dist/cli-allocate/cli.js.map +1 -1
- package/dist/cli-allocate/readHistory.d.ts +0 -14
- package/dist/cli-allocate/readHistory.d.ts.map +1 -1
- package/dist/cli-allocate/readHistory.js +8 -36
- package/dist/cli-allocate/readHistory.js.map +1 -1
- package/dist/cli-allocate/readParts.d.ts +0 -1
- package/dist/cli-allocate/readParts.d.ts.map +1 -1
- package/dist/cli-allocate/readParts.js +0 -6
- package/dist/cli-allocate/readParts.js.map +1 -1
- package/dist/cli-allocate/readTree.d.ts +0 -11
- package/dist/cli-allocate/readTree.d.ts.map +1 -1
- package/dist/cli-allocate/readTree.js +0 -32
- package/dist/cli-allocate/readTree.js.map +1 -1
- package/dist/cli-allocate/refStore.d.ts +0 -1
- package/dist/cli-allocate/refStore.d.ts.map +1 -1
- package/dist/cli-allocate/refStore.js +0 -13
- package/dist/cli-allocate/refStore.js.map +1 -1
- package/dist/cli-allocate/request.d.ts +0 -2
- package/dist/cli-allocate/request.d.ts.map +1 -1
- package/dist/cli-allocate/request.js +0 -7
- package/dist/cli-allocate/request.js.map +1 -1
- package/dist/cli-allocate/stderr.d.ts +0 -7
- package/dist/cli-allocate/stderr.d.ts.map +1 -1
- package/dist/cli-allocate/stderr.js +0 -7
- package/dist/cli-allocate/stderr.js.map +1 -1
- package/dist/cli-allocate/unreadable.d.ts +0 -13
- package/dist/cli-allocate/unreadable.d.ts.map +1 -1
- package/dist/cli-allocate/unreadable.js +0 -13
- package/dist/cli-allocate/unreadable.js.map +1 -1
- package/dist/cli-args.d.ts +0 -113
- package/dist/cli-args.d.ts.map +1 -1
- package/dist/cli-args.js +0 -145
- package/dist/cli-args.js.map +1 -1
- package/dist/cli-balance/cli.d.ts +0 -85
- package/dist/cli-balance/cli.d.ts.map +1 -1
- package/dist/cli-balance/cli.js +0 -230
- package/dist/cli-balance/cli.js.map +1 -1
- package/dist/cli-balance/emit/format.d.ts +0 -52
- package/dist/cli-balance/emit/format.d.ts.map +1 -1
- package/dist/cli-balance/emit/format.js +0 -70
- package/dist/cli-balance/emit/format.js.map +1 -1
- package/dist/cli-balance/emit/writer.d.ts +0 -17
- package/dist/cli-balance/emit/writer.d.ts.map +1 -1
- package/dist/cli-balance/emit/writer.js +0 -13
- package/dist/cli-balance/emit/writer.js.map +1 -1
- package/dist/cli-balance/exitStatus.d.ts +0 -1
- package/dist/cli-balance/exitStatus.d.ts.map +1 -1
- package/dist/cli-balance/exitStatus.js +0 -7
- package/dist/cli-balance/exitStatus.js.map +1 -1
- package/dist/cli-balance/inputsRead.d.ts +0 -12
- package/dist/cli-balance/inputsRead.d.ts.map +1 -1
- package/dist/cli-balance/inputsRead.js +0 -12
- package/dist/cli-balance/inputsRead.js.map +1 -1
- package/dist/cli-balance/reRender.d.ts +0 -14
- package/dist/cli-balance/reRender.d.ts.map +1 -1
- package/dist/cli-balance/reRender.js +0 -15
- package/dist/cli-balance/reRender.js.map +1 -1
- package/dist/cli-balance/unreadableInputs.d.ts +0 -21
- package/dist/cli-balance/unreadableInputs.d.ts.map +1 -1
- package/dist/cli-balance/unreadableInputs.js +0 -21
- package/dist/cli-balance/unreadableInputs.js.map +1 -1
- package/dist/cli-registry.d.ts +0 -86
- package/dist/cli-registry.d.ts.map +1 -1
- package/dist/cli-registry.js +0 -70
- package/dist/cli-registry.js.map +1 -1
- package/dist/cli.d.ts +0 -20
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +31 -53
- package/dist/cli.js.map +1 -1
- package/dist/deferralTags.d.ts +0 -14
- package/dist/deferralTags.d.ts.map +1 -1
- package/dist/deferralTags.js +0 -14
- package/dist/deferralTags.js.map +1 -1
- package/dist/host.d.ts +0 -61
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +1 -84
- package/dist/host.js.map +1 -1
- package/dist/ingest/ciSourcePaths.d.ts +0 -38
- package/dist/ingest/ciSourcePaths.d.ts.map +1 -1
- package/dist/ingest/ciSourcePaths.js +0 -38
- package/dist/ingest/ciSourcePaths.js.map +1 -1
- package/dist/ingest/gherkinValidation.d.ts +0 -76
- package/dist/ingest/gherkinValidation.d.ts.map +1 -1
- package/dist/ingest/gherkinValidation.js +0 -76
- package/dist/ingest/gherkinValidation.js.map +1 -1
- package/dist/ingest/ingestQualityChecks.d.ts +0 -81
- package/dist/ingest/ingestQualityChecks.d.ts.map +1 -1
- package/dist/ingest/ingestQualityChecks.js +0 -194
- package/dist/ingest/ingestQualityChecks.js.map +1 -1
- package/dist/ingest/ingestScenarios.d.ts +0 -39
- package/dist/ingest/ingestScenarios.d.ts.map +1 -1
- package/dist/ingest/ingestScenarios.js +0 -70
- package/dist/ingest/ingestScenarios.js.map +1 -1
- package/dist/ingest/inputShapes.d.ts +0 -31
- package/dist/ingest/inputShapes.d.ts.map +1 -1
- package/dist/ingest/inputShapes.js +0 -30
- package/dist/ingest/inputShapes.js.map +1 -1
- package/dist/outputLocation.d.ts +0 -48
- package/dist/outputLocation.d.ts.map +1 -1
- package/dist/outputLocation.js +0 -48
- package/dist/outputLocation.js.map +1 -1
- package/dist/run-management/keptRun.d.ts +0 -107
- package/dist/run-management/keptRun.d.ts.map +1 -1
- package/dist/run-management/keptRun.js +0 -75
- package/dist/run-management/keptRun.js.map +1 -1
- package/dist/run-management/resolveRunInputs.d.ts +0 -67
- package/dist/run-management/resolveRunInputs.d.ts.map +1 -1
- package/dist/run-management/resolveRunInputs.js +0 -88
- package/dist/run-management/resolveRunInputs.js.map +1 -1
- package/dist/storedRun.d.ts +0 -21
- package/dist/storedRun.d.ts.map +1 -1
- package/dist/storedRun.js +0 -21
- package/dist/storedRun.js.map +1 -1
- package/package.json +2 -2
package/dist/cli-registry.js
CHANGED
|
@@ -1,33 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The data-driven command/flag registry — the single source the CLI answers `--help`
|
|
3
|
-
* from (@SCN-CLI-006). Two scopes mirror the two help surfaces:
|
|
4
|
-
*
|
|
5
|
-
* - `global` — the host modifiers recognised BEFORE the command (`--store`,
|
|
6
|
-
* `--run-id`), consumed by the top-level dispatcher; rendered by
|
|
7
|
-
* `spec-controller --help` (the sibling @SCN-CLI-007 surface).
|
|
8
|
-
* - `commands` — the per-command scopes; each command's own flags (+ `--help`/`-h`),
|
|
9
|
-
* rendered by `<command> --help`. No count is written here: @SCN-CLI-008 holds
|
|
10
|
-
* registry and render together whatever the number is, and a figure repeated in
|
|
11
|
-
* prose is one nothing reads (3F-3277).
|
|
12
|
-
*
|
|
13
|
-
* A flag exists ⇒ a registry entry ⇒ it appears in help, by construction — the
|
|
14
|
-
* single-source discipline the completeness guard (@SCN-CLI-008) will enforce and the
|
|
15
|
-
* registry-bounded parser (@SCN-CLI-009) will reject against. Registry + renderers live in the
|
|
16
|
-
* CLI/app layer, never the domain.
|
|
17
|
-
*
|
|
18
|
-
* THE REGISTRY IS THE SOURCE OF TRUTH FOR A FLAG'S DESCRIPTION AND NOTHING RECONCILES THE DOC
|
|
19
|
-
* AGAINST IT. This docblock used to say the doc was reconciled by @SCN-CLI-007/008; it is not —
|
|
20
|
-
* those two are about the registry and the two RENDERERS, and nothing in `tests/` or `features/`
|
|
21
|
-
* reads doc/how_to_use.md at all (3F-3256 deleted the checks that read documentation). So the
|
|
22
|
-
* flag table in that page is kept in step by hand, and it has drifted in BOTH directions before
|
|
23
|
-
* now: ahead of the registry on one sentence and behind it on the next (3F-3083).
|
|
24
|
-
*/
|
|
25
1
|
import { DEFAULT_DEFERRAL_TAGS } from "./deferralTags.js";
|
|
26
|
-
/**
|
|
27
|
-
* The `balance` command's per-command scope — its reconciliation flags plus `--help`/`-h`.
|
|
28
|
-
* This registry is where a flag's description LIVES; doc/how_to_use.md's flag table restates it
|
|
29
|
-
* by hand, reconciled by nobody (see the header).
|
|
30
|
-
*/
|
|
31
2
|
const balanceFlags = [
|
|
32
3
|
{
|
|
33
4
|
name: "--features",
|
|
@@ -94,14 +65,6 @@ const balanceFlags = [
|
|
|
94
65
|
description: "Show this help and exit.",
|
|
95
66
|
},
|
|
96
67
|
];
|
|
97
|
-
/**
|
|
98
|
-
* `balance`'s config block: the `specController.deferralTags` field it reads, with its
|
|
99
|
-
* recognised starter set SINGLE-SOURCED from DEFAULT_DEFERRAL_TAGS (@SCN-PND-021 / the
|
|
100
|
-
* 3F-1405 completeness discipline — the lines are built FROM the constant, never a
|
|
101
|
-
* hand-kept copy, so the documented set cannot drift from the recognised one). It hangs
|
|
102
|
-
* off balance's registry entry, not off the renderer, so it renders under `balance --help`
|
|
103
|
-
* and under nothing else.
|
|
104
|
-
*/
|
|
105
68
|
const balanceConfigHelp = [
|
|
106
69
|
"Configuration (in the target repo's package.json):",
|
|
107
70
|
" specController.deferralTags: string[]",
|
|
@@ -109,10 +72,6 @@ const balanceConfigHelp = [
|
|
|
109
72
|
" names to a Pending Item, extending (never replacing) the built-in set.",
|
|
110
73
|
` Built-in deferral tags: ${DEFAULT_DEFERRAL_TAGS.map((tag) => `@${tag}`).join(", ")}`,
|
|
111
74
|
];
|
|
112
|
-
/**
|
|
113
|
-
* The flags `balance` has retired. `--measurements` left with the measured route at 3F-3506: no
|
|
114
|
-
* number reaches the ledger, and a fitness check is credited by its own CI step's outcome.
|
|
115
|
-
*/
|
|
116
75
|
const balanceRetiredFlags = [
|
|
117
76
|
{
|
|
118
77
|
name: "--measurements",
|
|
@@ -120,7 +79,6 @@ const balanceRetiredFlags = [
|
|
|
120
79
|
replacement: "A fitness check is credited by the outcome of its own CI step: put the check's @SCN on that step's `id:` and hand balance the run's step record with --ci-steps.",
|
|
121
80
|
},
|
|
122
81
|
];
|
|
123
|
-
/** The global host-modifier scope — recognised before the command; the CLI-007 surface. */
|
|
124
82
|
const globalFlags = [
|
|
125
83
|
{
|
|
126
84
|
name: "--store",
|
|
@@ -133,9 +91,6 @@ const globalFlags = [
|
|
|
133
91
|
description: "Name the stored run (default: an ISO-8601 UTC timestamp). Read only with --store: given without it, the run is refused, since no run would be kept under the name.",
|
|
134
92
|
},
|
|
135
93
|
];
|
|
136
|
-
/**
|
|
137
|
-
* The registry singleton — the single source both help surfaces render from.
|
|
138
|
-
*/
|
|
139
94
|
export const cliRegistry = {
|
|
140
95
|
global: globalFlags,
|
|
141
96
|
commands: [
|
|
@@ -163,24 +118,10 @@ export const cliRegistry = {
|
|
|
163
118
|
},
|
|
164
119
|
],
|
|
165
120
|
};
|
|
166
|
-
/** The display label for a flag: its name, any aliases, then its arg-placeholder. */
|
|
167
121
|
function flagLabel(flag) {
|
|
168
122
|
const names = [flag.name, ...(flag.aliases ?? [])].join(", ");
|
|
169
123
|
return flag.arg !== undefined ? `${names} ${flag.arg}` : names;
|
|
170
124
|
}
|
|
171
|
-
/**
|
|
172
|
-
* Render THE NAMED command's per-command scope as help text: one line per registered flag
|
|
173
|
-
* (name + arg-placeholder + description), then whatever config lines that command's entry
|
|
174
|
-
* carries — driven BY the registry, so a flag that exists is a flag that appears, by
|
|
175
|
-
* construction. Returns the help block WITHOUT a trailing newline (the caller adds it,
|
|
176
|
-
* matching the writer's stdout convention).
|
|
177
|
-
*
|
|
178
|
-
* THE COMMAND IS A PARAMETER (3F-3298). It used to be the literal `"balance"`, found by name
|
|
179
|
-
* inside this function, which is what the single registered command made look general. A
|
|
180
|
-
* second command had no help surface at all under that signature — not an empty one; there
|
|
181
|
-
* was no argument by which to ask. What the renderer covers is now the registry's shape
|
|
182
|
-
* rather than the command set's size on the day it was written.
|
|
183
|
-
*/
|
|
184
125
|
export function renderCommandHelp(registry, command) {
|
|
185
126
|
const entry = registry.commands.find((c) => c.name === command);
|
|
186
127
|
const flags = entry?.flags ?? [];
|
|
@@ -197,7 +138,6 @@ export function renderCommandHelp(registry, command) {
|
|
|
197
138
|
...(configHelp.length > 0 ? ["", ...configHelp] : []),
|
|
198
139
|
].join("\n");
|
|
199
140
|
}
|
|
200
|
-
/** A command's usage line and its arguments, one line each; nothing for a command that takes flags only. */
|
|
201
141
|
function positionalHelp(command, positionals) {
|
|
202
142
|
if (positionals.length === 0)
|
|
203
143
|
return [];
|
|
@@ -210,16 +150,6 @@ function positionalHelp(command, positionals) {
|
|
|
210
150
|
...positionals.map((positional) => ` ${positional.name.padEnd(width + 2)}${positional.description}`),
|
|
211
151
|
];
|
|
212
152
|
}
|
|
213
|
-
/**
|
|
214
|
-
* Render the top-level `spec-controller --help` surface (@SCN-CLI-007) FROM the registry:
|
|
215
|
-
* a Commands section (each command's name + one-line summary) and a Host modifiers section
|
|
216
|
-
* (each global-scope flag: name + arg-placeholder + one-line description). The global-scope
|
|
217
|
-
* half of the two-scope registry — the counterpart to `renderCommandHelp`'s per-command
|
|
218
|
-
* half — so the top-level usage no longer hand-keeps (and can no longer silently drift
|
|
219
|
-
* from) the command set or the host modifiers; both are sourced from `cliRegistry`.
|
|
220
|
-
* Summaries and descriptions render on a single line (no wrapping) so a registered string
|
|
221
|
-
* appears verbatim. Returns the block WITHOUT a trailing newline (the caller adds it).
|
|
222
|
-
*/
|
|
223
153
|
export function renderTopLevelHelp(registry) {
|
|
224
154
|
const commandGutter = 4;
|
|
225
155
|
const commandWidth = Math.max(0, ...registry.commands.map((c) => c.name.length));
|
package/dist/cli-registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-registry.js","sourceRoot":"","sources":["../src/cli-registry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cli-registry.js","sourceRoot":"","sources":["../src/cli-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,23 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* The `spec-controller` binary — the top-level command host + dispatcher.
|
|
4
|
-
*
|
|
5
|
-
* Usage:
|
|
6
|
-
* spec-controller [--store <root>] [--run-id <id>] <command> [command-args]
|
|
7
|
-
*
|
|
8
|
-
* Commands: `balance` — the deterministic reconciliation of scenarios against
|
|
9
|
-
* observed evidence, standalone on the public core + app layer (no engine). It also polices the
|
|
10
|
-
* corpus's own scenario codes. `allocate` — a query, not a verdict: the next scenario code
|
|
11
|
-
* for a feature part, which keeps no run and so takes no host modifier. The
|
|
12
|
-
* `analyse` / `migrate` capabilities are a separate, closed offering built on the same core.
|
|
13
|
-
*
|
|
14
|
-
* Storage is a CROSS-CUTTING host modifier, not a command. A leading `--store <root>`
|
|
15
|
-
* turns any command into a STORED run: the host wraps the command via the kept-run
|
|
16
|
-
* scaffold — a named `<root>/<target>/<run-id>/` directory, the command's outputs routed
|
|
17
|
-
* in, and a `run.yaml` manifest — and hands the command its own clean args, unchanged. So
|
|
18
|
-
* `balance` stays emit-only (its default, no-store output is byte-identical); the store
|
|
19
|
-
* opinion lives at the host, injected via `--store` (required — there is no default, a
|
|
20
|
-
* default would write inside the repo). `--run-id` defaults to a timestamp.
|
|
21
|
-
*/
|
|
22
2
|
export {};
|
|
23
3
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
CHANGED
|
@@ -1,24 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* The `spec-controller` binary — the top-level command host + dispatcher.
|
|
4
|
-
*
|
|
5
|
-
* Usage:
|
|
6
|
-
* spec-controller [--store <root>] [--run-id <id>] <command> [command-args]
|
|
7
|
-
*
|
|
8
|
-
* Commands: `balance` — the deterministic reconciliation of scenarios against
|
|
9
|
-
* observed evidence, standalone on the public core + app layer (no engine). It also polices the
|
|
10
|
-
* corpus's own scenario codes. `allocate` — a query, not a verdict: the next scenario code
|
|
11
|
-
* for a feature part, which keeps no run and so takes no host modifier. The
|
|
12
|
-
* `analyse` / `migrate` capabilities are a separate, closed offering built on the same core.
|
|
13
|
-
*
|
|
14
|
-
* Storage is a CROSS-CUTTING host modifier, not a command. A leading `--store <root>`
|
|
15
|
-
* turns any command into a STORED run: the host wraps the command via the kept-run
|
|
16
|
-
* scaffold — a named `<root>/<target>/<run-id>/` directory, the command's outputs routed
|
|
17
|
-
* in, and a `run.yaml` manifest — and hands the command its own clean args, unchanged. So
|
|
18
|
-
* `balance` stays emit-only (its default, no-store output is byte-identical); the store
|
|
19
|
-
* opinion lives at the host, injected via `--store` (required — there is no default, a
|
|
20
|
-
* default would write inside the repo). `--run-id` defaults to a timestamp.
|
|
21
|
-
*/
|
|
22
2
|
import { dirname } from "node:path";
|
|
23
3
|
import { runBalance } from "./cli-balance/cli.js";
|
|
24
4
|
import { inputsReadBy, NODE_INPUT_READER } from "./cli-balance/inputsRead.js";
|
|
@@ -30,7 +10,6 @@ import { parseHostInvocation, wrapCommandArgv, peekFlag, formatFilePaths, answer
|
|
|
30
10
|
import { cliRegistry, renderTopLevelHelp } from "./cli-registry.js";
|
|
31
11
|
import { dispatchesUnstored, storedReRenderRefusal, unstoredRunIdRefusal } from "./storedRun.js";
|
|
32
12
|
import { settlingRefusal } from "./outputLocation.js";
|
|
33
|
-
/** Dispatch a command to its handler with the given (clean or store-wrapped) argv; true when it wrote its report. */
|
|
34
13
|
function runCommand(command, argv) {
|
|
35
14
|
switch (command) {
|
|
36
15
|
case "balance":
|
|
@@ -46,72 +25,71 @@ function runCommand(command, argv) {
|
|
|
46
25
|
}
|
|
47
26
|
}
|
|
48
27
|
}
|
|
49
|
-
/**
|
|
50
|
-
* Refuse, at the usage status, what the leading tokens get wrong, before any command or stored run
|
|
51
|
-
* starts, so nothing is written anywhere: a usage fault among them, or modifiers
|
|
52
|
-
* that would keep a run given to a command, or a re-render, that keeps none, or a run-id with no
|
|
53
|
-
* store to keep the run it names. True when it refused.
|
|
54
|
-
*/
|
|
55
28
|
function refuseLeadingFaults(inv) {
|
|
56
|
-
const refusal =
|
|
29
|
+
const refusal = leadingRefusal(inv);
|
|
57
30
|
if (refusal === undefined)
|
|
58
31
|
return false;
|
|
59
32
|
process.stderr.write(refusal + "\n");
|
|
60
33
|
process.exitCode = 2;
|
|
61
34
|
return true;
|
|
62
35
|
}
|
|
36
|
+
function leadingRefusal(inv) {
|
|
37
|
+
return inv.refusal ?? modifiersNotTakenRefusal(inv) ?? storedReRenderRefusal(inv) ?? unstoredRunIdRefusal(inv);
|
|
38
|
+
}
|
|
63
39
|
function main(hostArgv) {
|
|
64
40
|
const inv = parseHostInvocation(hostArgv);
|
|
65
41
|
if (refuseLeadingFaults(inv))
|
|
66
42
|
return;
|
|
67
43
|
const command = inv.command;
|
|
68
|
-
if (command === undefined || command
|
|
44
|
+
if (command === undefined || asksForHelp(command)) {
|
|
69
45
|
process.stdout.write(renderTopLevelHelp(cliRegistry) + "\n");
|
|
70
46
|
return;
|
|
71
47
|
}
|
|
72
|
-
|
|
48
|
+
dispatch(inv, command);
|
|
49
|
+
}
|
|
50
|
+
function asksForHelp(command) {
|
|
51
|
+
return command === "help" || command === "--help" || command === "-h";
|
|
52
|
+
}
|
|
53
|
+
function dispatch(inv, command) {
|
|
73
54
|
if (dispatchesUnstored(inv) || inv.store === undefined) {
|
|
74
55
|
runCommand(command, inv.commandArgs);
|
|
75
56
|
return;
|
|
76
57
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
// writer produces the stored artefacts (byte-identical to a bare `--format` run). The
|
|
81
|
-
// host peeks the conventional provenance flags off the command args to name the dir +
|
|
82
|
-
// stamp the manifest, without consuming them (the command still sees them).
|
|
58
|
+
runKept(inv, command, inv.store);
|
|
59
|
+
}
|
|
60
|
+
function runKept(inv, command, storeRoot) {
|
|
83
61
|
const runId = resolveRunId({ runId: inv.runId, now: new Date() });
|
|
84
62
|
const target = peekFlag(inv.commandArgs, "target") ?? "unknown-target";
|
|
85
|
-
const
|
|
86
|
-
const sourceSha = resolveSourceSha({
|
|
87
|
-
sourceSha: peekFlag(inv.commandArgs, "source-sha"),
|
|
88
|
-
targetDir: features !== undefined ? dirname(features) : undefined,
|
|
89
|
-
}) ?? "unknown";
|
|
63
|
+
const sourceSha = sourceShaOf(inv.commandArgs);
|
|
90
64
|
const spec = {
|
|
91
|
-
storeRoot
|
|
65
|
+
storeRoot,
|
|
92
66
|
target,
|
|
93
67
|
runId,
|
|
94
68
|
formatPaths: formatFilePaths(inv.commandArgs),
|
|
95
69
|
inputs: inputsReadBy(parseArgs(inv.commandArgs), NODE_INPUT_READER),
|
|
96
70
|
};
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
71
|
+
const meta = manifestMeta(sourceSha);
|
|
72
|
+
const route = (formatSpecs) => runCommand(command, wrapCommandArgv(inv.commandArgs, [...formatSpecs]));
|
|
73
|
+
const plan = settlingRefusal(() => executeKeptRun(spec, meta, route), undefined);
|
|
74
|
+
if (plan !== undefined)
|
|
75
|
+
process.stdout.write(plan.runDir + "\n");
|
|
76
|
+
}
|
|
77
|
+
function sourceShaOf(commandArgs) {
|
|
78
|
+
const features = peekFlag(commandArgs, "features");
|
|
79
|
+
return (resolveSourceSha({
|
|
80
|
+
sourceSha: peekFlag(commandArgs, "source-sha"),
|
|
81
|
+
targetDir: features !== undefined ? dirname(features) : undefined,
|
|
82
|
+
}) ?? "unknown");
|
|
83
|
+
}
|
|
84
|
+
function manifestMeta(sourceSha) {
|
|
102
85
|
const toolIdentity = resolveToolIdentity();
|
|
103
|
-
|
|
86
|
+
return {
|
|
104
87
|
sourceSha,
|
|
105
88
|
toolSha: toolIdentity.toolSha ?? "unknown",
|
|
106
89
|
toolVersion: toolIdentity.toolVersion,
|
|
107
90
|
mode: "balance",
|
|
108
91
|
date: new Date().toISOString(),
|
|
109
92
|
};
|
|
110
|
-
const route = (formatSpecs) => runCommand(command, wrapCommandArgv(inv.commandArgs, [...formatSpecs]));
|
|
111
|
-
const plan = settlingRefusal(() => executeKeptRun(spec, meta, route), undefined);
|
|
112
|
-
// The command's report was routed into the run dir, so tell the operator where it landed.
|
|
113
|
-
if (plan !== undefined)
|
|
114
|
-
process.stdout.write(plan.runDir + "\n");
|
|
115
93
|
}
|
|
116
94
|
main(process.argv.slice(2));
|
|
117
95
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/deferralTags.d.ts
CHANGED
|
@@ -1,16 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The single-sourced STARTER set of recognised community deferral tags — bare names
|
|
3
|
-
* (the `@` is tag-line syntax). A scenario whose tag block carries one of these DEFERS
|
|
4
|
-
* every obligation it raises to a Pending Item (scenario-scope). These are the
|
|
5
|
-
* established Cucumber deferral conventions.
|
|
6
|
-
*
|
|
7
|
-
* This is **product policy, not a core-domain invariant** — an evolvable list of tag
|
|
8
|
-
* strings, so it lives in the application layer, NOT on the v1 core barrel.
|
|
9
|
-
* The core `parseScenarios` recognises only the deferral set it is
|
|
10
|
-
* handed (its default is `[]`, a policy-free pure core); the app is the single source
|
|
11
|
-
* of the starter policy and always passes the resolved set (starter ∪ configured) into
|
|
12
|
-
* the parser at the ingest edge. Both `resolveDeferralTags` (the `@SCN-PND-021` config
|
|
13
|
-
* union) and `renderCommandHelp`'s `--help` listing source this constant.
|
|
14
|
-
*/
|
|
15
1
|
export declare const DEFAULT_DEFERRAL_TAGS: readonly string[];
|
|
16
2
|
//# sourceMappingURL=deferralTags.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deferralTags.d.ts","sourceRoot":"","sources":["../src/deferralTags.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"deferralTags.d.ts","sourceRoot":"","sources":["../src/deferralTags.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAMlD,CAAC"}
|
package/dist/deferralTags.js
CHANGED
|
@@ -1,17 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The single-sourced STARTER set of recognised community deferral tags — bare names
|
|
3
|
-
* (the `@` is tag-line syntax). A scenario whose tag block carries one of these DEFERS
|
|
4
|
-
* every obligation it raises to a Pending Item (scenario-scope). These are the
|
|
5
|
-
* established Cucumber deferral conventions.
|
|
6
|
-
*
|
|
7
|
-
* This is **product policy, not a core-domain invariant** — an evolvable list of tag
|
|
8
|
-
* strings, so it lives in the application layer, NOT on the v1 core barrel.
|
|
9
|
-
* The core `parseScenarios` recognises only the deferral set it is
|
|
10
|
-
* handed (its default is `[]`, a policy-free pure core); the app is the single source
|
|
11
|
-
* of the starter policy and always passes the resolved set (starter ∪ configured) into
|
|
12
|
-
* the parser at the ingest edge. Both `resolveDeferralTags` (the `@SCN-PND-021` config
|
|
13
|
-
* union) and `renderCommandHelp`'s `--help` listing source this constant.
|
|
14
|
-
*/
|
|
15
1
|
export const DEFAULT_DEFERRAL_TAGS = [
|
|
16
2
|
"wip",
|
|
17
3
|
"ignore",
|
package/dist/deferralTags.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deferralTags.js","sourceRoot":"","sources":["../src/deferralTags.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"deferralTags.js","sourceRoot":"","sources":["../src/deferralTags.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,KAAK;IACL,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;CACV,CAAC"}
|
package/dist/host.d.ts
CHANGED
|
@@ -1,80 +1,19 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The host-invocation parse — the pure half of the `spec-controller` command host.
|
|
3
|
-
*
|
|
4
|
-
* The shipped binary is `spec-controller [--store <root>] [--run-id <id>] <command>
|
|
5
|
-
* [command-args]`. `--store` / `--run-id` are CROSS-CUTTING host options recognised
|
|
6
|
-
* ONLY in leading position, before the command: storage applies across balance /
|
|
7
|
-
* analyse / migrate, so it belongs at the host (wrapping any command via the kept-run
|
|
8
|
-
* scaffold), not as a peer command and never as a flag inside `balance`. This module
|
|
9
|
-
* holds the pure rules the impure dispatcher (`cli.ts`) drives — parsing the leading
|
|
10
|
-
* options, building the wrapped command argv, and peeking the conventional provenance
|
|
11
|
-
* flags — so the whole host contract is `@unit`-testable with no IO.
|
|
12
|
-
*/
|
|
13
1
|
import { type CommandSpec, type FlagSpec } from "./cli-registry.js";
|
|
14
|
-
/** A parsed host invocation: leading global options, then the command and its clean args. */
|
|
15
2
|
export interface HostInvocation {
|
|
16
|
-
/** The injected store root from a leading `--store <root>`, or undefined (no store). */
|
|
17
3
|
store?: string;
|
|
18
|
-
/** The mnemonic from a leading `--run-id <id>`, or undefined (→ the timestamp default). */
|
|
19
4
|
runId?: string;
|
|
20
|
-
/** The command token (e.g. "balance"), or undefined when none was given. */
|
|
21
5
|
command?: string;
|
|
22
|
-
/** The command's own args — everything after the command token, verbatim. */
|
|
23
6
|
commandArgs: string[];
|
|
24
|
-
/**
|
|
25
|
-
* The usage fault in the leading tokens, when there is one: the host refuses it at exit 2 before
|
|
26
|
-
* any command or stored run starts.
|
|
27
|
-
*/
|
|
28
7
|
refusal?: string;
|
|
29
8
|
}
|
|
30
|
-
/**
|
|
31
|
-
* Parse the host argv into its leading global options (`--store`, `--run-id`) and the
|
|
32
|
-
* command + its clean args. Global options are recognised ONLY before the command: the
|
|
33
|
-
* first token that is not a consumed global option (or its value) is the command, and
|
|
34
|
-
* everything after it is the command's own args, verbatim. So `--store /s balance
|
|
35
|
-
* --features f` yields the store + `balance` + `[--features, f]`, while `balance --store
|
|
36
|
-
* /s` leaves `--store` in the command's args (a `--store` AFTER the command is the
|
|
37
|
-
* command's own arg, never a host store directive) — the "global before command" contract.
|
|
38
|
-
* A modifier with nothing after it is refused; an empty argv is the bare help. A `--help` or `-h`
|
|
39
|
-
* among the host's own tokens answers the top-level help ahead of any refusal beside it.
|
|
40
|
-
*/
|
|
41
9
|
export declare function parseHostInvocation(argv: readonly string[], globalFlags?: readonly FlagSpec[], commands?: readonly string[]): HostInvocation;
|
|
42
|
-
/**
|
|
43
|
-
* Build the wrapped command argv: the command's clean args followed by a repeated
|
|
44
|
-
* `--format <spec>` per store-dir output spec. Pure — the impure runner hands the result
|
|
45
|
-
* straight to the command, so the command's OWN writer produces the stored artefacts
|
|
46
|
-
* (byte-identical to a bare `--format` run; no writer duplication).
|
|
47
|
-
*/
|
|
48
10
|
export declare function wrapCommandArgv(commandArgs: readonly string[], formatSpecs: readonly string[]): string[];
|
|
49
|
-
/**
|
|
50
|
-
* Read a `--<name> <value>` flag's value from an arg list WITHOUT consuming it — the host
|
|
51
|
-
* peeks the conventional cross-cutting provenance flags (`--target`, `--features`,
|
|
52
|
-
* `--source-sha`) to name the run dir + stamp run.yaml, while the command still receives
|
|
53
|
-
* them in its own args. Returns undefined when the flag is absent or has no value.
|
|
54
|
-
*/
|
|
55
11
|
export declare function peekFlag(argv: readonly string[], name: string): string | undefined;
|
|
56
|
-
/** The host's answer to a command it does not know: what goes to stderr, and the status. */
|
|
57
12
|
export interface UnknownCommandAnswer {
|
|
58
13
|
exitCode: number;
|
|
59
14
|
stderr: string;
|
|
60
15
|
}
|
|
61
|
-
/**
|
|
62
|
-
* Answer a command the registry does not carry. It is given the command token and the rendered
|
|
63
|
-
* help, never the command's args, so no flag after the command can change the answer.
|
|
64
|
-
*
|
|
65
|
-
* An unknown command is a usage fault, so it exits 2, the published usage code
|
|
66
|
-
* (packages/spec-controller/README.md), which `--exit-zero` never masks.
|
|
67
|
-
*/
|
|
68
16
|
export declare function answerUnknownCommand(command: string, help: string): UnknownCommandAnswer;
|
|
69
|
-
/**
|
|
70
|
-
* The refusal for host modifiers given before a command that takes none, else undefined. A request
|
|
71
|
-
* for that command's own help is answered instead, wherever the help token stands among its args:
|
|
72
|
-
* help runs nothing and keeps no run, so there is nothing for the modifiers to be refused from.
|
|
73
|
-
*/
|
|
74
17
|
export declare function modifiersNotTakenRefusal(inv: HostInvocation, commands?: readonly CommandSpec[]): string | undefined;
|
|
75
|
-
/**
|
|
76
|
-
* The file paths a command's own `--format` values name: each value's text after its first colon,
|
|
77
|
-
* as `planOutput` reads it. A value with no colon goes to stdout and names no file.
|
|
78
|
-
*/
|
|
79
18
|
export declare function formatFilePaths(argv: readonly string[]): string[];
|
|
80
19
|
//# sourceMappingURL=host.d.ts.map
|
package/dist/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AASA,OAAO,EAAe,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEjF,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,WAAW,GAAE,SAAS,QAAQ,EAAuB,EACrD,QAAQ,GAAE,SAAS,MAAM,EAAwD,GAChF,cAAc,CAIhB;AAmGD,wBAAgB,eAAe,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAExG;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASlF;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAKxF;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,cAAc,EACnB,QAAQ,GAAE,SAAS,WAAW,EAAyB,GACtD,MAAM,GAAG,SAAS,CAUpB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CASjE"}
|