@rsaglobaltech/specgate 0.8.1 → 0.9.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 +98 -0
- package/README.md +8 -8
- package/bin/specgate.ts +13 -2
- package/dist/bin/specgate.js +11 -1
- 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 +68 -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/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/Precedents.js +96 -0
- package/dist/packages/core/src/domain/Precedents.js.map +1 -0
- 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 +37 -1
- 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 +83 -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/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/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 +1 -1
- 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/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 +203 -4
- 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 +81 -4
- package/dist/scripts/cli/commands/project/AdoptCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/InitProjectCommand.js +245 -45
- package/dist/scripts/cli/commands/project/InitProjectCommand.js.map +1 -1
- 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 +340 -18
- 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/PlanCommand.js +7 -1
- package/dist/scripts/cli/commands/spec/PlanCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/ReqCommand.js +112 -2
- package/dist/scripts/cli/commands/spec/ReqCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/StatusCommand.js +2 -2
- 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 +35 -7
- package/dist/scripts/lib/surface.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/prompt-prefix.md.tpl +2 -5
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,104 @@ and [Semantic Versioning](https://semver.org/).
|
|
|
6
6
|
|
|
7
7
|
The release process is in [`docs/release-process.md`](docs/release-process.md).
|
|
8
8
|
|
|
9
|
+
## [Unreleased]
|
|
10
|
+
|
|
11
|
+
## [0.9.0] — 2026-10-06
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **`prompt_precedents` shows the agent an accepted requirement from the same
|
|
16
|
+
bounded context.** Everything else in the prompt is normative — facts,
|
|
17
|
+
Gherkin, `AI_RULES.md`, the definition of done — and none of it is an
|
|
18
|
+
example. An agent with no conversation history has never seen what an
|
|
19
|
+
accepted implementation looks like in your repository, so it invents a house
|
|
20
|
+
style and the next attempt is spent correcting it.
|
|
21
|
+
|
|
22
|
+
Three rules keep the section from doing harm: the same bounded context only
|
|
23
|
+
(a precedent from elsewhere teaches conventions that do not apply, with the
|
|
24
|
+
authority of having been accepted), `Verified` rather than `Implemented`
|
|
25
|
+
(one means the code exists, the other means somebody checked it), and an
|
|
26
|
+
earlier requirement only. It says in as many words that it is an example of
|
|
27
|
+
shape and not of behaviour. Nothing qualifying means no section rather than
|
|
28
|
+
an empty one, and a moved artifact never stops a run.
|
|
29
|
+
|
|
30
|
+
Off by default. Closes #106.
|
|
31
|
+
|
|
32
|
+
- **`pack infer` stops making five corrections you had to make by hand.** The
|
|
33
|
+
same operation inferred from two scenarios is proposed once rather than twice
|
|
34
|
+
with two ids; a `When` that reads becomes a query with a `QRY-` id, which the
|
|
35
|
+
pack model already distinguished and inference did not; names drop glue words,
|
|
36
|
+
so "10 more vehicles enter the facility" gives `MoreVehiclesEnterFacility`
|
|
37
|
+
rather than spending its four-word budget on "the"; field names are proposed
|
|
38
|
+
from `<placeholders>` and `key: value` pairs, each with a `TODO` for its type;
|
|
39
|
+
and `--from` repeats and accepts a directory, so a command shared by three
|
|
40
|
+
files is proposed once.
|
|
41
|
+
|
|
42
|
+
`--llm` is *not* here: ADR-0014 defers it, and reopening that needs an ADR
|
|
43
|
+
rather than a flag. Everything above stays a skeleton to review with every
|
|
44
|
+
guess carrying its `TODO` — an inference that stops looking like a guess is
|
|
45
|
+
the failure mode the ADR names. Closes #32.
|
|
46
|
+
|
|
47
|
+
Also fixes a latent bug in the renderer: an empty list rendered as a bare `[]`
|
|
48
|
+
on its own line, which the project's YAML reader rejects. Nothing had an empty
|
|
49
|
+
list to render until queries arrived.
|
|
50
|
+
|
|
51
|
+
- **`adversary_profile` lets a second agent try to break a green
|
|
52
|
+
implementation.** The advisory reviewer that already exists returns prose; an
|
|
53
|
+
adversary returns a test, and a test either fails or it does not. After the
|
|
54
|
+
gate passes and the work is committed, it is asked for one case the
|
|
55
|
+
requirement should handle and might not; the project's tests then run again
|
|
56
|
+
with it in place.
|
|
57
|
+
|
|
58
|
+
A failing probe is a recorded warning and **never** a verdict. An adversary
|
|
59
|
+
can always assert a behaviour nobody specified, so letting it fail the run
|
|
60
|
+
would block correct work and make it a second judge — the gate stays the only
|
|
61
|
+
one. Runs once per requirement, on a green gate only, and its writes are
|
|
62
|
+
discarded so the branch carries the implementer's work alone. Closes #107.
|
|
63
|
+
|
|
64
|
+
- **`harness run --verbose`** streams the gate command's output as it runs,
|
|
65
|
+
on stderr. Without it the output only appeared when the gate failed, so a run
|
|
66
|
+
that takes minutes showed nothing and a hung test looked like a working one.
|
|
67
|
+
Stdout stays reserved for `--format json`. Closes #34.
|
|
68
|
+
|
|
69
|
+
### Fixed
|
|
70
|
+
|
|
71
|
+
- **Every place that recommends a gate now recommends the gate.** `--strict`
|
|
72
|
+
became the one gate in #174, but `specgate --help --all`, its example,
|
|
73
|
+
`status`, `fix`, `change`, the instructions written for agents, the MCP tool
|
|
74
|
+
description, the README, seven documentation pages and two templates still
|
|
75
|
+
sold `--strict-tdd` — which passes a requirement whose test file is gone.
|
|
76
|
+
The individual `--strict-*` flags keep working.
|
|
77
|
+
- **`req add|link|rm|done --help` answer with the subcommand's own help.** They
|
|
78
|
+
printed the parent usage, whose last line tells you to run exactly that.
|
|
79
|
+
- **The `spec.md` written by `adopt` describes `req add` as it is.** It still
|
|
80
|
+
said `req add` "does not write a section here" after it started writing one.
|
|
81
|
+
|
|
82
|
+
- **`git worktree add` raced itself under `--concurrency`.** Each requirement
|
|
83
|
+
runs in its own process and every one creates a worktree in the same
|
|
84
|
+
repository; git writes `.git/worktrees/<name>/` incrementally, so a sibling
|
|
85
|
+
read an entry that was half there and failed with `failed to read …
|
|
86
|
+
/commondir`. Worse, the failure was *attributed*: the run reported the
|
|
87
|
+
requirement as failed with "the agent produced no files", so a race in the
|
|
88
|
+
harness read as the agent's fault.
|
|
89
|
+
|
|
90
|
+
`git worktree add` is now serialised across processes with a lock directory
|
|
91
|
+
in `.git/`. Only the creation is inside it — the agent and the gate stay
|
|
92
|
+
parallel. Closes #158.
|
|
93
|
+
|
|
94
|
+
- **MCP could edit the specification it was being measured against.** The
|
|
95
|
+
prompt said not to; nothing enforced it. Tools that write a protected path
|
|
96
|
+
are refused unless a change is open, with the list declared once on the
|
|
97
|
+
command surface and the escape hatch written down in `.csda/config.json`
|
|
98
|
+
rather than passed with the call. Closes #138.
|
|
99
|
+
|
|
100
|
+
### Changed
|
|
101
|
+
|
|
102
|
+
- **Pull requests target `develop`, not `main`.** `main` is the branch releases
|
|
103
|
+
are cut from and the first thing an evaluator sees, so it does not get to be
|
|
104
|
+
red — not even briefly. A green `develop` is fast-forwarded into `main` and
|
|
105
|
+
the release is cut from there. CI runs on pushes to both.
|
|
106
|
+
|
|
9
107
|
## [0.8.1] — 2026-09-01
|
|
10
108
|
|
|
11
109
|
### Changed
|
package/README.md
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
**Specs as executable contracts — requirements, scenarios and traceability that CI enforces.**
|
|
6
6
|
|
|
7
7
|
[](https://github.com/rsaglobaltech/specgate/actions/workflows/ci.yml)
|
|
8
|
-
[](https://www.npmjs.com/package/@rsaglobaltech/specgate)
|
|
9
|
+
[](https://github.com/rsaglobaltech/specgate/pkgs/container/specgate)
|
|
10
10
|
[](https://rsaglobaltech.github.io/specgate/)
|
|
11
11
|
[](#-license)
|
|
12
12
|
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
|
|
21
21
|
## ⚡ Start
|
|
22
22
|
|
|
23
|
-
> **
|
|
24
|
-
>
|
|
23
|
+
> **The npm package is scoped; the binary is not.** `spec-gate` already claims the
|
|
24
|
+
> unscoped name ([ADR-0024](docs/specs/adr/0024-the-tool-is-renamed-the-format-is-not.md)). You type `specgate`; `csda` still works too.
|
|
25
25
|
|
|
26
26
|
**Existing codebase** — the common enterprise case:
|
|
27
27
|
|
|
@@ -41,7 +41,7 @@ npx @rsaglobaltech/specgate@latest init # interactive wizard
|
|
|
41
41
|
Requires **Node.js ≥ 22** — or none at all with the Docker image:
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
|
-
docker run --rm -v "$PWD:/workspace" ghcr.io/rsaglobaltech/specgate validate . --strict
|
|
44
|
+
docker run --rm -v "$PWD:/workspace" ghcr.io/rsaglobaltech/specgate validate . --strict
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
→ [Getting started](docs/getting-started.md) · [Quickstart for joiners](docs/quickstart.md)
|
|
@@ -53,7 +53,7 @@ Each level is useful on its own and never requires the ones above it.
|
|
|
53
53
|
| Level | You get | Commands | Cost |
|
|
54
54
|
| --- | --- | --- | --- |
|
|
55
55
|
| **L1** | Traceable specs in your repo | `onboard`, `adopt` | ~1 hour |
|
|
56
|
-
| **L2** | A PR gate enforcing spec and test coverage | `validate --strict
|
|
56
|
+
| **L2** | A PR gate enforcing spec and test coverage | `validate --strict` | ~1 hour |
|
|
57
57
|
| **L3** | Versioned, reusable domain requirements | `specops add / sync / diff` | ~1 day |
|
|
58
58
|
| **L4** | Agent-driven delivery, one requirement at a time | `agents init`, `harness run` | ~1 week |
|
|
59
59
|
|
|
@@ -66,8 +66,8 @@ closes them.
|
|
|
66
66
|
→ [Quickstart](docs/quickstart.md) · [Command reference](docs/commands.md)
|
|
67
67
|
|
|
68
68
|
**Specs that are checked.** `specgate validate` fails the build when a requirement
|
|
69
|
-
has no scenario, no test, or no row in the traceability matrix. `--strict
|
|
70
|
-
|
|
69
|
+
has no scenario, no test, or no row in the traceability matrix. `--strict` — the
|
|
70
|
+
gate — also fails one past Draft without a test, or linked to a missing file.
|
|
71
71
|
→ [Writing specs](docs/writing-specs.md) · [Validating](docs/validating.md)
|
|
72
72
|
|
|
73
73
|
**Changes you review as intent.** Modify a spec that already shipped through a
|
package/bin/specgate.ts
CHANGED
|
@@ -86,8 +86,8 @@ const EXAMPLES =
|
|
|
86
86
|
"Generate a new project from a config file"
|
|
87
87
|
) +
|
|
88
88
|
example(
|
|
89
|
-
`npx @rsaglobaltech/specgate@latest validate ./projects/my-app --strict
|
|
90
|
-
"Validate with the
|
|
89
|
+
`npx @rsaglobaltech/specgate@latest validate ./projects/my-app --strict`,
|
|
90
|
+
"Validate with the gate"
|
|
91
91
|
) +
|
|
92
92
|
example(
|
|
93
93
|
`npx @rsaglobaltech/specgate@latest expand --pack-root ./domain-packs \\\n --pack parking-management/backend --project-dir ./projects/my-app \\\n --var PROJECT_NAME="My App" --var PROJECT_SLUG=my-app --var DOMAIN="parking ops"`,
|
|
@@ -313,6 +313,15 @@ function dispatchValidate(validateArgs: string[]): void {
|
|
|
313
313
|
const script = resolveScript(["validate_specs.js"]);
|
|
314
314
|
ensureExecutable(script);
|
|
315
315
|
|
|
316
|
+
// `--help` before the positional check. Asking a command what it does must
|
|
317
|
+
// never be a usage error — `specgate validate --help` answered "expects
|
|
318
|
+
// exactly one positional argument", which is the tool refusing to explain
|
|
319
|
+
// itself to someone who is trying to learn it.
|
|
320
|
+
if (validateArgs.includes("--help") || validateArgs.includes("-h")) {
|
|
321
|
+
runNodeScript(script, ["--help"]);
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
|
|
316
325
|
const positional = validateArgs.filter((a) => !a.startsWith("-"));
|
|
317
326
|
if (positional.length !== 1) {
|
|
318
327
|
error(`'validate' expects exactly one positional argument: <project_dir>`);
|
|
@@ -320,10 +329,12 @@ function dispatchValidate(validateArgs: string[]): void {
|
|
|
320
329
|
process.exit(2);
|
|
321
330
|
}
|
|
322
331
|
const VALIDATE_FLAGS = new Set([
|
|
332
|
+
"--strict",
|
|
323
333
|
"--strict-tdd",
|
|
324
334
|
"--strict-scenarios",
|
|
325
335
|
"--strict-requirements",
|
|
326
336
|
"--strict-links",
|
|
337
|
+
"--strict-coverage",
|
|
327
338
|
"--against-lock",
|
|
328
339
|
"--json",
|
|
329
340
|
]);
|
package/dist/bin/specgate.js
CHANGED
|
@@ -96,7 +96,7 @@ function example(line, comment) {
|
|
|
96
96
|
const EXAMPLES = example(`npx @rsaglobaltech/specgate@latest init`, "Generate a new project (wizard)") +
|
|
97
97
|
example(`npx @rsaglobaltech/specgate@latest adopt --project-dir ./my-existing-repo`, "Adopt SDD on an existing codebase") +
|
|
98
98
|
example(`npx @rsaglobaltech/specgate@latest init --config ./project.config --out ./projects`, "Generate a new project from a config file") +
|
|
99
|
-
example(`npx @rsaglobaltech/specgate@latest validate ./projects/my-app --strict
|
|
99
|
+
example(`npx @rsaglobaltech/specgate@latest validate ./projects/my-app --strict`, "Validate with the gate") +
|
|
100
100
|
example(`npx @rsaglobaltech/specgate@latest expand --pack-root ./domain-packs \\\n --pack parking-management/backend --project-dir ./projects/my-app \\\n --var PROJECT_NAME="My App" --var PROJECT_SLUG=my-app --var DOMAIN="parking ops"`, "Apply a local pack") +
|
|
101
101
|
example(`npx @rsaglobaltech/specgate@latest expand --pack-repo https://github.com/acme/parking-specops.git \\\n --pack-version v0.1.0 --pack backend --project-dir ./projects/smart-parking \\\n --var PROJECT_NAME="Smart Parking"`, "Apply a remote pack pinned to a git tag") +
|
|
102
102
|
example(`npx @rsaglobaltech/specgate@latest specops sync --project-dir ./projects/smart-parking`, "Re-expand everything in .specops.lock / specops.config.yaml") +
|
|
@@ -276,6 +276,14 @@ function dispatchInit(passThrough) {
|
|
|
276
276
|
function dispatchValidate(validateArgs) {
|
|
277
277
|
const script = resolveScript(["validate_specs.js"]);
|
|
278
278
|
ensureExecutable(script);
|
|
279
|
+
// `--help` before the positional check. Asking a command what it does must
|
|
280
|
+
// never be a usage error — `specgate validate --help` answered "expects
|
|
281
|
+
// exactly one positional argument", which is the tool refusing to explain
|
|
282
|
+
// itself to someone who is trying to learn it.
|
|
283
|
+
if (validateArgs.includes("--help") || validateArgs.includes("-h")) {
|
|
284
|
+
runNodeScript(script, ["--help"]);
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
279
287
|
const positional = validateArgs.filter((a) => !a.startsWith("-"));
|
|
280
288
|
if (positional.length !== 1) {
|
|
281
289
|
error(`'validate' expects exactly one positional argument: <project_dir>`);
|
|
@@ -283,10 +291,12 @@ function dispatchValidate(validateArgs) {
|
|
|
283
291
|
process.exit(2);
|
|
284
292
|
}
|
|
285
293
|
const VALIDATE_FLAGS = new Set([
|
|
294
|
+
"--strict",
|
|
286
295
|
"--strict-tdd",
|
|
287
296
|
"--strict-scenarios",
|
|
288
297
|
"--strict-requirements",
|
|
289
298
|
"--strict-links",
|
|
299
|
+
"--strict-coverage",
|
|
290
300
|
"--against-lock",
|
|
291
301
|
"--json",
|
|
292
302
|
]);
|
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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"}
|
|
@@ -3,6 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.GenerateAgentPromptUseCase = void 0;
|
|
4
4
|
const AgentPrompt_1 = require("../domain/AgentPrompt");
|
|
5
5
|
const HarnessRun_1 = require("../domain/HarnessRun");
|
|
6
|
+
const Precedents_1 = require("../domain/Precedents");
|
|
7
|
+
const SpecSections_1 = require("../domain/SpecSections");
|
|
8
|
+
const TraceabilityFormat_1 = require("../domain/TraceabilityFormat");
|
|
9
|
+
const MATRIX = "docs/specs/traceability.md";
|
|
6
10
|
class GenerateAgentPromptUseCase {
|
|
7
11
|
configRepo;
|
|
8
12
|
constructor(configRepo) {
|
|
@@ -14,11 +18,63 @@ class GenerateAgentPromptUseCase {
|
|
|
14
18
|
? this.configRepo.readProjectFile(projectDir, featurePath)
|
|
15
19
|
: null;
|
|
16
20
|
const aiRulesContent = this.configRepo.readProjectFile(projectDir, "AI_RULES.md");
|
|
21
|
+
// The requirement's own prose. Not reading it is how the prompt came to say
|
|
22
|
+
// "Implement REQ-002" with every fact `-` and nothing to implement.
|
|
23
|
+
const specSource = this.configRepo.readProjectFile(projectDir, "spec.md");
|
|
24
|
+
const requirementText = specSource
|
|
25
|
+
? (0, SpecSections_1.extractRequirementSection)(specSource, String(req.requirement || ""))
|
|
26
|
+
: null;
|
|
17
27
|
return AgentPrompt_1.AgentPrompt.build(req, {
|
|
18
28
|
...opts,
|
|
19
29
|
featureContent,
|
|
20
30
|
aiRulesContent,
|
|
31
|
+
requirementText: requirementText || undefined,
|
|
32
|
+
// Opt-in: the caller decides, because a precedent costs prompt budget and
|
|
33
|
+
// is only worth it once a project has accepted work to point at.
|
|
34
|
+
precedent: opts.withPrecedents ? this.findPrecedent(req, projectDir) : null,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The most recent accepted requirement in the same bounded context, with the
|
|
39
|
+
* top of its test and its implementation.
|
|
40
|
+
*
|
|
41
|
+
* Returns null rather than throwing on anything missing. A prompt that fails
|
|
42
|
+
* to build because an artifact was moved would stop a run over a section that
|
|
43
|
+
* is, by design, optional.
|
|
44
|
+
*/
|
|
45
|
+
findPrecedent(req, projectDir) {
|
|
46
|
+
const matrix = this.configRepo.readProjectFile(projectDir, MATRIX);
|
|
47
|
+
if (!matrix)
|
|
48
|
+
return null;
|
|
49
|
+
const mode = (0, TraceabilityFormat_1.detectTraceabilityMode)(matrix);
|
|
50
|
+
if (!mode)
|
|
51
|
+
return null;
|
|
52
|
+
const rows = (0, TraceabilityFormat_1.parseMatrixRows)(matrix).map((cells) => {
|
|
53
|
+
const fields = (0, TraceabilityFormat_1.readRowFields)(cells, mode);
|
|
54
|
+
return {
|
|
55
|
+
requirementId: fields.requirementId,
|
|
56
|
+
status: fields.status,
|
|
57
|
+
testArtifact: fields.testArtifact,
|
|
58
|
+
// The production artifact is the column before the test one in a rich
|
|
59
|
+
// matrix, and absent from a legacy one.
|
|
60
|
+
technicalArtifact: mode === "rich" ? cells[8] || "" : "",
|
|
61
|
+
};
|
|
21
62
|
});
|
|
63
|
+
const choice = (0, Precedents_1.choosePrecedent)(rows, (0, TraceabilityFormat_1.parseMatrixContexts)(matrix), req.requirement);
|
|
64
|
+
if (!choice)
|
|
65
|
+
return null;
|
|
66
|
+
const read = (rel) => (rel ? this.configRepo.readProjectFile(projectDir, rel) : null);
|
|
67
|
+
const testSource = read(choice.testArtifact);
|
|
68
|
+
const codeSource = read(choice.technicalArtifact);
|
|
69
|
+
if (!testSource && !codeSource)
|
|
70
|
+
return null;
|
|
71
|
+
return {
|
|
72
|
+
requirementId: choice.requirementId,
|
|
73
|
+
testArtifact: choice.testArtifact,
|
|
74
|
+
testExcerpt: testSource ? (0, Precedents_1.excerpt)(testSource) : "",
|
|
75
|
+
technicalArtifact: choice.technicalArtifact,
|
|
76
|
+
technicalExcerpt: codeSource ? (0, Precedents_1.excerpt)(codeSource) : "",
|
|
77
|
+
};
|
|
22
78
|
}
|
|
23
79
|
}
|
|
24
80
|
exports.GenerateAgentPromptUseCase = GenerateAgentPromptUseCase;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenerateAgentPromptUseCase.js","sourceRoot":"","sources":["../../../../../packages/core/src/application/GenerateAgentPromptUseCase.ts"],"names":[],"mappings":";;;AACA,uDAAsF;AACtF,qDAAuD;
|
|
1
|
+
{"version":3,"file":"GenerateAgentPromptUseCase.js","sourceRoot":"","sources":["../../../../../packages/core/src/application/GenerateAgentPromptUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.POST_DRAFT_STATUS = exports.ALLOWED_STATUS = exports.RICH_HEADER = exports.LEGACY_HEADER = exports.ValidateProjectUseCase = void 0;
|
|
4
4
|
const ValidationReport_1 = require("../domain/ValidationReport");
|
|
5
|
+
const SpecSections_1 = require("../domain/SpecSections");
|
|
5
6
|
const TraceabilityFormat_1 = require("../domain/TraceabilityFormat");
|
|
6
7
|
Object.defineProperty(exports, "ALLOWED_STATUS", { enumerable: true, get: function () { return TraceabilityFormat_1.ALLOWED_STATUS; } });
|
|
7
8
|
Object.defineProperty(exports, "LEGACY_HEADER", { enumerable: true, get: function () { return TraceabilityFormat_1.LEGACY_HEADER; } });
|
|
@@ -53,8 +54,30 @@ class ValidateProjectUseCase {
|
|
|
53
54
|
}
|
|
54
55
|
const strictTdd = opts.strictTdd === true;
|
|
55
56
|
const seenScenarios = new Set();
|
|
57
|
+
const seenRequirements = new Set();
|
|
56
58
|
for (const cells of (0, TraceabilityFormat_1.parseMatrixRows)(traceContent)) {
|
|
57
59
|
const { requirementId, scenarioId, testArtifact, status } = (0, TraceabilityFormat_1.readRowFields)(cells, mode);
|
|
60
|
+
// A requirement id is the primary key of this table: `done`, `req link`
|
|
61
|
+
// and `plan` all address a row by it, and every writer allocates a fresh
|
|
62
|
+
// one. Two rows under one id is not a broken link, it is a broken table —
|
|
63
|
+
// `req link REQ-003` then writes *both*, so one requirement's test
|
|
64
|
+
// artifact silently becomes another's, and the matrix asserts a proof
|
|
65
|
+
// that was never run. Three cold adoptions reached that state through the
|
|
66
|
+
// tool's own commands while every gate stayed green.
|
|
67
|
+
if (requirementId && requirementId !== "-") {
|
|
68
|
+
if (seenRequirements.has(requirementId)) {
|
|
69
|
+
report.addError("duplicate_requirement_id", `Duplicate Requirement ID in traceability.md: ${requirementId}`, {
|
|
70
|
+
target: requirementId,
|
|
71
|
+
fixLines: [
|
|
72
|
+
"A requirement id addresses exactly one row — `req link` and `done` write every",
|
|
73
|
+
`row that matches, so two ${requirementId} rows corrupt each other.`,
|
|
74
|
+
"Renumber the later row to the next free id, or delete it if it is a leftover",
|
|
75
|
+
"proposal from `adopt` that you have since replaced.",
|
|
76
|
+
],
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
seenRequirements.add(requirementId);
|
|
80
|
+
}
|
|
58
81
|
if (requirementId)
|
|
59
82
|
requirements.add(requirementId);
|
|
60
83
|
if (scenarioId && scenarioId !== "-") {
|
|
@@ -93,6 +116,37 @@ class ValidateProjectUseCase {
|
|
|
93
116
|
report.addError("strict_tdd_violation", `[TDD-3] Requirement ${reqId} found in spec.md but has no row in traceability.md`, { target: "TDD-3" });
|
|
94
117
|
}
|
|
95
118
|
}
|
|
119
|
+
// The other direction. `req add` used to write a matrix row and no
|
|
120
|
+
// prose, so a requirement could exist as a table entry with no text
|
|
121
|
+
// anywhere — and the harness prompt then asked an agent to implement
|
|
122
|
+
// something the prompt could not describe.
|
|
123
|
+
//
|
|
124
|
+
// A mention in prose is not a section: TDD-3 above matches `REQ-014`
|
|
125
|
+
// wherever it appears, which is right for "is this row missing", and
|
|
126
|
+
// wrong here. This asks for a `## REQ-014` heading.
|
|
127
|
+
const declared = new Set((0, SpecSections_1.requirementSections)(opts.specContent));
|
|
128
|
+
for (const reqId of requirements) {
|
|
129
|
+
// Same scope as TDD-3 above: `REQ-` ids only. A matrix may also carry
|
|
130
|
+
// `NFR-` rows, which live in their own section of spec.md and are not
|
|
131
|
+
// what the harness prompt asks an agent to implement.
|
|
132
|
+
if (!/^REQ-\d+/.test(reqId))
|
|
133
|
+
continue;
|
|
134
|
+
if (declared.has(reqId))
|
|
135
|
+
continue;
|
|
136
|
+
// A warning, not an error, and deliberately so. ADR-0026 commits to the
|
|
137
|
+
// 0.9 line warning about checks that become mandatory in 1.0, because a
|
|
138
|
+
// green-to-red flip in a minor release is how a tool gets removed from
|
|
139
|
+
// a pipeline. Every project whose matrix predates `req add` writing
|
|
140
|
+
// prose would go red on upgrade over text nobody asked them for.
|
|
141
|
+
report.addWarning("requirement_without_prose", `${reqId} has a row in traceability.md but no requirement text in spec.md. ` +
|
|
142
|
+
`This becomes an error in 1.0 (ADR-0026).`, {
|
|
143
|
+
target: reqId,
|
|
144
|
+
file: "spec.md",
|
|
145
|
+
fix: `Write its prose — \`specgate req add\` does it for you, and \`## ${reqId} — ` +
|
|
146
|
+
`<title>\` by hand works too. Until then the harness prompt cannot tell an ` +
|
|
147
|
+
`agent what ${reqId} requires.`,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
96
150
|
}
|
|
97
151
|
return { report, mode, requirements };
|
|
98
152
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValidateProjectUseCase.js","sourceRoot":"","sources":["../../../../../packages/core/src/application/ValidateProjectUseCase.ts"],"names":[],"mappings":";;;AAAA,iEAA8D;AAE9D,qEASsC;
|
|
1
|
+
{"version":3,"file":"ValidateProjectUseCase.js","sourceRoot":"","sources":["../../../../../packages/core/src/application/ValidateProjectUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The adversarial verification step (D3).
|
|
4
|
+
*
|
|
5
|
+
* ## What it is, and what the advisory reviewer is not
|
|
6
|
+
*
|
|
7
|
+
* The harness already has a reviewer: an advisory agent that reads the work and
|
|
8
|
+
* returns prose, which feeds the next prompt. It is useful and it is *opinion*.
|
|
9
|
+
*
|
|
10
|
+
* An adversary does something a reviewer cannot: it writes a **test**, and the
|
|
11
|
+
* test either fails or it does not. Where a reviewer says "this looks like it
|
|
12
|
+
* mishandles an empty list", an adversary writes the empty-list case and runs
|
|
13
|
+
* it. One is an argument, the other is evidence.
|
|
14
|
+
*
|
|
15
|
+
* ## The line this must not cross
|
|
16
|
+
*
|
|
17
|
+
* **The gate stays the only judge.** A green run stays green even when the
|
|
18
|
+
* probe fails, and that is deliberate rather than timid: an adversary can
|
|
19
|
+
* always write a test the requirement never promised to satisfy — asserting a
|
|
20
|
+
* behaviour nobody specified — and a failing probe would then block work that
|
|
21
|
+
* is correct. Letting it decide would turn the loop into a committee, which is
|
|
22
|
+
* the same reason the reviewer is advisory.
|
|
23
|
+
*
|
|
24
|
+
* What a failing probe *is*: a recorded finding, on the run and in the report,
|
|
25
|
+
* with the test it wrote. A human decides whether it found a defect or invented
|
|
26
|
+
* a requirement.
|
|
27
|
+
*
|
|
28
|
+
* ## Why the probe is discarded
|
|
29
|
+
*
|
|
30
|
+
* The branch must contain the implementer's work and nothing else, or a reviewer
|
|
31
|
+
* cannot tell who wrote what. The probe is preserved in the finding, so nothing
|
|
32
|
+
* is lost — it just does not arrive as a commit somebody has to untangle.
|
|
33
|
+
*/
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.NO_PROBE = void 0;
|
|
36
|
+
exports.shouldProbe = shouldProbe;
|
|
37
|
+
exports.probeFinding = probeFinding;
|
|
38
|
+
exports.NO_PROBE = Object.freeze({
|
|
39
|
+
ran: false,
|
|
40
|
+
broke: false,
|
|
41
|
+
detail: "",
|
|
42
|
+
wrote: Object.freeze([]),
|
|
43
|
+
});
|
|
44
|
+
/**
|
|
45
|
+
* Should the adversary run for this attempt?
|
|
46
|
+
*
|
|
47
|
+
* Only on a green gate, and only once per requirement: probing an
|
|
48
|
+
* implementation that already failed tells you nothing you did not know, and
|
|
49
|
+
* probing every retry multiplies the cost of the one thing in the loop that is
|
|
50
|
+
* pure insurance.
|
|
51
|
+
*/
|
|
52
|
+
function shouldProbe(opts) {
|
|
53
|
+
return Boolean(opts.profile) && opts.gatePassed && !opts.alreadyProbed;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The finding a failing probe produces, as a diagnostic.
|
|
57
|
+
*
|
|
58
|
+
* Severity is a warning and never an error. The wording matters: it has to say
|
|
59
|
+
* what happened without implying the requirement is wrong, because the probe
|
|
60
|
+
* may have asserted something nobody promised.
|
|
61
|
+
*/
|
|
62
|
+
function probeFinding(requirement, outcome) {
|
|
63
|
+
return {
|
|
64
|
+
severity: "warning",
|
|
65
|
+
code: "adversarial_probe_failed",
|
|
66
|
+
message: `The gate passed for ${requirement}, and an adversarial probe then made ` +
|
|
67
|
+
`the project's tests fail. That is either a defect the scenario does not ` +
|
|
68
|
+
`cover, or a test asserting something ${requirement} never promised.`,
|
|
69
|
+
target: outcome.wrote.join(", ") || requirement,
|
|
70
|
+
fix: `Read the probe in the run record. If it found a real gap, add a ` +
|
|
71
|
+
`scenario for it; if it invented a requirement, ignore it — the gate is ` +
|
|
72
|
+
`still the judge.`,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=AdversarialProbe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdversarialProbe.js","sourceRoot":"","sources":["../../../../../packages/core/src/domain/AdversarialProbe.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;;;AA4BH,kCAMC;AASD,oCAcC;AA5CY,QAAA,QAAQ,GAAiB,MAAM,CAAC,MAAM,CAAC;IAClD,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,EAAE;IACV,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAsB;CAC9C,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,SAAgB,WAAW,CAAC,IAI3B;IACC,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;AACzE,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,WAAmB,EAAE,OAAqB;IACrE,OAAO;QACL,QAAQ,EAAE,SAAkB;QAC5B,IAAI,EAAE,0BAA0B;QAChC,OAAO,EACL,uBAAuB,WAAW,uCAAuC;YACzE,0EAA0E;YAC1E,wCAAwC,WAAW,kBAAkB;QACvE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAW;QAC/C,GAAG,EACD,kEAAkE;YAClE,yEAAyE;YACzE,kBAAkB;KACrB,CAAC;AACJ,CAAC"}
|