@rsaglobaltech/specgate 0.17.10 → 0.19.1

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 (211) hide show
  1. package/CHANGELOG.md +133 -1
  2. package/README.md +4 -4
  3. package/bin/specgate.ts +48 -47
  4. package/dist/bin/specgate.js +48 -46
  5. package/dist/bin/specgate.js.map +1 -1
  6. package/dist/packages/core/src/application/ArchiveChangeUseCase.js +6 -2
  7. package/dist/packages/core/src/application/ArchiveChangeUseCase.js.map +1 -1
  8. package/dist/packages/core/src/application/ValidateProjectUseCase.js +1 -1
  9. package/dist/packages/core/src/application/ValidateProjectUseCase.js.map +1 -1
  10. package/dist/packages/core/src/domain/ChangeTemplates.js +1 -1
  11. package/dist/packages/core/src/domain/DeltaFeature.js +3 -3
  12. package/dist/packages/core/src/domain/DeltaFeature.js.map +1 -1
  13. package/dist/packages/core/src/domain/DerivedMatrix.js +9 -9
  14. package/dist/packages/core/src/domain/DerivedMatrix.js.map +1 -1
  15. package/dist/packages/core/src/domain/DoneVerification.js +1 -1
  16. package/dist/packages/core/src/domain/DoneVerification.js.map +1 -1
  17. package/dist/packages/core/src/domain/DraftChecklist.js +38 -6
  18. package/dist/packages/core/src/domain/DraftChecklist.js.map +1 -1
  19. package/dist/packages/core/src/domain/GherkinTags.js +12 -12
  20. package/dist/packages/core/src/domain/GherkinTags.js.map +1 -1
  21. package/dist/packages/core/src/domain/InboundChange.js +1 -1
  22. package/dist/packages/core/src/domain/InboundChange.js.map +1 -1
  23. package/dist/packages/core/src/domain/Language.js +2 -2
  24. package/dist/packages/core/src/domain/Language.js.map +1 -1
  25. package/dist/packages/core/src/domain/Lockfile.js +7 -7
  26. package/dist/packages/core/src/domain/Lockfile.js.map +1 -1
  27. package/dist/packages/core/src/domain/PackDelta.js +1 -1
  28. package/dist/packages/core/src/domain/PackDelta.js.map +1 -1
  29. package/dist/packages/core/src/domain/PackSpec.js +21 -2
  30. package/dist/packages/core/src/domain/PackSpec.js.map +1 -1
  31. package/dist/packages/core/src/domain/RequirementGraph.js +2 -2
  32. package/dist/packages/core/src/domain/SpecParser.js +6 -6
  33. package/dist/packages/core/src/domain/SpecParser.js.map +1 -1
  34. package/dist/packages/core/src/domain/TraceMerge.js +4 -4
  35. package/dist/packages/core/src/domain/TraceMerge.js.map +1 -1
  36. package/dist/packages/core/src/domain/TraceabilityFormat.js +4 -4
  37. package/dist/packages/core/src/domain/TraceabilityFormat.js.map +1 -1
  38. package/dist/packages/core/src/domain/ValueAnnotations.js +8 -8
  39. package/dist/packages/core/src/domain/ValueAnnotations.js.map +1 -1
  40. package/dist/packages/core/src/domain/WriteScope.js +3 -3
  41. package/dist/packages/core/src/domain/WriteScope.js.map +1 -1
  42. package/dist/packages/core/src/infrastructure/ChangeWorkspace.js +2 -2
  43. package/dist/packages/core/src/infrastructure/ChangeWorkspace.js.map +1 -1
  44. package/dist/packages/core/src/infrastructure/ConsoleReporter.js +2 -2
  45. package/dist/packages/core/src/infrastructure/ConsoleReporter.js.map +1 -1
  46. package/dist/packages/core/src/infrastructure/DerivedMatrixSources.js +2 -2
  47. package/dist/packages/core/src/infrastructure/DerivedMatrixSources.js.map +1 -1
  48. package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js +4 -4
  49. package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js.map +1 -1
  50. package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js +1 -1
  51. package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js.map +1 -1
  52. package/dist/packages/core/src/infrastructure/GitContributionStager.js +3 -3
  53. package/dist/packages/core/src/infrastructure/GitContributionStager.js.map +1 -1
  54. package/dist/packages/core/src/infrastructure/RemotePackResolver.js +5 -5
  55. package/dist/packages/core/src/infrastructure/RemotePackResolver.js.map +1 -1
  56. package/dist/packages/core/test/unit/delta-feature.test.js +3 -3
  57. package/dist/packages/core/test/unit/delta-feature.test.js.map +1 -1
  58. package/dist/packages/core/test/unit/derived-matrix.test.js +8 -8
  59. package/dist/packages/core/test/unit/derived-matrix.test.js.map +1 -1
  60. package/dist/packages/core/test/unit/gherkin-tags.test.js +8 -8
  61. package/dist/packages/core/test/unit/gherkin-tags.test.js.map +1 -1
  62. package/dist/packages/core/test/unit/inbound-change.test.js +1 -1
  63. package/dist/packages/core/test/unit/inbound-change.test.js.map +1 -1
  64. package/dist/packages/core/test/unit/matrix-dependencies.test.js +5 -5
  65. package/dist/packages/core/test/unit/matrix-dependencies.test.js.map +1 -1
  66. package/dist/packages/core/test/unit/new-requirement.test.js +1 -1
  67. package/dist/packages/core/test/unit/new-requirement.test.js.map +1 -1
  68. package/dist/packages/core/test/unit/value-annotations.test.js +5 -5
  69. package/dist/packages/core/test/unit/value-annotations.test.js.map +1 -1
  70. package/dist/packages/core/test/unit/write-scope-status.test.js +5 -5
  71. package/dist/packages/core/test/unit/write-scope-status.test.js.map +1 -1
  72. package/dist/packages/mcp-spec-driven/src/native-tools.js +3 -3
  73. package/dist/packages/mcp-spec-driven/src/native-tools.js.map +1 -1
  74. package/dist/packages/mcp-spec-driven/src/server.js +1 -7
  75. package/dist/packages/mcp-spec-driven/src/server.js.map +1 -1
  76. package/dist/packages/mcp-spec-driven/src/tools.js +4 -4
  77. package/dist/packages/mcp-spec-driven/src/tools.js.map +1 -1
  78. package/dist/scripts/agents/commands.js +18 -0
  79. package/dist/scripts/agents/commands.js.map +1 -1
  80. package/dist/scripts/agents/init.js +35 -48
  81. package/dist/scripts/agents/init.js.map +1 -1
  82. package/dist/scripts/alm/cli.js +37 -3
  83. package/dist/scripts/alm/cli.js.map +1 -1
  84. package/dist/scripts/alm/providers/index.js +1 -1
  85. package/dist/scripts/alm/providers/index.js.map +1 -1
  86. package/dist/scripts/change/instructions.js +2 -2
  87. package/dist/scripts/change/instructions.js.map +1 -1
  88. package/dist/scripts/cli/commands/alm/PullCommand.js +1 -1
  89. package/dist/scripts/cli/commands/alm/PullCommand.js.map +1 -1
  90. package/dist/scripts/cli/commands/change/ChangeCommand.js +106 -101
  91. package/dist/scripts/cli/commands/change/ChangeCommand.js.map +1 -1
  92. package/dist/scripts/cli/commands/config/CiInitCommand.js +6 -4
  93. package/dist/scripts/cli/commands/config/CiInitCommand.js.map +1 -1
  94. package/dist/scripts/cli/commands/config/CompletionCommand.js +10 -10
  95. package/dist/scripts/cli/commands/config/CompletionCommand.js.map +1 -1
  96. package/dist/scripts/cli/commands/config/ConfigInitCommand.js +11 -19
  97. package/dist/scripts/cli/commands/config/ConfigInitCommand.js.map +1 -1
  98. package/dist/scripts/cli/commands/config/ConfigSetCommand.js +5 -1
  99. package/dist/scripts/cli/commands/config/ConfigSetCommand.js.map +1 -1
  100. package/dist/scripts/cli/commands/harness/RunCommand.js +73 -38
  101. package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -1
  102. package/dist/scripts/cli/commands/pack/BundlePackCommand.js +36 -2
  103. package/dist/scripts/cli/commands/pack/BundlePackCommand.js.map +1 -1
  104. package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js +2 -2
  105. package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js.map +1 -1
  106. package/dist/scripts/cli/commands/pack/InferPackCommand.js +2 -1
  107. package/dist/scripts/cli/commands/pack/InferPackCommand.js.map +1 -1
  108. package/dist/scripts/cli/commands/pack/InitPackCommand.js +23 -32
  109. package/dist/scripts/cli/commands/pack/InitPackCommand.js.map +1 -1
  110. package/dist/scripts/cli/commands/pack/LintPackCommand.js +4 -3
  111. package/dist/scripts/cli/commands/pack/LintPackCommand.js.map +1 -1
  112. package/dist/scripts/cli/commands/project/AdoptCommand.js +17 -4
  113. package/dist/scripts/cli/commands/project/AdoptCommand.js.map +1 -1
  114. package/dist/scripts/cli/commands/project/InitProjectCommand.js +8 -5
  115. package/dist/scripts/cli/commands/project/InitProjectCommand.js.map +1 -1
  116. package/dist/scripts/cli/commands/project/OnboardCommand.js +17 -24
  117. package/dist/scripts/cli/commands/project/OnboardCommand.js.map +1 -1
  118. package/dist/scripts/cli/commands/project/UpdateCommand.js +23 -43
  119. package/dist/scripts/cli/commands/project/UpdateCommand.js.map +1 -1
  120. package/dist/scripts/cli/commands/quality/CheckCommand.js +30 -17
  121. package/dist/scripts/cli/commands/quality/CheckCommand.js.map +1 -1
  122. package/dist/scripts/cli/commands/quality/DoctorCommand.js +27 -10
  123. package/dist/scripts/cli/commands/quality/DoctorCommand.js.map +1 -1
  124. package/dist/scripts/cli/commands/quality/FixCommand.js +24 -29
  125. package/dist/scripts/cli/commands/quality/FixCommand.js.map +1 -1
  126. package/dist/scripts/cli/commands/quality/ReportCommand.js +8 -4
  127. package/dist/scripts/cli/commands/quality/ReportCommand.js.map +1 -1
  128. package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js +69 -16
  129. package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js.map +1 -1
  130. package/dist/scripts/cli/commands/spec/DoneCommand.js +37 -23
  131. package/dist/scripts/cli/commands/spec/DoneCommand.js.map +1 -1
  132. package/dist/scripts/cli/commands/spec/DraftCommand.js +724 -26
  133. package/dist/scripts/cli/commands/spec/DraftCommand.js.map +1 -1
  134. package/dist/scripts/cli/commands/spec/MatrixCommand.js +24 -27
  135. package/dist/scripts/cli/commands/spec/MatrixCommand.js.map +1 -1
  136. package/dist/scripts/cli/commands/spec/NewCommand.js +11 -14
  137. package/dist/scripts/cli/commands/spec/NewCommand.js.map +1 -1
  138. package/dist/scripts/cli/commands/spec/PetCommand.js +102 -0
  139. package/dist/scripts/cli/commands/spec/PetCommand.js.map +1 -0
  140. package/dist/scripts/cli/commands/spec/PlanCommand.js +34 -39
  141. package/dist/scripts/cli/commands/spec/PlanCommand.js.map +1 -1
  142. package/dist/scripts/cli/commands/spec/ReqCommand.js +51 -58
  143. package/dist/scripts/cli/commands/spec/ReqCommand.js.map +1 -1
  144. package/dist/scripts/cli/commands/spec/StatusCommand.js +99 -45
  145. package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -1
  146. package/dist/scripts/cli/commands/spec/StudioCommand.js +16 -24
  147. package/dist/scripts/cli/commands/spec/StudioCommand.js.map +1 -1
  148. package/dist/scripts/cli/commands/specops/ContributeCommand.js +24 -32
  149. package/dist/scripts/cli/commands/specops/ContributeCommand.js.map +1 -1
  150. package/dist/scripts/cli/commands/specops/DiffCommand.js +3 -2
  151. package/dist/scripts/cli/commands/specops/DiffCommand.js.map +1 -1
  152. package/dist/scripts/cli/commands/specops/SyncCommand.js +4 -3
  153. package/dist/scripts/cli/commands/specops/SyncCommand.js.map +1 -1
  154. package/dist/scripts/docs/blocks.js +4 -4
  155. package/dist/scripts/docs/blocks.js.map +1 -1
  156. package/dist/scripts/docs/build-site.js +24 -9
  157. package/dist/scripts/docs/build-site.js.map +1 -1
  158. package/dist/scripts/docs/components.js +24 -24
  159. package/dist/scripts/docs/components.js.map +1 -1
  160. package/dist/scripts/docs/journey-storyboard.js +358 -0
  161. package/dist/scripts/docs/journey-storyboard.js.map +1 -0
  162. package/dist/scripts/docs/nav.js +120 -23
  163. package/dist/scripts/docs/nav.js.map +1 -1
  164. package/dist/scripts/docs/record-journey.js +376 -0
  165. package/dist/scripts/docs/record-journey.js.map +1 -0
  166. package/dist/scripts/docs/record-terminal.js +260 -43
  167. package/dist/scripts/docs/record-terminal.js.map +1 -1
  168. package/dist/scripts/docs/terminal-storyboard.js +151 -2
  169. package/dist/scripts/docs/terminal-storyboard.js.map +1 -1
  170. package/dist/scripts/draft/brief-setup.js +367 -0
  171. package/dist/scripts/draft/brief-setup.js.map +1 -0
  172. package/dist/scripts/draft/confined-agent.js +194 -0
  173. package/dist/scripts/draft/confined-agent.js.map +1 -0
  174. package/dist/scripts/draft/drafting-guide.js +147 -0
  175. package/dist/scripts/draft/drafting-guide.js.map +1 -0
  176. package/dist/scripts/gen_mcp_tools.js +4 -4
  177. package/dist/scripts/gen_mcp_tools.js.map +1 -1
  178. package/dist/scripts/harness/init.js +25 -16
  179. package/dist/scripts/harness/init.js.map +1 -1
  180. package/dist/scripts/harness/report.js +39 -40
  181. package/dist/scripts/harness/report.js.map +1 -1
  182. package/dist/scripts/harness/worktree-lock.js +2 -2
  183. package/dist/scripts/harness/worktree-lock.js.map +1 -1
  184. package/dist/scripts/lib/command.js +3 -2
  185. package/dist/scripts/lib/command.js.map +1 -1
  186. package/dist/scripts/lib/derived-writes.js +1 -1
  187. package/dist/scripts/lib/diagnostics.js +12 -16
  188. package/dist/scripts/lib/diagnostics.js.map +1 -1
  189. package/dist/scripts/lib/placeholders.js +4 -4
  190. package/dist/scripts/lib/placeholders.js.map +1 -1
  191. package/dist/scripts/lib/surface.js +33 -15
  192. package/dist/scripts/lib/surface.js.map +1 -1
  193. package/dist/scripts/lib/ui.js +356 -0
  194. package/dist/scripts/lib/ui.js.map +1 -0
  195. package/dist/scripts/merge-traceability.js +3 -3
  196. package/dist/scripts/pet/pet.js +331 -0
  197. package/dist/scripts/pet/pet.js.map +1 -0
  198. package/dist/scripts/pet.js +10 -0
  199. package/dist/scripts/pet.js.map +1 -0
  200. package/dist/scripts/plugin/gate-hook.js +1 -1
  201. package/dist/scripts/plugin/gate-hook.js.map +1 -1
  202. package/dist/scripts/schema/registry.js +2 -2
  203. package/dist/scripts/schema/registry.js.map +1 -1
  204. package/dist/scripts/specops/add.js +23 -32
  205. package/dist/scripts/specops/add.js.map +1 -1
  206. package/dist/scripts/specops/lock.js +4 -4
  207. package/dist/scripts/specops/lock.js.map +1 -1
  208. package/dist/scripts/specops/remove.js +15 -24
  209. package/dist/scripts/specops/remove.js.map +1 -1
  210. package/package.json +3 -2
  211. package/templates/base/AGENTS.md.tpl +6 -0
package/CHANGELOG.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- csda:allow-placeholders — release notes quote the {{VAR}} template syntax. -->
1
+ <!-- specgate:allow-placeholders — release notes quote the {{VAR}} template syntax. -->
2
2
  # Changelog
3
3
 
4
4
  Notable changes, newest first. Follows [Keep a Changelog](https://keepachangelog.com/)
@@ -8,6 +8,138 @@ The release process is in [`docs/release-process.md`](docs/release-process.md).
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
+ ## [0.19.1] — 2026-10-12
12
+
13
+ ### Fixed
14
+
15
+ - **On Windows, output to a log or a pipe printed ASCII symbols** (`v` for `✔`),
16
+ as if it were an old console window. Only a console window gets ASCII now;
17
+ a CI log is Unicode text like everywhere else. 0.19.0 was not published to
18
+ npm because its Windows E2E caught this.
19
+
20
+ ## [0.19.0] — 2026-10-12
21
+
22
+ ### Changed — breaking
23
+
24
+ - **One name everywhere: `csda` is gone** ([ADR-0032](docs/specs/adr/0032-one-name-everywhere.md)).
25
+ The on-disk format, kept under the tool's first name by ADR-0024, is now
26
+ `specgate` too: `<!-- specgate:trace … -->`, `specgate:value`,
27
+ `specgate:allow-placeholders`, `.specgate/`, `SPECGATE_*` environment
28
+ variables, `specgate_change_version` in `change.yaml`, the `specgate-matrix`
29
+ merge driver, and the Maven/Gradle coordinates `com.rsaglobaltech.specgate`.
30
+ The `csda` binary alias and the `csda_*` MCP tool names are removed. There is
31
+ no compatibility layer: a project on the old format fails `validate` with
32
+ `old_format` and the one-line migration to run.
33
+
34
+ ### Fixed
35
+
36
+ - **`specgate draft --agent "claude -p"` could never write** (#94): in print
37
+ mode Claude Code has no permission to edit, so it asked "Want to grant
38
+ permission…?", exited, and `draft` reported `draft_no_front_matter`. `draft`
39
+ now adds `--permission-mode acceptEdits` when the command brings no
40
+ permission flag of its own, and says so. An agent that runs and writes
41
+ nothing is told apart from a draft with findings, with the likely cause.
42
+ - **After `draft <module> --agent`, the next step was lost** (#96) at the end of
43
+ the agent's long output. A rule now marks where Specgate takes over, the
44
+ brief's modules show where each stands, and the next steps are numbered —
45
+ review, questions, archive, then the next module or `status`.
46
+
47
+ - **A second `draft <module> --agent` pass redrafted blind** (#98): the agent
48
+ may only edit, so it cannot run the checker, and its prompt carried the guide
49
+ but not the findings. It now gets the open findings, with their fixes. On a
50
+ real run with `claude -p`: 13 findings after the first pass, 0 after the
51
+ second.
52
+ - **Under `--agent`, the agent asked for permission to run `specgate draft`**
53
+ (#97), which Specgate runs itself when the agent finishes. The prompt says so.
54
+
55
+ ### Changed
56
+
57
+ - **A new look for the CLI, one design system for every command.** Each
58
+ command opens with `◆ specgate · <command>` and ends with one `Next` block, its
59
+ command alone on a line so it copies clean. `status` and `draft` show progress
60
+ bars; findings read `✖ message` with `fix:` under them; `check` and `done`
61
+ draw one line per stage and print what `validate` and the tests said only
62
+ when they fail. The harness draws one aligned line per attempt and
63
+ requirement, a report with a progress bar, and the branch to review as its
64
+ next step; `harness report` and `harness init` follow the same shapes. One palette (`scripts/lib/ui.ts`) replaces twenty copies:
65
+ truecolor where the terminal has it, 256 or 16 colours where not, none under
66
+ `NO_COLOR` or off a terminal, `FORCE_COLOR` honoured. Symbols are one column
67
+ wide; `SPECGATE_ASCII=1` swaps them for ASCII. Help icons are emoji that
68
+ always take two columns, so the names line up.
69
+ - **`validate` and the pack commands lost `❌ [ERROR]`, `💡 [FIX]`, `ℹ️ [INFO]`,
70
+ `⚠️ [WARN]`** for `✖`, an indented fix, `ℹ` and `▲`. The VS Code extension and
71
+ the pack registry, which read those lines, read both forms.
72
+
73
+ ### Added
74
+
75
+ - **Gato, the cat that keeps the gate** (`specgate pet`). A terminal pet whose
76
+ state is the project's: it grows from an egg to a crowned legend as
77
+ requirements close, falls sick on a red `check`, worries over unanswered
78
+ questions, sleeps when the gate has not run for a week, and keeps a streak of
79
+ green days. Whatever it says ends with the command `status` gives. A small
80
+ version sits at the foot of `status` on a terminal — never in a pipe, a log
81
+ or CI — and `specgate config set pet off` hides it.
82
+
83
+ - **A bare `specgate` inside a project shows where it stands** — `status`, with
84
+ its one next command — instead of the list of every command. Outside a
85
+ project it is still the help.
86
+
87
+ ## [0.18.0] — 2026-10-11
88
+
89
+ ### Added
90
+
91
+ - **`specgate draft` — from a plan to requirements, one command at a time.**
92
+ Save your plan or a client's brief as `docs/brief.md` and run
93
+ `specgate draft`: with no brief it says what a brief is and what a good one
94
+ says, and `--new-brief` writes one to fill in; with no front matter it
95
+ explains each field (`product`, `surfaces`, `actors`, `modules`) with an
96
+ example and the block to paste; with mistakes it says each one and its fix;
97
+ with a valid one it lists the modules, their state and the next one.
98
+ - **`specgate draft <module>`** opens the module as a change linked to the
99
+ brief, writes `DRAFTING.md` — everything your agent needs — and prints a
100
+ one-line prompt to paste into any agent. Run it again to check the draft
101
+ against the brief; it says what to fix, or that it is ready to archive.
102
+ - **`--agent "claude -p"`** hands the work to your agent on standard input (or
103
+ in a file, with `{prompt_file}`), undoes anything it writes outside the
104
+ draft, and checks the result. Without a module, the agent proposes the
105
+ brief's front matter and leaves the text below it untouched.
106
+ - **`/specgate:draft`**, installed by `agents init`, does the same from Claude
107
+ Code and the other agent tools.
108
+ - **[Write the brief](docs/start/write-the-brief.md)**, a new step-by-step
109
+ guide; the quickstart is now two journeys of five phases, every output
110
+ recorded from the CLI; and [Specgate or OpenSpec](docs/vs-openspec.md).
111
+ - **Seven proven domain packs, derived from the six pilots.** `ledger`,
112
+ `transfers`, `event-registration`, `clinical-record`, `appointment-booking`,
113
+ `shop-orders` and `time-attendance`: 65 requirements and 85 scenarios, each
114
+ implemented and tested by the product it came from (Spring Boot, Quarkus and
115
+ TypeScript stacks). Questions a pilot could not answer ship as *Needs
116
+ Clarification* — drug interaction alerts, shipping costs — instead of an
117
+ invented answer. Separate id ranges, so a project can install all seven.
118
+ Install them with `specops add` into a project made by `specgate init`;
119
+ `init --from-pack` does not handle a requirement with two scenarios yet.
120
+ - **`metadata.tier` and `metadata.provenance` in `pack.yaml` (schema 1.5.0).**
121
+ `proven` or `starter`; `pack lint` refuses a `proven` pack without a
122
+ provenance. The pack registry shows the tier on every card and lists proven
123
+ packs first.
124
+
125
+ ### Changed
126
+
127
+ - `init`, `status` and `--help` point to `specgate draft` when there is a
128
+ brief. A draft opened from a brief needs no `tasks.md` ticked before
129
+ archiving: its checklist is its gate.
130
+ - **The eleven existing packs are described as what they are: starter
131
+ examples.** They were called "curated domain packs"; each is four or five
132
+ generic Draft requirements and no product was built from one. The docs, the
133
+ README and the registry now say so (and `supply-chain.md`, which said ten).
134
+
135
+ ### Fixed
136
+
137
+ - `change archive` said the gate would fail until the tests existed; archived
138
+ requirements are Draft and the gate passes. It now names the next step (#92).
139
+ - `change author --artifact specs` never told the agent about the brief, the
140
+ assumptions or the open questions (#93); brief to draft took four commands
141
+ and a hand edit (#94); nothing said what a brief's front matter is (#95).
142
+
11
143
  ## [0.17.10] — 2026-10-11
12
144
 
13
145
  ### Added
package/README.md CHANGED
@@ -82,9 +82,9 @@ and writes the feature files, so a merged proposal cannot quietly become
82
82
  undone work.
83
83
  → [Your team's first pull request](docs/first-pr.md) · [Reviewing changes](docs/reviewing-changes.md)
84
84
 
85
- **From a brief, or from OpenSpec.** `specgate draft --check` holds a draft
86
- written from a client's brief to eleven rules — scenarios per actor and surface,
87
- sourced laws, every value in the brief or listed as an assumption, open
85
+ **From a brief, or from OpenSpec.** Save your plan as `docs/brief.md`, run
86
+ `specgate draft`: module by module, it briefs your agent and holds the draft
87
+ to eleven rules — scenarios per actor and surface, sourced laws, every value in the brief or listed as an assumption, open
88
88
  questions that block, ids each actor can reach. Teams on OpenSpec keep it: `specgate verify` fails while
89
89
  a change claims a scenario no test names.
90
90
  → [A new project, step by step](docs/new-project.md) · [From a client brief](docs/from-a-brief.md) · [Already on OpenSpec](docs/openspec.md)
@@ -99,7 +99,7 @@ each. The MCP server ships in the package: `specgate mcp install --client claude
99
99
  **Domain knowledge as a dependency.** A pack is a versioned, schema-validated
100
100
  domain model. Install it, pin it, upgrade it deliberately — and review the
101
101
  upgrade as intent with `specops diff --as-change`, not as a file diff.
102
- → [Domain packs](docs/domain-packs.md) · [Supply chain](docs/supply-chain.md)
102
+ → [Domain packs: 7 proven in the pilots, 11 starter examples](docs/domain-packs.md) · [Supply chain](docs/supply-chain.md)
103
103
 
104
104
  **Unattended delivery.** `specgate harness run` drives plan → agent → verify →
105
105
  done for every pending requirement, each in its own git worktree; it never
package/bin/specgate.ts CHANGED
@@ -10,6 +10,7 @@ const packageJson = require(path.join(rootDir, "package.json"));
10
10
  const VERSION: string = packageJson.version || "0.0.0";
11
11
  import { ICommand } from "../scripts/lib/command";
12
12
  import { SURFACE, helpRows, coreHelpRows, hiddenCommandCount } from "../scripts/lib/surface";
13
+ import { findProjectRoot } from "../scripts/lib/project-root";
13
14
 
14
15
  /** Resolve a registry row's `script` segments to a path under dist/scripts. */
15
16
  function resolveScript(segments: string[]): string {
@@ -18,57 +19,50 @@ function resolveScript(segments: string[]): string {
18
19
 
19
20
  // ── Pretty output helpers ─────────────────────────────────────────────────────────
20
21
 
21
- const COLOR_ENABLED =
22
- process.stdout.isTTY && process.env.NO_COLOR === undefined && process.env.TERM !== "dumb";
23
-
24
- const c = {
25
- reset: COLOR_ENABLED ? "\x1b[0m" : "",
26
- bold: COLOR_ENABLED ? "\x1b[1m" : "",
27
- dim: COLOR_ENABLED ? "\x1b[2m" : "",
28
- red: COLOR_ENABLED ? "\x1b[31m" : "",
29
- green: COLOR_ENABLED ? "\x1b[32m" : "",
30
- yellow: COLOR_ENABLED ? "\x1b[33m" : "",
31
- blue: COLOR_ENABLED ? "\x1b[34m" : "",
32
- magenta: COLOR_ENABLED ? "\x1b[35m" : "",
33
- cyan: COLOR_ENABLED ? "\x1b[36m" : "",
34
- };
22
+ import { c, sym } from "../scripts/lib/ui";
35
23
 
36
24
  function info(msg: string): void {
37
- process.stdout.write(`${c.cyan}ℹ${c.reset} ${msg}\n`);
25
+ process.stdout.write(` ${c.note}${sym.info}${c.reset} ${msg}\n`);
38
26
  }
39
27
 
40
28
  function error(msg: string): void {
41
- process.stderr.write(`${c.red}✖${c.reset} ${msg}\n`);
29
+ process.stderr.write(` ${c.bad}${sym.fail}${c.reset} ${msg}\n`);
42
30
  }
43
31
 
44
32
  function banner(): string {
45
33
  return (
46
34
  `\n` +
47
- ` ${c.bold}${c.cyan}🧭 specgate${c.reset} ${c.dim}v${VERSION}${c.reset}\n` +
48
- ` ${c.dim}Specs as executable contracts — requirements, scenarios and traceability that CI enforces.${c.reset}\n`
35
+ ` ${c.brand}${sym.brand}${c.reset} ${c.bold}specgate${c.reset} ${c.muted}v${VERSION}${c.reset}\n` +
36
+ ` ${c.muted}Specs as executable contracts — requirements, scenarios and traceability that CI enforces.${c.reset}\n`
49
37
  );
50
38
  }
51
39
 
40
+ /** `Every day ────────` — the help's sections, in the same shape as every command's. */
52
41
  function section(title: string): string {
53
- return `\n ${c.bold}${title}${c.reset}\n`;
42
+ const rule = sym.line.repeat(Math.max(4, 44 - Array.from(title).length));
43
+ return `\n ${c.bold}${title}${c.reset} ${c.muted}${rule}${c.reset}\n`;
54
44
  }
55
45
 
46
+ /**
47
+ * One command of the help: its icon, its name, what it does. Icons are emoji
48
+ * with default emoji presentation, so every one takes two columns and the
49
+ * names line up (`surface.ts` keeps to that set).
50
+ */
56
51
  function cmd(emoji: string, name: string, summary: string, pad = 16): string {
57
- // Use Array.from to count code points (emojis with surrogate pairs count as 1)
58
52
  const visible = Array.from(name).length;
59
53
  const padding = " ".repeat(Math.max(1, pad - visible));
60
- return ` ${c.green}${emoji}${c.reset} ${c.green}${name}${c.reset}${padding}${c.dim}${summary}${c.reset}\n`;
54
+ return ` ${emoji} ${c.accent}${name}${c.reset}${padding}${c.muted}${summary}${c.reset}\n`;
61
55
  }
62
56
 
63
57
  function flag(name: string, summary: string, pad = 18): string {
64
58
  const visible = Array.from(name).length;
65
59
  const padding = " ".repeat(Math.max(1, pad - visible));
66
- return ` ${c.green}${name}${c.reset}${padding}${c.dim}${summary}${c.reset}\n`;
60
+ return ` ${c.accent}${name}${c.reset}${padding}${c.muted}${summary}${c.reset}\n`;
67
61
  }
68
62
 
69
63
  function example(line: string, comment?: string): string {
70
- const prefix = comment ? ` ${c.dim}# ${comment}${c.reset}\n` : "";
71
- return `${prefix} ${c.yellow}$${c.reset} ${line}\n`;
64
+ const prefix = comment ? ` ${c.muted}# ${comment}${c.reset}\n` : "";
65
+ return `${prefix} ${c.muted}$${c.reset} ${line}\n`;
72
66
  }
73
67
 
74
68
  /**
@@ -143,16 +137,16 @@ function renderGroups(groups: any[]): string {
143
137
  function usageCore() {
144
138
  process.stdout.write(
145
139
  banner() +
146
- section("USAGE") +
147
- ` ${c.cyan}specgate${c.reset} ${c.bold}<command>${c.reset} [options]\n` +
148
- ` ${c.dim}Run ‘<command> --help’ for per-command details.${c.reset}\n` +
140
+ section("Usage") +
141
+ ` ${c.accent}specgate${c.reset} ${c.bold}<command>${c.reset} [options] ${c.muted}specgate <command> --help for its options${c.reset}\n` +
149
142
  renderGroups(coreHelpRows()) +
150
- section("MORE") +
151
- ` ${c.dim}${hiddenCommandCount()} more commands cover packs, automation, agents and reporting.${c.reset}\n` +
152
- ` ${c.green}specgate --help --all${c.reset}${c.dim} show every command${c.reset}\n` +
153
- ` ${c.green}specgate config set profile full${c.reset}${c.dim} make that the default${c.reset}\n` +
154
- section("EXAMPLES") +
143
+ section("More") +
144
+ ` ${c.muted}${hiddenCommandCount()} more commands cover packs, automation, agents and reporting.${c.reset}\n` +
145
+ ` ${c.accent}specgate --help --all${c.reset}${c.muted} show every command${c.reset}\n` +
146
+ ` ${c.accent}specgate config set profile full${c.reset}${c.muted} make that the default${c.reset}\n` +
147
+ section("Examples") +
155
148
  example(`npx @rsaglobaltech/specgate@latest init`, "Existing repo or empty directory") +
149
+ example(`specgate draft`, "Your plan is in docs/brief.md") +
156
150
  example(`specgate status`, "Start of day") +
157
151
  example(`specgate check`, "Before a pull request") +
158
152
  "\n"
@@ -160,13 +154,13 @@ function usageCore() {
160
154
  }
161
155
 
162
156
  /**
163
- * `core` unless the project says otherwise. Read from .csda/config.json so a
157
+ * `core` unless the project says otherwise. Read from .specgate/config.json so a
164
158
  * team that lives in the full surface is not re-narrowed on every invocation.
165
159
  */
166
160
  function helpProfile(): string {
167
- if (process.env.CSDA_PROFILE) return process.env.CSDA_PROFILE;
161
+ if (process.env.SPECGATE_PROFILE) return process.env.SPECGATE_PROFILE;
168
162
  try {
169
- const raw = fs.readFileSync(path.join(process.cwd(), ".csda", "config.json"), "utf8");
163
+ const raw = fs.readFileSync(path.join(process.cwd(), ".specgate", "config.json"), "utf8");
170
164
  const parsed = JSON.parse(raw);
171
165
  if (parsed && typeof parsed.profile === "string") return parsed.profile;
172
166
  } catch {
@@ -176,13 +170,13 @@ function helpProfile(): string {
176
170
  }
177
171
 
178
172
  function groupUsage(row: any) {
179
- let out = `\n ${c.bold}specgate ${row.name}${c.reset} <sub-command> [options]\n`;
180
- out += section("SUB-COMMANDS");
173
+ let out = `\n ${c.brand}${sym.brand}${c.reset} ${c.bold}specgate ${row.name}${c.reset} <sub-command> [options]\n`;
174
+ out += section("Sub-commands");
181
175
  for (const s of row.subcommands) {
182
176
  const summary = (s.help && s.help.summary) || (row.help && row.help.summary) || "";
183
177
  out += cmd((s.help && s.help.icon) || "·", `${row.name} ${s.name}`, summary, 20);
184
178
  }
185
- out += `\n ${c.dim}Run ‘specgate ${row.name} <sub-command> --help’ for its own options.${c.reset}\n\n`;
179
+ out += `\n ${c.muted}specgate ${row.name} <sub-command> --help for its own options${c.reset}\n\n`;
186
180
  process.stdout.write(out);
187
181
  }
188
182
 
@@ -195,19 +189,18 @@ function usage(opts?: { all?: boolean }) {
195
189
  function usageFull() {
196
190
  process.stdout.write(
197
191
  banner() +
198
- section("USAGE") +
199
- ` ${c.cyan}specgate${c.reset} ${c.bold}<command>${c.reset} [options]\n` +
200
- ` ${c.dim}Run ‘<command> --help’ for per-command details.${c.reset}\n` +
192
+ section("Usage") +
193
+ ` ${c.accent}specgate${c.reset} ${c.bold}<command>${c.reset} [options] ${c.muted}specgate <command> --help for its options${c.reset}\n` +
201
194
  renderGroups(helpRows()) +
202
- section("GLOBAL FLAGS") +
195
+ section("Global flags") +
203
196
  flag("-h, --help", "Show this help.") +
204
197
  flag("-v, --version", "Show CLI version.") +
205
- section("EXAMPLES") +
198
+ section("Examples") +
206
199
  EXAMPLES +
207
- section("LEARN MORE") +
208
- ` ${c.dim}📖 How-to guide ${c.reset}${c.blue}https://github.com/rsaglobaltech/specgate/blob/main/docs/how-to.md${c.reset}\n` +
209
- ` ${c.dim}🌐 Documentation ${c.reset}${c.blue}https://rsaglobaltech.github.io/specgate/${c.reset}\n` +
210
- ` ${c.dim}🪲 Report a bug ${c.reset}${c.blue}https://github.com/rsaglobaltech/specgate/issues${c.reset}\n` +
200
+ section("Learn more") +
201
+ ` 📖 ${c.muted}How-to guide ${c.reset}${c.underline}https://github.com/rsaglobaltech/specgate/blob/main/docs/how-to.md${c.reset}\n` +
202
+ ` 🌐 ${c.muted}Documentation ${c.reset}${c.underline}https://rsaglobaltech.github.io/specgate/${c.reset}\n` +
203
+ ` 🐞 ${c.muted}Report a bug ${c.reset}${c.underline}https://github.com/rsaglobaltech/specgate/issues${c.reset}\n` +
211
204
  `\n`
212
205
  );
213
206
  }
@@ -247,6 +240,14 @@ export class CreateSpecDrivenAppCommand implements ICommand {
247
240
  public execute(args: string[] = []): void {
248
241
  args = args.length ? args : process.argv.slice(2);
249
242
 
243
+ // Inside a project, a bare `specgate` answers "where am I, and what next?"
244
+ // — the question people have when they type it — rather than the list of
245
+ // every command (#96). Outside one, the help is the useful answer.
246
+ if (args.length === 0 && findProjectRoot(process.cwd())) {
247
+ process.env.SPECGATE_BARE = "1";
248
+ args = ["status"];
249
+ }
250
+
250
251
  if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
251
252
  usage({ all: args.includes("--all") });
252
253
  process.exit(0);
@@ -43,51 +43,47 @@ const distScripts = path.join(__dirname, "..", "scripts");
43
43
  const packageJson = require(path.join(rootDir, "package.json"));
44
44
  const VERSION = packageJson.version || "0.0.0";
45
45
  const surface_1 = require("../scripts/lib/surface");
46
+ const project_root_1 = require("../scripts/lib/project-root");
46
47
  /** Resolve a registry row's `script` segments to a path under dist/scripts. */
47
48
  function resolveScript(segments) {
48
49
  return path.join(distScripts, ...segments);
49
50
  }
50
51
  // ── Pretty output helpers ─────────────────────────────────────────────────────────
51
- const COLOR_ENABLED = process.stdout.isTTY && process.env.NO_COLOR === undefined && process.env.TERM !== "dumb";
52
- const c = {
53
- reset: COLOR_ENABLED ? "\x1b[0m" : "",
54
- bold: COLOR_ENABLED ? "\x1b[1m" : "",
55
- dim: COLOR_ENABLED ? "\x1b[2m" : "",
56
- red: COLOR_ENABLED ? "\x1b[31m" : "",
57
- green: COLOR_ENABLED ? "\x1b[32m" : "",
58
- yellow: COLOR_ENABLED ? "\x1b[33m" : "",
59
- blue: COLOR_ENABLED ? "\x1b[34m" : "",
60
- magenta: COLOR_ENABLED ? "\x1b[35m" : "",
61
- cyan: COLOR_ENABLED ? "\x1b[36m" : "",
62
- };
52
+ const ui_1 = require("../scripts/lib/ui");
63
53
  function info(msg) {
64
- process.stdout.write(`${c.cyan}ℹ${c.reset} ${msg}\n`);
54
+ process.stdout.write(` ${ui_1.c.note}${ui_1.sym.info}${ui_1.c.reset} ${msg}\n`);
65
55
  }
66
56
  function error(msg) {
67
- process.stderr.write(`${c.red}✖${c.reset} ${msg}\n`);
57
+ process.stderr.write(` ${ui_1.c.bad}${ui_1.sym.fail}${ui_1.c.reset} ${msg}\n`);
68
58
  }
69
59
  function banner() {
70
60
  return (`\n` +
71
- ` ${c.bold}${c.cyan}🧭 specgate${c.reset} ${c.dim}v${VERSION}${c.reset}\n` +
72
- ` ${c.dim}Specs as executable contracts — requirements, scenarios and traceability that CI enforces.${c.reset}\n`);
61
+ ` ${ui_1.c.brand}${ui_1.sym.brand}${ui_1.c.reset} ${ui_1.c.bold}specgate${ui_1.c.reset} ${ui_1.c.muted}v${VERSION}${ui_1.c.reset}\n` +
62
+ ` ${ui_1.c.muted}Specs as executable contracts — requirements, scenarios and traceability that CI enforces.${ui_1.c.reset}\n`);
73
63
  }
64
+ /** `Every day ────────` — the help's sections, in the same shape as every command's. */
74
65
  function section(title) {
75
- return `\n ${c.bold}${title}${c.reset}\n`;
66
+ const rule = ui_1.sym.line.repeat(Math.max(4, 44 - Array.from(title).length));
67
+ return `\n ${ui_1.c.bold}${title}${ui_1.c.reset} ${ui_1.c.muted}${rule}${ui_1.c.reset}\n`;
76
68
  }
69
+ /**
70
+ * One command of the help: its icon, its name, what it does. Icons are emoji
71
+ * with default emoji presentation, so every one takes two columns and the
72
+ * names line up (`surface.ts` keeps to that set).
73
+ */
77
74
  function cmd(emoji, name, summary, pad = 16) {
78
- // Use Array.from to count code points (emojis with surrogate pairs count as 1)
79
75
  const visible = Array.from(name).length;
80
76
  const padding = " ".repeat(Math.max(1, pad - visible));
81
- return ` ${c.green}${emoji}${c.reset} ${c.green}${name}${c.reset}${padding}${c.dim}${summary}${c.reset}\n`;
77
+ return ` ${emoji} ${ui_1.c.accent}${name}${ui_1.c.reset}${padding}${ui_1.c.muted}${summary}${ui_1.c.reset}\n`;
82
78
  }
83
79
  function flag(name, summary, pad = 18) {
84
80
  const visible = Array.from(name).length;
85
81
  const padding = " ".repeat(Math.max(1, pad - visible));
86
- return ` ${c.green}${name}${c.reset}${padding}${c.dim}${summary}${c.reset}\n`;
82
+ return ` ${ui_1.c.accent}${name}${ui_1.c.reset}${padding}${ui_1.c.muted}${summary}${ui_1.c.reset}\n`;
87
83
  }
88
84
  function example(line, comment) {
89
- const prefix = comment ? ` ${c.dim}# ${comment}${c.reset}\n` : "";
90
- return `${prefix} ${c.yellow}$${c.reset} ${line}\n`;
85
+ const prefix = comment ? ` ${ui_1.c.muted}# ${comment}${ui_1.c.reset}\n` : "";
86
+ return `${prefix} ${ui_1.c.muted}$${ui_1.c.reset} ${line}\n`;
91
87
  }
92
88
  /**
93
89
  * The worked examples of `--help --all`. Prose, not surface: they are chosen
@@ -124,29 +120,29 @@ function renderGroups(groups) {
124
120
  }
125
121
  function usageCore() {
126
122
  process.stdout.write(banner() +
127
- section("USAGE") +
128
- ` ${c.cyan}specgate${c.reset} ${c.bold}<command>${c.reset} [options]\n` +
129
- ` ${c.dim}Run ‘<command> --help’ for per-command details.${c.reset}\n` +
123
+ section("Usage") +
124
+ ` ${ui_1.c.accent}specgate${ui_1.c.reset} ${ui_1.c.bold}<command>${ui_1.c.reset} [options] ${ui_1.c.muted}specgate <command> --help for its options${ui_1.c.reset}\n` +
130
125
  renderGroups((0, surface_1.coreHelpRows)()) +
131
- section("MORE") +
132
- ` ${c.dim}${(0, surface_1.hiddenCommandCount)()} more commands cover packs, automation, agents and reporting.${c.reset}\n` +
133
- ` ${c.green}specgate --help --all${c.reset}${c.dim} show every command${c.reset}\n` +
134
- ` ${c.green}specgate config set profile full${c.reset}${c.dim} make that the default${c.reset}\n` +
135
- section("EXAMPLES") +
126
+ section("More") +
127
+ ` ${ui_1.c.muted}${(0, surface_1.hiddenCommandCount)()} more commands cover packs, automation, agents and reporting.${ui_1.c.reset}\n` +
128
+ ` ${ui_1.c.accent}specgate --help --all${ui_1.c.reset}${ui_1.c.muted} show every command${ui_1.c.reset}\n` +
129
+ ` ${ui_1.c.accent}specgate config set profile full${ui_1.c.reset}${ui_1.c.muted} make that the default${ui_1.c.reset}\n` +
130
+ section("Examples") +
136
131
  example(`npx @rsaglobaltech/specgate@latest init`, "Existing repo or empty directory") +
132
+ example(`specgate draft`, "Your plan is in docs/brief.md") +
137
133
  example(`specgate status`, "Start of day") +
138
134
  example(`specgate check`, "Before a pull request") +
139
135
  "\n");
140
136
  }
141
137
  /**
142
- * `core` unless the project says otherwise. Read from .csda/config.json so a
138
+ * `core` unless the project says otherwise. Read from .specgate/config.json so a
143
139
  * team that lives in the full surface is not re-narrowed on every invocation.
144
140
  */
145
141
  function helpProfile() {
146
- if (process.env.CSDA_PROFILE)
147
- return process.env.CSDA_PROFILE;
142
+ if (process.env.SPECGATE_PROFILE)
143
+ return process.env.SPECGATE_PROFILE;
148
144
  try {
149
- const raw = fs.readFileSync(path.join(process.cwd(), ".csda", "config.json"), "utf8");
145
+ const raw = fs.readFileSync(path.join(process.cwd(), ".specgate", "config.json"), "utf8");
150
146
  const parsed = JSON.parse(raw);
151
147
  if (parsed && typeof parsed.profile === "string")
152
148
  return parsed.profile;
@@ -157,13 +153,13 @@ function helpProfile() {
157
153
  return "core";
158
154
  }
159
155
  function groupUsage(row) {
160
- let out = `\n ${c.bold}specgate ${row.name}${c.reset} <sub-command> [options]\n`;
161
- out += section("SUB-COMMANDS");
156
+ let out = `\n ${ui_1.c.brand}${ui_1.sym.brand}${ui_1.c.reset} ${ui_1.c.bold}specgate ${row.name}${ui_1.c.reset} <sub-command> [options]\n`;
157
+ out += section("Sub-commands");
162
158
  for (const s of row.subcommands) {
163
159
  const summary = (s.help && s.help.summary) || (row.help && row.help.summary) || "";
164
160
  out += cmd((s.help && s.help.icon) || "·", `${row.name} ${s.name}`, summary, 20);
165
161
  }
166
- out += `\n ${c.dim}Run ‘specgate ${row.name} <sub-command> --help’ for its own options.${c.reset}\n\n`;
162
+ out += `\n ${ui_1.c.muted}specgate ${row.name} <sub-command> --help for its own options${ui_1.c.reset}\n\n`;
167
163
  process.stdout.write(out);
168
164
  }
169
165
  function usage(opts) {
@@ -175,19 +171,18 @@ function usage(opts) {
175
171
  }
176
172
  function usageFull() {
177
173
  process.stdout.write(banner() +
178
- section("USAGE") +
179
- ` ${c.cyan}specgate${c.reset} ${c.bold}<command>${c.reset} [options]\n` +
180
- ` ${c.dim}Run ‘<command> --help’ for per-command details.${c.reset}\n` +
174
+ section("Usage") +
175
+ ` ${ui_1.c.accent}specgate${ui_1.c.reset} ${ui_1.c.bold}<command>${ui_1.c.reset} [options] ${ui_1.c.muted}specgate <command> --help for its options${ui_1.c.reset}\n` +
181
176
  renderGroups((0, surface_1.helpRows)()) +
182
- section("GLOBAL FLAGS") +
177
+ section("Global flags") +
183
178
  flag("-h, --help", "Show this help.") +
184
179
  flag("-v, --version", "Show CLI version.") +
185
- section("EXAMPLES") +
180
+ section("Examples") +
186
181
  EXAMPLES +
187
- section("LEARN MORE") +
188
- ` ${c.dim}📖 How-to guide ${c.reset}${c.blue}https://github.com/rsaglobaltech/specgate/blob/main/docs/how-to.md${c.reset}\n` +
189
- ` ${c.dim}🌐 Documentation ${c.reset}${c.blue}https://rsaglobaltech.github.io/specgate/${c.reset}\n` +
190
- ` ${c.dim}🪲 Report a bug ${c.reset}${c.blue}https://github.com/rsaglobaltech/specgate/issues${c.reset}\n` +
182
+ section("Learn more") +
183
+ ` 📖 ${ui_1.c.muted}How-to guide ${ui_1.c.reset}${ui_1.c.underline}https://github.com/rsaglobaltech/specgate/blob/main/docs/how-to.md${ui_1.c.reset}\n` +
184
+ ` 🌐 ${ui_1.c.muted}Documentation ${ui_1.c.reset}${ui_1.c.underline}https://rsaglobaltech.github.io/specgate/${ui_1.c.reset}\n` +
185
+ ` 🐞 ${ui_1.c.muted}Report a bug ${ui_1.c.reset}${ui_1.c.underline}https://github.com/rsaglobaltech/specgate/issues${ui_1.c.reset}\n` +
191
186
  `\n`);
192
187
  }
193
188
  function ensureExecutable(scriptPath) {
@@ -218,6 +213,13 @@ function runNodeScript(scriptPath, args) {
218
213
  class CreateSpecDrivenAppCommand {
219
214
  execute(args = []) {
220
215
  args = args.length ? args : process.argv.slice(2);
216
+ // Inside a project, a bare `specgate` answers "where am I, and what next?"
217
+ // — the question people have when they type it — rather than the list of
218
+ // every command (#96). Outside one, the help is the useful answer.
219
+ if (args.length === 0 && (0, project_root_1.findProjectRoot)(process.cwd())) {
220
+ process.env.SPECGATE_BARE = "1";
221
+ args = ["status"];
222
+ }
221
223
  if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
222
224
  usage({ all: args.includes("--all") });
223
225
  process.exit(0);
@@ -1 +1 @@
1
- {"version":3,"file":"specgate.js","sourceRoot":"","sources":["../../bin/specgate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"specgate.js","sourceRoot":"","sources":["../../bin/specgate.ts"],"names":[],"mappings":"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"}
@@ -66,7 +66,11 @@ class ArchiveChangeUseCase {
66
66
  }
67
67
  const config = this.repo.readConfig(changeId);
68
68
  const progress = this.repo.getTaskProgress(changeId);
69
- if (progress.remaining > 0 && !o.force) {
69
+ // A draft written from a brief has no implementation tasks: its checklist
70
+ // (`specgate draft`) is what says it is ready, and `change archive`
71
+ // already refuses one that is not (#57). Asking the person to also tick
72
+ // boxes nobody wrote was a second gate with nothing behind it (#94).
73
+ if (progress.remaining > 0 && !o.force && !o.draft) {
70
74
  plan.diagnostics.push((0, Diagnostic_1.error)("archive_tasks_incomplete", `Change "${changeId}" still has ${progress.remaining} unchecked task(s).`, {
71
75
  target: changeId,
72
76
  fix: "Finish the tasks, or pass --force to archive anyway.",
@@ -177,7 +181,7 @@ class ArchiveChangeUseCase {
177
181
  // belongs to the delta; otherwise the scenarios still missing are named.
178
182
  if (!modified || bringsFeatures)
179
183
  continue;
180
- const inFile = (0, GherkinTags_1.csdaTagsIn)(existing).filter((t) => /^@SCN-/.test(t));
184
+ const inFile = (0, GherkinTags_1.specgateTagsIn)(existing).filter((t) => /^@SCN-/.test(t));
181
185
  const inDelta = (req.scenarios || [])
182
186
  .map((sc) => (sc.id ? `@${sc.id}` : null))
183
187
  .filter(Boolean);