spec-controller 0.1.0-alpha.5 → 0.1.0-alpha.50

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.
Files changed (122) hide show
  1. package/README.md +34 -6
  2. package/dist/cli-allocate/cli.d.ts +2 -0
  3. package/dist/cli-allocate/cli.d.ts.map +1 -0
  4. package/dist/cli-allocate/cli.js +60 -0
  5. package/dist/cli-allocate/cli.js.map +1 -0
  6. package/dist/cli-allocate/readHistory.d.ts +15 -0
  7. package/dist/cli-allocate/readHistory.d.ts.map +1 -0
  8. package/dist/cli-allocate/readHistory.js +108 -0
  9. package/dist/cli-allocate/readHistory.js.map +1 -0
  10. package/dist/cli-allocate/readParts.d.ts +2 -0
  11. package/dist/cli-allocate/readParts.d.ts.map +1 -0
  12. package/dist/cli-allocate/readParts.js +22 -0
  13. package/dist/cli-allocate/readParts.js.map +1 -0
  14. package/dist/cli-allocate/readTree.d.ts +5 -0
  15. package/dist/cli-allocate/readTree.d.ts.map +1 -0
  16. package/dist/cli-allocate/readTree.js +74 -0
  17. package/dist/cli-allocate/readTree.js.map +1 -0
  18. package/dist/cli-allocate/refStore.d.ts +2 -0
  19. package/dist/cli-allocate/refStore.d.ts.map +1 -0
  20. package/dist/cli-allocate/refStore.js +34 -0
  21. package/dist/cli-allocate/refStore.js.map +1 -0
  22. package/dist/cli-allocate/request.d.ts +9 -0
  23. package/dist/cli-allocate/request.d.ts.map +1 -0
  24. package/dist/cli-allocate/request.js +22 -0
  25. package/dist/cli-allocate/request.js.map +1 -0
  26. package/dist/cli-allocate/stderr.d.ts +7 -0
  27. package/dist/cli-allocate/stderr.d.ts.map +1 -0
  28. package/dist/cli-allocate/stderr.js +26 -0
  29. package/dist/cli-allocate/stderr.js.map +1 -0
  30. package/dist/cli-allocate/unreadable.d.ts +11 -0
  31. package/dist/cli-allocate/unreadable.d.ts.map +1 -0
  32. package/dist/cli-allocate/unreadable.js +30 -0
  33. package/dist/cli-allocate/unreadable.js.map +1 -0
  34. package/dist/cli-args.d.ts +12 -70
  35. package/dist/cli-args.d.ts.map +1 -1
  36. package/dist/cli-args.js +158 -81
  37. package/dist/cli-args.js.map +1 -1
  38. package/dist/cli-balance/cli.d.ts +1 -81
  39. package/dist/cli-balance/cli.d.ts.map +1 -1
  40. package/dist/cli-balance/cli.js +71 -357
  41. package/dist/cli-balance/cli.js.map +1 -1
  42. package/dist/cli-balance/emit/format.d.ts +16 -38
  43. package/dist/cli-balance/emit/format.d.ts.map +1 -1
  44. package/dist/cli-balance/emit/format.js +31 -58
  45. package/dist/cli-balance/emit/format.js.map +1 -1
  46. package/dist/cli-balance/emit/writer.d.ts +2 -32
  47. package/dist/cli-balance/emit/writer.d.ts.map +1 -1
  48. package/dist/cli-balance/emit/writer.js +50 -37
  49. package/dist/cli-balance/emit/writer.js.map +1 -1
  50. package/dist/cli-balance/exitStatus.d.ts +2 -0
  51. package/dist/cli-balance/exitStatus.d.ts.map +1 -0
  52. package/dist/cli-balance/exitStatus.js +5 -0
  53. package/dist/cli-balance/exitStatus.js.map +1 -0
  54. package/dist/cli-balance/inputsRead.d.ts +11 -0
  55. package/dist/cli-balance/inputsRead.d.ts.map +1 -0
  56. package/dist/cli-balance/inputsRead.js +53 -0
  57. package/dist/cli-balance/inputsRead.js.map +1 -0
  58. package/dist/cli-balance/reRender.d.ts +8 -0
  59. package/dist/cli-balance/reRender.d.ts.map +1 -0
  60. package/dist/cli-balance/reRender.js +21 -0
  61. package/dist/cli-balance/reRender.js.map +1 -0
  62. package/dist/cli-balance/unreadableInputs.d.ts +14 -0
  63. package/dist/cli-balance/unreadableInputs.d.ts.map +1 -0
  64. package/dist/cli-balance/unreadableInputs.js +80 -0
  65. package/dist/cli-balance/unreadableInputs.js.map +1 -0
  66. package/dist/cli-registry.d.ts +12 -70
  67. package/dist/cli-registry.d.ts.map +1 -1
  68. package/dist/cli-registry.js +37 -97
  69. package/dist/cli-registry.js.map +1 -1
  70. package/dist/cli.d.ts +0 -21
  71. package/dist/cli.d.ts.map +1 -1
  72. package/dist/cli.js +62 -55
  73. package/dist/cli.js.map +1 -1
  74. package/dist/deferralTags.d.ts +0 -14
  75. package/dist/deferralTags.d.ts.map +1 -1
  76. package/dist/deferralTags.js +0 -14
  77. package/dist/deferralTags.js.map +1 -1
  78. package/dist/host.d.ts +10 -41
  79. package/dist/host.d.ts.map +1 -1
  80. package/dist/host.js +103 -50
  81. package/dist/host.js.map +1 -1
  82. package/dist/ingest/ciSourcePaths.d.ts +0 -38
  83. package/dist/ingest/ciSourcePaths.d.ts.map +1 -1
  84. package/dist/ingest/ciSourcePaths.js +0 -38
  85. package/dist/ingest/ciSourcePaths.js.map +1 -1
  86. package/dist/ingest/gherkinValidation.d.ts +0 -80
  87. package/dist/ingest/gherkinValidation.d.ts.map +1 -1
  88. package/dist/ingest/gherkinValidation.js +0 -80
  89. package/dist/ingest/gherkinValidation.js.map +1 -1
  90. package/dist/ingest/ingestQualityChecks.d.ts +8 -93
  91. package/dist/ingest/ingestQualityChecks.d.ts.map +1 -1
  92. package/dist/ingest/ingestQualityChecks.js +57 -214
  93. package/dist/ingest/ingestQualityChecks.js.map +1 -1
  94. package/dist/ingest/ingestScenarios.d.ts +0 -45
  95. package/dist/ingest/ingestScenarios.d.ts.map +1 -1
  96. package/dist/ingest/ingestScenarios.js +28 -108
  97. package/dist/ingest/ingestScenarios.js.map +1 -1
  98. package/dist/ingest/inputShapes.d.ts +16 -0
  99. package/dist/ingest/inputShapes.d.ts.map +1 -0
  100. package/dist/ingest/inputShapes.js +113 -0
  101. package/dist/ingest/inputShapes.js.map +1 -0
  102. package/dist/outputLocation.d.ts +27 -0
  103. package/dist/outputLocation.d.ts.map +1 -0
  104. package/dist/outputLocation.js +135 -0
  105. package/dist/outputLocation.js.map +1 -0
  106. package/dist/run-management/keptRun.d.ts +5 -105
  107. package/dist/run-management/keptRun.d.ts.map +1 -1
  108. package/dist/run-management/keptRun.js +16 -82
  109. package/dist/run-management/keptRun.js.map +1 -1
  110. package/dist/run-management/resolveRunInputs.d.ts +0 -67
  111. package/dist/run-management/resolveRunInputs.d.ts.map +1 -1
  112. package/dist/run-management/resolveRunInputs.js +0 -88
  113. package/dist/run-management/resolveRunInputs.js.map +1 -1
  114. package/dist/storedRun.d.ts +6 -0
  115. package/dist/storedRun.d.ts.map +1 -0
  116. package/dist/storedRun.js +28 -0
  117. package/dist/storedRun.js.map +1 -0
  118. package/package.json +2 -2
  119. package/dist/corpus/cli.d.ts +0 -34
  120. package/dist/corpus/cli.d.ts.map +0 -1
  121. package/dist/corpus/cli.js +0 -125
  122. package/dist/corpus/cli.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unreadableInputs.js","sourceRoot":"","sources":["../../src/cli-balance/unreadableInputs.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,eAAe,EACf,oBAAoB,GAErB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,YAAY,EACZ,aAAa,GAEd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAmB,MAAM,eAAe,CAAC;AAe1D,MAAM,WAAW,GAAwC;IACvD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,iCAAiC,EAAE,KAAK,EAAE,aAAa,EAAE;IAC3F,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,oCAAoC,EAAE,KAAK,EAAE,eAAe,EAAE;IAClG,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,mCAAmC,EAAE,KAAK,EAAE,cAAc,EAAE;IAClG,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,4BAA4B,EAAE,KAAK,EAAE,gBAAgB,EAAE;CACpG,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,IAA4B,EAAE,MAAiC;IAC1F,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QAClC,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACnG,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,cAAc,CAAE,CAAC;IACvD,OAAO,CAAC,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,kCAAkC,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAChH,CAAC;AAED,SAAS,QAAQ,CAAC,GAAY;IAC5B,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,cAAc,CAAC,KAAgB,EAAE,IAA8B;IACtE,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,KAAK,CAAC,OAAO,uBAAuB,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;IAChF,CAAC;IACD,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,KAAK,CAAC,OAAO,uBAAuB,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;IAChF,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,GAAG,KAAK,CAAC,OAAO,wBAAwB,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAA4B,EAAE,IAA8B;IAC3F,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,KAAqB;IACzD,OAAO,GAAG,OAAO,uBAAuB,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAA4B;IAC1D,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACjD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IAC9H,CAAC;IACD,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IAC9H,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAY,EAAE,SAAiB;IACtE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,oBAAoB,CAAC,CAAC;IACxE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,8DAA8D,IAAI,KAAK,KAAK,GAAG,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,SAAiB,EAAE,MAAe;IAChF,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,gFAAgF,IAAI,KAAK,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;IACnH,CAAC;AACH,CAAC"}
@@ -1,91 +1,33 @@
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
- /** One flag in a scope: its canonical name, optional aliases, value placeholder, help. */
26
1
  export interface FlagSpec {
27
- /** The canonical flag with dashes (e.g. "--features", "--help"). */
28
2
  name: string;
29
- /** Alternate spellings rendered after the name (e.g. ["-h"]); omit when none. */
30
3
  aliases?: string[];
31
- /** The value placeholder (e.g. "<dir>"); omit for boolean flags like `--help`. */
32
4
  arg?: string;
33
- /** True when the flag may be given more than once (`--format`); omit otherwise. */
34
5
  repeatable?: boolean;
35
- /** One-line help text — the description migrated from doc/how_to_use.md. */
36
6
  description: string;
37
7
  }
38
- /** A command: its token, a one-line summary, its per-command flag scope, and any config it reads. */
8
+ export interface PositionalSpec {
9
+ name: string;
10
+ description: string;
11
+ }
39
12
  export interface CommandSpec {
40
- /** The command token (e.g. "balance"). */
41
13
  name: string;
42
- /** One-line summary for the top-level `spec-controller --help` (the CLI-007 surface). */
43
14
  summary: string;
44
- /** The command's per-command flag scope. */
45
15
  flags: FlagSpec[];
46
- /**
47
- * Trailing help lines documenting `package.json` config THIS command reads, rendered
48
- * verbatim after the flag list. It lives on the command's entry rather than in the
49
- * renderer because a config field belongs to whichever command consumes it: appended
50
- * unconditionally, `balance`'s `specController.deferralTags` block would document, under
51
- * every later command, a field that command does not read (3F-3298). Omit when none.
52
- */
16
+ positionals?: PositionalSpec[];
17
+ acceptsHostModifiers?: false;
53
18
  configHelp?: string[];
19
+ retiredFlags?: RetiredFlagSpec[];
20
+ }
21
+ export interface RetiredFlagSpec {
22
+ name: string;
23
+ retiredIn: string;
24
+ replacement: string;
54
25
  }
55
- /** The two-scope registry: the global host-modifier scope, and the per-command scopes. */
56
26
  export interface CliRegistry {
57
- /** Host modifiers recognised before the command — the global scope (CLI-007). */
58
27
  global: FlagSpec[];
59
- /** The per-command scopes. */
60
28
  commands: CommandSpec[];
61
29
  }
62
- /**
63
- * The registry singleton — the single source both help surfaces render from.
64
- */
65
30
  export declare const cliRegistry: CliRegistry;
66
- /**
67
- * Render THE NAMED command's per-command scope as help text: one line per registered flag
68
- * (name + arg-placeholder + description), then whatever config lines that command's entry
69
- * carries — driven BY the registry, so a flag that exists is a flag that appears, by
70
- * construction. Returns the help block WITHOUT a trailing newline (the caller adds it,
71
- * matching the writer's stdout convention).
72
- *
73
- * THE COMMAND IS A PARAMETER (3F-3298). It used to be the literal `"balance"`, found by name
74
- * inside this function, which is what the single registered command made look general. A
75
- * second command had no help surface at all under that signature — not an empty one; there
76
- * was no argument by which to ask. What the renderer covers is now the registry's shape
77
- * rather than the command set's size on the day it was written.
78
- */
79
31
  export declare function renderCommandHelp(registry: CliRegistry, command: string): string;
80
- /**
81
- * Render the top-level `spec-controller --help` surface (@SCN-CLI-007) FROM the registry:
82
- * a Commands section (each command's name + one-line summary) and a Host modifiers section
83
- * (each global-scope flag: name + arg-placeholder + one-line description). The global-scope
84
- * half of the two-scope registry — the counterpart to `renderCommandHelp`'s per-command
85
- * half — so the top-level usage no longer hand-keeps (and can no longer silently drift
86
- * from) the command set or the host modifiers; both are sourced from `cliRegistry`.
87
- * Summaries and descriptions render on a single line (no wrapping) so a registered string
88
- * appears verbatim. Returns the block WITHOUT a trailing newline (the caller adds it).
89
- */
90
32
  export declare function renderTopLevelHelp(registry: CliRegistry): string;
91
33
  //# sourceMappingURL=cli-registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-registry.d.ts","sourceRoot":"","sources":["../src/cli-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,0FAA0F;AAC1F,MAAM,WAAW,QAAQ;IACvB,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,kFAAkF;IAClF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qGAAqG;AACrG,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,0FAA0F;AAC1F,MAAM,WAAW,WAAW;IAC1B,iFAAiF;IACjF,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,8BAA8B;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AA0ID;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,WAiBzB,CAAC;AAQF;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAgBhF;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CA0BhE"}
1
+ {"version":3,"file":"cli-registry.d.ts","sourceRoot":"","sources":["../src/cli-registry.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,oBAAoB,CAAC,EAAE,KAAK,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAyGD,eAAO,MAAM,WAAW,EAAE,WA6BzB,CAAC;AAOF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAiBhF;AAcD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CA0BhE"}
@@ -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",
@@ -52,7 +23,7 @@ const balanceFlags = [
52
23
  {
53
24
  name: "--package-json",
54
25
  arg: "<path>",
55
- description: "The target's package.json — its `scripts`, and its specController.fitnessChecks rows: each names a scenario's @SCN, a characteristic, and the command that is the check.",
26
+ description: "The target's package.json — its `scripts`, and its specController.runners, specController.notChecks and specController.deferralTags. A fitness check is declared by its @fitness scenario and the CI step whose id: is that scenario's @SCN; no manifest key names one.",
56
27
  },
57
28
  {
58
29
  name: "--ci-steps",
@@ -84,20 +55,16 @@ const balanceFlags = [
84
55
  name: "--strict",
85
56
  description: "Fail the run (exit 3) when it carries Pending Items — the opt-in that escalates otherwise-run-neutral deferred obligations.",
86
57
  },
58
+ {
59
+ name: "--exit-zero",
60
+ description: "Print the same report but exit 0 on an out-of-balance or scenario-code-error (1) or --strict pending (3) verdict — the on-ramp before gating. Usage (2), unsound (4) and nothing-to-reconcile (5) still fail.",
61
+ },
87
62
  {
88
63
  name: "--help",
89
64
  aliases: ["-h"],
90
65
  description: "Show this help and exit.",
91
66
  },
92
67
  ];
93
- /**
94
- * `balance`'s config block: the `specController.deferralTags` field it reads, with its
95
- * recognised starter set SINGLE-SOURCED from DEFAULT_DEFERRAL_TAGS (@SCN-PND-021 / the
96
- * 3F-1405 completeness discipline — the lines are built FROM the constant, never a
97
- * hand-kept copy, so the documented set cannot drift from the recognised one). It hangs
98
- * off balance's registry entry, not off the renderer, so it renders under `balance --help`
99
- * and under nothing else.
100
- */
101
68
  const balanceConfigHelp = [
102
69
  "Configuration (in the target repo's package.json):",
103
70
  " specController.deferralTags: string[]",
@@ -105,37 +72,13 @@ const balanceConfigHelp = [
105
72
  " names to a Pending Item, extending (never replacing) the built-in set.",
106
73
  ` Built-in deferral tags: ${DEFAULT_DEFERRAL_TAGS.map((tag) => `@${tag}`).join(", ")}`,
107
74
  ];
108
- /**
109
- * The `tags` command's per-command scope (3F-3300). Two input flags and `--help`/`-h`, and the
110
- * two are `balance`'s own spellings on purpose: a consumer pointing one command at a corpus and a
111
- * manifest should not have to learn a second name for each when they point the other at the same
112
- * two files. The descriptions are this command's — what it reads them FOR is not what `balance`
113
- * reads them for — but the flags are the same flags.
114
- *
115
- * NO `configHelp`. A command's config block documents the `package.json` fields THAT command
116
- * reads, and `tags` reads none yet: the check-tag union and the recognised deferral set arrive
117
- * with the grammar rules (3F-3302 onward), and the entry gains its block then. Appending
118
- * `balance`'s block here would document, under this command, fields this command does not read —
119
- * which is the fault 3F-3298 moved that block onto a command entry to prevent.
120
- */
121
- const tagsFlags = [
75
+ const balanceRetiredFlags = [
122
76
  {
123
- name: "--features",
124
- arg: "<dir>",
125
- description: "Directory of Gherkin .feature files — the corpus these rules are asked about (default ./features).",
126
- },
127
- {
128
- name: "--package-json",
129
- arg: "<path>",
130
- description: "The target's package.json — its specController block, from which the words that name a check and the tags that park a scenario are resolved (default ./package.json).",
131
- },
132
- {
133
- name: "--help",
134
- aliases: ["-h"],
135
- description: "Show this help and exit.",
77
+ name: "--measurements",
78
+ retiredIn: "0.1.0-alpha.5",
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.",
136
80
  },
137
81
  ];
138
- /** The global host-modifier scope — recognised before the command; the CLI-007 surface. */
139
82
  const globalFlags = [
140
83
  {
141
84
  name: "--store",
@@ -145,12 +88,9 @@ const globalFlags = [
145
88
  {
146
89
  name: "--run-id",
147
90
  arg: "<id>",
148
- description: "Name the stored run (default: an ISO-8601 UTC timestamp).",
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.",
149
92
  },
150
93
  ];
151
- /**
152
- * The registry singleton — the single source both help surfaces render from.
153
- */
154
94
  export const cliRegistry = {
155
95
  global: globalFlags,
156
96
  commands: [
@@ -159,32 +99,29 @@ export const cliRegistry = {
159
99
  summary: "Reconcile Gherkin scenarios against test/CI evidence and emit the Evidence Reconciliation (Markdown to stdout by default).",
160
100
  flags: balanceFlags,
161
101
  configHelp: balanceConfigHelp,
102
+ retiredFlags: balanceRetiredFlags,
162
103
  },
163
104
  {
164
- name: "tags",
165
- summary: "Police the @SCN scheme over your Gherkin corpus — the rules the scheme itself imposes on the tags and header codes a feature file carries (exit 1 on findings, 2 on a corpus that cannot be read).",
166
- flags: tagsFlags,
105
+ name: "allocate",
106
+ summary: "Print the next @SCN code for a feature part: one past the highest the repository has ever carried, the code alone on stdout.",
107
+ acceptsHostModifiers: false,
108
+ positionals: [
109
+ { name: "<FFF>", description: "The feature part: a feature file's header code, two to five of A-Z and 0-9." },
110
+ ],
111
+ flags: [
112
+ {
113
+ name: "--new",
114
+ description: "Start a part no feature file's header carries yet: its first code, or one past any number the repository already carries for it.",
115
+ },
116
+ { name: "--help", aliases: ["-h"], description: "Show this help and exit." },
117
+ ],
167
118
  },
168
119
  ],
169
120
  };
170
- /** The display label for a flag: its name, any aliases, then its arg-placeholder. */
171
121
  function flagLabel(flag) {
172
122
  const names = [flag.name, ...(flag.aliases ?? [])].join(", ");
173
123
  return flag.arg !== undefined ? `${names} ${flag.arg}` : names;
174
124
  }
175
- /**
176
- * Render THE NAMED command's per-command scope as help text: one line per registered flag
177
- * (name + arg-placeholder + description), then whatever config lines that command's entry
178
- * carries — driven BY the registry, so a flag that exists is a flag that appears, by
179
- * construction. Returns the help block WITHOUT a trailing newline (the caller adds it,
180
- * matching the writer's stdout convention).
181
- *
182
- * THE COMMAND IS A PARAMETER (3F-3298). It used to be the literal `"balance"`, found by name
183
- * inside this function, which is what the single registered command made look general. A
184
- * second command had no help surface at all under that signature — not an empty one; there
185
- * was no argument by which to ask. What the renderer covers is now the registry's shape
186
- * rather than the command set's size on the day it was written.
187
- */
188
125
  export function renderCommandHelp(registry, command) {
189
126
  const entry = registry.commands.find((c) => c.name === command);
190
127
  const flags = entry?.flags ?? [];
@@ -194,22 +131,25 @@ export function renderCommandHelp(registry, command) {
194
131
  const configHelp = entry?.configHelp ?? [];
195
132
  return [
196
133
  `spec-controller ${command} — ${entry?.summary ?? ""}`,
134
+ ...positionalHelp(command, entry?.positionals ?? []),
197
135
  "",
198
136
  "Options:",
199
137
  ...lines,
200
138
  ...(configHelp.length > 0 ? ["", ...configHelp] : []),
201
139
  ].join("\n");
202
140
  }
203
- /**
204
- * Render the top-level `spec-controller --help` surface (@SCN-CLI-007) FROM the registry:
205
- * a Commands section (each command's name + one-line summary) and a Host modifiers section
206
- * (each global-scope flag: name + arg-placeholder + one-line description). The global-scope
207
- * half of the two-scope registry — the counterpart to `renderCommandHelp`'s per-command
208
- * half — so the top-level usage no longer hand-keeps (and can no longer silently drift
209
- * from) the command set or the host modifiers; both are sourced from `cliRegistry`.
210
- * Summaries and descriptions render on a single line (no wrapping) so a registered string
211
- * appears verbatim. Returns the block WITHOUT a trailing newline (the caller adds it).
212
- */
141
+ function positionalHelp(command, positionals) {
142
+ if (positionals.length === 0)
143
+ return [];
144
+ const width = Math.max(...positionals.map((positional) => positional.name.length));
145
+ return [
146
+ "",
147
+ `Usage: spec-controller ${command} ${positionals.map((positional) => positional.name).join(" ")} [options]`,
148
+ "",
149
+ "Arguments:",
150
+ ...positionals.map((positional) => ` ${positional.name.padEnd(width + 2)}${positional.description}`),
151
+ ];
152
+ }
213
153
  export function renderTopLevelHelp(registry) {
214
154
  const commandGutter = 4;
215
155
  const commandWidth = Math.max(0, ...registry.commands.map((c) => c.name.length));
@@ -1 +1 @@
1
- {"version":3,"file":"cli-registry.js","sourceRoot":"","sources":["../src/cli-registry.ts"],"names":[],"mappings":"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"}
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,24 +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); `tags` — the
10
- * @SCN scheme policing itself over the same corpus, which is a fault about the corpus rather
11
- * than a verdict about its evidence, and so has its own status ladder rather than a fifth
12
- * meaning on balance's. The `analyse` / `migrate` capabilities are a separate, closed offering
13
- * built on the same core.
14
- *
15
- * Storage is a CROSS-CUTTING host modifier, not a command. A leading `--store <root>`
16
- * turns any command into a STORED run: the host wraps the command via the kept-run
17
- * scaffold — a named `<root>/<target>/<run-id>/` directory, the command's outputs routed
18
- * in, and a `run.yaml` manifest — and hands the command its own clean args, unchanged. So
19
- * `balance` stays emit-only (its default, no-store output is byte-identical); the store
20
- * opinion lives at the host, injected via `--store` (required — there is no default, a
21
- * default would write inside the repo). `--run-id` defaults to a timestamp.
22
- */
23
2
  export {};
24
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":";AACA;;;;;;;;;;;;;;;;;;;;GAoBG"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js CHANGED
@@ -1,88 +1,95 @@
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); `tags` — the
10
- * @SCN scheme policing itself over the same corpus, which is a fault about the corpus rather
11
- * than a verdict about its evidence, and so has its own status ladder rather than a fifth
12
- * meaning on balance's. The `analyse` / `migrate` capabilities are a separate, closed offering
13
- * built on the same core.
14
- *
15
- * Storage is a CROSS-CUTTING host modifier, not a command. A leading `--store <root>`
16
- * turns any command into a STORED run: the host wraps the command via the kept-run
17
- * scaffold — a named `<root>/<target>/<run-id>/` directory, the command's outputs routed
18
- * in, and a `run.yaml` manifest — and hands the command its own clean args, unchanged. So
19
- * `balance` stays emit-only (its default, no-store output is byte-identical); the store
20
- * opinion lives at the host, injected via `--store` (required — there is no default, a
21
- * default would write inside the repo). `--run-id` defaults to a timestamp.
22
- */
23
2
  import { dirname } from "node:path";
24
3
  import { runBalance } from "./cli-balance/cli.js";
25
- import { runTags } from "./corpus/cli.js";
4
+ import { inputsReadBy, NODE_INPUT_READER } from "./cli-balance/inputsRead.js";
5
+ import { parseArgs } from "./cli-args.js";
6
+ import { runAllocate } from "./cli-allocate/cli.js";
26
7
  import { resolveSourceSha, resolveToolIdentity } from "./run-management/resolveRunInputs.js";
27
8
  import { executeKeptRun, resolveRunId, } from "./run-management/keptRun.js";
28
- import { parseHostInvocation, wrapCommandArgv, peekFlag } from "./host.js";
9
+ import { parseHostInvocation, wrapCommandArgv, peekFlag, formatFilePaths, answerUnknownCommand, modifiersNotTakenRefusal, } from "./host.js";
29
10
  import { cliRegistry, renderTopLevelHelp } from "./cli-registry.js";
30
- /** Dispatch a command to its handler with the given (clean or store-wrapped) argv. */
11
+ import { dispatchesUnstored, storedReRenderRefusal, unstoredRunIdRefusal } from "./storedRun.js";
12
+ import { settlingRefusal } from "./outputLocation.js";
31
13
  function runCommand(command, argv) {
32
14
  switch (command) {
33
15
  case "balance":
34
- runBalance(argv);
35
- return;
36
- case "tags":
37
- runTags(argv);
38
- return;
39
- default:
40
- process.stderr.write(`spec-controller: unknown command "${command}".\n\n${renderTopLevelHelp(cliRegistry)}\n`);
41
- process.exit(1);
16
+ return runBalance(argv);
17
+ case "allocate":
18
+ runAllocate(argv);
19
+ return false;
20
+ default: {
21
+ const answer = answerUnknownCommand(command, renderTopLevelHelp(cliRegistry));
22
+ process.stderr.write(answer.stderr);
23
+ process.exitCode = answer.exitCode;
24
+ return false;
25
+ }
42
26
  }
43
27
  }
28
+ function refuseLeadingFaults(inv) {
29
+ const refusal = leadingRefusal(inv);
30
+ if (refusal === undefined)
31
+ return false;
32
+ process.stderr.write(refusal + "\n");
33
+ process.exitCode = 2;
34
+ return true;
35
+ }
36
+ function leadingRefusal(inv) {
37
+ return inv.refusal ?? modifiersNotTakenRefusal(inv) ?? storedReRenderRefusal(inv) ?? unstoredRunIdRefusal(inv);
38
+ }
44
39
  function main(hostArgv) {
45
40
  const inv = parseHostInvocation(hostArgv);
41
+ if (refuseLeadingFaults(inv))
42
+ return;
46
43
  const command = inv.command;
47
- if (command === undefined || command === "help" || command === "--help" || command === "-h") {
44
+ if (command === undefined || asksForHelp(command)) {
48
45
  process.stdout.write(renderTopLevelHelp(cliRegistry) + "\n");
49
46
  return;
50
47
  }
51
- // No store directive → dispatch the command directly; its output is unchanged.
52
- if (inv.store === undefined) {
48
+ dispatch(inv, command);
49
+ }
50
+ function asksForHelp(command) {
51
+ return command === "help" || command === "--help" || command === "-h";
52
+ }
53
+ function dispatch(inv, command) {
54
+ if (dispatchesUnstored(inv) || inv.store === undefined) {
53
55
  runCommand(command, inv.commandArgs);
54
56
  return;
55
57
  }
56
- // Store directive → wrap the command via keptRun. The scaffold makes the run dir, hands
57
- // the injected route the two store-dir `--format` specs, and stamps run.yaml. The route
58
- // dispatches the command with its own clean args PLUS those specs, so the command's own
59
- // writer produces the stored artefacts (byte-identical to a bare `--format` run). The
60
- // host peeks the conventional provenance flags off the command args to name the dir +
61
- // stamp the manifest, without consuming them (the command still sees them).
58
+ runKept(inv, command, inv.store);
59
+ }
60
+ function runKept(inv, command, storeRoot) {
62
61
  const runId = resolveRunId({ runId: inv.runId, now: new Date() });
63
62
  const target = peekFlag(inv.commandArgs, "target") ?? "unknown-target";
64
- const features = peekFlag(inv.commandArgs, "features");
65
- const sourceSha = resolveSourceSha({
66
- sourceSha: peekFlag(inv.commandArgs, "source-sha"),
63
+ const sourceSha = sourceShaOf(inv.commandArgs);
64
+ const spec = {
65
+ storeRoot,
66
+ target,
67
+ runId,
68
+ formatPaths: formatFilePaths(inv.commandArgs),
69
+ inputs: inputsReadBy(parseArgs(inv.commandArgs), NODE_INPUT_READER),
70
+ };
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"),
67
81
  targetDir: features !== undefined ? dirname(features) : undefined,
68
- }) ?? "unknown";
69
- const spec = { storeRoot: inv.store, target, runId };
70
- // `mode` is the command's run kind; only `balance` ships today (analyse/migrate are the
71
- // private engine's, added when it lands).
72
- // The TOOL's own identity (3F-1916) — which spec-controller produced this run, read
73
- // from the tool's OWN dir (never cwd, which is the target). "unknown" for a null SHA,
74
- // matching sourceSha's own fallback so run.yaml is internally consistent.
82
+ }) ?? "unknown");
83
+ }
84
+ function manifestMeta(sourceSha) {
75
85
  const toolIdentity = resolveToolIdentity();
76
- const meta = {
86
+ return {
77
87
  sourceSha,
78
88
  toolSha: toolIdentity.toolSha ?? "unknown",
79
89
  toolVersion: toolIdentity.toolVersion,
80
90
  mode: "balance",
81
91
  date: new Date().toISOString(),
82
92
  };
83
- const plan = executeKeptRun(spec, meta, (formatSpecs) => runCommand(command, wrapCommandArgv(inv.commandArgs, [...formatSpecs])));
84
- // The command's stdout was routed into the run dir, so tell the operator where it landed.
85
- process.stdout.write(plan.runDir + "\n");
86
93
  }
87
94
  main(process.argv.slice(2));
88
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":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC7F,OAAO,EACL,cAAc,EACd,YAAY,GAIb,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,QAAQ,EACR,eAAe,EACf,oBAAoB,EACpB,wBAAwB,GAEzB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,SAAS,UAAU,CAAC,OAAe,EAAE,IAAc;IACjD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,KAAK,UAAU;YACb,WAAW,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,KAAK,CAAC;QACf,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC;YAC9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACpC,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAmB;IAC9C,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,GAAmB;IACzC,OAAO,GAAG,CAAC,OAAO,IAAI,wBAAwB,CAAC,GAAG,CAAC,IAAI,qBAAqB,CAAC,GAAG,CAAC,IAAI,oBAAoB,CAAC,GAAG,CAAC,CAAC;AACjH,CAAC;AAED,SAAS,IAAI,CAAC,QAAkB;IAC9B,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,mBAAmB,CAAC,GAAG,CAAC;QAAE,OAAO;IACrC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAE5B,IAAI,OAAO,KAAK,SAAS,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IAED,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,CAAC;AACxE,CAAC;AAED,SAAS,QAAQ,CAAC,GAAmB,EAAE,OAAe;IACpD,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACvD,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,OAAO,CAAC,GAAmB,EAAE,OAAe,EAAE,SAAiB;IACtE,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,gBAAgB,CAAC;IACvE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAE/C,MAAM,IAAI,GAAgB;QACxB,SAAS;QACT,MAAM;QACN,KAAK;QACL,WAAW,EAAE,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC;QAC7C,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAC;KACpE,CAAC;IACF,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAErC,MAAM,KAAK,GAAiB,CAAC,WAAW,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACrH,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;IAEjF,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,WAAW,CAAC,WAAqB;IACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACnD,OAAO,CACL,gBAAgB,CAAC;QACf,SAAS,EAAE,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC;QAC9C,SAAS,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;KAClE,CAAC,IAAI,SAAS,CAChB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB;IACrC,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;IAC3C,OAAO;QACL,SAAS;QACT,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,SAAS;QAC1C,WAAW,EAAE,YAAY,CAAC,WAAW;QACrC,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -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;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAMlD,CAAC"}
1
+ {"version":3,"file":"deferralTags.d.ts","sourceRoot":"","sources":["../src/deferralTags.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAMlD,CAAC"}
@@ -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",
@@ -1 +1 @@
1
- {"version":3,"file":"deferralTags.js","sourceRoot":"","sources":["../src/deferralTags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,KAAK;IACL,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;CACV,CAAC"}
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"}