spec-driven-with-beads 2.0.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +119 -32
- package/openspec/schemas/spec-driven-with-beads/README.md +39 -22
- package/openspec/schemas/spec-driven-with-beads/schema.yaml +86 -16
- package/openspec/schemas/spec-driven-with-beads/templates/spec-compliance.aspect.toml +21 -0
- package/openspec/schemas/spec-driven-with-beads/templates/spec-driven-change.formula.toml +32 -6
- package/package.json +9 -3
package/README.md
CHANGED
|
@@ -1,63 +1,150 @@
|
|
|
1
1
|
# spec-driven-with-beads
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Spec-driven development with git-synced task tracking.**
|
|
4
|
+
Bridge OpenSpec's spec planning with Beads' persistent, dependency-aware issue graph.
|
|
4
5
|
|
|
5
6
|
```
|
|
6
|
-
proposal → specs → design → tasks+beads → apply
|
|
7
|
+
proposal → specs → design → tasks+beads → apply → consolidate
|
|
7
8
|
```
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
---
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
## The problem every AI coding agent hits
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
You plan a change with OpenSpec: proposal → specs → design. Great. Then you implement. The agent creates a flat `tasks.md`, ticks boxes, done.
|
|
15
|
+
|
|
16
|
+
Next session? The agent has amnesia. It doesn't know what was done, what was learned, or what's blocked. Multi-day features fragment across disconnected sessions. Multi-developer workflows don't exist — everyone works in isolation.
|
|
17
|
+
|
|
18
|
+
**This schema fixes that.**
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## The solution: Beads + OpenSpec
|
|
23
|
+
|
|
24
|
+
[Beads](https://github.com/gastownhall/beads) is a **Dolt-powered issue tracker that syncs to git**. Unlike flat markdown task lists or cloud issue trackers, Beads stores your task graph in a version-controlled SQL database that lives in your repo. Push, pull, branch, merge — just like code.
|
|
25
|
+
|
|
26
|
+
| Capability | Flat `tasks.md` | GitHub Issues | **Beads (this schema)** |
|
|
27
|
+
|---|---|---|---|
|
|
28
|
+
| Dependency graph | ❌ Manual | ❌ Shallow | ✅ `needs:` in formula, `bd ready` enforces |
|
|
29
|
+
| Git-synced | ✅ (file) | ❌ (cloud) | **✅ Dolt DB in `.beads/`, push/pull with code** |
|
|
30
|
+
| Multi-session persistence | ❌ Lost | ✅ (cloud) | **✅ `bd dolt push/pull` — pick up where you left off** |
|
|
31
|
+
| Multi-developer sync | ❌ Merge hell | ✅ (cloud) | **✅ Dolt-native replication, cell-level merge** |
|
|
32
|
+
| Cross-session knowledge | ❌ None | ❌ None | **✅ `bd remember` → `bd prime` injects into every session** |
|
|
33
|
+
| Reusable workflows | ❌ Copy-paste | ❌ None | **✅ `bd mol distill` extracts formulas from completed work** |
|
|
34
|
+
| Parallel agents | ❌ Impossible | ❌ Clunky | **✅ `bd pin` + bond points with `waits_for` fan-in** |
|
|
35
|
+
| Dependency-aware ready queue | ❌ None | ❌ None | **✅ `bd ready` only shows unblocked work** |
|
|
36
|
+
| Async coordination | ❌ None | ❌ Partial | **✅ Gates (human approval, timers, CI checks)** |
|
|
37
|
+
| One-command setup | ❌ Manual | ❌ N/A | **✅ `bd pour spec-driven-change --var name=my-feature`** |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## How it works
|
|
42
|
+
|
|
43
|
+
### One command creates the entire task graph
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
bd pour spec-driven-change --var name=add-user-auth
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Produces a molecule with mandatory dependency chain:
|
|
14
50
|
|
|
15
51
|
```
|
|
16
|
-
bd-
|
|
17
|
-
├── bd-
|
|
18
|
-
├── bd-
|
|
19
|
-
├── bd-
|
|
20
|
-
├── bd-
|
|
21
|
-
|
|
52
|
+
bd-a3f8 (epic: Spec-driven Change: add-user-auth)
|
|
53
|
+
├── bd-a3f8.1 proposal (human review)
|
|
54
|
+
├── bd-a3f8.2 specs (needs: proposal)
|
|
55
|
+
├── bd-a3f8.3 design (needs: specs)
|
|
56
|
+
├── bd-a3f8.4 implement (needs: design)
|
|
57
|
+
├── bd-a3f8.5 verify-specs-consolidate (auto-injected spec compliance check)
|
|
58
|
+
└── bd-a3f8.6 consolidate (human, needs: implement, verify-specs)
|
|
22
59
|
```
|
|
23
60
|
|
|
24
|
-
No manual `bd create` × N. No
|
|
61
|
+
No manual `bd create` × N. No `bd dep add` × N. The formula defines the graph.
|
|
25
62
|
|
|
26
|
-
|
|
63
|
+
### Dependencies are enforced, not documented
|
|
27
64
|
|
|
28
|
-
|
|
65
|
+
```
|
|
66
|
+
$ bd ready
|
|
67
|
+
1. [P1] bd-a3f8.1: Review proposal for add-user-auth
|
|
68
|
+
|
|
69
|
+
$ bd ready --explain
|
|
70
|
+
● Ready:
|
|
71
|
+
bd-a3f8.1 — no blocking dependencies
|
|
72
|
+
|
|
73
|
+
● Blocked:
|
|
74
|
+
bd-a3f8.2 — blocked by bd-a3f8.1 (proposal)
|
|
75
|
+
bd-a3f8.4 — blocked by bd-a3f8.3 (design)
|
|
76
|
+
```
|
|
29
77
|
|
|
30
|
-
|
|
78
|
+
The agent never picks work it can't start. No wasted cycles.
|
|
31
79
|
|
|
32
|
-
|
|
33
|
-
- `bd init` run in your project
|
|
34
|
-
- OpenSpec installed (`npm install -g @fission-ai/openspec`)
|
|
80
|
+
### Work flows across sessions
|
|
35
81
|
|
|
36
|
-
|
|
82
|
+
```
|
|
83
|
+
# Session 1 — morning
|
|
84
|
+
bd pour spec-driven-change --var name=add-user-auth
|
|
85
|
+
bd update bd-a3f8.1 --claim # Review proposal
|
|
86
|
+
bd close bd-a3f8.1
|
|
87
|
+
bd dolt push # Save state to repo
|
|
88
|
+
|
|
89
|
+
# Session 2 — afternoon (new session, zero context)
|
|
90
|
+
bd dolt pull # Pull task graph
|
|
91
|
+
bd ready # → bd-a3f8.2: Write specs
|
|
92
|
+
```
|
|
37
93
|
|
|
38
|
-
|
|
39
|
-
|
|
94
|
+
Pick up exactly where you left off. The agent doesn't need to re-read `tasks.md` — it queries `bd ready`.
|
|
95
|
+
|
|
96
|
+
### Knowledge compounds across changes
|
|
97
|
+
|
|
98
|
+
After each change, `consolidate` runs:
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
bd lint # Validate all issues have proper structure
|
|
102
|
+
bd compact # Compress old Dolt history
|
|
103
|
+
bd remember --key ... # Store lessons learned
|
|
104
|
+
bd mol squash # Compress molecule to lightweight digest
|
|
105
|
+
bd mol distill # (optional) Extract reusable formula
|
|
40
106
|
```
|
|
41
107
|
|
|
42
|
-
|
|
108
|
+
Every future `bd prime` call injects those memories. The agent knows what the last change taught it — no rediscovery.
|
|
109
|
+
|
|
110
|
+
### Optional: parallel multi-agent or async gates
|
|
43
111
|
|
|
44
|
-
|
|
112
|
+
Bond nothing → sequential, zero config. Bond a formula at a bond point → unlock:
|
|
45
113
|
|
|
46
|
-
|
|
114
|
+
| Bond point | What it enables |
|
|
115
|
+
|---|---|
|
|
116
|
+
| `parallel-execution` | Split implement into parallel sub-steps, one per capability, each pinned to a different agent. Fan-in before consolidate. |
|
|
117
|
+
| `async-gates` | Add human approval gates, timer delays, or GitHub CI checks before implementation. |
|
|
47
118
|
|
|
48
|
-
|
|
49
|
-
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Quick start
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# Prerequisites
|
|
125
|
+
brew install beads # or: npm install -g @beads/bd
|
|
126
|
+
npm install -g @fission-ai/openspec # OpenSpec CLI
|
|
127
|
+
npm install -g spec-driven-with-beads # This schema
|
|
128
|
+
|
|
129
|
+
# In your project
|
|
130
|
+
cd your-project
|
|
131
|
+
bd init
|
|
132
|
+
openspec init
|
|
133
|
+
echo "schema: spec-driven-with-beads" >> openspec/config.yaml
|
|
134
|
+
|
|
135
|
+
# Start your first spec-driven change
|
|
136
|
+
# → /opsx:propose "my feature"
|
|
137
|
+
# → /opsx:apply
|
|
138
|
+
# → /opsx:consolidate
|
|
50
139
|
```
|
|
51
140
|
|
|
52
|
-
|
|
53
|
-
- `/opsx:propose "my feature"`
|
|
54
|
-
- `/opsx:apply` — driven by molecule step order
|
|
55
|
-
- `/opsx:consolidate` — remember, compact, archive
|
|
141
|
+
---
|
|
56
142
|
|
|
57
143
|
## Links
|
|
58
144
|
|
|
59
|
-
- [
|
|
60
|
-
- [
|
|
145
|
+
- [npm package](https://www.npmjs.com/package/spec-driven-with-beads)
|
|
146
|
+
- [OpenSpec](https://github.com/Fission-AI/OpenSpec) (55k ★)
|
|
147
|
+
- [Beads](https://github.com/gastownhall/beads) (24k ★)
|
|
61
148
|
- [Beads Formula docs](https://gastownhall.github.io/beads/workflows/formulas)
|
|
62
149
|
- [Beads Molecule docs](https://gastownhall.github.io/beads/workflows/molecules)
|
|
63
150
|
- [Community schema catalog](https://github.com/intent-driven-dev/openspec-schemas)
|
|
@@ -8,28 +8,48 @@ OpenSpec custom schema that uses [Beads](https://github.com/gastownhall/beads) m
|
|
|
8
8
|
proposal → specs → design → tasks+beads → apply (via molecule) → consolidate
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
## What makes this different
|
|
12
|
-
|
|
13
|
-
Other schemas end at `archive` — move files, done. This one uses Beads' **formula + molecule** system: one `bd pour` command creates the entire dependency graph as a Beads molecule.
|
|
14
|
-
|
|
15
|
-
| Phase | What happens |
|
|
16
|
-
|-------|-------------|
|
|
17
|
-
| `tasks` | Writes `tasks.md` + **pours a molecule** via `bd pour spec-driven-change --var name=<change>` — creates epic + 5 steps with auto-dependency chain |
|
|
18
|
-
| `apply` | Works through molecule steps: `bd ready` → `bd update --claim` → code → `bd close`. Dependencies enforced by the molecule |
|
|
19
|
-
| `consolidate` | Closes molecule, `bd compact`, **`bd remember`** learnings, `openspec archive`. Knowledge persists via `bd prime` |
|
|
20
|
-
|
|
21
11
|
## Molecule structure
|
|
22
12
|
|
|
23
13
|
```
|
|
24
14
|
bd-xyz (epic: Spec-driven Change: my-feature)
|
|
25
|
-
├── bd-xyz.1 proposal
|
|
26
|
-
├── bd-xyz.2 specs
|
|
27
|
-
├── bd-xyz.3 design
|
|
28
|
-
├── bd-xyz.4 implement
|
|
29
|
-
|
|
15
|
+
├── bd-xyz.1 proposal (human, needs: —)
|
|
16
|
+
├── bd-xyz.2 specs (needs: proposal)
|
|
17
|
+
├── bd-xyz.3 design (needs: specs)
|
|
18
|
+
├── bd-xyz.4 implement (needs: design)
|
|
19
|
+
├── bd-xyz.5 verify-specs-consolidate (auto-injected by spec-compliance aspect)
|
|
20
|
+
└── bd-xyz.6 consolidate (human, needs: implement, verify-specs)
|
|
30
21
|
```
|
|
31
22
|
|
|
32
|
-
|
|
23
|
+
One `bd pour` creates the entire graph. No manual `bd create` × N.
|
|
24
|
+
|
|
25
|
+
## What makes this different
|
|
26
|
+
|
|
27
|
+
Other schemas end at `archive` — knowledge dies with the session. This one closes the learning loop via `bd remember` + `bd mol distill`.
|
|
28
|
+
|
|
29
|
+
### Key features
|
|
30
|
+
|
|
31
|
+
| Feature | Description | Default |
|
|
32
|
+
|---------|-------------|---------|
|
|
33
|
+
| Mandatory deps | `needs:` in formula — `bd ready` only shows unblocked steps | Always on |
|
|
34
|
+
| Spec-compliance aspect | Auto-injects "Verify specs pass" before consolidate | Always on |
|
|
35
|
+
| Bond points | Compose additional behavior without forking the schema | Opt-in |
|
|
36
|
+
| `bd pin` | Pin steps to specific agents for parallel work | Opt-in (bond) |
|
|
37
|
+
| Async gates | Human approval, timers, CI checks | Opt-in (bond) |
|
|
38
|
+
| `bd lint` | Structural validation in consolidate | Always on |
|
|
39
|
+
| `bd mol squash` | Compress completed molecule to lightweight digest | Always on |
|
|
40
|
+
| `bd mol distill` | Extract reusable formula from completed change | Agent discretion |
|
|
41
|
+
| `bd remember` | Persist learnings across sessions via `bd prime` | Always on |
|
|
42
|
+
|
|
43
|
+
### Bond points
|
|
44
|
+
|
|
45
|
+
The formula defines three bond points where optional formulas attach:
|
|
46
|
+
|
|
47
|
+
| Bond point | Position | Optional behavior |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| `parallel-execution` | After implement | Split implement into parallel sub-steps, one per capability, each pinned to a different agent. Uses `waits_for` (fan-in) to rejoin before consolidate |
|
|
50
|
+
| `async-gates` | Before implement | Add human approval gates, timer delays, or GitHub CI checks. Blocks step progression until conditions are met |
|
|
51
|
+
|
|
52
|
+
Bond nothing → sequential, no extra config. Bond a formula → unlock the feature.
|
|
33
53
|
|
|
34
54
|
## Requirements
|
|
35
55
|
|
|
@@ -43,8 +63,6 @@ No manual `bd create` × N or `bd dep add` × N — the formula defines the grap
|
|
|
43
63
|
npm install -g spec-driven-with-beads
|
|
44
64
|
```
|
|
45
65
|
|
|
46
|
-
This copies the schema into OpenSpec's global schemas.
|
|
47
|
-
|
|
48
66
|
## Usage
|
|
49
67
|
|
|
50
68
|
In `openspec/config.yaml`:
|
|
@@ -53,12 +71,10 @@ In `openspec/config.yaml`:
|
|
|
53
71
|
schema: spec-driven-with-beads
|
|
54
72
|
```
|
|
55
73
|
|
|
56
|
-
Then
|
|
74
|
+
Then:
|
|
57
75
|
- `/opsx:propose "my feature"`
|
|
58
76
|
- `/opsx:apply` — driven by molecule step order
|
|
59
|
-
- `/opsx:consolidate` — remember,
|
|
60
|
-
- `bd label list --label change:my-feature` — find past changes
|
|
61
|
-
- `bd list --label status:consolidated` — search consolidated work
|
|
77
|
+
- `/opsx:consolidate` — lint, squash, remember, distill, archive
|
|
62
78
|
|
|
63
79
|
## Links
|
|
64
80
|
|
|
@@ -66,4 +82,5 @@ Then standard OpenSpec commands, but with Beads molecule awareness:
|
|
|
66
82
|
- [Beads](https://github.com/gastownhall/beads)
|
|
67
83
|
- [Beads Formula docs](https://gastownhall.github.io/beads/workflows/formulas)
|
|
68
84
|
- [Beads Molecule docs](https://gastownhall.github.io/beads/workflows/molecules)
|
|
85
|
+
- [Beads Aspect docs](https://gastownhall.github.io/beads/workflows/formulas#aspects-cross-cutting)
|
|
69
86
|
- [Community schema catalog](https://github.com/intent-driven-dev/openspec-schemas)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: spec-driven-with-beads
|
|
2
|
-
version:
|
|
2
|
+
version: 3
|
|
3
3
|
description: >
|
|
4
4
|
OpenSpec workflow powered by Beads issue tracking.
|
|
5
5
|
proposal -> specs -> design -> tasks+beads -> apply (via Beads) -> consolidate.
|
|
@@ -128,6 +128,14 @@ artifacts:
|
|
|
128
128
|
create it from the template at
|
|
129
129
|
`openspec/schemas/spec-driven-with-beads/templates/spec-driven-change.formula.toml`.
|
|
130
130
|
|
|
131
|
+
Also copy the spec-compliance aspect:
|
|
132
|
+
```
|
|
133
|
+
cp openspec/schemas/spec-driven-with-beads/templates/spec-compliance.aspect.toml .beads/formulas/spec-compliance.aspect.toml
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
The aspect auto-injects a "Verify spec scenarios pass" step before
|
|
137
|
+
consolidate — no further action needed.
|
|
138
|
+
|
|
131
139
|
|
|
132
140
|
**2. Pour the molecule**
|
|
133
141
|
|
|
@@ -142,28 +150,53 @@ artifacts:
|
|
|
142
150
|
|
|
143
151
|
```
|
|
144
152
|
bd-xyz (epic: Spec-driven Change: <change-name>)
|
|
145
|
-
├── bd-xyz.1 proposal
|
|
146
|
-
├── bd-xyz.2 specs
|
|
147
|
-
├── bd-xyz.3 design
|
|
148
|
-
├── bd-xyz.4 implement
|
|
149
|
-
└── bd
|
|
153
|
+
├── bd-xyz.1 proposal (human, needs: —)
|
|
154
|
+
├── bd-xyz.2 specs (needs: proposal)
|
|
155
|
+
├── bd-xyz.3 design (needs: specs)
|
|
156
|
+
├── bd-xyz.4 implement (needs: design)
|
|
157
|
+
│ └── [on_complete → bd ready]
|
|
158
|
+
├── bd-xyz.5 verify-specs-consolidate (auto-injected by aspect)
|
|
159
|
+
└── bd-xyz.6 consolidate (human, needs: implement, verify-specs)
|
|
150
160
|
```
|
|
151
161
|
|
|
152
162
|
The dependency chain is built into the formula — no manual `bd dep add` needed.
|
|
153
163
|
|
|
164
|
+
**Optional — parallel capability implementation (multi-agent):**
|
|
165
|
+
If the change has multiple capabilities and you have multiple agents,
|
|
166
|
+
bond a multi-agent formula at the `parallel-execution` bond point:
|
|
167
|
+
```
|
|
168
|
+
bd mol bond mol-parallel-execution <mol-id> --ref parallel-execution
|
|
169
|
+
```
|
|
170
|
+
This splits the implement step into N sub-steps (one per capability),
|
|
171
|
+
each pinned to a different agent with `bd pin`. All sub-steps use
|
|
172
|
+
`waits_for` (fan-in) to rejoin before consolidate.
|
|
173
|
+
|
|
174
|
+
**Optional — async gates (human approval, CI checks):**
|
|
175
|
+
Bond a gated formula at the `async-gates` bond point:
|
|
176
|
+
```
|
|
177
|
+
bd mol bond mol-gated-approval <mol-id> --ref async-gates
|
|
178
|
+
```
|
|
179
|
+
This adds human approval gates before implementation, timer delays,
|
|
180
|
+
or GitHub CI checks.
|
|
181
|
+
|
|
182
|
+
If you don't bond anything, the molecule runs sequential —
|
|
183
|
+
no extra configuration needed.
|
|
184
|
+
|
|
154
185
|
|
|
155
186
|
**3. Label the molecule**
|
|
156
187
|
|
|
157
188
|
```
|
|
158
|
-
bd label add
|
|
159
|
-
bd label add
|
|
189
|
+
bd label add <mol-id> change:<change-name>
|
|
190
|
+
bd label add <mol-id> schema:spec-driven-with-beads
|
|
191
|
+
bd label add <mol-id> mode:sequential
|
|
160
192
|
```
|
|
193
|
+
Use `mode:parallel` if you bonded a multi-agent formula.
|
|
161
194
|
|
|
162
195
|
|
|
163
196
|
**4. Set acceptance criteria for the implement step**
|
|
164
197
|
|
|
165
198
|
```
|
|
166
|
-
bd update
|
|
199
|
+
bd update <mol-id>.4 --acceptance "All spec scenarios pass. Tests added."
|
|
167
200
|
```
|
|
168
201
|
|
|
169
202
|
|
|
@@ -183,7 +216,7 @@ apply:
|
|
|
183
216
|
Drive implementation through the molecule. The dependency graph
|
|
184
217
|
enforces order automatically.
|
|
185
218
|
|
|
186
|
-
|
|
219
|
+
Sequential (default — no bonding needed):
|
|
187
220
|
1. Run `bd mol list --json` to find the molecule for this change.
|
|
188
221
|
2. Run `bd dep tree <mol-id>` to see the step hierarchy.
|
|
189
222
|
3. Run `bd ready` — only shows steps whose needs are met.
|
|
@@ -201,11 +234,27 @@ apply:
|
|
|
201
234
|
bd close <mol-id>.N --reason "Implemented"
|
|
202
235
|
```
|
|
203
236
|
8. Run `bd ready` again — next step in the chain becomes available.
|
|
237
|
+
The `on_complete` hook on the implement step runs `bd ready` automatically.
|
|
204
238
|
9. Repeat until all steps are closed.
|
|
205
239
|
|
|
240
|
+
Parallel (if bonded at parallel-execution bond point):
|
|
241
|
+
1. Run `bd dep tree <mol-id>` to see the sub-step hierarchy.
|
|
242
|
+
2. Each sub-step is pinned to an agent via `bd pin`.
|
|
243
|
+
3. Each agent claims, implements, and closes their sub-step independently.
|
|
244
|
+
4. The consolidate step waits for ALL sub-steps via `waits_for` (fan-in).
|
|
245
|
+
5. Use `bd blocked` to check if any sub-step is blocking the fan-in.
|
|
246
|
+
|
|
247
|
+
Async (if bonded at async-gates bond point):
|
|
248
|
+
1. Run `bd show <mol-id>.N` to check gate state.
|
|
249
|
+
2. For human gates: wait for approval via `bd gate approve`.
|
|
250
|
+
3. For timer gates: `bd show` shows remaining duration.
|
|
251
|
+
4. For GitHub gates: `bd show` shows CI/PR status.
|
|
252
|
+
5. Emergency override: `bd gate skip <mol-id>.N --reason "..."`.
|
|
253
|
+
|
|
206
254
|
Tips:
|
|
207
255
|
- `bd blocked` shows steps waiting on dependencies.
|
|
208
256
|
- `bd stats` shows molecule progress.
|
|
257
|
+
- `bd show <mol-id>.N --json | jq '.gate'` shows gate details.
|
|
209
258
|
- Mark tasks.md checkboxes for human readability, but the molecule
|
|
210
259
|
is the source of truth.
|
|
211
260
|
|
|
@@ -221,11 +270,19 @@ consolidate:
|
|
|
221
270
|
```
|
|
222
271
|
bd mol show <mol-id>
|
|
223
272
|
```
|
|
224
|
-
|
|
273
|
+
|
|
274
|
+
2. Run structural validation:
|
|
275
|
+
```
|
|
276
|
+
bd lint
|
|
277
|
+
```
|
|
278
|
+
All issues MUST pass lint. If any fail, fix them before proceeding.
|
|
279
|
+
|
|
280
|
+
3. Run molecule compaction:
|
|
225
281
|
```
|
|
226
282
|
bd compact
|
|
227
283
|
```
|
|
228
|
-
|
|
284
|
+
|
|
285
|
+
4. Distill learnings from this change:
|
|
229
286
|
```
|
|
230
287
|
bd remember --key spec-driven-beads-<change-name> "Lessons from this change:
|
|
231
288
|
- What unexpected problems did you encounter?
|
|
@@ -233,14 +290,27 @@ consolidate:
|
|
|
233
290
|
- Any surprising edge cases or constraints?
|
|
234
291
|
- What should the next similar change do differently?"
|
|
235
292
|
```
|
|
236
|
-
|
|
293
|
+
|
|
294
|
+
5. Squash the molecule into a digest issue:
|
|
295
|
+
```
|
|
296
|
+
bd mol squash <mol-id> --summary "Spec-driven change: <change-name>"
|
|
237
297
|
```
|
|
238
|
-
|
|
298
|
+
This compresses the 5 child steps into a single lightweight record.
|
|
299
|
+
The molecule remains searchable but no longer clutters the issue graph.
|
|
300
|
+
|
|
301
|
+
6. Optionally extract a reusable formula (if this change
|
|
302
|
+
represents a repeatable pattern):
|
|
239
303
|
```
|
|
240
|
-
|
|
304
|
+
bd mol distill <mol-id> my-pattern
|
|
241
305
|
```
|
|
306
|
+
This creates `.beads/formulas/my-pattern.formula.toml` from the
|
|
307
|
+
completed change. Future projects can `bd pour my-pattern`.
|
|
308
|
+
|
|
309
|
+
7. Label and archive:
|
|
310
|
+
```
|
|
311
|
+
bd label add <mol-id> status:consolidated
|
|
242
312
|
openspec archive
|
|
243
313
|
```
|
|
244
314
|
|
|
245
315
|
Future `bd prime` calls will inject the learnings into every session.
|
|
246
|
-
The
|
|
316
|
+
The squashed digest and distilled formulas persist beyond the change.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
formula = "spec-compliance"
|
|
2
|
+
description = "Auto-inject spec compliance verification before consolidate"
|
|
3
|
+
version = 1
|
|
4
|
+
type = "aspect"
|
|
5
|
+
|
|
6
|
+
# This aspect targets any step named "consolidate" and injects a
|
|
7
|
+
# spec-verification pre-step. Applied automatically when the aspect file
|
|
8
|
+
# exists in .beads/formulas/.
|
|
9
|
+
|
|
10
|
+
[[advice]]
|
|
11
|
+
target = "*.consolidate"
|
|
12
|
+
|
|
13
|
+
[advice.before]
|
|
14
|
+
id = "verify-specs-{step.id}"
|
|
15
|
+
title = "Verify spec scenarios pass for {step.title}"
|
|
16
|
+
needs = ["implement"]
|
|
17
|
+
type = "task"
|
|
18
|
+
description = >
|
|
19
|
+
Read the spec files at openspec/changes/{{name}}/specs/ and verify
|
|
20
|
+
every scenario passes against the implementation. If any scenario
|
|
21
|
+
fails, block consolidate until the issue is resolved.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
formula = "spec-driven-change"
|
|
2
2
|
description = "OpenSpec spec-driven change with Beads"
|
|
3
|
-
version =
|
|
3
|
+
version = 2
|
|
4
4
|
type = "workflow"
|
|
5
5
|
|
|
6
6
|
[vars.name]
|
|
@@ -11,11 +11,35 @@ required = true
|
|
|
11
11
|
description = "Comma-separated list of capability names"
|
|
12
12
|
required = false
|
|
13
13
|
|
|
14
|
-
#
|
|
15
|
-
# proposal -> specs -> design -> apply -> consolidate
|
|
14
|
+
# Base dependency chain: proposal -> specs -> design -> implement -> consolidate
|
|
16
15
|
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
16
|
+
# Bond points for optional composition:
|
|
17
|
+
# parallel-execution (after implement) — split implement into parallel sub-steps
|
|
18
|
+
# Bond a multi-agent formula here for parallel capability implementation.
|
|
19
|
+
# Each sub-step gets its own bd pin for agent assignment.
|
|
20
|
+
# Uses waits_for (fan-in) to rejoin before consolidate.
|
|
21
|
+
#
|
|
22
|
+
# async-gates (before implement) — add gates for async coordination
|
|
23
|
+
# Bond a gated formula here for human approval gates, CI checks, or timers.
|
|
24
|
+
# Gates block step progression until conditions are met.
|
|
25
|
+
#
|
|
26
|
+
# spec-compliance (before consolidate) — auto-injected by aspect
|
|
27
|
+
# The spec-compliance.aspect.toml injects "Verify specs pass" here.
|
|
28
|
+
# Applied automatically when the aspect is installed in .beads/formulas/.
|
|
29
|
+
|
|
30
|
+
[[compose.bond_points]]
|
|
31
|
+
id = "parallel-execution"
|
|
32
|
+
step = "implement"
|
|
33
|
+
position = "after"
|
|
34
|
+
description = "Bond a multi-agent formula here to split implement into parallel sub-steps per capability"
|
|
35
|
+
|
|
36
|
+
[[compose.bond_points]]
|
|
37
|
+
id = "async-gates"
|
|
38
|
+
step = "implement"
|
|
39
|
+
position = "before"
|
|
40
|
+
description = "Bond a gated formula here for human approval, CI checks, or timer gates"
|
|
41
|
+
|
|
42
|
+
# Base steps
|
|
19
43
|
|
|
20
44
|
[[steps]]
|
|
21
45
|
id = "proposal"
|
|
@@ -40,10 +64,12 @@ id = "implement"
|
|
|
40
64
|
title = "Implement {{name}}"
|
|
41
65
|
needs = ["design"]
|
|
42
66
|
description = "Implement the change per specs and design"
|
|
67
|
+
[steps.on_complete]
|
|
68
|
+
run = "bd ready"
|
|
43
69
|
|
|
44
70
|
[[steps]]
|
|
45
71
|
id = "consolidate"
|
|
46
72
|
title = "Consolidate {{name}}"
|
|
47
73
|
needs = ["implement"]
|
|
48
74
|
type = "human"
|
|
49
|
-
description = "
|
|
75
|
+
description = "Lint, squash, remember learnings, archive"
|
package/package.json
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "spec-driven-with-beads",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "OpenSpec custom schema using Beads
|
|
5
|
-
"keywords": [
|
|
3
|
+
"version": "3.0.1",
|
|
4
|
+
"description": "OpenSpec custom schema using Beads molecules with bond points, aspects, and distill for spec-driven development",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"openspec",
|
|
7
|
+
"beads",
|
|
8
|
+
"spec-driven-development",
|
|
9
|
+
"schema",
|
|
10
|
+
"sdd"
|
|
11
|
+
],
|
|
6
12
|
"license": "MIT",
|
|
7
13
|
"author": "yoinks-yoinks",
|
|
8
14
|
"homepage": "https://www.npmjs.com/package/spec-driven-with-beads",
|