@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.
- package/CHANGELOG.md +208 -0
- package/README.md +31 -31
- package/bin/specgate.ts +25 -19
- package/dist/bin/specgate.js +15 -10
- package/dist/bin/specgate.js.map +1 -1
- package/dist/packages/core/src/application/AddRequirementUseCase.js +11 -1
- package/dist/packages/core/src/application/AddRequirementUseCase.js.map +1 -1
- package/dist/packages/core/src/application/ArchiveChangeUseCase.js +7 -2
- package/dist/packages/core/src/application/ArchiveChangeUseCase.js.map +1 -1
- package/dist/packages/core/src/application/ValidateProjectUseCase.js +9 -3
- package/dist/packages/core/src/application/ValidateProjectUseCase.js.map +1 -1
- package/dist/packages/core/src/domain/ArchivePlan.js.map +1 -1
- package/dist/packages/core/src/domain/BriefCards.js +320 -0
- package/dist/packages/core/src/domain/BriefCards.js.map +1 -0
- package/dist/packages/core/src/domain/ChangeTemplates.js +19 -0
- package/dist/packages/core/src/domain/ChangeTemplates.js.map +1 -1
- package/dist/packages/core/src/domain/DeltaSpec.js +14 -7
- package/dist/packages/core/src/domain/DeltaSpec.js.map +1 -1
- package/dist/packages/core/src/domain/DerivedMatrix.js +2 -2
- package/dist/packages/core/src/domain/DerivedMatrix.js.map +1 -1
- package/dist/packages/core/src/domain/Diagnostic.js.map +1 -1
- package/dist/packages/core/src/domain/DoneVerification.js +3 -3
- package/dist/packages/core/src/domain/DoneVerification.js.map +1 -1
- package/dist/packages/core/src/domain/DraftChecklist.js +6 -2
- package/dist/packages/core/src/domain/DraftChecklist.js.map +1 -1
- package/dist/packages/core/src/domain/GherkinQuality.js +5 -2
- package/dist/packages/core/src/domain/GherkinQuality.js.map +1 -1
- package/dist/packages/core/src/domain/HarnessEvents.js +129 -0
- package/dist/packages/core/src/domain/HarnessEvents.js.map +1 -0
- package/dist/packages/core/src/domain/HarnessRun.js.map +1 -1
- package/dist/packages/core/src/domain/Language.js +5 -2
- package/dist/packages/core/src/domain/Language.js.map +1 -1
- package/dist/packages/core/src/domain/PackContribution.js.map +1 -1
- package/dist/packages/core/src/domain/PackDelta.js +5 -2
- package/dist/packages/core/src/domain/PackDelta.js.map +1 -1
- package/dist/packages/core/src/domain/PackSpec.js +16 -2
- package/dist/packages/core/src/domain/PackSpec.js.map +1 -1
- package/dist/packages/core/src/domain/QuotedText.js +41 -0
- package/dist/packages/core/src/domain/QuotedText.js.map +1 -0
- package/dist/packages/core/src/domain/RequirementPlan.js.map +1 -1
- package/dist/packages/core/src/domain/SpecParser.js +2 -9
- package/dist/packages/core/src/domain/SpecParser.js.map +1 -1
- package/dist/packages/core/src/domain/TicketText.js +337 -0
- package/dist/packages/core/src/domain/TicketText.js.map +1 -0
- package/dist/packages/core/src/domain/TraceabilityFormat.js.map +1 -1
- package/dist/packages/core/src/domain/TraceabilityMatrix.js +3 -3
- package/dist/packages/core/src/domain/TraceabilityMatrix.js.map +1 -1
- package/dist/packages/core/src/domain/YamlLite.js +3 -0
- package/dist/packages/core/src/domain/YamlLite.js.map +1 -1
- package/dist/packages/core/src/infrastructure/ChangeWorkspace.js +7 -3
- package/dist/packages/core/src/infrastructure/ChangeWorkspace.js.map +1 -1
- package/dist/packages/core/src/infrastructure/ConsoleReporter.js.map +1 -1
- package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js +1 -0
- package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js.map +1 -1
- package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js +3 -1
- package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js.map +1 -1
- package/dist/packages/core/src/infrastructure/DiskPackRepository.js +0 -2
- package/dist/packages/core/src/infrastructure/DiskPackRepository.js.map +1 -1
- package/dist/packages/core/src/infrastructure/DiskRequirementGraphRepository.js.map +1 -1
- package/dist/packages/core/src/infrastructure/GitContributionStager.js +0 -4
- package/dist/packages/core/src/infrastructure/GitContributionStager.js.map +1 -1
- package/dist/packages/core/src/infrastructure/GitMergeDriver.js +0 -3
- package/dist/packages/core/src/infrastructure/GitMergeDriver.js.map +1 -1
- package/dist/packages/core/src/infrastructure/HarnessConfigFile.js +7 -13
- package/dist/packages/core/src/infrastructure/HarnessConfigFile.js.map +1 -1
- package/dist/packages/core/src/infrastructure/IdsAcrossBranches.js +48 -0
- package/dist/packages/core/src/infrastructure/IdsAcrossBranches.js.map +1 -0
- package/dist/packages/core/src/infrastructure/PackChangeDeposit.js.map +1 -1
- package/dist/packages/core/src/infrastructure/RemotePackResolver.js +0 -7
- package/dist/packages/core/src/infrastructure/RemotePackResolver.js.map +1 -1
- package/dist/packages/core/src/infrastructure/SpecopsConfigFile.js.map +1 -1
- package/dist/packages/core/test/unit/declared-artifacts.test.js +6 -2
- package/dist/packages/core/test/unit/declared-artifacts.test.js.map +1 -1
- package/dist/packages/core/test/unit/derived-matrix.test.js +3 -0
- package/dist/packages/core/test/unit/derived-matrix.test.js.map +1 -1
- package/dist/packages/core/test/unit/done-verification.test.js +3 -0
- package/dist/packages/core/test/unit/done-verification.test.js.map +1 -1
- package/dist/packages/core/test/unit/matrix-dependencies.test.js.map +1 -1
- package/dist/packages/core/test/unit/reconciliation.test.js.map +1 -1
- package/dist/packages/core/test/unit/requirement-readiness.test.js +2 -2
- package/dist/packages/core/test/unit/requirement-readiness.test.js.map +1 -1
- package/dist/packages/core/test/unit/resume-state.test.js +4 -1
- package/dist/packages/core/test/unit/resume-state.test.js.map +1 -1
- package/dist/packages/core/test/unit/run-budget.test.js +3 -0
- package/dist/packages/core/test/unit/run-budget.test.js.map +1 -1
- package/dist/packages/core/test/unit/untouched-delta.test.js +52 -0
- package/dist/packages/core/test/unit/untouched-delta.test.js.map +1 -0
- package/dist/packages/core/test/unit/validate-project.test.js +6 -2
- package/dist/packages/core/test/unit/validate-project.test.js.map +1 -1
- package/dist/packages/mcp-spec-driven/src/server.js +4 -3
- package/dist/packages/mcp-spec-driven/src/server.js.map +1 -1
- package/dist/packages/mcp-spec-driven/src/tools.js.map +1 -1
- package/dist/scripts/agents/commands.js +52 -38
- package/dist/scripts/agents/commands.js.map +1 -1
- package/dist/scripts/agents/contract-file.js +44 -0
- package/dist/scripts/agents/contract-file.js.map +1 -1
- package/dist/scripts/agents/detect.js.map +1 -1
- package/dist/scripts/agents/init.js.map +1 -1
- package/dist/scripts/alm/cli.js +16 -5
- package/dist/scripts/alm/cli.js.map +1 -1
- package/dist/scripts/alm/core.js +1 -0
- package/dist/scripts/alm/core.js.map +1 -1
- package/dist/scripts/alm/port.js +1 -1
- package/dist/scripts/alm/port.js.map +1 -1
- package/dist/scripts/alm/providers/http-client.js +46 -3
- package/dist/scripts/alm/providers/http-client.js.map +1 -1
- package/dist/scripts/alm/providers/jira.js +108 -32
- package/dist/scripts/alm/providers/jira.js.map +1 -1
- package/dist/scripts/apply.js +9 -0
- package/dist/scripts/apply.js.map +1 -0
- package/dist/scripts/archive.js +9 -0
- package/dist/scripts/archive.js.map +1 -0
- package/dist/scripts/change/archive.js.map +1 -1
- package/dist/scripts/change/artifacts.js.map +1 -1
- package/dist/scripts/change/delta.js +0 -8
- package/dist/scripts/change/delta.js.map +1 -1
- package/dist/scripts/change/instructions.js +9 -11
- package/dist/scripts/change/instructions.js.map +1 -1
- package/dist/scripts/cli/commands/alm/PrCommand.js +198 -0
- package/dist/scripts/cli/commands/alm/PrCommand.js.map +1 -0
- package/dist/scripts/cli/commands/alm/PullCommand.js +4 -2
- package/dist/scripts/cli/commands/alm/PullCommand.js.map +1 -1
- package/dist/scripts/cli/commands/change/ChangeCommand.js +119 -19
- package/dist/scripts/cli/commands/change/ChangeCommand.js.map +1 -1
- package/dist/scripts/cli/commands/change/TicketCommand.js +657 -0
- package/dist/scripts/cli/commands/change/TicketCommand.js.map +1 -0
- package/dist/scripts/cli/commands/config/ConfigSetCommand.js +1 -1
- package/dist/scripts/cli/commands/config/ConfigSetCommand.js.map +1 -1
- package/dist/scripts/cli/commands/harness/RunCommand.js +225 -35
- package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -1
- package/dist/scripts/cli/commands/mcp/McpInstallCommand.js +1 -0
- package/dist/scripts/cli/commands/mcp/McpInstallCommand.js.map +1 -1
- package/dist/scripts/cli/commands/pack/BundlePackCommand.js +2 -1
- package/dist/scripts/cli/commands/pack/BundlePackCommand.js.map +1 -1
- package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js +32 -17
- package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js.map +1 -1
- package/dist/scripts/cli/commands/pack/InferPackCommand.js +8 -5
- package/dist/scripts/cli/commands/pack/InferPackCommand.js.map +1 -1
- package/dist/scripts/cli/commands/pack/LintPackCommand.js +36 -44
- package/dist/scripts/cli/commands/pack/LintPackCommand.js.map +1 -1
- package/dist/scripts/cli/commands/pack/pack-args.js.map +1 -1
- package/dist/scripts/cli/commands/project/AddCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/AdoptCommand.js +62 -2
- package/dist/scripts/cli/commands/project/AdoptCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/InitFromPackCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/InitProjectCommand.js +2 -1
- package/dist/scripts/cli/commands/project/InitProjectCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/OnboardCommand.js +40 -4
- package/dist/scripts/cli/commands/project/OnboardCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/UpdateCommand.js +4 -0
- package/dist/scripts/cli/commands/project/UpdateCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/WizardCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/CheckCommand.js +86 -10
- package/dist/scripts/cli/commands/quality/CheckCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/DoctorCommand.js +8 -4
- package/dist/scripts/cli/commands/quality/DoctorCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/FixCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/LicenseCheckCommand.js +3 -1
- package/dist/scripts/cli/commands/quality/LicenseCheckCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/ReportCommand.js +8 -3
- package/dist/scripts/cli/commands/quality/ReportCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js +39 -30
- package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/VerifyCommand.js +3 -2
- package/dist/scripts/cli/commands/quality/VerifyCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/DoneCommand.js +182 -77
- package/dist/scripts/cli/commands/spec/DoneCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/DraftCommand.js +292 -56
- package/dist/scripts/cli/commands/spec/DraftCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/ExploreCommand.js +224 -0
- package/dist/scripts/cli/commands/spec/ExploreCommand.js.map +1 -0
- package/dist/scripts/cli/commands/spec/MatrixCommand.js +35 -5
- package/dist/scripts/cli/commands/spec/MatrixCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/NewCommand.js +4 -4
- package/dist/scripts/cli/commands/spec/NewCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/PetCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/PlanCommand.js +8 -3
- package/dist/scripts/cli/commands/spec/PlanCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/ReqCommand.js +8 -9
- package/dist/scripts/cli/commands/spec/ReqCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/StatusCommand.js +105 -26
- package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/StudioCommand.js +76 -4
- package/dist/scripts/cli/commands/spec/StudioCommand.js.map +1 -1
- package/dist/scripts/cli/commands/specops/ContributeCommand.js +6 -2
- package/dist/scripts/cli/commands/specops/ContributeCommand.js.map +1 -1
- package/dist/scripts/cli/commands/specops/DiffCommand.js +19 -5
- package/dist/scripts/cli/commands/specops/DiffCommand.js.map +1 -1
- package/dist/scripts/cli/commands/specops/SyncCommand.js +4 -2
- package/dist/scripts/cli/commands/specops/SyncCommand.js.map +1 -1
- package/dist/scripts/docs/build-site.js.map +1 -1
- package/dist/scripts/docs/icons.js +0 -6
- package/dist/scripts/docs/icons.js.map +1 -1
- package/dist/scripts/docs/journey-storyboard.js +56 -47
- package/dist/scripts/docs/journey-storyboard.js.map +1 -1
- package/dist/scripts/docs/nav.js +5 -0
- package/dist/scripts/docs/nav.js.map +1 -1
- package/dist/scripts/docs/record-journey.js +93 -30
- package/dist/scripts/docs/record-journey.js.map +1 -1
- package/dist/scripts/docs/record-terminal.js +1 -1
- package/dist/scripts/docs/record-terminal.js.map +1 -1
- package/dist/scripts/docs/terminal-storyboard.js +24 -21
- package/dist/scripts/docs/terminal-storyboard.js.map +1 -1
- package/dist/scripts/draft/brief-check.js +34 -0
- package/dist/scripts/draft/brief-check.js.map +1 -0
- package/dist/scripts/draft/brief-setup.js +190 -24
- package/dist/scripts/draft/brief-setup.js.map +1 -1
- package/dist/scripts/draft/confined-agent.js +1 -0
- package/dist/scripts/draft/confined-agent.js.map +1 -1
- package/dist/scripts/draft/drafting-guide.js +49 -6
- package/dist/scripts/draft/drafting-guide.js.map +1 -1
- package/dist/scripts/draft/ticket-guide.js +129 -0
- package/dist/scripts/draft/ticket-guide.js.map +1 -0
- package/dist/scripts/explore.js +10 -0
- package/dist/scripts/explore.js.map +1 -0
- package/dist/scripts/gen_mcp_tools.js +15 -7
- package/dist/scripts/gen_mcp_tools.js.map +1 -1
- package/dist/scripts/harness/events.js +202 -0
- package/dist/scripts/harness/events.js.map +1 -0
- package/dist/scripts/harness/init.js +6 -2
- package/dist/scripts/harness/init.js.map +1 -1
- package/dist/scripts/harness/run.js +2 -1
- package/dist/scripts/harness/run.js.map +1 -1
- package/dist/scripts/lib/agent.js.map +1 -1
- package/dist/scripts/lib/base-ids.js +179 -0
- package/dist/scripts/lib/base-ids.js.map +1 -0
- package/dist/scripts/lib/capability-specs.js.map +1 -1
- package/dist/scripts/lib/diagnostics.js +0 -10
- package/dist/scripts/lib/diagnostics.js.map +1 -1
- package/dist/scripts/lib/harness-events.js +74 -0
- package/dist/scripts/lib/harness-events.js.map +1 -0
- package/dist/scripts/lib/in-flight.js +191 -0
- package/dist/scripts/lib/in-flight.js.map +1 -0
- package/dist/scripts/lib/live-model.js +145 -0
- package/dist/scripts/lib/live-model.js.map +1 -0
- package/dist/scripts/lib/live-page.js +89 -0
- package/dist/scripts/lib/live-page.js.map +1 -0
- package/dist/scripts/lib/monorepo-fanout.js.map +1 -1
- package/dist/scripts/lib/placeholders.js.map +1 -1
- package/dist/scripts/lib/project-root.js.map +1 -1
- package/dist/scripts/lib/run-with-deadline.js +6 -1
- package/dist/scripts/lib/run-with-deadline.js.map +1 -1
- package/dist/scripts/lib/surface.js +95 -30
- package/dist/scripts/lib/surface.js.map +1 -1
- package/dist/scripts/lib/ticket-keys.js +140 -0
- package/dist/scripts/lib/ticket-keys.js.map +1 -0
- package/dist/scripts/lib/tour.js +149 -0
- package/dist/scripts/lib/tour.js.map +1 -0
- package/dist/scripts/propose.js +27 -0
- package/dist/scripts/propose.js.map +1 -0
- package/dist/scripts/schema/cli.js +1 -1
- package/dist/scripts/schema/cli.js.map +1 -1
- package/dist/scripts/schema/registry.js +1 -0
- package/dist/scripts/schema/registry.js.map +1 -1
- package/dist/scripts/specops/add.js +2 -1
- package/dist/scripts/specops/add.js.map +1 -1
- package/dist/scripts/specops/against_lock.js +22 -25
- package/dist/scripts/specops/against_lock.js.map +1 -1
- package/dist/scripts/specops/as_change.js.map +1 -1
- package/dist/scripts/specops/lock.js +0 -5
- package/dist/scripts/specops/lock.js.map +1 -1
- package/dist/scripts/specops/manifest.js +0 -8
- package/dist/scripts/specops/manifest.js.map +1 -1
- package/dist/scripts/specops/remove.js +2 -1
- package/dist/scripts/specops/remove.js.map +1 -1
- package/dist/scripts/specops/verify.js.map +1 -1
- package/dist/scripts/vcs/github-pr.js +88 -0
- package/dist/scripts/vcs/github-pr.js.map +1 -0
- package/package.json +1 -1
- package/templates/adopt/spec.md.tpl +1 -1
- package/templates/adopt/traceability.md.tpl +1 -1
- package/templates/base/AGENTS.md.tpl +14 -7
- 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 —
|
|
39
|
+
## 🔁 The daily loop — four verbs
|
|
40
40
|
|
|
41
41
|
```bash
|
|
42
|
-
specgate
|
|
43
|
-
|
|
44
|
-
#
|
|
45
|
-
#
|
|
46
|
-
specgate
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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`, `
|
|
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
|
|
80
|
-
|
|
81
|
-
|
|
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
|
|
87
|
-
to eleven rules — scenarios per actor and surface, sourced laws, every
|
|
88
|
-
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
|
|
106
|
-
|
|
107
|
-
`specgate
|
|
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 | ✅
|
|
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
|
|
123
|
-
* needs `init`
|
|
124
|
-
*
|
|
125
|
-
* shows it, and `specgate config set profile full` makes that
|
|
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:
|
|
133
|
+
function renderGroups(groups: HelpSection[]): string {
|
|
132
134
|
return groups
|
|
133
|
-
.map((g) => section(g.title) + g.rows.map((r
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
307
|
+
const sub = (row.subcommands || []).find((s) => s.name === subName);
|
|
304
308
|
if (!sub) {
|
|
305
|
-
const expected = (row.subcommands || []).map((s
|
|
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
|
-
|
|
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
|
}
|
package/dist/bin/specgate.js
CHANGED
|
@@ -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
|
|
108
|
-
* needs `init`
|
|
109
|
-
*
|
|
110
|
-
* shows it, and `specgate config set profile full` makes that
|
|
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));
|
package/dist/bin/specgate.js.map
CHANGED
|
@@ -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
|
-
|
|
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;
|
|
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
|
-
|
|
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:
|
|
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);
|