@rsaglobaltech/specgate 0.20.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/CHANGELOG.md +208 -0
  2. package/README.md +31 -31
  3. package/bin/specgate.ts +25 -19
  4. package/dist/bin/specgate.js +15 -10
  5. package/dist/bin/specgate.js.map +1 -1
  6. package/dist/packages/core/src/application/AddRequirementUseCase.js +11 -1
  7. package/dist/packages/core/src/application/AddRequirementUseCase.js.map +1 -1
  8. package/dist/packages/core/src/application/ArchiveChangeUseCase.js +7 -2
  9. package/dist/packages/core/src/application/ArchiveChangeUseCase.js.map +1 -1
  10. package/dist/packages/core/src/application/ValidateProjectUseCase.js +9 -3
  11. package/dist/packages/core/src/application/ValidateProjectUseCase.js.map +1 -1
  12. package/dist/packages/core/src/domain/ArchivePlan.js.map +1 -1
  13. package/dist/packages/core/src/domain/BriefCards.js +320 -0
  14. package/dist/packages/core/src/domain/BriefCards.js.map +1 -0
  15. package/dist/packages/core/src/domain/ChangeTemplates.js +19 -0
  16. package/dist/packages/core/src/domain/ChangeTemplates.js.map +1 -1
  17. package/dist/packages/core/src/domain/DeltaSpec.js +14 -7
  18. package/dist/packages/core/src/domain/DeltaSpec.js.map +1 -1
  19. package/dist/packages/core/src/domain/DerivedMatrix.js +2 -2
  20. package/dist/packages/core/src/domain/DerivedMatrix.js.map +1 -1
  21. package/dist/packages/core/src/domain/Diagnostic.js.map +1 -1
  22. package/dist/packages/core/src/domain/DoneVerification.js +3 -3
  23. package/dist/packages/core/src/domain/DoneVerification.js.map +1 -1
  24. package/dist/packages/core/src/domain/DraftChecklist.js +6 -2
  25. package/dist/packages/core/src/domain/DraftChecklist.js.map +1 -1
  26. package/dist/packages/core/src/domain/GherkinQuality.js +5 -2
  27. package/dist/packages/core/src/domain/GherkinQuality.js.map +1 -1
  28. package/dist/packages/core/src/domain/HarnessEvents.js +129 -0
  29. package/dist/packages/core/src/domain/HarnessEvents.js.map +1 -0
  30. package/dist/packages/core/src/domain/HarnessRun.js.map +1 -1
  31. package/dist/packages/core/src/domain/Language.js +5 -2
  32. package/dist/packages/core/src/domain/Language.js.map +1 -1
  33. package/dist/packages/core/src/domain/PackContribution.js.map +1 -1
  34. package/dist/packages/core/src/domain/PackDelta.js +5 -2
  35. package/dist/packages/core/src/domain/PackDelta.js.map +1 -1
  36. package/dist/packages/core/src/domain/PackSpec.js +16 -2
  37. package/dist/packages/core/src/domain/PackSpec.js.map +1 -1
  38. package/dist/packages/core/src/domain/QuotedText.js +41 -0
  39. package/dist/packages/core/src/domain/QuotedText.js.map +1 -0
  40. package/dist/packages/core/src/domain/RequirementPlan.js.map +1 -1
  41. package/dist/packages/core/src/domain/SpecParser.js +2 -9
  42. package/dist/packages/core/src/domain/SpecParser.js.map +1 -1
  43. package/dist/packages/core/src/domain/TicketText.js +337 -0
  44. package/dist/packages/core/src/domain/TicketText.js.map +1 -0
  45. package/dist/packages/core/src/domain/TraceabilityFormat.js.map +1 -1
  46. package/dist/packages/core/src/domain/TraceabilityMatrix.js +3 -3
  47. package/dist/packages/core/src/domain/TraceabilityMatrix.js.map +1 -1
  48. package/dist/packages/core/src/domain/YamlLite.js +3 -0
  49. package/dist/packages/core/src/domain/YamlLite.js.map +1 -1
  50. package/dist/packages/core/src/infrastructure/ChangeWorkspace.js +7 -3
  51. package/dist/packages/core/src/infrastructure/ChangeWorkspace.js.map +1 -1
  52. package/dist/packages/core/src/infrastructure/ConsoleReporter.js.map +1 -1
  53. package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js +1 -0
  54. package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js.map +1 -1
  55. package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js +3 -1
  56. package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js.map +1 -1
  57. package/dist/packages/core/src/infrastructure/DiskPackRepository.js +0 -2
  58. package/dist/packages/core/src/infrastructure/DiskPackRepository.js.map +1 -1
  59. package/dist/packages/core/src/infrastructure/DiskRequirementGraphRepository.js.map +1 -1
  60. package/dist/packages/core/src/infrastructure/GitContributionStager.js +0 -4
  61. package/dist/packages/core/src/infrastructure/GitContributionStager.js.map +1 -1
  62. package/dist/packages/core/src/infrastructure/GitMergeDriver.js +0 -3
  63. package/dist/packages/core/src/infrastructure/GitMergeDriver.js.map +1 -1
  64. package/dist/packages/core/src/infrastructure/HarnessConfigFile.js +7 -13
  65. package/dist/packages/core/src/infrastructure/HarnessConfigFile.js.map +1 -1
  66. package/dist/packages/core/src/infrastructure/IdsAcrossBranches.js +48 -0
  67. package/dist/packages/core/src/infrastructure/IdsAcrossBranches.js.map +1 -0
  68. package/dist/packages/core/src/infrastructure/PackChangeDeposit.js.map +1 -1
  69. package/dist/packages/core/src/infrastructure/RemotePackResolver.js +0 -7
  70. package/dist/packages/core/src/infrastructure/RemotePackResolver.js.map +1 -1
  71. package/dist/packages/core/src/infrastructure/SpecopsConfigFile.js.map +1 -1
  72. package/dist/packages/core/test/unit/declared-artifacts.test.js +6 -2
  73. package/dist/packages/core/test/unit/declared-artifacts.test.js.map +1 -1
  74. package/dist/packages/core/test/unit/derived-matrix.test.js +3 -0
  75. package/dist/packages/core/test/unit/derived-matrix.test.js.map +1 -1
  76. package/dist/packages/core/test/unit/done-verification.test.js +3 -0
  77. package/dist/packages/core/test/unit/done-verification.test.js.map +1 -1
  78. package/dist/packages/core/test/unit/matrix-dependencies.test.js.map +1 -1
  79. package/dist/packages/core/test/unit/reconciliation.test.js.map +1 -1
  80. package/dist/packages/core/test/unit/requirement-readiness.test.js +2 -2
  81. package/dist/packages/core/test/unit/requirement-readiness.test.js.map +1 -1
  82. package/dist/packages/core/test/unit/resume-state.test.js +4 -1
  83. package/dist/packages/core/test/unit/resume-state.test.js.map +1 -1
  84. package/dist/packages/core/test/unit/run-budget.test.js +3 -0
  85. package/dist/packages/core/test/unit/run-budget.test.js.map +1 -1
  86. package/dist/packages/core/test/unit/untouched-delta.test.js +52 -0
  87. package/dist/packages/core/test/unit/untouched-delta.test.js.map +1 -0
  88. package/dist/packages/core/test/unit/validate-project.test.js +6 -2
  89. package/dist/packages/core/test/unit/validate-project.test.js.map +1 -1
  90. package/dist/packages/mcp-spec-driven/src/server.js +4 -3
  91. package/dist/packages/mcp-spec-driven/src/server.js.map +1 -1
  92. package/dist/packages/mcp-spec-driven/src/tools.js.map +1 -1
  93. package/dist/scripts/agents/commands.js +52 -38
  94. package/dist/scripts/agents/commands.js.map +1 -1
  95. package/dist/scripts/agents/contract-file.js +44 -0
  96. package/dist/scripts/agents/contract-file.js.map +1 -1
  97. package/dist/scripts/agents/detect.js.map +1 -1
  98. package/dist/scripts/agents/init.js.map +1 -1
  99. package/dist/scripts/alm/cli.js +16 -5
  100. package/dist/scripts/alm/cli.js.map +1 -1
  101. package/dist/scripts/alm/core.js +1 -0
  102. package/dist/scripts/alm/core.js.map +1 -1
  103. package/dist/scripts/alm/port.js +1 -1
  104. package/dist/scripts/alm/port.js.map +1 -1
  105. package/dist/scripts/alm/providers/http-client.js +46 -3
  106. package/dist/scripts/alm/providers/http-client.js.map +1 -1
  107. package/dist/scripts/alm/providers/jira.js +108 -32
  108. package/dist/scripts/alm/providers/jira.js.map +1 -1
  109. package/dist/scripts/apply.js +9 -0
  110. package/dist/scripts/apply.js.map +1 -0
  111. package/dist/scripts/archive.js +9 -0
  112. package/dist/scripts/archive.js.map +1 -0
  113. package/dist/scripts/change/archive.js.map +1 -1
  114. package/dist/scripts/change/artifacts.js.map +1 -1
  115. package/dist/scripts/change/delta.js +0 -8
  116. package/dist/scripts/change/delta.js.map +1 -1
  117. package/dist/scripts/change/instructions.js +9 -11
  118. package/dist/scripts/change/instructions.js.map +1 -1
  119. package/dist/scripts/cli/commands/alm/PrCommand.js +198 -0
  120. package/dist/scripts/cli/commands/alm/PrCommand.js.map +1 -0
  121. package/dist/scripts/cli/commands/alm/PullCommand.js +4 -2
  122. package/dist/scripts/cli/commands/alm/PullCommand.js.map +1 -1
  123. package/dist/scripts/cli/commands/change/ChangeCommand.js +119 -19
  124. package/dist/scripts/cli/commands/change/ChangeCommand.js.map +1 -1
  125. package/dist/scripts/cli/commands/change/TicketCommand.js +657 -0
  126. package/dist/scripts/cli/commands/change/TicketCommand.js.map +1 -0
  127. package/dist/scripts/cli/commands/config/ConfigSetCommand.js +1 -1
  128. package/dist/scripts/cli/commands/config/ConfigSetCommand.js.map +1 -1
  129. package/dist/scripts/cli/commands/harness/RunCommand.js +225 -35
  130. package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -1
  131. package/dist/scripts/cli/commands/mcp/McpInstallCommand.js +1 -0
  132. package/dist/scripts/cli/commands/mcp/McpInstallCommand.js.map +1 -1
  133. package/dist/scripts/cli/commands/pack/BundlePackCommand.js +2 -1
  134. package/dist/scripts/cli/commands/pack/BundlePackCommand.js.map +1 -1
  135. package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js +32 -17
  136. package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js.map +1 -1
  137. package/dist/scripts/cli/commands/pack/InferPackCommand.js +8 -5
  138. package/dist/scripts/cli/commands/pack/InferPackCommand.js.map +1 -1
  139. package/dist/scripts/cli/commands/pack/LintPackCommand.js +36 -44
  140. package/dist/scripts/cli/commands/pack/LintPackCommand.js.map +1 -1
  141. package/dist/scripts/cli/commands/pack/pack-args.js.map +1 -1
  142. package/dist/scripts/cli/commands/project/AddCommand.js.map +1 -1
  143. package/dist/scripts/cli/commands/project/AdoptCommand.js +62 -2
  144. package/dist/scripts/cli/commands/project/AdoptCommand.js.map +1 -1
  145. package/dist/scripts/cli/commands/project/InitFromPackCommand.js.map +1 -1
  146. package/dist/scripts/cli/commands/project/InitProjectCommand.js +2 -1
  147. package/dist/scripts/cli/commands/project/InitProjectCommand.js.map +1 -1
  148. package/dist/scripts/cli/commands/project/OnboardCommand.js +40 -4
  149. package/dist/scripts/cli/commands/project/OnboardCommand.js.map +1 -1
  150. package/dist/scripts/cli/commands/project/UpdateCommand.js +4 -0
  151. package/dist/scripts/cli/commands/project/UpdateCommand.js.map +1 -1
  152. package/dist/scripts/cli/commands/project/WizardCommand.js.map +1 -1
  153. package/dist/scripts/cli/commands/quality/CheckCommand.js +86 -10
  154. package/dist/scripts/cli/commands/quality/CheckCommand.js.map +1 -1
  155. package/dist/scripts/cli/commands/quality/DoctorCommand.js +8 -4
  156. package/dist/scripts/cli/commands/quality/DoctorCommand.js.map +1 -1
  157. package/dist/scripts/cli/commands/quality/FixCommand.js.map +1 -1
  158. package/dist/scripts/cli/commands/quality/LicenseCheckCommand.js +3 -1
  159. package/dist/scripts/cli/commands/quality/LicenseCheckCommand.js.map +1 -1
  160. package/dist/scripts/cli/commands/quality/ReportCommand.js +8 -3
  161. package/dist/scripts/cli/commands/quality/ReportCommand.js.map +1 -1
  162. package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js +39 -30
  163. package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js.map +1 -1
  164. package/dist/scripts/cli/commands/quality/VerifyCommand.js +3 -2
  165. package/dist/scripts/cli/commands/quality/VerifyCommand.js.map +1 -1
  166. package/dist/scripts/cli/commands/spec/DoneCommand.js +182 -77
  167. package/dist/scripts/cli/commands/spec/DoneCommand.js.map +1 -1
  168. package/dist/scripts/cli/commands/spec/DraftCommand.js +292 -56
  169. package/dist/scripts/cli/commands/spec/DraftCommand.js.map +1 -1
  170. package/dist/scripts/cli/commands/spec/ExploreCommand.js +224 -0
  171. package/dist/scripts/cli/commands/spec/ExploreCommand.js.map +1 -0
  172. package/dist/scripts/cli/commands/spec/MatrixCommand.js +35 -5
  173. package/dist/scripts/cli/commands/spec/MatrixCommand.js.map +1 -1
  174. package/dist/scripts/cli/commands/spec/NewCommand.js +4 -4
  175. package/dist/scripts/cli/commands/spec/NewCommand.js.map +1 -1
  176. package/dist/scripts/cli/commands/spec/PetCommand.js.map +1 -1
  177. package/dist/scripts/cli/commands/spec/PlanCommand.js +8 -3
  178. package/dist/scripts/cli/commands/spec/PlanCommand.js.map +1 -1
  179. package/dist/scripts/cli/commands/spec/ReqCommand.js +8 -9
  180. package/dist/scripts/cli/commands/spec/ReqCommand.js.map +1 -1
  181. package/dist/scripts/cli/commands/spec/StatusCommand.js +105 -26
  182. package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -1
  183. package/dist/scripts/cli/commands/spec/StudioCommand.js +76 -4
  184. package/dist/scripts/cli/commands/spec/StudioCommand.js.map +1 -1
  185. package/dist/scripts/cli/commands/specops/ContributeCommand.js +6 -2
  186. package/dist/scripts/cli/commands/specops/ContributeCommand.js.map +1 -1
  187. package/dist/scripts/cli/commands/specops/DiffCommand.js +19 -5
  188. package/dist/scripts/cli/commands/specops/DiffCommand.js.map +1 -1
  189. package/dist/scripts/cli/commands/specops/SyncCommand.js +4 -2
  190. package/dist/scripts/cli/commands/specops/SyncCommand.js.map +1 -1
  191. package/dist/scripts/docs/build-site.js.map +1 -1
  192. package/dist/scripts/docs/icons.js +0 -6
  193. package/dist/scripts/docs/icons.js.map +1 -1
  194. package/dist/scripts/docs/journey-storyboard.js +56 -47
  195. package/dist/scripts/docs/journey-storyboard.js.map +1 -1
  196. package/dist/scripts/docs/nav.js +5 -0
  197. package/dist/scripts/docs/nav.js.map +1 -1
  198. package/dist/scripts/docs/record-journey.js +93 -30
  199. package/dist/scripts/docs/record-journey.js.map +1 -1
  200. package/dist/scripts/docs/record-terminal.js +1 -1
  201. package/dist/scripts/docs/record-terminal.js.map +1 -1
  202. package/dist/scripts/docs/terminal-storyboard.js +24 -21
  203. package/dist/scripts/docs/terminal-storyboard.js.map +1 -1
  204. package/dist/scripts/draft/brief-check.js +34 -0
  205. package/dist/scripts/draft/brief-check.js.map +1 -0
  206. package/dist/scripts/draft/brief-setup.js +190 -24
  207. package/dist/scripts/draft/brief-setup.js.map +1 -1
  208. package/dist/scripts/draft/confined-agent.js +1 -0
  209. package/dist/scripts/draft/confined-agent.js.map +1 -1
  210. package/dist/scripts/draft/drafting-guide.js +49 -6
  211. package/dist/scripts/draft/drafting-guide.js.map +1 -1
  212. package/dist/scripts/draft/ticket-guide.js +129 -0
  213. package/dist/scripts/draft/ticket-guide.js.map +1 -0
  214. package/dist/scripts/explore.js +10 -0
  215. package/dist/scripts/explore.js.map +1 -0
  216. package/dist/scripts/gen_mcp_tools.js +15 -7
  217. package/dist/scripts/gen_mcp_tools.js.map +1 -1
  218. package/dist/scripts/harness/events.js +202 -0
  219. package/dist/scripts/harness/events.js.map +1 -0
  220. package/dist/scripts/harness/init.js +6 -2
  221. package/dist/scripts/harness/init.js.map +1 -1
  222. package/dist/scripts/harness/run.js +2 -1
  223. package/dist/scripts/harness/run.js.map +1 -1
  224. package/dist/scripts/lib/agent.js.map +1 -1
  225. package/dist/scripts/lib/base-ids.js +179 -0
  226. package/dist/scripts/lib/base-ids.js.map +1 -0
  227. package/dist/scripts/lib/capability-specs.js.map +1 -1
  228. package/dist/scripts/lib/diagnostics.js +0 -10
  229. package/dist/scripts/lib/diagnostics.js.map +1 -1
  230. package/dist/scripts/lib/harness-events.js +74 -0
  231. package/dist/scripts/lib/harness-events.js.map +1 -0
  232. package/dist/scripts/lib/in-flight.js +191 -0
  233. package/dist/scripts/lib/in-flight.js.map +1 -0
  234. package/dist/scripts/lib/live-model.js +145 -0
  235. package/dist/scripts/lib/live-model.js.map +1 -0
  236. package/dist/scripts/lib/live-page.js +89 -0
  237. package/dist/scripts/lib/live-page.js.map +1 -0
  238. package/dist/scripts/lib/monorepo-fanout.js.map +1 -1
  239. package/dist/scripts/lib/placeholders.js.map +1 -1
  240. package/dist/scripts/lib/project-root.js.map +1 -1
  241. package/dist/scripts/lib/run-with-deadline.js +6 -1
  242. package/dist/scripts/lib/run-with-deadline.js.map +1 -1
  243. package/dist/scripts/lib/surface.js +95 -30
  244. package/dist/scripts/lib/surface.js.map +1 -1
  245. package/dist/scripts/lib/ticket-keys.js +140 -0
  246. package/dist/scripts/lib/ticket-keys.js.map +1 -0
  247. package/dist/scripts/lib/tour.js +149 -0
  248. package/dist/scripts/lib/tour.js.map +1 -0
  249. package/dist/scripts/propose.js +27 -0
  250. package/dist/scripts/propose.js.map +1 -0
  251. package/dist/scripts/schema/cli.js +1 -1
  252. package/dist/scripts/schema/cli.js.map +1 -1
  253. package/dist/scripts/schema/registry.js +1 -0
  254. package/dist/scripts/schema/registry.js.map +1 -1
  255. package/dist/scripts/specops/add.js +2 -1
  256. package/dist/scripts/specops/add.js.map +1 -1
  257. package/dist/scripts/specops/against_lock.js +22 -25
  258. package/dist/scripts/specops/against_lock.js.map +1 -1
  259. package/dist/scripts/specops/as_change.js.map +1 -1
  260. package/dist/scripts/specops/lock.js +0 -5
  261. package/dist/scripts/specops/lock.js.map +1 -1
  262. package/dist/scripts/specops/manifest.js +0 -8
  263. package/dist/scripts/specops/manifest.js.map +1 -1
  264. package/dist/scripts/specops/remove.js +2 -1
  265. package/dist/scripts/specops/remove.js.map +1 -1
  266. package/dist/scripts/specops/verify.js.map +1 -1
  267. package/dist/scripts/vcs/github-pr.js +88 -0
  268. package/dist/scripts/vcs/github-pr.js.map +1 -0
  269. package/package.json +1 -1
  270. package/templates/adopt/spec.md.tpl +1 -1
  271. package/templates/adopt/traceability.md.tpl +1 -1
  272. package/templates/base/AGENTS.md.tpl +14 -7
  273. package/templates/harness/prompt-prefix.md.tpl +1 -1
package/CHANGELOG.md CHANGED
@@ -8,6 +8,214 @@ The release process is in [`docs/release-process.md`](docs/release-process.md).
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
+ ## [0.22.0] — 2026-10-20
12
+
13
+ A brief shaped like what it becomes, checked before any agent drafts from it
14
+ (ADR-0038); and a Jira ticket as source text, as a brief is (ADR-0039). Tried
15
+ end to end on a real Jira Cloud board and GitHub: two stories went from the
16
+ ticket to Done, the board moved by its own automation.
17
+
18
+ ### Fixed
19
+
20
+ - **New ids are free on every branch** (REQ-152). Two changes opened on two
21
+ branches both reserved REQ-002: reserving ids now reads every local and
22
+ remote-tracking branch. A change also reserves its scenario ids,
23
+ `scn_range` in `change.yaml` (REQ-157).
24
+ - **A monorepo's stack is read from its apps** (REQ-153). With npm workspaces,
25
+ `AGENTS.md` said "Stack: Node.js" for a Spring API in `apps/api`.
26
+ - **`specgate update` updates the `AGENTS.md` contract** (REQ-155), keeping its
27
+ facts and project rules, also when the project has no other agent files.
28
+ - **The harness's commits name the ticket** (REQ-156): `KAN-14 REQ-002: …`.
29
+ - **`--agent` on an open change hands the agent its findings.** A second run
30
+ read a finished draft and changed nothing.
31
+ - **Credentials never travel over plain http**: `base_url` and `pr.base_url`
32
+ must be https (localhost excepted).
33
+
34
+ - **`specgate alm pull` works against Jira Cloud again.** Atlassian removed
35
+ `/rest/api/3/search` (HTTP 410); search now pages `/rest/api/3/search/jql`
36
+ by `nextPageToken`, up to 1000 issues.
37
+ - **Tokens created with scopes.** `cloud_id: auto` sends every Jira request
38
+ through `api.atlassian.com/ex/jira/<cloud id>`, the only door such a token
39
+ opens. Sent to the site, such a token is answered as anonymous — HTTP 200 and
40
+ no issues — which used to read as "No open issues"; it is now a 401 whose fix
41
+ names `cloud_id: auto`.
42
+
43
+ ### Changed
44
+
45
+ - **A draft is not opened over a broken brief.** `propose --from-brief
46
+ <module>` refuses with `brief_not_ready` while the brief has an error: an
47
+ empty body, an empty module section, a module without its section once the
48
+ brief uses sections, or rules without examples. A brief with no module
49
+ sections — a pasted email — drafts as before.
50
+ - **`--new-brief` writes cards.** Why, a glossary, a `## Module:` section with
51
+ Rules, Examples and Questions, and notes, in place of the six sections.
52
+
53
+ ### Added
54
+
55
+ - **From a Jira ticket** ([ADR-0039](docs/specs/adr/0039-the-ticket-as-source-text.md),
56
+ change `ticket-source`, [the page](docs/from-a-ticket.md)).
57
+ - `specgate propose --from-ticket <KEY | issue.json> --check`: the ticket's
58
+ intent, source, acceptance criteria and open questions (English, German or
59
+ Spanish headings, ADF or plain text, or `acceptance_field`), and a
60
+ Definition of Ready, T1–T9, each with a fix an analyst applies in Jira.
61
+ - `specgate propose --from-ticket <KEY>`: the change `<key>-<slug>` with
62
+ `ticket.md` as its source — the D-checklist runs against the ticket, and an
63
+ edited copy is `ticket_copy_edited` — the capability from `epics:`, and the
64
+ branch `feature/<KEY>-<slug>` (`bugfix/` for a bug). `--agent` drafts it,
65
+ confined, never writing the copy.
66
+ - `ticket_changed` when the ticket moved since the change was opened;
67
+ `ticket_key_missing` from `check` for a commit on the ticket's branch that
68
+ does not name it.
69
+ - `specgate alm pr <change>`: one pull request per ticket on GitHub, titled
70
+ with the key, its body the requirements and the gate, the archived change
71
+ included (REQ-159). Never merges; keeps what reviewers wrote.
72
+ - The ticket's branch is pushed as soon as it is created (REQ-148), so a
73
+ Jira automation moves the ticket when work starts.
74
+ - `AGENTS.md` names the ticket path (REQ-154); in a project connected to
75
+ Jira, `status` suggests `propose --from-ticket` (REQ-158).
76
+ - **Brief cards** ([ADR-0038](docs/specs/adr/0038-brief-cards.md), change `brief-cards`).
77
+ - `specgate propose --from-brief --check`: rules B1–B11 on the brief, each
78
+ with its fix. Errors (B1–B4) stop a draft; warnings (B5–B11) name vague
79
+ words, promises without a number, technology in a rule, modules too big,
80
+ actors never mentioned, non-goals in a rule, and conditions placed last
81
+ (EARS).
82
+ - `non_goals: [...]` in the front matter.
83
+ - `DRAFTING.md` quotes the module's section and lists its values and
84
+ questions: a rule becomes a requirement, an example a scenario, a question
85
+ a `questions.md` row.
86
+ - `propose --from-brief --agent` proposes the module sections from pasted
87
+ notes, once the fields are complete; a lost line puts the brief back
88
+ (`draft_brief_text_lost`).
89
+ - `propose --help` says when no brief is needed.
90
+ - **"Write the brief" in eight steps**, with a glossary, the EARS patterns and
91
+ the whole Lingo example, its outputs recorded.
92
+
93
+ ### Fixed
94
+
95
+ - **Front matter shapes are reported as shapes.** `actors: [Admin]` was "There
96
+ is no `actors:` list" and `surfaces: web` passed silently; both are now
97
+ `brief_wrong_shape` with the line to write.
98
+ - **D6 no longer reads HTML comments as the brief.** A template's hint such as
99
+ "e.g. 48 hours" made 48 look stated.
100
+ - **`explore` prints a project snapshot**, no longer called a brief.
101
+ - **The guides use `propose --from-brief`** where they still said `draft`, and
102
+ forja's guide follows propose → apply → archive.
103
+
104
+ ## [0.21.0] — 2026-10-20
105
+
106
+ The daily loop becomes four verbs over the same gate (ADR-0035), the gate stops
107
+ failing on text that is not a defect (ADR-0036), and the harness can be watched
108
+ while it works (ADR-0037).
109
+
110
+ ### Breaking
111
+
112
+ - **`archive` (and `change archive`) waits for the code.** A change is merged
113
+ into the specs only once every requirement it adds or modifies is
114
+ Implemented; before, it was archived first and delivered after. `--force`
115
+ does not skip this. Drafts from a brief follow the same path: review, apply,
116
+ then archive. Scripts that archived a change before implementing it now get
117
+ `archive_requirements_pending` with the `specgate apply` to run.
118
+ - **`specgate studio` binds to 127.0.0.1** and refuses requests addressed to
119
+ another host name; pass `--host` to serve it elsewhere (a devcontainer).
120
+
121
+ ### Added
122
+
123
+ - **See the harness work** ([ADR-0037](docs/specs/adr/0037-see-the-harness-work.md), change `live-view`).
124
+ - `harness run` writes `.harness/events/<REQ>.jsonl` — attempts, gate stages,
125
+ chain merges — and hands the agent `AGENT_EVENTS_FILE`, `AGENT_EVENTS_REQ`,
126
+ `AGENT_EVENTS_ATTEMPT`.
127
+ - `specgate harness events --from claude` turns Claude Code's stream into
128
+ events; no file contents, tool output or secrets, commands masked.
129
+ - `specgate studio` serves `/live`, `/live.json` and `/live/stream`
130
+ (server-sent events), bound to 127.0.0.1 and refusing foreign Host headers;
131
+ `--host` binds elsewhere on purpose.
132
+ - `specgate explore` — a brief of the project's state for thinking with an
133
+ agent before a change exists; writes nothing.
134
+ - `specgate onboard --tour` — the whole loop on a temporary copy, narrated.
135
+
136
+ - **A gate a team can trust** ([ADR-0036](docs/specs/adr/0036-a-gate-a-team-can-trust.md), change `trust-gate`).
137
+ - `check` compares requirement ids with the base branch (`--base`,
138
+ `SPECGATE_BASE`, or origin's default) and fails on the same id with another
139
+ title (`id_taken_on_base`), naming the next id free on both sides.
140
+ - `harness run --chain`: one requirement at a time, each cut from the
141
+ previous merge, merged with a merge commit when green, the gate run again
142
+ on the merge, a red result undone, the chain stopped at the first failure.
143
+ - `harness run --setup-cmd <cmd|none>`; without it, the install the lockfile
144
+ implies runs in each new worktree. The agent gets `SPECGATE_REQ` and
145
+ `SPECGATE_ATTEMPT`.
146
+ - A corpus fixture of real specification shapes passes `validate --strict`
147
+ with no finding; `SPECGATE_CORPUS` runs the same test over private projects.
148
+
149
+ - **Four verbs, one lifecycle** ([ADR-0035](docs/specs/adr/0035-four-verbs-one-lifecycle.md), change `compact-use`).
150
+ The short help is `init`; `propose`, `apply`, `status`, `archive`; `check`.
151
+ - `specgate propose <id>` opens a change with a delta to write (`change new`);
152
+ `propose --from-brief` drafts the next module of `docs/brief.md` (`draft`).
153
+ - `specgate apply [REQ]` delivers one requirement — the next one when none is
154
+ named: refused while no test names it (`apply_no_test`, with the fix), gated,
155
+ then Implemented. `done` is its old name, with the same result.
156
+ - `specgate archive <id>` merges a change once every requirement it adds or
157
+ modifies is Implemented (`archive_requirements_pending`); `--force` does not
158
+ skip that.
159
+ - **An open change's requirements count while it is in flight.** `status`,
160
+ `apply`, `check` and `harness run` judge the project as it will be after
161
+ archive — a temporary copy with every open change archived into it — and
162
+ `apply` writes the status in the change's delta.
163
+
164
+ ### Changed
165
+
166
+ - The placeholder rule ignores code spans, and the vague-step rule code spans
167
+ and quoted text: `` `tool verify <module>` `` is a command, not a template.
168
+ - TDD-3 asks a matrix row for a requirement a spec *declares* (a heading or a
169
+ requirement table row outside fenced code), not for every id it mentions.
170
+ - A generated matrix is declared `merge=union` in `.gitattributes`: parallel
171
+ branches no longer conflict on it, and `check` regenerates it.
172
+ - `new` and `req add` allocate above the ids open changes reserved.
173
+
174
+ - **A change is archived when its code is done**, not before. Drafts from a
175
+ brief follow the same path: reviewed, applied, then archived. `draft` names
176
+ `specgate apply` once a draft is ready, and the next module to draft skips
177
+ one that is ready.
178
+ - Unchecked tasks are a warning, not a refusal, for a change whose requirements
179
+ all passed the gate; a change with none still needs its tasks ticked.
180
+ - `status` names `specgate apply REQ-…` where it named `specgate done REQ-…`.
181
+ - A delta's scenario findings name their requirement:
182
+ `Scenario "…" of REQ-007 has no steps.`
183
+
184
+ - The codebase compiles under full `strict` TypeScript (`noImplicitAny`,
185
+ `strictNullChecks`, `noUnusedLocals`, `noUnusedParameters`), typed throughout
186
+ instead of `any`; the documentation site, README and CONTRIBUTING teach the
187
+ four-verb loop.
188
+ - Dev dependencies: @cucumber/cucumber 13.3.0, typescript-eslint 8.71.2,
189
+ prettier 3.9.10, js-yaml 5.5.0, marked 18.1.1, @types/node 26.6.5; Pages
190
+ actions `upload-pages-artifact` v5 and `deploy-pages` v5.
191
+
192
+ ### Fixed
193
+
194
+ - `specops diff --as-change` printed `── undefined @ undefined ──` in its human
195
+ output: it read snake_case fields from camelCase results.
196
+ - **The CLI no longer contradicts ADR-0035–0037** (four verbs, trusted gate, live view).
197
+ - `agents init` (and the bundled Claude Code plugin) teaches propose → test →
198
+ apply → archive: `/specgate:propose` opens a change, `/specgate:apply`
199
+ delivers a requirement, `/specgate:archive` runs only once all are applied;
200
+ `/specgate:draft` no longer says to archive before building, and
201
+ `/specgate:done` stays as an alias of apply. `AGENTS.md` says the same.
202
+ - `docs:terminal:check` and `docs:journey:check` no longer crash: the
203
+ storyboards leave the draft open, apply its requirements, and show archive
204
+ waiting for the rest. Recordings and `docs/start/` regenerated.
205
+ - `specgate explore` outside a Specgate project refuses with
206
+ `project_not_found` and a fix line (exit 2) instead of an ENOENT stack.
207
+ - Next-step advice names the new verbs: `propose --from-brief` says
208
+ `specgate propose --from-brief …`, the no-test-command warning and
209
+ `done_needs_clarification` say `apply`, and fixes that named `change new`,
210
+ `change archive` or `done` say `propose`, `archive` or `apply`. The old
211
+ names keep working.
212
+ - `status` with an open draft shows its `questions.md` at the change's real
213
+ path (not under `changes/archive/`), and counts a ready draft as drafted.
214
+ - Right after `specgate propose`, `check` passes: a change whose delta is
215
+ still the untouched skeleton is not judged yet, and `status`/`check` say so
216
+ (`change_delta_unwritten`, info). A delta with real but invalid content
217
+ still fails.
218
+
11
219
  ## [0.20.0] — 2026-10-12
12
220
 
13
221
  ### Added
package/README.md CHANGED
@@ -36,24 +36,24 @@ The package is scoped, the binary is not ([ADR-0024](docs/specs/adr/0024-the-too
36
36
 
37
37
  → [Getting started](docs/getting-started.md) · [Your team's first pull request](docs/first-pr.md) · [Quickstart for joiners](docs/quickstart.md)
38
38
 
39
- ## 🔁 The daily loop — five commands
39
+ ## 🔁 The daily loop — four verbs
40
40
 
41
41
  ```bash
42
- specgate status # what is open, and the next command to run
43
- specgate new "Customers download invoices as PDF" # requirement + scenario, in one step
44
- # rewrite the scenario's <placeholders>, then write a test that mentions REQ-007:
45
- # // REQ-007 — a paid invoice downloads as a PDF
46
- specgate done REQ-007 # runs the gate for it, then marks it Implemented
47
- specgate check # the whole gate — the same one CI runs
42
+ specgate propose add-pdf-invoices # a change: proposal, tasks, a delta to write, REQ ids reserved
43
+ # write REQ-007 and its scenario in the delta, a test that mentions REQ-007, the code
44
+ specgate apply # the next requirement through the gate: Implemented when green
45
+ specgate status # what is open, and the next command to run
46
+ specgate archive add-pdf-invoices # once every requirement in it is Implemented
48
47
  ```
49
48
 
50
- That is all most of a team ever types. **Mentioning `REQ-NNN` in a test is the
51
- link** — there is nothing else to declare. The traceability matrix is
52
- generated from `spec.md`, the scenario tags and your tests; nobody edits it,
53
- and CI fails when the committed copy is out of date. `done` writes nothing
54
- while the gate fails, so a requirement it closes is one CI will not reopen.
55
-
56
- Everything else — packs, changes, the harness, ALM sync — is in `specgate --help --all`.
49
+ `specgate check` is the same gate for CI ([ADR-0035](docs/specs/adr/0035-four-verbs-one-lifecycle.md)).
50
+ **A change is archived when its code is done**: while it is open its
51
+ requirements already count — `status` lists them, `apply` and `check` judge the
52
+ project as it will be after archive — and `archive` refuses one still pending.
53
+ `apply` refuses a requirement no test names and writes nothing while the gate
54
+ fails. **Mentioning `REQ-NNN` in a test is the link**; the matrix is generated.
55
+ From a plan: `specgate propose --from-brief`. Old names (`draft`, `done`…) keep
56
+ working; everything else is in `specgate --help --all`.
57
57
 
58
58
  ## 🪜 Adopt one level at a time
59
59
 
@@ -61,7 +61,7 @@ Each level is useful on its own and never requires the ones above it.
61
61
 
62
62
  | Level | You get | Commands | Cost |
63
63
  | ------ | ------------------------------------------------ | ---------------------------- | ------- |
64
- | **L1** | Traceable specs in your repo | `init`, `new`, `done` | ~1 hour |
64
+ | **L1** | Traceable specs in your repo | `init`, `propose`, `apply`, `archive` | ~1 hour |
65
65
  | **L2** | A PR gate enforcing spec and test coverage | `check`, `ci init` | ~1 hour |
66
66
  | **L3** | Versioned, reusable domain requirements | `specops add / sync / diff` | ~1 day |
67
67
  | **L4** | Agent-driven delivery, one requirement at a time | `agents init`, `harness run` | ~1 week |
@@ -76,24 +76,23 @@ stricter with every delivery. Given a test command, it runs your suite too.
76
76
 
77
77
  **Reviews that read intent.** The reviewer reads the requirement, its
78
78
  scenario and the test that names it — the gate has already proved the
79
- mechanical part. A spec that already shipped changes through a reviewable
80
- delta: only what moves, never a copy. Archiving merges it into the spec tree
81
- and writes the feature files, so a merged proposal cannot quietly become
82
- undone work.
79
+ mechanical part. A change is a reviewable delta: only what moves, never a
80
+ copy. It is archived — merged into the spec tree, with its feature files —
81
+ only once every requirement in it passed the gate, in the same pull request.
83
82
  → [Your team's first pull request](docs/first-pr.md) · [Reviewing changes](docs/reviewing-changes.md)
84
83
 
85
84
  **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
- questions that block, ids each actor can reach. Teams on OpenSpec keep it: `specgate verify` fails while
85
+ `specgate propose --from-brief`: module by module, it briefs your agent and holds
86
+ the draft to eleven rules — scenarios per actor and surface, sourced laws, every
87
+ value in the brief or listed as an assumption, open questions that block, ids each
88
+ 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)
91
91
 
92
- **Your agent works the same loop.** `specgate agents init` gives Claude Code,
93
- Cursor, Copilot, Windsurf, Aider, Gemini, Cline, Codex or Antigravity the five
94
- steps as slash commands (`/specgate:new`, `/specgate:done`, …) from one
95
- definition. Every daily command speaks JSON with stable codes and a `fix` on
96
- each. The MCP server ships in the package: `specgate mcp install --client claude`.
92
+ **Your agent works the same loop.** `specgate agents init` gives Claude Code, Cursor,
93
+ Copilot, Windsurf, Aider, Gemini, Cline, Codex or Antigravity the loop as slash commands
94
+ (`/specgate:propose`, `/specgate:apply`, …) from one definition. Every daily command speaks
95
+ JSON with stable codes and a `fix` on each. MCP ships in the package: `specgate mcp install --client claude`.
97
96
  → [Agents](docs/agents.md) · [The agent contract](docs/specs/agent-contract.md) · [Automation and MCP](docs/automation.md)
98
97
 
99
98
  **Domain knowledge as a dependency.** A pack is a versioned, schema-validated
@@ -102,9 +101,10 @@ upgrade as intent with `specops diff --as-change`, not as a file diff.
102
101
  → [Domain packs: 7 proven in the pilots, 11 starter examples](docs/domain-packs.md) · [Supply chain](docs/supply-chain.md)
103
102
 
104
103
  **Unattended delivery.** `specgate harness run` drives plan → agent → verify →
105
- done for every pending requirement, each in its own git worktree; it never
106
- merges. The agent is any shell command with `{prompt_file}`; it stops where retrying cannot help.
107
- `specgate alm sync` keeps Jira, Azure Boards or GitHub Issues in step.
104
+ apply for every pending requirement, each in its own git worktree; it merges only
105
+ with `--chain`, only what passed the gate. The agent is any shell command with
106
+ `{prompt_file}`; `specgate studio` shows it at work, at `/live`. `specgate alm sync`
107
+ keeps Jira, Azure Boards or GitHub Issues in step.
108
108
  → [The harness](docs/harness.md) · [Jira, Azure Boards and GitHub Issues](docs/alm.md)
109
109
 
110
110
  **Tested as you install it.** Every release runs an end-to-end suite over every
@@ -122,7 +122,7 @@ since 0.14 come from building real products with it, from brief to running app.
122
122
  | Draft checklist from a brief | ✅ | ❌ | ⚠️ | ❌ | ❌ |
123
123
  | Proves OpenSpec's "done" against tests | ✅ `verify` | ❌ | ❌ | ❌ | ❌ |
124
124
  | Vendor-neutral | ✅ | ✅ | ✅ | ❌ | ✅ |
125
- | Commands to learn before the first PR | ✅ 5 (26 more, opt-in) | ✅ | ✅ | ✅ | ✅ |
125
+ | Commands to learn before the first PR | ✅ 6 (31 more, opt-in) | ✅ | ✅ | ✅ | ✅ |
126
126
 
127
127
  OpenSpec is the closest tool: if you want the change loop without packs or an enforced matrix, it fits better.
128
128
  → [Full matrix, trade-offs and migration paths](docs/comparisons.md)
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 type { Command, HelpSection } from "../scripts/lib/surface";
13
14
  import { findProjectRoot } from "../scripts/lib/project-root";
14
15
 
15
16
  /** Resolve a registry row's `script` segments to a path under dist/scripts. */
@@ -119,18 +120,19 @@ const EXAMPLES =
119
120
  /**
120
121
  * The daily loop, narrowed.
121
122
  *
122
- * The surface grew past twenty, which is more than anyone reads. A new user
123
- * needs `init` or `adopt` once, then lives in status → plan → req → change →
124
- * validate → done. Everything else is real but not first — `--help --all`
125
- * shows it, and `specgate config set profile full` makes that the default.
123
+ * The surface grew past thirty, which is more than anyone reads. A new user
124
+ * needs `init` once, then lives in propose → apply → status → archive, with
125
+ * `check` in CI (ADR-0035). Everything else is real but not first —
126
+ * `--help --all` shows it, and `specgate config set profile full` makes that
127
+ * the default.
126
128
  *
127
129
  * Both help profiles are rendered from the surface registry, so a command
128
130
  * cannot exist without appearing in one of them or being deliberately absent
129
131
  * from both.
130
132
  */
131
- function renderGroups(groups: any[]): string {
133
+ function renderGroups(groups: HelpSection[]): string {
132
134
  return groups
133
- .map((g) => section(g.title) + g.rows.map((r: any) => cmd(r.icon, r.label, r.summary)).join(""))
135
+ .map((g) => section(g.title) + g.rows.map((r) => cmd(r.icon, r.label, r.summary)).join(""))
134
136
  .join("");
135
137
  }
136
138
 
@@ -140,15 +142,16 @@ function usageCore() {
140
142
  section("Usage") +
141
143
  ` ${c.accent}specgate${c.reset} ${c.bold}<command>${c.reset} [options] ${c.muted}specgate <command> --help for its options${c.reset}\n` +
142
144
  renderGroups(coreHelpRows()) +
145
+ section("Examples") +
146
+ example(`npx @rsaglobaltech/specgate@latest init`, "Existing repo or empty directory") +
147
+ example(`specgate propose add-dynamic-pricing`, "An idea becomes a change") +
148
+ example(`specgate propose --from-brief`, "Your plan is in docs/brief.md") +
149
+ example(`specgate apply`, "The next requirement, through the gate") +
150
+ example(`specgate archive add-dynamic-pricing`, "Every requirement in it delivered") +
143
151
  section("More") +
144
152
  ` ${c.muted}${hiddenCommandCount()} more commands cover packs, automation, agents and reporting.${c.reset}\n` +
153
+ ` ${c.accent}specgate config set profile full${c.reset}${c.muted} make the full list the default${c.reset}\n` +
145
154
  ` ${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") +
148
- example(`npx @rsaglobaltech/specgate@latest init`, "Existing repo or empty directory") +
149
- example(`specgate draft`, "Your plan is in docs/brief.md") +
150
- example(`specgate status`, "Start of day") +
151
- example(`specgate check`, "Before a pull request") +
152
155
  "\n"
153
156
  );
154
157
  }
@@ -169,10 +172,11 @@ function helpProfile(): string {
169
172
  return "core";
170
173
  }
171
174
 
172
- function groupUsage(row: any) {
175
+ /** Called only for a row that groups sub-commands. */
176
+ function groupUsage(row: Command) {
173
177
  let out = `\n ${c.brand}${sym.brand}${c.reset} ${c.bold}specgate ${row.name}${c.reset} <sub-command> [options]\n`;
174
178
  out += section("Sub-commands");
175
- for (const s of row.subcommands) {
179
+ for (const s of row.subcommands!) {
176
180
  const summary = (s.help && s.help.summary) || (row.help && row.help.summary) || "";
177
181
  out += cmd((s.help && s.help.icon) || "·", `${row.name} ${s.name}`, summary, 20);
178
182
  }
@@ -260,7 +264,7 @@ export class CreateSpecDrivenAppCommand implements ICommand {
260
264
 
261
265
  const command = args[0];
262
266
 
263
- const row = SURFACE.find((c: any) => c.name === command);
267
+ const row = SURFACE.find((c) => c.name === command);
264
268
  if (!row) {
265
269
  info(`Unknown command: ${command}`);
266
270
  usage();
@@ -277,7 +281,7 @@ export class CreateSpecDrivenAppCommand implements ICommand {
277
281
  process.exit(0);
278
282
  }
279
283
  if (row.subcommands && !row.script && args.length === 1) {
280
- const expected = row.subcommands.map((s: any) => s.name).join(", ");
284
+ const expected = row.subcommands.map((s) => s.name).join(", ");
281
285
  error(`Unknown ${command} sub-command: (none). Expected: ${expected}`);
282
286
  groupUsage(row);
283
287
  process.exit(2);
@@ -300,15 +304,17 @@ export class CreateSpecDrivenAppCommand implements ICommand {
300
304
 
301
305
  // Otherwise the sub-command is the route, and an unknown one stops here.
302
306
  const subName = args[1];
303
- const sub = (row.subcommands || []).find((s: any) => s.name === subName);
307
+ const sub = (row.subcommands || []).find((s) => s.name === subName);
304
308
  if (!sub) {
305
- const expected = (row.subcommands || []).map((s: any) => s.name).join(", ");
309
+ const expected = (row.subcommands || []).map((s) => s.name).join(", ");
306
310
  error(`Unknown ${command} sub-command: ${subName || "(none)"}. Expected: ${expected}`);
307
311
  usage();
308
312
  process.exit(2);
309
313
  }
310
314
 
311
- const target = resolveScript(sub.script);
315
+ // A row without its own script scripts every sub-command; the surface
316
+ // registry test holds the registry to that.
317
+ const target = resolveScript(sub.script!);
312
318
  ensureExecutable(target);
313
319
  runNodeScript(target, args.slice(sub.argsFrom === undefined ? 2 : sub.argsFrom));
314
320
  }
@@ -104,10 +104,11 @@ const EXAMPLES = example(`npx @rsaglobaltech/specgate@latest init`, "Generate a
104
104
  /**
105
105
  * The daily loop, narrowed.
106
106
  *
107
- * The surface grew past twenty, which is more than anyone reads. A new user
108
- * needs `init` or `adopt` once, then lives in status → plan → req → change →
109
- * validate → done. Everything else is real but not first — `--help --all`
110
- * shows it, and `specgate config set profile full` makes that the default.
107
+ * The surface grew past thirty, which is more than anyone reads. A new user
108
+ * needs `init` once, then lives in propose → apply → status → archive, with
109
+ * `check` in CI (ADR-0035). Everything else is real but not first —
110
+ * `--help --all` shows it, and `specgate config set profile full` makes that
111
+ * the default.
111
112
  *
112
113
  * Both help profiles are rendered from the surface registry, so a command
113
114
  * cannot exist without appearing in one of them or being deliberately absent
@@ -123,15 +124,16 @@ function usageCore() {
123
124
  section("Usage") +
124
125
  ` ${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` +
125
126
  renderGroups((0, surface_1.coreHelpRows)()) +
127
+ section("Examples") +
128
+ example(`npx @rsaglobaltech/specgate@latest init`, "Existing repo or empty directory") +
129
+ example(`specgate propose add-dynamic-pricing`, "An idea becomes a change") +
130
+ example(`specgate propose --from-brief`, "Your plan is in docs/brief.md") +
131
+ example(`specgate apply`, "The next requirement, through the gate") +
132
+ example(`specgate archive add-dynamic-pricing`, "Every requirement in it delivered") +
126
133
  section("More") +
127
134
  ` ${ui_1.c.muted}${(0, surface_1.hiddenCommandCount)()} more commands cover packs, automation, agents and reporting.${ui_1.c.reset}\n` +
135
+ ` ${ui_1.c.accent}specgate config set profile full${ui_1.c.reset}${ui_1.c.muted} make the full list the default${ui_1.c.reset}\n` +
128
136
  ` ${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") +
131
- example(`npx @rsaglobaltech/specgate@latest init`, "Existing repo or empty directory") +
132
- example(`specgate draft`, "Your plan is in docs/brief.md") +
133
- example(`specgate status`, "Start of day") +
134
- example(`specgate check`, "Before a pull request") +
135
137
  "\n");
136
138
  }
137
139
  /**
@@ -152,6 +154,7 @@ function helpProfile() {
152
154
  }
153
155
  return "core";
154
156
  }
157
+ /** Called only for a row that groups sub-commands. */
155
158
  function groupUsage(row) {
156
159
  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
160
  out += section("Sub-commands");
@@ -275,6 +278,8 @@ class CreateSpecDrivenAppCommand {
275
278
  usage();
276
279
  process.exit(2);
277
280
  }
281
+ // A row without its own script scripts every sub-command; the surface
282
+ // registry test holds the registry to that.
278
283
  const target = resolveScript(sub.script);
279
284
  ensureExecutable(target);
280
285
  runNodeScript(target, args.slice(sub.argsFrom === undefined ? 2 : sub.argsFrom));
@@ -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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"}
@@ -8,9 +8,19 @@ class AddRequirementUseCase {
8
8
  constructor(traceRepo) {
9
9
  this.traceRepo = traceRepo;
10
10
  }
11
- execute(projectDir, fields) {
11
+ /**
12
+ * `reservedUpTo`: the highest id number an open change has reserved. A new
13
+ * id goes above it, so a requirement added while a change is open never takes
14
+ * an id that change will use (ADR-0036).
15
+ */
16
+ execute(projectDir, fields, reservedUpTo = 0) {
12
17
  const rawContent = this.traceRepo.readTraceability(projectDir) || "";
13
18
  const parsed = rawContent ? (0, TraceabilityFormat_1.parseTraceabilityRows)(rawContent) : { rows: [] };
19
+ if (!fields.requirement && reservedUpTo > 0) {
20
+ const next = Number(TraceabilityMatrix_1.TraceabilityMatrix.nextReqId(parsed.rows || []).slice(4));
21
+ const n = Math.max(next, reservedUpTo + 1);
22
+ fields = { ...fields, requirement: `REQ-${String(n).padStart(3, "0")}` };
23
+ }
14
24
  const result = TraceabilityMatrix_1.TraceabilityMatrix.appendRequirement(rawContent, fields, parsed.rows || []);
15
25
  this.traceRepo.writeTraceability(projectDir, result.content);
16
26
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"AddRequirementUseCase.js","sourceRoot":"","sources":["../../../../../packages/core/src/application/AddRequirementUseCase.ts"],"names":[],"mappings":";;;AACA,qEAAkE;AAClE,qEAAqE;AAuBrE,MAAa,qBAAqB;IACZ;IAApB,YAAoB,SAAkC;QAAlC,cAAS,GAAT,SAAS,CAAyB;IAAG,CAAC;IAEnD,OAAO,CAAC,UAAkB,EAAE,MAA4B;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAA,0CAAqB,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAE7E,MAAM,MAAM,GAAG,uCAAkB,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC3F,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAE7D,OAAO;YACL,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;CACF;AAhBD,sDAgBC"}
1
+ {"version":3,"file":"AddRequirementUseCase.js","sourceRoot":"","sources":["../../../../../packages/core/src/application/AddRequirementUseCase.ts"],"names":[],"mappings":";;;AACA,qEAAkE;AAClE,qEAAqE;AAyBrE,MAAa,qBAAqB;IACZ;IAApB,YAAoB,SAAkC;QAAlC,cAAS,GAAT,SAAS,CAAyB;IAAG,CAAC;IAE1D;;;;OAIG;IACI,OAAO,CACZ,UAAkB,EAClB,MAA4B,EAC5B,YAAY,GAAG,CAAC;QAEhB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAA,0CAAqB,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,uCAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;YAC3C,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;QAC3E,CAAC;QAED,MAAM,MAAM,GAAG,uCAAkB,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC3F,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAE7D,OAAO;YACL,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;CACF;AA9BD,sDA8BC"}
@@ -70,10 +70,15 @@ class ArchiveChangeUseCase {
70
70
  // (`specgate draft`) is what says it is ready, and `change archive`
71
71
  // already refuses one that is not (#57). Asking the person to also tick
72
72
  // boxes nobody wrote was a second gate with nothing behind it (#94).
73
+ // A change whose requirements all passed the gate (`gated`, ADR-0035) has
74
+ // its evidence; unchecked boxes are then said, not enforced.
73
75
  if (progress.remaining > 0 && !o.force && !o.draft) {
74
- plan.diagnostics.push((0, Diagnostic_1.error)("archive_tasks_incomplete", `Change "${changeId}" still has ${progress.remaining} unchecked task(s).`, {
76
+ const finding = o.gated ? Diagnostic_1.warning : Diagnostic_1.error;
77
+ (o.gated ? plan.warnings : plan.diagnostics).push(finding("archive_tasks_incomplete", `Change "${changeId}" still has ${progress.remaining} unchecked task(s).`, {
75
78
  target: changeId,
76
- fix: "Finish the tasks, or pass --force to archive anyway.",
79
+ fix: o.gated
80
+ ? "Tick them in tasks.md if they are done; the gate already passed for every requirement."
81
+ : "Finish the tasks, or pass --force to archive anyway.",
77
82
  }));
78
83
  }
79
84
  const deltas = config.skip_specs ? [] : this.repo.listDeltas(changeId);