@rsaglobaltech/specgate 0.21.0 โ 0.22.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +116 -0
- package/README.md +81 -96
- 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/DraftChecklist.js +5 -1
- package/dist/packages/core/src/domain/DraftChecklist.js.map +1 -1
- package/dist/packages/core/src/domain/QuotedText.js +5 -0
- package/dist/packages/core/src/domain/QuotedText.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/infrastructure/ChangeWorkspace.js +7 -3
- package/dist/packages/core/src/infrastructure/ChangeWorkspace.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/mcp-spec-driven/src/native-tools.js +1 -1
- package/dist/packages/mcp-spec-driven/src/native-tools.js.map +1 -1
- package/dist/scripts/agents/commands.js +8 -6
- 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/alm/cli.js +16 -4
- package/dist/scripts/alm/cli.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/cli/commands/alm/PrCommand.js +198 -0
- package/dist/scripts/cli/commands/alm/PrCommand.js.map +1 -0
- package/dist/scripts/cli/commands/change/ChangeCommand.js +32 -6
- 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/harness/RunCommand.js +4 -2
- package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/AdoptCommand.js +58 -0
- package/dist/scripts/cli/commands/project/AdoptCommand.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/quality/CheckCommand.js +12 -0
- package/dist/scripts/cli/commands/quality/CheckCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/DraftCommand.js +240 -27
- package/dist/scripts/cli/commands/spec/DraftCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/ExploreCommand.js +13 -13
- package/dist/scripts/cli/commands/spec/ExploreCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/StatusCommand.js +18 -6
- package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -1
- package/dist/scripts/docs/journey-storyboard.js +67 -44
- package/dist/scripts/docs/journey-storyboard.js.map +1 -1
- package/dist/scripts/docs/nav.js +156 -139
- package/dist/scripts/docs/nav.js.map +1 -1
- package/dist/scripts/docs/record-journey.js +139 -49
- package/dist/scripts/docs/record-journey.js.map +1 -1
- package/dist/scripts/docs/terminal-storyboard.js +15 -11
- 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 +182 -17
- package/dist/scripts/draft/brief-setup.js.map +1 -1
- package/dist/scripts/draft/drafting-guide.js +43 -1
- 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/lib/surface.js +2 -0
- 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/propose.js +8 -2
- package/dist/scripts/propose.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/base/AGENTS.md.tpl +6 -5
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,122 @@ The release process is in [`docs/release-process.md`](docs/release-process.md).
|
|
|
8
8
|
|
|
9
9
|
## [Unreleased]
|
|
10
10
|
|
|
11
|
+
## [0.22.1] โ 2026-10-20
|
|
12
|
+
|
|
13
|
+
Documentation a newcomer can follow, and the CLI's words brought in line with it.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- **The documentation, rewritten** after an audit of every page against the
|
|
18
|
+
CLI and the first real end-to-end run on Jira Cloud and GitHub. Three
|
|
19
|
+
sources of work (a change, a brief, a Jira ticket) into one lifecycle of
|
|
20
|
+
four verbs; the recorded journeys run `propose`, `apply` and `archive`;
|
|
21
|
+
archive comes before the pull request everywhere. New pages: *From a Jira
|
|
22
|
+
ticket* for a team lead setting it up, and *An existing codebase, with work
|
|
23
|
+
in Jira* (Maven profiles, a parent POM, Bitbucket and Jenkins).
|
|
24
|
+
- **The `/specgate:draft` agent command runs `propose --from-brief`**, and the
|
|
25
|
+
MCP write guard names `specgate propose <id>`.
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- `propose --help` lists `--no-push`; `alm --help` no longer says a ticket has
|
|
30
|
+
no acceptance criterion.
|
|
31
|
+
- `alm pr` asks for the least token it needs: Pull requests, read and write.
|
|
32
|
+
- `alm pr` is covered by an E2E journey and is not exposed as an MCP tool.
|
|
33
|
+
|
|
34
|
+
## [0.22.0] โ 2026-10-20
|
|
35
|
+
|
|
36
|
+
A brief shaped like what it becomes, checked before any agent drafts from it
|
|
37
|
+
(ADR-0038); and a Jira ticket as source text, as a brief is (ADR-0039). Tried
|
|
38
|
+
end to end on a real Jira Cloud board and GitHub: two stories went from the
|
|
39
|
+
ticket to Done, the board moved by its own automation.
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
|
|
43
|
+
- **New ids are free on every branch** (REQ-152). Two changes opened on two
|
|
44
|
+
branches both reserved REQ-002: reserving ids now reads every local and
|
|
45
|
+
remote-tracking branch. A change also reserves its scenario ids,
|
|
46
|
+
`scn_range` in `change.yaml` (REQ-157).
|
|
47
|
+
- **A monorepo's stack is read from its apps** (REQ-153). With npm workspaces,
|
|
48
|
+
`AGENTS.md` said "Stack: Node.js" for a Spring API in `apps/api`.
|
|
49
|
+
- **`specgate update` updates the `AGENTS.md` contract** (REQ-155), keeping its
|
|
50
|
+
facts and project rules, also when the project has no other agent files.
|
|
51
|
+
- **The harness's commits name the ticket** (REQ-156): `KAN-14 REQ-002: โฆ`.
|
|
52
|
+
- **`--agent` on an open change hands the agent its findings.** A second run
|
|
53
|
+
read a finished draft and changed nothing.
|
|
54
|
+
- **Credentials never travel over plain http**: `base_url` and `pr.base_url`
|
|
55
|
+
must be https (localhost excepted).
|
|
56
|
+
|
|
57
|
+
- **`specgate alm pull` works against Jira Cloud again.** Atlassian removed
|
|
58
|
+
`/rest/api/3/search` (HTTP 410); search now pages `/rest/api/3/search/jql`
|
|
59
|
+
by `nextPageToken`, up to 1000 issues.
|
|
60
|
+
- **Tokens created with scopes.** `cloud_id: auto` sends every Jira request
|
|
61
|
+
through `api.atlassian.com/ex/jira/<cloud id>`, the only door such a token
|
|
62
|
+
opens. Sent to the site, such a token is answered as anonymous โ HTTP 200 and
|
|
63
|
+
no issues โ which used to read as "No open issues"; it is now a 401 whose fix
|
|
64
|
+
names `cloud_id: auto`.
|
|
65
|
+
|
|
66
|
+
### Changed
|
|
67
|
+
|
|
68
|
+
- **A draft is not opened over a broken brief.** `propose --from-brief
|
|
69
|
+
<module>` refuses with `brief_not_ready` while the brief has an error: an
|
|
70
|
+
empty body, an empty module section, a module without its section once the
|
|
71
|
+
brief uses sections, or rules without examples. A brief with no module
|
|
72
|
+
sections โ a pasted email โ drafts as before.
|
|
73
|
+
- **`--new-brief` writes cards.** Why, a glossary, a `## Module:` section with
|
|
74
|
+
Rules, Examples and Questions, and notes, in place of the six sections.
|
|
75
|
+
|
|
76
|
+
### Added
|
|
77
|
+
|
|
78
|
+
- **From a Jira ticket** ([ADR-0039](docs/specs/adr/0039-the-ticket-as-source-text.md),
|
|
79
|
+
change `ticket-source`, [the page](docs/from-a-ticket.md)).
|
|
80
|
+
- `specgate propose --from-ticket <KEY | issue.json> --check`: the ticket's
|
|
81
|
+
intent, source, acceptance criteria and open questions (English, German or
|
|
82
|
+
Spanish headings, ADF or plain text, or `acceptance_field`), and a
|
|
83
|
+
Definition of Ready, T1โT9, each with a fix an analyst applies in Jira.
|
|
84
|
+
- `specgate propose --from-ticket <KEY>`: the change `<key>-<slug>` with
|
|
85
|
+
`ticket.md` as its source โ the D-checklist runs against the ticket, and an
|
|
86
|
+
edited copy is `ticket_copy_edited` โ the capability from `epics:`, and the
|
|
87
|
+
branch `feature/<KEY>-<slug>` (`bugfix/` for a bug). `--agent` drafts it,
|
|
88
|
+
confined, never writing the copy.
|
|
89
|
+
- `ticket_changed` when the ticket moved since the change was opened;
|
|
90
|
+
`ticket_key_missing` from `check` for a commit on the ticket's branch that
|
|
91
|
+
does not name it.
|
|
92
|
+
- `specgate alm pr <change>`: one pull request per ticket on GitHub, titled
|
|
93
|
+
with the key, its body the requirements and the gate, the archived change
|
|
94
|
+
included (REQ-159). Never merges; keeps what reviewers wrote.
|
|
95
|
+
- The ticket's branch is pushed as soon as it is created (REQ-148), so a
|
|
96
|
+
Jira automation moves the ticket when work starts.
|
|
97
|
+
- `AGENTS.md` names the ticket path (REQ-154); in a project connected to
|
|
98
|
+
Jira, `status` suggests `propose --from-ticket` (REQ-158).
|
|
99
|
+
- **Brief cards** ([ADR-0038](docs/specs/adr/0038-brief-cards.md), change `brief-cards`).
|
|
100
|
+
- `specgate propose --from-brief --check`: rules B1โB11 on the brief, each
|
|
101
|
+
with its fix. Errors (B1โB4) stop a draft; warnings (B5โB11) name vague
|
|
102
|
+
words, promises without a number, technology in a rule, modules too big,
|
|
103
|
+
actors never mentioned, non-goals in a rule, and conditions placed last
|
|
104
|
+
(EARS).
|
|
105
|
+
- `non_goals: [...]` in the front matter.
|
|
106
|
+
- `DRAFTING.md` quotes the module's section and lists its values and
|
|
107
|
+
questions: a rule becomes a requirement, an example a scenario, a question
|
|
108
|
+
a `questions.md` row.
|
|
109
|
+
- `propose --from-brief --agent` proposes the module sections from pasted
|
|
110
|
+
notes, once the fields are complete; a lost line puts the brief back
|
|
111
|
+
(`draft_brief_text_lost`).
|
|
112
|
+
- `propose --help` says when no brief is needed.
|
|
113
|
+
- **"Write the brief" in eight steps**, with a glossary, the EARS patterns and
|
|
114
|
+
the whole Lingo example, its outputs recorded.
|
|
115
|
+
|
|
116
|
+
### Fixed
|
|
117
|
+
|
|
118
|
+
- **Front matter shapes are reported as shapes.** `actors: [Admin]` was "There
|
|
119
|
+
is no `actors:` list" and `surfaces: web` passed silently; both are now
|
|
120
|
+
`brief_wrong_shape` with the line to write.
|
|
121
|
+
- **D6 no longer reads HTML comments as the brief.** A template's hint such as
|
|
122
|
+
"e.g. 48 hours" made 48 look stated.
|
|
123
|
+
- **`explore` prints a project snapshot**, no longer called a brief.
|
|
124
|
+
- **The guides use `propose --from-brief`** where they still said `draft`, and
|
|
125
|
+
forja's guide follows propose โ apply โ archive.
|
|
126
|
+
|
|
11
127
|
## [0.21.0] โ 2026-10-20
|
|
12
128
|
|
|
13
129
|
The daily loop becomes four verbs over the same gate (ADR-0035), the gate stops
|
package/README.md
CHANGED
|
@@ -12,126 +12,111 @@
|
|
|
12
12
|
|
|
13
13
|
</div>
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
Specgate keeps what your product must do in the repository, as numbered
|
|
16
|
+
requirements with Gherkin scenarios, next to the code and the tests that prove
|
|
17
|
+
them. A test that mentions a requirement's id (`REQ-007`) is the link, and the
|
|
18
|
+
traceability matrix is generated from those mentions. The gate, `specgate check`,
|
|
19
|
+
fails a pull request when a delivered requirement has no scenario or no test
|
|
20
|
+
that names it, or when your test suite fails.
|
|
18
21
|
|
|
19
|
-
|
|
22
|
+
## โก Install
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
You need **Node.js 22 or later**.
|
|
22
25
|
|
|
23
26
|
```bash
|
|
24
|
-
npm
|
|
25
|
-
|
|
26
|
-
cd your-repo # or an empty directory
|
|
27
|
-
specgate init # adopts the code that is there, touching none of it;
|
|
28
|
-
# scaffolds a new project where there is none
|
|
29
|
-
specgate ci init # the gate as a CI job โ GitHub, GitLab, Azure or Jenkins,
|
|
30
|
-
# detected from the repository
|
|
31
|
-
specgate check # the gate, locally
|
|
27
|
+
npm install --save-dev @rsaglobaltech/specgate # in a project with a package.json
|
|
28
|
+
npx specgate --help
|
|
32
29
|
```
|
|
33
30
|
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
Without installing it (an empty folder, a Java or Python project), prefix each
|
|
32
|
+
command with `npx @rsaglobaltech/specgate@latest` instead of `npx specgate`.
|
|
33
|
+
With Docker and no Node.js: `docker run --rm -v "$PWD:/workspace" ghcr.io/rsaglobaltech/specgate check`.
|
|
36
34
|
|
|
37
|
-
|
|
35
|
+
Then run `init` once:
|
|
38
36
|
|
|
39
|
-
|
|
37
|
+
- **In a repository that has code** (`package.json`, `pom.xml`, `go.mod`, โฆ),
|
|
38
|
+
`specgate init` adopts it in place: it adds `spec.md`, `features/` and
|
|
39
|
+
`docs/specs/`, and changes no source file.
|
|
40
|
+
- **In an empty folder**, `npx @rsaglobaltech/specgate@latest init` scaffolds a
|
|
41
|
+
new specification project. A wizard asks for the project's name, type, stack
|
|
42
|
+
and test toolchain, then creates it in a new sub-folder named after the
|
|
43
|
+
project, for example `./my-spec-driven-app/`. `--yes` takes every default
|
|
44
|
+
without asking. It writes the specification files, not application code.
|
|
45
|
+
|
|
46
|
+
Step by step, with every output shown: [Getting started](docs/getting-started.md).
|
|
47
|
+
|
|
48
|
+
## ๐ The lifecycle โ four verbs
|
|
40
49
|
|
|
41
50
|
```bash
|
|
42
|
-
specgate propose add-pdf-invoices # a change: proposal,
|
|
43
|
-
# write REQ-007 and its scenario in the delta, a test that mentions REQ-007, the code
|
|
44
|
-
specgate apply
|
|
45
|
-
specgate status # what is
|
|
51
|
+
specgate propose add-pdf-invoices # open a change: a proposal, a delta to write, REQ ids reserved
|
|
52
|
+
# write REQ-007 and its scenario in the delta, a test that mentions REQ-007, then the code
|
|
53
|
+
specgate apply REQ-007 # refused until a test names it and the gate passes; then Implemented
|
|
54
|
+
specgate status # what is left, and the next command to run
|
|
46
55
|
specgate archive add-pdf-invoices # once every requirement in it is Implemented
|
|
47
56
|
```
|
|
48
57
|
|
|
49
|
-
`specgate check`
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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`.
|
|
58
|
+
`specgate check` runs the same gate before a pull request and in CI;
|
|
59
|
+
`specgate ci init` writes the CI job for GitHub, GitLab, Azure or Jenkins.
|
|
60
|
+
You archive a change on its branch, before the pull request, so the spec and
|
|
61
|
+
the code reach review together.
|
|
57
62
|
|
|
58
|
-
##
|
|
63
|
+
## ๐ฅ Where work comes from
|
|
59
64
|
|
|
60
|
-
|
|
65
|
+
Every piece of work enters the same lifecycle. Pick the entry that matches what
|
|
66
|
+
you have:
|
|
61
67
|
|
|
62
|
-
|
|
|
63
|
-
|
|
|
64
|
-
|
|
|
65
|
-
|
|
|
66
|
-
|
|
|
67
|
-
| **L4** | Agent-driven delivery, one requirement at a time | `agents init`, `harness run` | ~1 week |
|
|
68
|
+
| You have | Run | Guide |
|
|
69
|
+
| --- | --- | --- |
|
|
70
|
+
| One behaviour to add or change | `specgate propose <change-id>` | [Propose one change](docs/start/existing-2-specify.md) |
|
|
71
|
+
| A client brief, or a plan for a new product | `specgate propose --from-brief` | [From a client brief](docs/from-a-brief.md) |
|
|
72
|
+
| A Jira story with acceptance criteria | `specgate propose --from-ticket <KEY>` | [From a Jira ticket](docs/from-a-ticket.md) |
|
|
68
73
|
|
|
69
74
|
## ๐ ๏ธ What it does
|
|
70
75
|
|
|
71
|
-
**A gate that does not lie.** `
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
**
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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`.
|
|
96
|
-
โ [Agents](docs/agents.md) ยท [The agent contract](docs/specs/agent-contract.md) ยท [Automation and MCP](docs/automation.md)
|
|
97
|
-
|
|
98
|
-
**Domain knowledge as a dependency.** A pack is a versioned, schema-validated
|
|
99
|
-
domain model. Install it, pin it, upgrade it deliberately โ and review the
|
|
100
|
-
upgrade as intent with `specops diff --as-change`, not as a file diff.
|
|
101
|
-
โ [Domain packs: 7 proven in the pilots, 11 starter examples](docs/domain-packs.md) ยท [Supply chain](docs/supply-chain.md)
|
|
102
|
-
|
|
103
|
-
**Unattended delivery.** `specgate harness run` drives plan โ agent โ verify โ
|
|
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
|
-
โ [The harness](docs/harness.md) ยท [Jira, Azure Boards and GitHub Issues](docs/alm.md)
|
|
109
|
-
|
|
110
|
-
**Tested as you install it.** Every release runs an end-to-end suite over every
|
|
111
|
-
command, against the packed tarball, on Linux, macOS and Windows; releases
|
|
112
|
-
since 0.14 come from building real products with it, from brief to running app.
|
|
76
|
+
- **A gate that does not lie.** `check` fails when a delivered requirement has
|
|
77
|
+
no scenario, no test that names it, or points at a missing file. A `Draft`
|
|
78
|
+
owes nothing yet, so the gate is green on day one.
|
|
79
|
+
โ [Validating](docs/validating.md)
|
|
80
|
+
- **Reviews that read intent.** A change is a delta: only what moves. The
|
|
81
|
+
reviewer reads the requirement, its scenario and its test.
|
|
82
|
+
โ [Your team's first pull request](docs/first-pr.md)
|
|
83
|
+
- **Drafts held to their source.** A draft from a brief or a ticket is checked
|
|
84
|
+
against that text: every value it uses must come from the source or be listed
|
|
85
|
+
as an assumption. โ [From a client brief](docs/from-a-brief.md)
|
|
86
|
+
- **Your agent works the same loop.** `specgate agents init` installs the loop
|
|
87
|
+
as slash commands for Claude Code, Cursor, Copilot and other agent tools; an
|
|
88
|
+
MCP server ships in the package. โ [Agent tools](docs/agents.md)
|
|
89
|
+
- **Unattended delivery.** `specgate harness run` hands each pending requirement
|
|
90
|
+
to your coding agent in its own git worktree and keeps only what passes the
|
|
91
|
+
gate. โ [The harness](docs/harness.md)
|
|
92
|
+
- **Domain knowledge as a dependency.** Versioned domain packs install
|
|
93
|
+
requirements a team has already proved. โ [Domain packs](docs/domain-packs.md)
|
|
94
|
+
- **Already on OpenSpec?** `specgate verify` checks what OpenSpec calls done
|
|
95
|
+
against your tests. โ [Already on OpenSpec](docs/openspec.md)
|
|
113
96
|
|
|
114
97
|
## ๐ How it compares
|
|
115
98
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
|
119
|
-
|
|
|
120
|
-
|
|
|
121
|
-
|
|
|
122
|
-
| Draft
|
|
123
|
-
|
|
|
124
|
-
|
|
|
125
|
-
|
|
|
99
|
+
Specgate does each of the things below. What the closest alternatives cover:
|
|
100
|
+
|
|
101
|
+
| Capability | [OpenSpec](https://github.com/Fission-AI/OpenSpec) | [spec-kit](https://github.com/github/spec-kit) | [Cursor rules](https://docs.cursor.com/context/rules-for-ai) |
|
|
102
|
+
| ----------------------------- | :------------------------------------------------: | :--------------------------------------------: | :----------------------------------------------------------: |
|
|
103
|
+
| Change lifecycle | โ
| โ | โ |
|
|
104
|
+
| Traceability matrix + CI gate | โ | โ ๏ธ | โ |
|
|
105
|
+
| Draft checked against a brief | โ | โ ๏ธ | โ |
|
|
106
|
+
| Work from Jira tickets | โ | โ | โ |
|
|
107
|
+
| Versioned domain packs | โ | โ ๏ธ | โ |
|
|
108
|
+
| Vendor-neutral | โ
| โ
| โ |
|
|
126
109
|
|
|
127
|
-
OpenSpec is the closest tool: if you want the change loop without
|
|
128
|
-
|
|
110
|
+
OpenSpec is the closest tool: if you want the change loop without an enforced
|
|
111
|
+
gate, it fits better. โ [Full comparison](docs/comparisons.md)
|
|
129
112
|
|
|
130
113
|
## ๐ Documentation
|
|
131
114
|
|
|
132
|
-
- [Getting started](docs/getting-started.md)
|
|
133
|
-
- [
|
|
134
|
-
- [
|
|
115
|
+
- [Getting started](docs/getting-started.md) โ install, pick your path, the four verbs
|
|
116
|
+
- [From a Jira ticket](docs/from-a-ticket.md) ยท [From a client brief](docs/from-a-brief.md)
|
|
117
|
+
- [Concepts](docs/concepts.md) โ the ideas and vocabulary behind every command
|
|
118
|
+
- [Commands](docs/commands.md) โ every command and flag
|
|
119
|
+
- [FAQ](docs/faq.md) ยท [Troubleshooting](docs/troubleshooting.md) ยท [Docs site](https://rsaglobaltech.github.io/specgate/)
|
|
135
120
|
|
|
136
121
|
## ๐งฐ Companion tools
|
|
137
122
|
|
|
@@ -140,8 +125,8 @@ OpenSpec is the closest tool: if you want the change loop without packs or an en
|
|
|
140
125
|
|
|
141
126
|
## ๐ค Contributing
|
|
142
127
|
|
|
143
|
-
PRs welcome โ see [CONTRIBUTING.md](CONTRIBUTING.md) (
|
|
144
|
-
|
|
128
|
+
PRs welcome โ see [CONTRIBUTING.md](CONTRIBUTING.md) ยท [MAINTAINERS.md](MAINTAINERS.md) ยท
|
|
129
|
+
[SECURITY.md](SECURITY.md) for private reports.
|
|
145
130
|
|
|
146
131
|
## ๐ License
|
|
147
132
|
|