specweave 3.0.22 → 3.1.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/.claude-plugin/marketplace.json +2 -2
- package/README.md +31 -16
- package/bin/specweave.js +35 -0
- package/dist/src/cli/commands/create-increment.js +1 -1
- package/dist/src/cli/commands/create-increment.js.map +1 -1
- package/dist/src/cli/commands/glossary.d.ts +16 -0
- package/dist/src/cli/commands/glossary.d.ts.map +1 -0
- package/dist/src/cli/commands/glossary.js +55 -0
- package/dist/src/cli/commands/glossary.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts +1 -1
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +7 -6
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/jev-helpers.d.ts.map +1 -1
- package/dist/src/cli/commands/jev-helpers.js +5 -10
- package/dist/src/cli/commands/jev-helpers.js.map +1 -1
- package/dist/src/cli/commands/project.d.ts.map +1 -1
- package/dist/src/cli/commands/project.js +4 -2
- package/dist/src/cli/commands/project.js.map +1 -1
- package/dist/src/cli/commands/refresh-plugins.d.ts.map +1 -1
- package/dist/src/cli/commands/refresh-plugins.js +7 -1
- package/dist/src/cli/commands/refresh-plugins.js.map +1 -1
- package/dist/src/cli/commands/review.d.ts +24 -0
- package/dist/src/cli/commands/review.d.ts.map +1 -0
- package/dist/src/cli/commands/review.js +124 -0
- package/dist/src/cli/commands/review.js.map +1 -0
- package/dist/src/cli/commands/skills.d.ts +18 -0
- package/dist/src/cli/commands/skills.d.ts.map +1 -0
- package/dist/src/cli/commands/skills.js +130 -0
- package/dist/src/cli/commands/skills.js.map +1 -0
- package/dist/src/cli/commands/update.d.ts.map +1 -1
- package/dist/src/cli/commands/update.js +10 -3
- package/dist/src/cli/commands/update.js.map +1 -1
- package/dist/src/cli/helpers/init/instruction-file-writer.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/instruction-file-writer.js +4 -3
- package/dist/src/cli/helpers/init/instruction-file-writer.js.map +1 -1
- package/dist/src/cli/helpers/init/plugin-installer.js +1 -1
- package/dist/src/cli/helpers/init/plugin-installer.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +2 -2
- package/dist/src/core/config/types.d.ts +39 -6
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/config/types.js +2 -0
- package/dist/src/core/config/types.js.map +1 -1
- package/dist/src/core/glossary/check.d.ts +44 -0
- package/dist/src/core/glossary/check.d.ts.map +1 -0
- package/dist/src/core/glossary/check.js +203 -0
- package/dist/src/core/glossary/check.js.map +1 -0
- package/dist/src/core/glossary/parse.d.ts +40 -0
- package/dist/src/core/glossary/parse.d.ts.map +1 -0
- package/dist/src/core/glossary/parse.js +112 -0
- package/dist/src/core/glossary/parse.js.map +1 -0
- package/dist/src/core/hooks/handlers/stop.js +1 -1
- package/dist/src/core/hooks/handlers/stop.js.map +1 -1
- package/dist/src/core/increment/template-creator.js +1 -1
- package/dist/src/core/increment/template-creator.js.map +1 -1
- package/dist/src/core/review/brief.d.ts +46 -0
- package/dist/src/core/review/brief.d.ts.map +1 -0
- package/dist/src/core/review/brief.js +151 -0
- package/dist/src/core/review/brief.js.map +1 -0
- package/dist/src/core/review/reviewer.d.ts +62 -0
- package/dist/src/core/review/reviewer.d.ts.map +1 -0
- package/dist/src/core/review/reviewer.js +166 -0
- package/dist/src/core/review/reviewer.js.map +1 -0
- package/dist/src/core/skills/catalog.d.ts +49 -0
- package/dist/src/core/skills/catalog.d.ts.map +1 -0
- package/dist/src/core/skills/catalog.js +95 -0
- package/dist/src/core/skills/catalog.js.map +1 -0
- package/dist/src/core/skills/legacy-skill-hashes.d.ts +11 -0
- package/dist/src/core/skills/legacy-skill-hashes.d.ts.map +1 -0
- package/dist/src/core/skills/legacy-skill-hashes.js +83 -0
- package/dist/src/core/skills/legacy-skill-hashes.js.map +1 -0
- package/dist/src/core/skills/project-skills.d.ts +58 -16
- package/dist/src/core/skills/project-skills.d.ts.map +1 -1
- package/dist/src/core/skills/project-skills.js +169 -32
- package/dist/src/core/skills/project-skills.js.map +1 -1
- package/dist/src/core/tasks/closure-gate.d.ts +2 -1
- package/dist/src/core/tasks/closure-gate.d.ts.map +1 -1
- package/dist/src/core/tasks/closure-gate.js +36 -4
- package/dist/src/core/tasks/closure-gate.js.map +1 -1
- package/package.json +2 -1
- package/plugins/PLUGINS-INDEX.md +14 -12
- package/plugins/specweave/.claude-plugin/plugin.json +2 -2
- package/plugins/specweave/PLUGIN.md +24 -16
- package/plugins/specweave/marketplace.json +57 -38
- package/plugins/specweave/skills/auto/SKILL.md +8 -38
- package/plugins/specweave/skills/auto/agents/openai.yaml +5 -0
- package/plugins/specweave/skills/do/SKILL.md +46 -10
- package/plugins/specweave/skills/done/SKILL.md +6 -3
- package/plugins/specweave/skills/increment/SKILL.md +20 -11
- package/plugins/specweave/skills/review/SKILL.md +23 -4
- package/plugins/specweave/skills-catalog.json +32 -0
- package/plugins/specweave/skills-optional/glossary/SKILL.md +90 -0
- package/plugins/specweave/skills-optional/glossary/references/credits.md +33 -0
- package/plugins/specweave/skills-optional/grill-me/SKILL.md +99 -0
- package/plugins/specweave/{skills/brainstorm → skills-optional/grill-me}/references/credits.md +3 -3
- package/src/templates/AGENTS.md.template +7 -1
- package/plugins/specweave/skills/brainstorm/SKILL.md +0 -100
- package/plugins/specweave/skills/team/SKILL.md +0 -70
- /package/plugins/specweave/{skills → skills-optional}/jev/SKILL.md +0 -0
- /package/plugins/specweave/{skills → skills-optional}/project/SKILL.md +0 -0
- /package/plugins/specweave/{skills → skills-optional}/sync/SKILL.md +0 -0
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* The ONLY blocking check: `reports/verify.json` must exist with `ok: true`,
|
|
5
5
|
* unless the caller supplies `--reason` (stored as metadata.closeReason).
|
|
6
6
|
* Grill / code-review / judge-llm / rubric reports are optional evidence and
|
|
7
|
-
* never block. A missing
|
|
7
|
+
* never block. A missing review, or a `fix first` verdict in the newest one,
|
|
8
|
+
* produces a one-line notice.
|
|
8
9
|
*
|
|
9
10
|
* @module core/tasks/closure-gate
|
|
10
11
|
*/
|
|
@@ -12,6 +13,7 @@ import * as fs from 'fs';
|
|
|
12
13
|
import * as path from 'path';
|
|
13
14
|
import { readVerifyReport, describeUncheckedAcs } from './verify-runner.js';
|
|
14
15
|
import { loadTaskBoard } from './task-board.js';
|
|
16
|
+
import { parseVerdict } from '../review/reviewer.js';
|
|
15
17
|
export function checkClosureGate(incrementDir, incrementId, opts = {}) {
|
|
16
18
|
const errors = [];
|
|
17
19
|
const notices = [];
|
|
@@ -64,9 +66,39 @@ export function checkClosureGate(incrementDir, incrementId, opts = {}) {
|
|
|
64
66
|
catch {
|
|
65
67
|
// tasks.md unreadable → nothing to add
|
|
66
68
|
}
|
|
67
|
-
|
|
68
|
-
notices.push('no reports/review.md — consider running sw:review before shipping user-facing work');
|
|
69
|
-
}
|
|
69
|
+
notices.push(...reviewNotices(incrementDir));
|
|
70
70
|
return { ok: errors.length === 0, errors, notices, info };
|
|
71
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Review notices: none on file, a `fix first` verdict in the newest
|
|
74
|
+
* `reports/review*.md`, or no cross-model review while `review.crossModel` is on.
|
|
75
|
+
*/
|
|
76
|
+
function reviewNotices(incrementDir) {
|
|
77
|
+
const reportsDir = path.join(incrementDir, 'reports');
|
|
78
|
+
const reviews = fs.existsSync(reportsDir)
|
|
79
|
+
? fs.readdirSync(reportsDir)
|
|
80
|
+
.filter((f) => /^review(-[A-Za-z0-9._-]+)?\.md$/.test(f))
|
|
81
|
+
.map((f) => ({ f, mtime: fs.statSync(path.join(reportsDir, f)).mtimeMs }))
|
|
82
|
+
.sort((a, b) => b.mtime - a.mtime)
|
|
83
|
+
: [];
|
|
84
|
+
if (!reviews.length)
|
|
85
|
+
return ['no reports/review.md or review-<reviewer>.md — run sw-review (or `specweave review` for another model) before shipping user-facing work'];
|
|
86
|
+
const notices = [];
|
|
87
|
+
const newest = fs.readFileSync(path.join(reportsDir, reviews[0].f), 'utf8');
|
|
88
|
+
if (parseVerdict(newest) === 'fix first')
|
|
89
|
+
notices.push(`reports/${reviews[0].f} says fix first — fix its critical and high findings and review again`);
|
|
90
|
+
if (crossModelRequired(incrementDir) && !reviews.some((r) => r.f.startsWith('review-'))) {
|
|
91
|
+
notices.push('review.crossModel is on but no cross-model review is on file — run `specweave review`');
|
|
92
|
+
}
|
|
93
|
+
return notices;
|
|
94
|
+
}
|
|
95
|
+
function crossModelRequired(incrementDir) {
|
|
96
|
+
try {
|
|
97
|
+
const cfg = JSON.parse(fs.readFileSync(path.resolve(incrementDir, '..', '..', 'config.json'), 'utf-8'));
|
|
98
|
+
return cfg.review?.crossModel === true;
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
72
104
|
//# sourceMappingURL=closure-gate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closure-gate.js","sourceRoot":"","sources":["../../../../src/core/tasks/closure-gate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"closure-gate.js","sourceRoot":"","sources":["../../../../src/core/tasks/closure-gate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Keep intent, specifications, and verified progress portable across AI coding tools. A local live work board, append-only task evidence, explicit handoffs, and optional GitHub/Jira/Azure DevOps integrations.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"release": "npm publish --ignore-scripts=false",
|
|
54
54
|
"release:preflight": "node scripts/release/preflight-publish.mjs",
|
|
55
55
|
"release:bump": "bash scripts/build/bump-version.sh",
|
|
56
|
+
"release:cut": "bash scripts/release/release.sh",
|
|
56
57
|
"setup:hooks": "bash scripts/hooks/install-git-hooks.sh",
|
|
57
58
|
"setup": "npm rebuild --ignore-scripts=false esbuild",
|
|
58
59
|
"security:scan": "node scripts/security/scan-payload.mjs --self-test"
|
package/plugins/PLUGINS-INDEX.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# SpecWeave plugins index
|
|
2
2
|
|
|
3
|
-
**Plugins**: 1 (`sw`) · **Skills**:
|
|
3
|
+
**Plugins**: 1 (`sw`) · **Skills**: 6 core + 5 optional · **Commands**: 0 · **Hooks**: 2 default
|
|
4
4
|
|
|
5
5
|
The 1.x `commands/` namespace is gone: anything deterministic is a `specweave`
|
|
6
|
-
CLI subcommand, and the model-judgement procedures are the
|
|
6
|
+
CLI subcommand, and the model-judgement procedures are the skills below.
|
|
7
7
|
|
|
8
8
|
| Plugin | Triggers | Description |
|
|
9
9
|
|---|---|---|
|
|
10
|
-
| **specweave** (`sw`) | increment, spec, tasks, plan, implement, close, review,
|
|
10
|
+
| **specweave** (`sw`) | increment, spec, tasks, plan, implement, close, review, parallel, handoff, sync, GitHub, Jira, ADO, auto, grill me, glossary, ubiquitous language, project, jev, system one | Increment lifecycle: plan → work the ledger → verify → review → complete, with cross-tool handoff, tracker sync and closed-set decisions delegated to Jev |
|
|
11
11
|
|
|
12
12
|
## Quick lookup
|
|
13
13
|
|
|
@@ -17,13 +17,14 @@ CLI subcommand, and the model-judgement procedures are the 11 skills below.
|
|
|
17
17
|
| "Implement" / "continue increment" | `sw:do` |
|
|
18
18
|
| "We're done" / "close it" | `sw:done` |
|
|
19
19
|
| "Review this" / "quality check" / "grill the code" | `sw:review` |
|
|
20
|
-
| "Parallel agents" / "split this up" | `sw:
|
|
20
|
+
| "Parallel agents" / "split this up" | `sw:do` (parallel lanes) |
|
|
21
21
|
| "Hand off" / "pick up" / "out of tokens" | `sw:handoff` |
|
|
22
|
-
| "Push to GitHub" / "import issues" | `sw:sync` |
|
|
22
|
+
| "Push to GitHub" / "import issues" (optional) | `sw:sync` |
|
|
23
23
|
| "Run until done" | `sw:auto` |
|
|
24
|
-
| "
|
|
25
|
-
| "
|
|
26
|
-
| "
|
|
24
|
+
| "Grill me" / "interview me" (optional) | `sw:grill-me` |
|
|
25
|
+
| "Glossary" / "what does Order mean here" (optional) | `sw:glossary` |
|
|
26
|
+
| "Project brief" / "what is this project about" (optional) | `sw:project` |
|
|
27
|
+
| "Jev" / "system one" / a decision whose answers can all be enumerated first (optional) | `sw:jev` |
|
|
27
28
|
|
|
28
29
|
## Hooks
|
|
29
30
|
|
|
@@ -34,10 +35,11 @@ Two by default, registered in `specweave/hooks/hooks.json` as exec-form
|
|
|
34
35
|
`.specweave/state/jev-guard.enabled`, and a `PreToolUse` entry (matcher `Bash`) in that
|
|
35
36
|
project's `.claude/settings.json`. `--no-guard-bash` removes all three.
|
|
36
37
|
|
|
37
|
-
##
|
|
38
|
+
## Optional skills
|
|
38
39
|
|
|
39
|
-
`
|
|
40
|
-
and install per
|
|
40
|
+
`grill-me`, `glossary`, `sync`, `project` and `jev` ship in
|
|
41
|
+
`plugins/specweave/skills-optional/` and install per project when enabled or detected:
|
|
42
|
+
`specweave skills` lists them, `specweave skills enable <name>` turns one on.
|
|
41
43
|
|
|
42
44
|
Deterministic operations are CLI: `specweave pickup | task | verify | complete |
|
|
43
|
-
handoff | note | report | sync | doctor | jev`.
|
|
45
|
+
handoff | note | report | sync | doctor | jev | skills | glossary | review`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sw",
|
|
3
|
-
"description": "Portable intent and verified progress across coding tools.
|
|
4
|
-
"version": "3.0
|
|
3
|
+
"description": "Portable intent and verified progress across coding tools. Six core workflow skills plus opt-in grill-me, glossary, sync, project and jev, two default lifecycle hooks, and a deterministic CLI and live local dashboard.",
|
|
4
|
+
"version": "3.1.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "SpecWeave Team",
|
|
7
7
|
"url": "https://spec-weave.com"
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# SpecWeave plugin (`sw`)
|
|
2
2
|
|
|
3
|
-
The Claude Code surface for SpecWeave: **
|
|
3
|
+
The Claude Code surface for SpecWeave: **6 core skills, 5 optional skills, 2 default hooks,
|
|
4
|
+
1 closer agent**.
|
|
4
5
|
The skills are generated from `skills/sw-<name>/` at the repository root (the one source
|
|
5
6
|
every tool shares); edit them there, never here.
|
|
6
7
|
Everything deterministic lives in the `specweave` CLI; a skill exists only where a
|
|
@@ -8,23 +9,30 @@ procedure needs model judgement. There is no `commands/` namespace in 2.0.
|
|
|
8
9
|
|
|
9
10
|
## Skills
|
|
10
11
|
|
|
12
|
+
Core, loaded by the plugin:
|
|
13
|
+
|
|
11
14
|
| Skill | What it does |
|
|
12
15
|
|---|---|
|
|
13
|
-
| `sw:increment` |
|
|
14
|
-
| `sw:do` | Work the increment task by task through the ledger,
|
|
15
|
-
| `sw:
|
|
16
|
-
| `sw:
|
|
17
|
-
| `sw:
|
|
16
|
+
| `sw:increment` | Settle the user's decisions, then plan one `spec.md` (Problem, Scope, ACs, Approach, Decisions, Tasks) |
|
|
17
|
+
| `sw:do` | Work the increment task by task through the ledger, alone, unattended or in parallel lanes |
|
|
18
|
+
| `sw:auto` | User-invoked entry to sw:do's unattended mode, driven by the Stop hook |
|
|
19
|
+
| `sw:done` | Close it: ledger check → `specweave verify` → review → `specweave complete` |
|
|
20
|
+
| `sw:review` | Adversarial review by a fresh context or another model family; every finding cites `path:line` |
|
|
18
21
|
| `sw:handoff` | "Hand off" here, "pick up" in any other tool, account or machine |
|
|
19
|
-
| `sw:sync` | GitHub / Jira / ADO: push, pull, status, setup |
|
|
20
|
-
| `sw:auto` | Unattended loop driven by the Stop hook |
|
|
21
|
-
| `sw:brainstorm` | Expand the option space before committing to one |
|
|
22
|
-
| `sw:project` | Shared goal, memory, work items and briefs across tools |
|
|
23
|
-
| `sw:jev` | Delegate closed-set decisions to Jev (TypeSafe System One): routing, command safety, screening |
|
|
24
22
|
|
|
25
|
-
Optional
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
Optional, shipped in `skills-optional/` and installed into a project as `sw-<name>` only
|
|
24
|
+
when `.specweave/config.json` enables it (`specweave skills enable <name>`) or the project
|
|
25
|
+
detects it:
|
|
26
|
+
|
|
27
|
+
| Skill | What it does | Detected by |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| `sw:grill-me` | Interview the user in rounds until every decision is settled | `planning.deepInterview: deep` |
|
|
30
|
+
| `sw:glossary` | GLOSSARY.md: each domain term across business, data, code and UI | `GLOSSARY.md` |
|
|
31
|
+
| `sw:sync` | GitHub / Jira / ADO: push, pull, status, setup | a configured tracker |
|
|
32
|
+
| `sw:project` | Shared goal, memory, work items and briefs across tools | `.specweave/project/hub.json` |
|
|
33
|
+
| `sw:jev` | Delegate closed-set decisions to Jev (TypeSafe System One) | `jev.enabled` |
|
|
34
|
+
|
|
35
|
+
`skills-catalog.json` is the list (generated from `skills/catalog.json`).
|
|
28
36
|
|
|
29
37
|
## Hooks
|
|
30
38
|
|
|
@@ -33,7 +41,7 @@ Two by default, both exec-form `node hooks/run.mjs <event>` (no shell, Windows-s
|
|
|
33
41
|
| Hook | Job |
|
|
34
42
|
|---|---|
|
|
35
43
|
| `SessionStart` | Inject the active increment + next task as context |
|
|
36
|
-
| `Stop` | Drive the `sw:auto`
|
|
44
|
+
| `Stop` | Drive the unattended loop (`sw:auto`); `{}` for every ordinary session |
|
|
37
45
|
|
|
38
46
|
`PreToolUse` is **not** registered by default — `hooks.json` ships `SessionStart` and
|
|
39
47
|
`Stop` only, exactly as in 2.1.0. `PreToolUse` and `PreCompact` stay callable
|
|
@@ -56,7 +64,7 @@ the marker and the project hook. This is a Claude Code surface only; other tools
|
|
|
56
64
|
|
|
57
65
|
## Requirements
|
|
58
66
|
|
|
59
|
-
- Claude Code 2.1.0+, Node.js
|
|
67
|
+
- Claude Code 2.1.0+, Node.js 20.12+, Git
|
|
60
68
|
- The `specweave` CLI on PATH (`npm i -g specweave`). Skills degrade to documented
|
|
61
69
|
manual steps when it is absent; they never silently no-op.
|
|
62
70
|
|
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://spec-weave.com/schemas/skill-marketplace.v1.json",
|
|
3
3
|
"plugin": "sw",
|
|
4
|
-
"description": "Skill catalog for the specweave plugin. The skills are generated from skills/sw-<name>/ (scripts/build/generate-skills.mjs)
|
|
4
|
+
"description": "Skill catalog for the specweave plugin. The skills are generated from skills/sw-<name>/ and skills/catalog.json (scripts/build/generate-skills.mjs): core skills in skills/, optional ones in skills-optional/, installed per project by specweave skills enable or detection. The plugin version is tracked in .claude-plugin/plugin.json.",
|
|
5
5
|
"skills": [
|
|
6
6
|
{
|
|
7
7
|
"name": "sw:increment",
|
|
8
8
|
"path": "skills/increment/SKILL.md",
|
|
9
|
-
"description": "
|
|
9
|
+
"description": "Settle the user's critical decisions, then plan a unit of work: one spec.md with Problem, Scope, numbered ACs, Approach, Decisions and Tasks. Replaces brainstorm.",
|
|
10
10
|
"deprecated": false
|
|
11
11
|
},
|
|
12
12
|
{
|
|
13
13
|
"name": "sw:do",
|
|
14
14
|
"path": "skills/do/SKILL.md",
|
|
15
|
-
"description": "Work the increment task by task through the ledger: task next, claim, implement, commit, task done with evidence.",
|
|
15
|
+
"description": "Work the increment task by task through the ledger, alone, unattended or in parallel lanes: task next, claim, implement, commit, task done with evidence. Replaces team.",
|
|
16
|
+
"deprecated": false
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "sw:auto",
|
|
20
|
+
"path": "skills/auto/SKILL.md",
|
|
21
|
+
"description": "User-invoked entry to sw:do unattended mode: run an increment until every task is done, then verify and close.",
|
|
16
22
|
"deprecated": false
|
|
17
23
|
},
|
|
18
24
|
{
|
|
@@ -24,13 +30,7 @@
|
|
|
24
30
|
{
|
|
25
31
|
"name": "sw:review",
|
|
26
32
|
"path": "skills/review/SKILL.md",
|
|
27
|
-
"description": "Adversarial fresh
|
|
28
|
-
"deprecated": false
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
"name": "sw:team",
|
|
32
|
-
"path": "skills/team/SKILL.md",
|
|
33
|
-
"description": "Several agents on one increment: a worktree each, claims through the ledger, one closure. Replaces team-lead and team-merge.",
|
|
33
|
+
"description": "Adversarial review by a fresh context or another model family (specweave review); every finding cites path:line and is re-verified. Replaces qa, code-reviewer and judge-llm.",
|
|
34
34
|
"deprecated": false
|
|
35
35
|
},
|
|
36
36
|
{
|
|
@@ -40,44 +40,49 @@
|
|
|
40
40
|
"deprecated": false
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
|
-
"name": "sw:
|
|
44
|
-
"path": "skills/
|
|
45
|
-
"description": "
|
|
46
|
-
"deprecated": false
|
|
43
|
+
"name": "sw:grill-me",
|
|
44
|
+
"path": "skills-optional/grill-me/SKILL.md",
|
|
45
|
+
"description": "Interview the user in rounds until every decision in a plan is settled; records Decisions in spec.md.",
|
|
46
|
+
"deprecated": false,
|
|
47
|
+
"optional": true
|
|
47
48
|
},
|
|
48
49
|
{
|
|
49
|
-
"name": "sw:
|
|
50
|
-
"path": "skills/
|
|
51
|
-
"description": "
|
|
52
|
-
"deprecated": false
|
|
50
|
+
"name": "sw:glossary",
|
|
51
|
+
"path": "skills-optional/glossary/SKILL.md",
|
|
52
|
+
"description": "Build GLOSSARY.md: each domain term across business, data, code and UI; specweave glossary check finds drift.",
|
|
53
|
+
"deprecated": false,
|
|
54
|
+
"optional": true
|
|
53
55
|
},
|
|
54
56
|
{
|
|
55
|
-
"name": "sw:
|
|
56
|
-
"path": "skills/
|
|
57
|
-
"description": "
|
|
58
|
-
"deprecated": false
|
|
57
|
+
"name": "sw:sync",
|
|
58
|
+
"path": "skills-optional/sync/SKILL.md",
|
|
59
|
+
"description": "One sync surface for GitHub, Jira and Azure DevOps: push, pull, status, setup. Replaces the per-provider sync, mapper, validator and import skills.",
|
|
60
|
+
"deprecated": false,
|
|
61
|
+
"optional": true
|
|
59
62
|
},
|
|
60
63
|
{
|
|
61
|
-
"name": "sw:
|
|
62
|
-
"path": "skills/
|
|
63
|
-
"
|
|
64
|
-
"
|
|
64
|
+
"name": "sw:project",
|
|
65
|
+
"path": "skills-optional/project/SKILL.md",
|
|
66
|
+
"deprecated": false,
|
|
67
|
+
"description": "Shared goal, memory, work items, artifacts and briefs, portable across AI tools and accounts.",
|
|
68
|
+
"optional": true
|
|
65
69
|
},
|
|
66
70
|
{
|
|
67
|
-
"name": "sw:
|
|
68
|
-
"path": "skills/
|
|
71
|
+
"name": "sw:jev",
|
|
72
|
+
"path": "skills-optional/jev/SKILL.md",
|
|
73
|
+
"description": "Delegate closed-set decisions to Jev (TypeSafe System One) instead of a frontier turn: routing, command safety, text screening, failure triage.",
|
|
69
74
|
"deprecated": false,
|
|
70
|
-
"
|
|
75
|
+
"optional": true
|
|
71
76
|
}
|
|
72
77
|
],
|
|
73
78
|
"optionalSkills": {
|
|
74
|
-
"note": "
|
|
79
|
+
"note": "Shipped in plugins/specweave/skills-optional/, not loaded by the plugin. A project turns one on with: specweave skills enable <name>",
|
|
75
80
|
"names": [
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
+
"grill-me",
|
|
82
|
+
"glossary",
|
|
83
|
+
"sync",
|
|
84
|
+
"project",
|
|
85
|
+
"jev"
|
|
81
86
|
]
|
|
82
87
|
},
|
|
83
88
|
"removedIn2_0": {
|
|
@@ -87,9 +92,9 @@
|
|
|
87
92
|
"sw:code-reviewer": "sw:review",
|
|
88
93
|
"sw:judge-llm": "sw:review",
|
|
89
94
|
"sw:pr-review": "sw:review",
|
|
90
|
-
"sw:team-lead": "sw:
|
|
91
|
-
"sw:team-merge": "sw:
|
|
92
|
-
"sw:team-build": "sw:
|
|
95
|
+
"sw:team-lead": "sw:do",
|
|
96
|
+
"sw:team-merge": "sw:do",
|
|
97
|
+
"sw:team-build": "sw:do",
|
|
93
98
|
"sw:plan": "sw:increment",
|
|
94
99
|
"sw:pm": "sw:increment",
|
|
95
100
|
"sw:architect": "sw:increment",
|
|
@@ -132,5 +137,19 @@
|
|
|
132
137
|
"sw:task": "sw:do",
|
|
133
138
|
"sw-task": "sw-do"
|
|
134
139
|
}
|
|
140
|
+
},
|
|
141
|
+
"removedIn3_1": {
|
|
142
|
+
"note": "Removed in 3.1. Use the replacement; there is no alias routing.",
|
|
143
|
+
"map": {
|
|
144
|
+
"sw:team": "sw:do",
|
|
145
|
+
"sw-team": "sw-do",
|
|
146
|
+
"sw:brainstorm": "sw:grill-me",
|
|
147
|
+
"sw-brainstorm": "sw-grill-me",
|
|
148
|
+
"skills-optional/tdd-cycle": "mattpocock/skills tdd",
|
|
149
|
+
"skills-optional/debug": "mattpocock/skills diagnosing-bugs",
|
|
150
|
+
"skills-optional/e2e": "sw:do (check each AC end to end)",
|
|
151
|
+
"skills-optional/diagrams": "none",
|
|
152
|
+
"skills-optional/release-expert": "none"
|
|
153
|
+
}
|
|
135
154
|
}
|
|
136
155
|
}
|
|
@@ -1,48 +1,18 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Run a SpecWeave increment unattended until every task is done, then verify and close. Use for "auto mode", "run until done"
|
|
2
|
+
description: Run a SpecWeave increment unattended until every task is done, then verify and close - the Unattended section of sw-do. Use for "auto mode", "run until done".
|
|
3
3
|
argument-hint: "[increment-ids...] [--dry-run|--reset]"
|
|
4
|
-
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
version: 3.1.0
|
|
5
6
|
---
|
|
6
7
|
<!-- Generated from skills/sw-auto/SKILL.md by scripts/build/generate-skills.mjs. Edit the source, then npm run build. -->
|
|
7
8
|
|
|
8
9
|
# sw-auto: run until done
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
## Start
|
|
14
|
-
|
|
15
|
-
1. The spec has nothing under `## Decisions` > `### Open` (or old `## Open questions`)
|
|
16
|
-
and every task has `Files` and a `Test`. If not, fix the spec first.
|
|
17
|
-
2. `specweave auto 0042` records the session (`--dry-run` previews it, `--reset` clears
|
|
18
|
-
stale state). In a tool that runs SpecWeave's Stop hook (Claude Code with the `sw`
|
|
19
|
-
plugin) the hook hands you the remaining work after every turn until nothing is
|
|
20
|
-
left. In any other tool, nothing feeds you back: keep looping yourself.
|
|
21
|
-
3. `specweave auto-status` shows progress; `specweave cancel-auto` stops it.
|
|
22
|
-
|
|
23
|
-
## Each turn
|
|
24
|
-
|
|
25
|
-
1. `specweave task next` → `specweave task claim T-NN` → implement inside its `Files` →
|
|
26
|
-
commit `0042: ...` → `specweave task done T-NN --run "<Test>"`.
|
|
27
|
-
2. A failing test is fixed in the next turn, never marked done.
|
|
28
|
-
3. Genuinely blocked (missing secret, ambiguous spec, external dependency):
|
|
29
|
-
`specweave task block T-NN --reason "<what is missing>"` and move on. Blocked tasks
|
|
30
|
-
still count as work left: when only blocked tasks remain, run `specweave cancel-auto`
|
|
31
|
-
and tell the user what each one needs, instead of looping until the turn limit.
|
|
32
|
-
4. Nothing claimable left: run sw-done (verify, review, complete).
|
|
33
|
-
|
|
34
|
-
## Running out of budget
|
|
35
|
-
|
|
36
|
-
Before the session ends for tokens or time: `specweave handoff --reason "auto: out of
|
|
37
|
-
tokens"`. The next session, in any tool or account, says "pick up" and continues.
|
|
11
|
+
Follow sw-do's "Unattended (auto mode)" section for the increments named, starting
|
|
12
|
+
with `specweave auto <ids>`, and close with sw-done when nothing claimable is left.
|
|
13
|
+
This entry exists so the command keeps its name; sw-do holds the rules.
|
|
38
14
|
|
|
39
15
|
## Manual path (no CLI)
|
|
40
16
|
|
|
41
|
-
Without the CLI there is no hook and no session file: follow
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
## Rules
|
|
45
|
-
|
|
46
|
-
- Never edit `.specweave/state/auto-mode.json` by hand; `specweave auto --reset` clears it.
|
|
47
|
-
- One auto session per project; check `specweave auto-status` before starting another.
|
|
48
|
-
- Never widen a task's `Files` or weaken a test to keep the loop moving.
|
|
17
|
+
Without the CLI there is no hook and no session file: follow sw-do's manual path in a
|
|
18
|
+
loop until every task in spec.md has a `done` or `skip` line, then sw-done.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Work a SpecWeave increment task by task - claim, implement inside
|
|
3
|
-
argument-hint: "[increment-id]"
|
|
4
|
-
version: 3.
|
|
2
|
+
description: Work a SpecWeave increment task by task - claim, implement inside its Files, test, commit, done with evidence - alone, unattended or in lanes, then close. Use for "implement", "continue", "auto".
|
|
3
|
+
argument-hint: "[increment-id] [--auto] [--lanes]"
|
|
4
|
+
version: 3.1.0
|
|
5
5
|
---
|
|
6
6
|
<!-- Generated from skills/sw-do/SKILL.md by scripts/build/generate-skills.mjs. Edit the source, then npm run build. -->
|
|
7
7
|
|
|
@@ -19,23 +19,57 @@ hold, and notes left for you. No increment yet? Run sw-increment first.
|
|
|
19
19
|
## The loop
|
|
20
20
|
|
|
21
21
|
1. `specweave task next` prints the next claimable task with its AC text.
|
|
22
|
-
2. `specweave task claim T-03`. Exit 3: someone holds it
|
|
23
|
-
|
|
22
|
+
2. `specweave task claim T-03`. Exit 3: someone holds it (your own earlier claim from
|
|
23
|
+
a crashed session: say so, then `--force`); 4: its Files overlap a live claim;
|
|
24
|
+
6: its dependencies are not done. Otherwise pick another. Never edit before claiming.
|
|
24
25
|
3. Implement inside that task's `Files` only. Need another file? Claim the task that
|
|
25
|
-
owns it, or add a task to spec.md `## Tasks`.
|
|
26
|
+
owns it, or add a task to spec.md `## Tasks`. Use the words in `GLOSSARY.md`, if
|
|
27
|
+
the project has one, for every new name.
|
|
26
28
|
4. Run the task's `Test`. Red means fix the code; never skip, weaken or delete a test.
|
|
27
29
|
Don't write tests first or add unit tests the task did not ask for (unless the
|
|
28
30
|
project's `testing` config or conventions require them): check the AC end to end,
|
|
29
31
|
the way a user would hit it.
|
|
30
32
|
5. Commit with the increment id first: `git commit -m "0042: fold the ledger"`.
|
|
31
|
-
6. `specweave task done T-03 --run "npm run test:e2e -- double-claim"`. Exit 5: the
|
|
32
|
-
the task stays open. No `Test`? `--evidence "<sha> + what you checked"`.
|
|
33
|
+
6. `specweave task done T-03 --run "npm run test:e2e -- double-claim"`. Exit 5: the
|
|
34
|
+
command failed and the task stays open. No `Test`? `--evidence "<sha> + what you checked"`.
|
|
33
35
|
7. Stuck: `specweave task block T-03 --reason "<what is missing>"`. Not needed:
|
|
34
36
|
`specweave task skip T-03 --reason "<why>"`. Then back to 1.
|
|
35
37
|
|
|
36
38
|
Commands take the increment id last (`specweave task next 0042`) when more than one
|
|
37
39
|
increment is active. `specweave task list` shows the whole board.
|
|
38
40
|
|
|
41
|
+
## Unattended (auto mode)
|
|
42
|
+
|
|
43
|
+
"Auto", "run until done", "ship this while I sleep": the same loop without stopping
|
|
44
|
+
to ask. The bar does not drop.
|
|
45
|
+
|
|
46
|
+
1. Start only when the spec has nothing under `## Decisions` > `### Open` and every
|
|
47
|
+
task has `Files` and a `Test`; otherwise fix the spec first.
|
|
48
|
+
2. `specweave auto 0042` records the session (`--dry-run` previews, `--reset` clears
|
|
49
|
+
stale state). A tool that runs SpecWeave's Stop hook hands you the remaining work
|
|
50
|
+
after every turn; in any other tool, keep looping yourself.
|
|
51
|
+
3. Blocked (missing secret, ambiguous spec, outside dependency): `task block` and move
|
|
52
|
+
on. When only blocked tasks remain, `specweave cancel-auto` and tell the user what
|
|
53
|
+
each one needs, instead of looping to the turn limit.
|
|
54
|
+
4. `specweave auto-status` shows progress; one auto session per project.
|
|
55
|
+
|
|
56
|
+
## Parallel lanes
|
|
57
|
+
|
|
58
|
+
Three or more disjoint lanes, or 15+ tasks: you are the lead. Split, start, watch,
|
|
59
|
+
merge and close; do not implement.
|
|
60
|
+
|
|
61
|
+
1. Group tasks into 2 to 5 lanes whose `Files` do not overlap. Shared contracts
|
|
62
|
+
(types, schema) go in an early task the others list under `**Dependencies**: T-01`.
|
|
63
|
+
2. One worktree and branch per lane agent (your tool's or app's worktree feature, or
|
|
64
|
+
`git worktree add ../0042-api -b inc/0042-api`), with `SPECWEAVE_AGENT=api` set.
|
|
65
|
+
Brief each one: its tasks, this loop, "edit only their Files", and on finish
|
|
66
|
+
`specweave task release --all-mine` plus `specweave note "api: done" 0042`.
|
|
67
|
+
3. Watch with `specweave task list 0042`; `blocked` rows are your queue. A claim older
|
|
68
|
+
than 2 hours with no progress may be taken with `--force`.
|
|
69
|
+
4. Merge the lane branches in dependency order (keep every `ledger.jsonl` line from both
|
|
70
|
+
sides), then close as below. Lane agents never run `specweave handoff`.
|
|
71
|
+
`specweave team` opens agent panes for the same setup in tools that have them.
|
|
72
|
+
|
|
39
73
|
## Finish without asking
|
|
40
74
|
|
|
41
75
|
When `task next` has nothing left, run sw-done: verify, review, complete.
|
|
@@ -66,11 +100,13 @@ PowerShell never uses `>>` here: it writes UTF-16 and every other tool fails to
|
|
|
66
100
|
Events: `claim`, `done` (needs `evidence`), `release`, `block` and `skip` (both need
|
|
67
101
|
`note`), for example
|
|
68
102
|
`{"t":"T-02","e":"skip","by":"codex@mbp","at":"2026-09-02T12:00:00Z","note":"covered by T-01"}`.
|
|
69
|
-
`by` is `SPECWEAVE_AGENT` if set, else `<tool>@<host>`.
|
|
103
|
+
`by` is `SPECWEAVE_AGENT` if set, else `<tool>@<host>`. Unattended or in lanes, follow
|
|
104
|
+
the same steps by hand: there is no hook and no session file.
|
|
70
105
|
|
|
71
106
|
## Rules
|
|
72
107
|
|
|
73
108
|
- A claim older than 2 hours with no `done` is stale and may be taken over.
|
|
74
109
|
- Append only: never edit, reorder or delete a ledger line. On a merge conflict in
|
|
75
110
|
`ledger.jsonl` keep every line from both sides.
|
|
76
|
-
-
|
|
111
|
+
- Never widen a task's `Files` or weaken a test to keep a loop moving.
|
|
112
|
+
- Never edit `.specweave/state/auto-mode.json` by hand; `specweave auto --reset` clears it.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Close a SpecWeave increment - every task done or skipped, specweave verify green, a fresh-context review, then specweave complete. Use for "close it", "we are done", "finish up".
|
|
3
3
|
argument-hint: "[increment-id] [--reason \"...\"]"
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.1.0
|
|
5
5
|
---
|
|
6
6
|
<!-- Generated from skills/sw-done/SKILL.md by scripts/build/generate-skills.mjs. Edit the source, then npm run build. -->
|
|
7
7
|
|
|
@@ -19,8 +19,11 @@ Closing is verify, review, complete. The one hard gate is a passing
|
|
|
19
19
|
against the ledger (an AC is met when all its tasks are done) and writes
|
|
20
20
|
`reports/verify.md` and `reports/verify.json`. Red: fix and re-run. Do not tick
|
|
21
21
|
AC boxes; they are derived.
|
|
22
|
-
3. **Review.** For anything that ships, run sw-review in a fresh context.
|
|
23
|
-
|
|
22
|
+
3. **Review.** For anything that ships, run sw-review in a fresh context. With
|
|
23
|
+
`review.crossModel` on, also `specweave review`: another model family reviews the
|
|
24
|
+
diff (exit 3 means fix first). If the project has a `GLOSSARY.md`, run
|
|
25
|
+
`specweave glossary check` and rename new code that uses an avoided word. Fix
|
|
26
|
+
critical and high findings, then verify again.
|
|
24
27
|
4. **Docs.** If commands, config or user-facing behaviour changed, update README,
|
|
25
28
|
CHANGELOG and the `## Commands` table in AGENTS.md in the same branch.
|
|
26
29
|
5. **Complete.** `specweave complete 0042`. It refuses without a passing verify unless
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Plan work as a SpecWeave increment - one spec.md with Problem, Scope, numbered ACs, Approach and Tasks - before writing code. Use for "plan a feature", "new increment", "let's build X".
|
|
3
3
|
argument-hint: "\"<title>\" [--supersedes NNNN]"
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.1.0
|
|
5
5
|
---
|
|
6
6
|
<!-- Generated from skills/sw-increment/SKILL.md by scripts/build/generate-skills.mjs. Edit the source, then npm run build. -->
|
|
7
7
|
|
|
@@ -17,18 +17,27 @@ and one PR.
|
|
|
17
17
|
- A small self-contained fix needs no increment. Just do it.
|
|
18
18
|
- An open increment already owns the files this touches (`specweave task list`)? Add
|
|
19
19
|
ACs and tasks to its spec.md instead of opening another.
|
|
20
|
-
- Read the code the change touches before writing Approach.
|
|
21
|
-
|
|
20
|
+
- Read the code the change touches before writing Approach. If `GLOSSARY.md` exists,
|
|
21
|
+
write the spec in its terms.
|
|
22
|
+
- Unsure what to build at all, or the user says "grill me": run sw-grill-me first
|
|
23
|
+
(`specweave skills enable grill-me` installs it).
|
|
22
24
|
|
|
23
25
|
## Decide
|
|
24
26
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
Intent first: settle what the user wants and how a machine will check it before
|
|
28
|
+
writing ACs. `planning.deepInterview` sets the depth: `critical` (default) as below,
|
|
29
|
+
`deep` runs sw-grill-me, `off` states defaults and asks nothing.
|
|
30
|
+
|
|
31
|
+
1. **Think first.** Read the code and config; settle every fact yourself.
|
|
32
|
+
2. **Triage** each open decision: *fact* (look it up, never ask), *my call*
|
|
33
|
+
(reversible or low impact: pick a default), *theirs* (hard to reverse, costly, taste).
|
|
34
|
+
3. **Ask** only "theirs", at most 5, highest impact first. Each gets one clause on why
|
|
35
|
+
it matters and 2 to 4 options, your recommendation first; "yes" accepts it. Use your
|
|
36
|
+
tool's structured question tool when it has one. A clear request asks nothing.
|
|
37
|
+
4. **Record** in `## Decisions`: Asked, Defaulted (list every default: one the user
|
|
38
|
+
never saw is one they could not reject) and Open. Keep a line only when a later
|
|
39
|
+
change could contradict it: hard to reverse, surprising without context, or a real
|
|
40
|
+
trade-off. Apply each answer to Scope, ACs and Approach.
|
|
32
41
|
|
|
33
42
|
## Create it
|
|
34
43
|
|
|
@@ -98,4 +107,4 @@ Files that change and in what order, decisions, rejected alternatives, risks.
|
|
|
98
107
|
## Then
|
|
99
108
|
|
|
100
109
|
Show the ACs and tasks. Unless the user asked to review the plan first, carry on with
|
|
101
|
-
sw-do (one agent
|
|
110
|
+
sw-do (one agent, or parallel lanes for three or more disjoint groups of tasks).
|