@rsaglobaltech/specgate 0.8.1 → 0.10.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 +196 -0
- package/README.md +17 -25
- package/bin/specgate.ts +23 -5
- package/dist/bin/specgate.js +19 -4
- package/dist/bin/specgate.js.map +1 -1
- package/dist/packages/core/src/application/GenerateAgentPromptUseCase.js +56 -0
- package/dist/packages/core/src/application/GenerateAgentPromptUseCase.js.map +1 -1
- package/dist/packages/core/src/application/ValidateProjectUseCase.js +54 -0
- package/dist/packages/core/src/application/ValidateProjectUseCase.js.map +1 -1
- package/dist/packages/core/src/domain/AdversarialProbe.js +75 -0
- package/dist/packages/core/src/domain/AdversarialProbe.js.map +1 -0
- package/dist/packages/core/src/domain/AgentPrompt.js +52 -3
- package/dist/packages/core/src/domain/AgentPrompt.js.map +1 -1
- package/dist/packages/core/src/domain/DeclaredArtifacts.js +25 -0
- package/dist/packages/core/src/domain/DeclaredArtifacts.js.map +1 -1
- package/dist/packages/core/src/domain/DoneVerification.js +89 -0
- package/dist/packages/core/src/domain/DoneVerification.js.map +1 -0
- package/dist/packages/core/src/domain/GateCommandIntegrity.js +139 -0
- package/dist/packages/core/src/domain/GateCommandIntegrity.js.map +1 -0
- package/dist/packages/core/src/domain/GherkinQuality.js +19 -3
- package/dist/packages/core/src/domain/GherkinQuality.js.map +1 -1
- package/dist/packages/core/src/domain/HarnessConfig.js +6 -0
- package/dist/packages/core/src/domain/HarnessConfig.js.map +1 -1
- package/dist/packages/core/src/domain/MultiStack.js +96 -0
- package/dist/packages/core/src/domain/MultiStack.js.map +1 -0
- package/dist/packages/core/src/domain/NewRequirement.js +46 -0
- package/dist/packages/core/src/domain/NewRequirement.js.map +1 -0
- package/dist/packages/core/src/domain/Precedents.js +96 -0
- package/dist/packages/core/src/domain/Precedents.js.map +1 -0
- package/dist/packages/core/src/domain/RequirementPlan.js +1 -0
- package/dist/packages/core/src/domain/RequirementPlan.js.map +1 -1
- package/dist/packages/core/src/domain/RequirementRemoval.js +161 -0
- package/dist/packages/core/src/domain/RequirementRemoval.js.map +1 -0
- package/dist/packages/core/src/domain/ScenarioCoverage.js +178 -0
- package/dist/packages/core/src/domain/ScenarioCoverage.js.map +1 -0
- package/dist/packages/core/src/domain/SpecSections.js +206 -0
- package/dist/packages/core/src/domain/SpecSections.js.map +1 -0
- package/dist/packages/core/src/domain/TestCommand.js +82 -0
- package/dist/packages/core/src/domain/TestCommand.js.map +1 -0
- package/dist/packages/core/src/domain/TraceabilityFormat.js +45 -2
- package/dist/packages/core/src/domain/TraceabilityFormat.js.map +1 -1
- package/dist/packages/core/src/infrastructure/HarnessConfigFile.js +31 -0
- package/dist/packages/core/src/infrastructure/HarnessConfigFile.js.map +1 -1
- package/dist/packages/core/test/unit/adversarial-probe.test.js +81 -0
- package/dist/packages/core/test/unit/adversarial-probe.test.js.map +1 -0
- package/dist/packages/core/test/unit/done-verification.test.js +84 -0
- package/dist/packages/core/test/unit/done-verification.test.js.map +1 -0
- package/dist/packages/core/test/unit/gate-command-integrity.test.js +114 -0
- package/dist/packages/core/test/unit/gate-command-integrity.test.js.map +1 -0
- package/dist/packages/core/test/unit/gherkin-quality.test.js +28 -0
- package/dist/packages/core/test/unit/gherkin-quality.test.js.map +1 -1
- package/dist/packages/core/test/unit/multi-stack.test.js +86 -0
- package/dist/packages/core/test/unit/multi-stack.test.js.map +1 -0
- package/dist/packages/core/test/unit/new-requirement.test.js +67 -0
- package/dist/packages/core/test/unit/new-requirement.test.js.map +1 -0
- package/dist/packages/core/test/unit/precedents.test.js +99 -0
- package/dist/packages/core/test/unit/precedents.test.js.map +1 -0
- package/dist/packages/core/test/unit/requirement-removal.test.js +124 -0
- package/dist/packages/core/test/unit/requirement-removal.test.js.map +1 -0
- package/dist/packages/core/test/unit/scenario-coverage.test.js +146 -0
- package/dist/packages/core/test/unit/scenario-coverage.test.js.map +1 -0
- package/dist/packages/core/test/unit/spec-sections.test.js +146 -0
- package/dist/packages/core/test/unit/spec-sections.test.js.map +1 -0
- package/dist/packages/core/test/unit/test-command.test.js +81 -0
- package/dist/packages/core/test/unit/test-command.test.js.map +1 -0
- package/dist/packages/core/test/unit/validate-project.test.js +21 -0
- package/dist/packages/core/test/unit/validate-project.test.js.map +1 -1
- package/dist/scripts/agents/commands.js +1 -1
- package/dist/scripts/agents/commands.js.map +1 -1
- package/dist/scripts/agents/init.js +59 -15
- package/dist/scripts/agents/init.js.map +1 -1
- package/dist/scripts/change/instructions.js +2 -2
- package/dist/scripts/change/instructions.js.map +1 -1
- package/dist/scripts/check.js +10 -0
- package/dist/scripts/check.js.map +1 -0
- package/dist/scripts/cli/commands/change/ChangeCommand.js +2 -2
- package/dist/scripts/cli/commands/change/ChangeCommand.js.map +1 -1
- package/dist/scripts/cli/commands/config/CiInitCommand.js +1 -1
- package/dist/scripts/cli/commands/config/CiInitCommand.js.map +1 -1
- package/dist/scripts/cli/commands/harness/RunCommand.js +214 -9
- package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -1
- package/dist/scripts/cli/commands/pack/InferPackCommand.js +331 -31
- package/dist/scripts/cli/commands/pack/InferPackCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/AdoptCommand.js +86 -9
- package/dist/scripts/cli/commands/project/AdoptCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/InitProjectCommand.js +286 -45
- package/dist/scripts/cli/commands/project/InitProjectCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/UpdateCommand.js +118 -8
- package/dist/scripts/cli/commands/project/UpdateCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/CheckCommand.js +184 -0
- package/dist/scripts/cli/commands/quality/CheckCommand.js.map +1 -0
- package/dist/scripts/cli/commands/quality/DoctorCommand.js +20 -2
- package/dist/scripts/cli/commands/quality/DoctorCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/FixCommand.js +1 -1
- package/dist/scripts/cli/commands/quality/FixCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/ReportCommand.js +1 -1
- package/dist/scripts/cli/commands/quality/ReportCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js +406 -24
- package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/DoneCommand.js +108 -0
- package/dist/scripts/cli/commands/spec/DoneCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/NewCommand.js +178 -0
- package/dist/scripts/cli/commands/spec/NewCommand.js.map +1 -0
- package/dist/scripts/cli/commands/spec/PlanCommand.js +8 -2
- package/dist/scripts/cli/commands/spec/PlanCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/ReqCommand.js +124 -4
- package/dist/scripts/cli/commands/spec/ReqCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/StatusCommand.js +84 -32
- package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -1
- package/dist/scripts/docs/build-site.js +145 -35
- package/dist/scripts/docs/build-site.js.map +1 -1
- package/dist/scripts/docs/components.js +208 -0
- package/dist/scripts/docs/components.js.map +1 -0
- package/dist/scripts/docs/highlight.js +180 -0
- package/dist/scripts/docs/highlight.js.map +1 -0
- package/dist/scripts/docs/icons.js +63 -0
- package/dist/scripts/docs/icons.js.map +1 -0
- package/dist/scripts/docs/nav.js +9 -3
- package/dist/scripts/docs/nav.js.map +1 -1
- package/dist/scripts/gen_mcp_tools.js +22 -2
- package/dist/scripts/gen_mcp_tools.js.map +1 -1
- package/dist/scripts/harness/init.js +101 -40
- package/dist/scripts/harness/init.js.map +1 -1
- package/dist/scripts/harness/worktree-lock.js +161 -0
- package/dist/scripts/harness/worktree-lock.js.map +1 -0
- package/dist/scripts/infer_pack.js +4 -1
- package/dist/scripts/infer_pack.js.map +1 -1
- package/dist/scripts/lib/surface.js +88 -38
- package/dist/scripts/lib/surface.js.map +1 -1
- package/dist/scripts/new.js +10 -0
- package/dist/scripts/new.js.map +1 -0
- package/dist/scripts/plugin/gate-hook.js +2 -2
- package/dist/scripts/plugin/gate-hook.js.map +1 -1
- package/package.json +5 -2
- package/templates/adopt/AI_RULES.md.tpl +1 -1
- package/templates/adopt/spec.md.tpl +4 -4
- package/templates/base/spec.md.tpl +12 -0
- package/templates/ci/azure.yml.tpl +2 -2
- package/templates/ci/github.yml.tpl +2 -2
- package/templates/ci/gitlab.yml.tpl +1 -1
- package/templates/ci/jenkins.tpl +1 -1
- package/templates/contracts/test-strategy.md.tpl +2 -2
- package/templates/harness/harness.config.yaml.tpl +3 -3
- package/templates/harness/prompt-prefix.md.tpl +2 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-hook.js","sourceRoot":"","sources":["../../../scripts/plugin/gate-hook.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCH,wCAaC;AAGD,wCASC;AAOD,wBAsBC;
|
|
1
|
+
{"version":3,"file":"gate-hook.js","sourceRoot":"","sources":["../../../scripts/plugin/gate-hook.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsaglobaltech/specgate",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Specs as executable contracts
|
|
3
|
+
"version": "0.10.0",
|
|
4
|
+
"description": "Specs as executable contracts \u2014 requirements, scenarios and traceability that CI enforces.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "commonjs",
|
|
7
7
|
"bin": {
|
|
@@ -101,5 +101,8 @@
|
|
|
101
101
|
"prettier": "^3.8.3",
|
|
102
102
|
"typescript": "^6.0.3",
|
|
103
103
|
"typescript-eslint": "^8.59.3"
|
|
104
|
+
},
|
|
105
|
+
"overrides": {
|
|
106
|
+
"qs": "^6.16.0"
|
|
104
107
|
}
|
|
105
108
|
}
|
|
@@ -23,5 +23,5 @@ Rules for any AI coding agent (and any human) working on this repository.
|
|
|
23
23
|
|
|
24
24
|
1. The scenario(s) for the requirement pass.
|
|
25
25
|
2. `{{TEST_CMD}}` passes.
|
|
26
|
-
3. `specgate validate . --strict
|
|
26
|
+
3. `specgate validate . --strict` passes.
|
|
27
27
|
4. The traceability row is updated via `specgate done REQ-NNN`.
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
> Adopted into Spec-Driven Development on an existing codebase (brownfield).
|
|
4
4
|
> `specgate req add "<title>"` reserves the next `REQ-NNN` and adds its row to
|
|
5
|
-
> `docs/specs/traceability.md`
|
|
6
|
-
>
|
|
7
|
-
>
|
|
8
|
-
>
|
|
5
|
+
> `docs/specs/traceability.md` and a draft `## REQ-NNN` section below — rewrite
|
|
6
|
+
> its obligation. It does not write a `.feature`: add a Gherkin scenario under
|
|
7
|
+
> `features/`, then `specgate req link REQ-NNN --feature … --test …` to point
|
|
8
|
+
> the row at both. Existing behaviour is retro-filled requirement by
|
|
9
9
|
> requirement — start with the ones your team is actively changing.
|
|
10
10
|
|
|
11
11
|
## Context
|
|
@@ -46,6 +46,18 @@ Define functional requirements, domain language, and acceptance criteria clearly
|
|
|
46
46
|
|
|
47
47
|
| ID | Requirement | Priority | Status |
|
|
48
48
|
|---|---|---|---|
|
|
49
|
+
| REQ-000 | The service reports its own health | Must | Draft |
|
|
50
|
+
|
|
51
|
+
### REQ-000 — The service reports its own health
|
|
52
|
+
|
|
53
|
+
The system MUST expose a health endpoint that answers with status 200 and a
|
|
54
|
+
payload naming the service as `UP`, so that a deployment can be checked without
|
|
55
|
+
reading logs.
|
|
56
|
+
|
|
57
|
+
> The starter requirement, wired end to end: this prose, the row in
|
|
58
|
+
> `docs/specs/traceability.md`, and `features/core/health.feature`. Rewrite it
|
|
59
|
+
> for your own first requirement, or remove all three together —
|
|
60
|
+
> `specgate validate --strict` reports any of them going missing on its own.
|
|
49
61
|
|
|
50
62
|
## 9. Non-functional requirements
|
|
51
63
|
| ID | Requirement | Quality attribute | Status |
|
|
@@ -16,8 +16,8 @@ steps:
|
|
|
16
16
|
versionSpec: '22.x'
|
|
17
17
|
displayName: Use Node.js 22
|
|
18
18
|
|
|
19
|
-
- script: npx @rsaglobaltech/specgate@{{SPECGATE_VERSION}} validate . --strict
|
|
20
|
-
displayName: Validate specs (
|
|
19
|
+
- script: npx @rsaglobaltech/specgate@{{SPECGATE_VERSION}} validate . --strict
|
|
20
|
+
displayName: Validate specs (the gate)
|
|
21
21
|
|
|
22
22
|
# Supply-chain gate: fails when rendered pack content no longer matches the
|
|
23
23
|
# digest pinned in .specops.lock. Skipped when no packs are installed.
|
|
@@ -16,8 +16,8 @@ jobs:
|
|
|
16
16
|
- uses: actions/setup-node@v4
|
|
17
17
|
with:
|
|
18
18
|
node-version: '22'
|
|
19
|
-
- name: Validate specs (
|
|
20
|
-
run: npx @rsaglobaltech/specgate@{{SPECGATE_VERSION}} validate . --strict
|
|
19
|
+
- name: Validate specs (the gate)
|
|
20
|
+
run: npx @rsaglobaltech/specgate@{{SPECGATE_VERSION}} validate . --strict
|
|
21
21
|
# Supply-chain gate: fails when the rendered pack content no longer
|
|
22
22
|
# matches the digest pinned in .specops.lock — a moved tag, a rewritten
|
|
23
23
|
# history, or a hand-edited generated file. Skipped when the project
|
|
@@ -5,7 +5,7 @@ spec-gate:
|
|
|
5
5
|
image: node:22
|
|
6
6
|
stage: test
|
|
7
7
|
script:
|
|
8
|
-
- npx @rsaglobaltech/specgate@{{SPECGATE_VERSION}} validate . --strict
|
|
8
|
+
- npx @rsaglobaltech/specgate@{{SPECGATE_VERSION}} validate . --strict
|
|
9
9
|
# Supply-chain gate: fails when rendered pack content no longer matches the
|
|
10
10
|
# digest pinned in .specops.lock. Skipped when no packs are installed.
|
|
11
11
|
- >
|
package/templates/ci/jenkins.tpl
CHANGED
|
@@ -8,7 +8,7 @@ pipeline {
|
|
|
8
8
|
stages {
|
|
9
9
|
stage('Spec gate') {
|
|
10
10
|
steps {
|
|
11
|
-
sh 'npx @rsaglobaltech/specgate@{{SPECGATE_VERSION}} validate . --strict
|
|
11
|
+
sh 'npx @rsaglobaltech/specgate@{{SPECGATE_VERSION}} validate . --strict'
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
// Supply-chain gate: fails when rendered pack content no longer
|
|
@@ -44,7 +44,7 @@ expected interactions (Pact files) and providers verify them in CI before any re
|
|
|
44
44
|
1. Write a failing Pact test describing the expected HTTP interaction.
|
|
45
45
|
2. Run the Pact test — it generates `contracts/pacts/{{CONSUMER_SERVICE}}-{{PROVIDER_SERVICE}}.json`.
|
|
46
46
|
3. Commit the Pact file alongside the consumer feature.
|
|
47
|
-
4. Open a PR — CI runs `validate --strict
|
|
47
|
+
4. Open a PR — CI runs `validate --strict` to confirm the Pact file is registered.
|
|
48
48
|
|
|
49
49
|
### Provider side
|
|
50
50
|
|
|
@@ -83,7 +83,7 @@ Before merging any change to a `contracts/` schema file:
|
|
|
83
83
|
| Pact interactions per endpoint | ≥ 1 happy path + ≥ 1 error path |
|
|
84
84
|
| Provider verification pass rate | 100% on main |
|
|
85
85
|
| Schema lint errors | 0 on main |
|
|
86
|
-
|
|
|
86
|
+
| The gate (`validate --strict`) | Must pass on every PR |
|
|
87
87
|
|
|
88
88
|
## References
|
|
89
89
|
|
|
@@ -34,7 +34,7 @@ harness_version: 1
|
|
|
34
34
|
#
|
|
35
35
|
# An explicit `agent:` wins over a profile.
|
|
36
36
|
|
|
37
|
-
# An *additional* gate, on top of the `validate --strict
|
|
37
|
+
# An *additional* gate, on top of the `validate --strict` the harness always
|
|
38
38
|
# runs. Left commented out when no build file gave it away — an unset key is
|
|
39
39
|
# safe, whereas a placeholder that exits 0 would be a gate that always passes.
|
|
40
40
|
#
|
|
@@ -45,8 +45,8 @@ harness_version: 1
|
|
|
45
45
|
# {scenario} SCN-007
|
|
46
46
|
# {feature_file} features/billing/refund.feature
|
|
47
47
|
#
|
|
48
|
-
# Worth using.
|
|
49
|
-
#
|
|
48
|
+
# Worth using. `validate` checks that the requirement's declared files exist;
|
|
49
|
+
# only a test command checks that they do what the scenario says — without one
|
|
50
50
|
# of these, a requirement can be marked Implemented with its scenario never run:
|
|
51
51
|
#
|
|
52
52
|
# test_cmd: "npm run verify && npm run test:e2e -- {feature_file}"
|
|
@@ -28,16 +28,13 @@ from a domain pack:
|
|
|
28
28
|
|
|
29
29
|
- the implementation source tree.
|
|
30
30
|
- the tests.
|
|
31
|
-
|
|
32
|
-
are code, not specification. This is the one place inside `features/` you
|
|
33
|
-
own.
|
|
31
|
+
{{STEP_DEFS_LINE}}
|
|
34
32
|
|
|
35
33
|
# Execution policy
|
|
36
34
|
|
|
37
35
|
1. Read the requirement and its scenario under `features/` before writing
|
|
38
36
|
anything.
|
|
39
|
-
|
|
40
|
-
reason** — a missing implementation, not a typo in a step.
|
|
37
|
+
{{SCENARIO_STEP}}
|
|
41
38
|
3. Implement the smallest thing that makes it pass. Unit-test the pure parts:
|
|
42
39
|
the scenario proves the wiring, the unit tests pin the rules.
|
|
43
40
|
4. Run the gate before declaring done:
|