plumbbob 0.8.17 → 0.9.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/.claude-plugin/plugin.json +1 -1
- package/README.md +56 -44
- package/dist/cli-core.js +35 -15
- package/dist/lib/agents.js +230 -112
- package/dist/lib/buildlog.js +50 -30
- package/dist/lib/buildlogsync.js +21 -12
- package/dist/lib/check.js +69 -35
- package/dist/lib/commitmsg.js +53 -32
- package/dist/lib/git.js +86 -31
- package/dist/lib/intent.js +91 -31
- package/dist/lib/latch.js +70 -39
- package/dist/lib/orient.js +78 -39
- package/dist/lib/plugins.js +11 -8
- package/dist/lib/settings.js +65 -32
- package/dist/lib/sidecar.js +320 -150
- package/dist/lib/templates.js +17 -6
- package/dist/verbs/agent.js +116 -55
- package/dist/verbs/build.js +27 -12
- package/dist/verbs/check.js +33 -7
- package/dist/verbs/checkpoint.js +153 -78
- package/dist/verbs/doctor.js +192 -95
- package/dist/verbs/finish.js +87 -44
- package/dist/verbs/handoff.js +56 -20
- package/dist/verbs/init.js +37 -12
- package/dist/verbs/park.js +14 -3
- package/dist/verbs/revert.js +64 -24
- package/dist/verbs/spike.js +89 -30
- package/dist/verbs/start.js +72 -38
- package/dist/verbs/status.js +44 -17
- package/dist/verbs/turn.js +88 -45
- package/dist/verbs/use.js +20 -9
- package/package.json +2 -2
- package/skills/{pb-build → build}/SKILL.md +25 -25
- package/skills/{pb-doctor → doctor}/SKILL.md +1 -1
- package/skills/{pb-finish → finish}/SKILL.md +18 -5
- package/skills/{pb-harvest → harvest}/SKILL.md +4 -4
- package/skills/{pb-park → park}/SKILL.md +2 -2
- package/skills/{pb-plan → plan}/SKILL.md +11 -11
- package/skills/{pb-refine → refine}/SKILL.md +7 -7
- package/skills/{pb-revert → revert}/SKILL.md +2 -2
- package/skills/{pb-spike → spike}/SKILL.md +4 -4
- package/skills/{pb-status → status}/SKILL.md +3 -3
- package/skills/{pb-step → step}/SKILL.md +9 -9
- package/skills/{pb-verify → verify}/SKILL.md +8 -8
- package/templates/build-log.md +7 -7
- package/templates/intent.md +8 -8
- package/templates/spike-report.md +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: refine
|
|
3
3
|
description: Keep intent.md true — attack the plan for holes (append as Open questions) and refine or repair the Frame, Decisions, Constraints, and Steps to match reality. Usable at any point; you propose, the human approves.
|
|
4
4
|
argument-hint: "[focus]"
|
|
5
5
|
disable-model-invocation: true
|
|
@@ -10,16 +10,16 @@ allowed-tools: Read, Edit, Bash(plumbbob status:*)
|
|
|
10
10
|
|
|
11
11
|
Current session state (injected when this skill runs): !`plumbbob status 2>/dev/null || echo "plumbbob CLI not on PATH in this session. Marketplace install: confirm the plugin is enabled in /plugin, then /reload-plugins. Skills-dir/global install: npm i -g plumbbob && plumbbob init."`
|
|
12
12
|
|
|
13
|
-
`/
|
|
13
|
+
`/plumbbob:refine` keeps `intent.md` honest. Use it at **any point** — right after `/plumbbob:plan`
|
|
14
14
|
to stress-test a fresh frame, or mid-build to repair a plan that drifted from what the
|
|
15
|
-
code is actually doing. It is the document-level complement to `/
|
|
16
|
-
sharpens the *next* step): `/
|
|
15
|
+
code is actually doing. It is the document-level complement to `/plumbbob:step` (which only
|
|
16
|
+
sharpens the *next* step): `/plumbbob:refine` works the *whole* plan.
|
|
17
17
|
|
|
18
18
|
## No-session refusal
|
|
19
19
|
|
|
20
20
|
This skill refines an existing plan, so it needs one. Read the state injected above: if
|
|
21
21
|
it is `NO ACTIVE SESSION`, **refuse** in one line and tell the human to run
|
|
22
|
-
`plumbbob start "<title>"` (or `/
|
|
22
|
+
`plumbbob start "<title>"` (or `/plumbbob:plan`) first, and edit nothing. Every active state
|
|
23
23
|
is fine — refining is always available.
|
|
24
24
|
|
|
25
25
|
## Two modes
|
|
@@ -56,5 +56,5 @@ is fine — refining is always available.
|
|
|
56
56
|
approves every change to `intent.md`. Never guess a hole into a Decision.
|
|
57
57
|
- **Open questions for holes, edits for drift.** New uncertainty goes to
|
|
58
58
|
`## Open questions`; settled drift gets repaired in place once the human OKs it.
|
|
59
|
-
- **Refine the plan, not the code.** `/
|
|
60
|
-
decision into a diff is `/
|
|
59
|
+
- **Refine the plan, not the code.** `/plumbbob:refine` touches `intent.md` only — turning a
|
|
60
|
+
decision into a diff is `/plumbbob:build` or your own hands, never this skill.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: revert
|
|
3
3
|
description: Human-triggered driver for `plumbbob revert` — git reset --hard to a checkpoint SHA (discarding the half-done step) and return to the boundary.
|
|
4
4
|
argument-hint: "[--to <step>]"
|
|
5
5
|
disable-model-invocation: true
|
|
@@ -15,6 +15,6 @@ This is a **driver skill** — a chat-side trigger for the mechanical `plumbbob
|
|
|
15
15
|
|
|
16
16
|
## What it does
|
|
17
17
|
|
|
18
|
-
1. Read an optional target step from the way you were invoked (e.g. `/
|
|
18
|
+
1. Read an optional target step from the way you were invoked (e.g. `/plumbbob:revert --to 2` → step `2`). With no target, revert goes to the last done-checkpoint.
|
|
19
19
|
2. Run `plumbbob revert` (or `plumbbob revert --to <n>`) via Bash. This is a `git reset --hard` — it discards the current in-progress step. Run it exactly as the human asked; do not add or drop the `--to` on your own.
|
|
20
20
|
3. Report the verb's output verbatim — which checkpoint it reset to, or any refusal.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: spike
|
|
3
3
|
description: Human-triggered driver for `plumbbob spike` — open a throwaway worktree experiment for a genuine fork, scaffold a spike report for a spike-as-step, or tear it down with `spike done`.
|
|
4
4
|
argument-hint: "<slug> | report <slug> | done"
|
|
5
5
|
disable-model-invocation: true
|
|
@@ -15,7 +15,7 @@ This is a **driver skill** — a chat-side trigger for the mechanical `plumbbob
|
|
|
15
15
|
|
|
16
16
|
## What it does
|
|
17
17
|
|
|
18
|
-
1. Read the spike target from the way you were invoked: a slug to open one (e.g. `/
|
|
18
|
+
1. Read the spike target from the way you were invoked: a slug to open one (e.g. `/plumbbob:spike redis-cache`), `report <slug>` to scaffold a report without worktrees (`/plumbbob:spike report auth-store`), or the literal `done` to tear the current spike down (`/plumbbob:spike done`). If none is present, ask which and run nothing.
|
|
19
19
|
2. Run `plumbbob spike "<slug>"`, `plumbbob spike report "<slug>"`, or `plumbbob spike done` via Bash.
|
|
20
20
|
3. Report the verb's output verbatim — the worktree it created or removed, the spike report it scaffolded, or any refusal. When the verb names a `spike-NN-<slug>.md` report, point the human at it; when `spike done` nudges that a verdict is unrecorded, relay that nudge verbatim.
|
|
21
21
|
|
|
@@ -23,7 +23,7 @@ This is a **driver skill** — a chat-side trigger for the mechanical `plumbbob
|
|
|
23
23
|
|
|
24
24
|
Every spike leaves a durable `spike-NN-<slug>.md` in the build folder, beside `intent.md`/`report.md`, so the fork's verdict rides the branch into the PR instead of evaporating. The CLI scaffolds it from a template and numbers it — you never create or number the file:
|
|
25
25
|
|
|
26
|
-
- **`/
|
|
27
|
-
- **`/
|
|
26
|
+
- **`/plumbbob:spike <slug>`** scaffolds the report *at open*, so findings accrue while the throwaway worktrees are still live. Fill its **Findings** and **Verdict** before `/plumbbob:spike done`.
|
|
27
|
+
- **`/plumbbob:spike report <slug>`** is for a *spike-as-step* — a planned step titled `spike: …`, where the increment itself is the experiment and there are no worktrees. It stamps the report's provenance as `step <n>` when a step is in flight.
|
|
28
28
|
|
|
29
29
|
This skill stays Write-less: the CLI owns the file. Your job is to run the verb and, between runs, help the human fill the report's prose — but the edits land through the normal build flow, not this driver.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: status
|
|
3
3
|
description: Show the orientation dashboard — where you are, what's done, what's parked, and the next move. A thin trigger for `plumbbob status`.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
model: haiku
|
|
@@ -21,6 +21,6 @@ skill carries **no Edit and no Write tool**: the CLI is the source of truth, so
|
|
|
21
21
|
1. Surface the injected `status` output — the dashboard and its suggested next move.
|
|
22
22
|
2. If the next step's detail carries a `model:` line, point it out: it is the
|
|
23
23
|
plan's recommendation of the smallest model that can carry that step, so the human
|
|
24
|
-
can switch (e.g. `/model sonnet`) before firing `/
|
|
24
|
+
can switch (e.g. `/model sonnet`) before firing `/plumbbob:build` — or ignore it. Guidance,
|
|
25
25
|
never a gate.
|
|
26
|
-
3. If it reads `NO ACTIVE SESSION`, tell the human to `/
|
|
26
|
+
3. If it reads `NO ACTIVE SESSION`, tell the human to `/plumbbob:plan` to frame a goal.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: step
|
|
3
3
|
description: Revise the next increment just-in-time — sharpen the next undone step against what's now true, or (with input) re-cut, split, or add a step. Empty input runs an automatic sharpen. One at a time; the human approves.
|
|
4
4
|
argument-hint: "[what-changed]"
|
|
5
5
|
disable-model-invocation: true
|
|
@@ -10,21 +10,21 @@ allowed-tools: Read, Edit, Write, Bash(plumbbob status:*), Bash(plumbbob agent l
|
|
|
10
10
|
|
|
11
11
|
Current session state (injected when this skill runs): !`plumbbob status 2>/dev/null || echo "plumbbob CLI not on PATH in this session. Marketplace install: confirm the plugin is enabled in /plugin, then /reload-plugins. Skills-dir/global install: npm i -g plumbbob && plumbbob init."`
|
|
12
12
|
|
|
13
|
-
`/
|
|
13
|
+
`/plumbbob:plan` authors the **whole** step list up front, so `/plumbbob:step` is the
|
|
14
14
|
**just-in-time revision** move: it keeps the *next* undone step honest against what the
|
|
15
|
-
build has actually taught you, right before you `/
|
|
16
|
-
is the separate `/
|
|
15
|
+
build has actually taught you, right before you `/plumbbob:build` it. (Framing the whole goal
|
|
16
|
+
is the separate `/plumbbob:plan` move.) It can also add or re-cut a step when scope genuinely
|
|
17
17
|
grew — but its everyday job is to sharpen, not to invent.
|
|
18
18
|
|
|
19
19
|
## Two ways to fire it
|
|
20
20
|
|
|
21
|
-
- **`/
|
|
21
|
+
- **`/plumbbob:step` (no input) → automatic sharpen.** Re-examine the next undone step
|
|
22
22
|
against the completed code, the Decisions, the Constraints, and the build-log, then
|
|
23
23
|
make the obvious revisions to its **done-when** and **seam** so it matches reality —
|
|
24
24
|
e.g. a file moved, a decision narrowed the scope, an earlier step already did part of
|
|
25
25
|
it. This is the zero-effort "keep my next step in sync" move: if the human does
|
|
26
26
|
nothing else, the next step stays current.
|
|
27
|
-
- **`/
|
|
27
|
+
- **`/plumbbob:step <what changed>` → directed revision.** Take the human's input and propose
|
|
28
28
|
the matching change: tighten the done-when, adjust the seam, split the step in two, or
|
|
29
29
|
add a new increment the plan was missing.
|
|
30
30
|
|
|
@@ -33,7 +33,7 @@ grew — but its everyday job is to sharpen, not to invent.
|
|
|
33
33
|
1. **Read the plan and the reality.** Read `intent.md`'s Frame, Decisions, Constraints,
|
|
34
34
|
and the steps already done, plus the next undone step, to see what it *should* now be.
|
|
35
35
|
2. **Propose the revision** (or the new/split step): a one-line **title**, a **done-when**
|
|
36
|
-
`/
|
|
36
|
+
`/plumbbob:verify` can validate, and a **seam** (exact paths, or a `dir/` grant). Keep it
|
|
37
37
|
small enough to verify in one review pass. Show the before/after so the human can see
|
|
38
38
|
what you changed and why. Re-check the optional `- model:` recommendation too:
|
|
39
39
|
a step that sharpened into rote work can drop to a smaller model; one that grew subtle
|
|
@@ -53,14 +53,14 @@ grew — but its everyday job is to sharpen, not to invent.
|
|
|
53
53
|
build carries a `harness.json` (beside `intent.md`) and the reality that moved the
|
|
54
54
|
step also changed which agents it wants, sharpen that step's slot bindings
|
|
55
55
|
(`before`/`build`/`after`) and `note` at the same time — this is the just-in-time
|
|
56
|
-
counterpart to `/
|
|
56
|
+
counterpart to `/plumbbob:plan`'s plan-time binding. `plumbbob agent list` shows what's
|
|
57
57
|
resolvable. Same rule as the plan move: bindings + prose only, never a conditional
|
|
58
58
|
. Leave it untouched when the step's agents are still right, or when the build
|
|
59
59
|
uses none.
|
|
60
60
|
|
|
61
61
|
## The hard contracts
|
|
62
62
|
|
|
63
|
-
- **One verifiable increment.** Each step carries a done-when `/
|
|
63
|
+
- **One verifiable increment.** Each step carries a done-when `/plumbbob:verify` can check
|
|
64
64
|
and a seam small enough to review in one pass.
|
|
65
65
|
- **Edit `## Steps` only**, in the standard format `status` and `build` parse — never
|
|
66
66
|
the Roadmap, never loose prose. A done step (`[x]`) is history; do not rewrite it.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: verify
|
|
3
3
|
description: "The verify tick — run the check, self-review the diff against intent, validate the step's done-when, pause for your approval, then checkpoint. Executor-agnostic: it reads the diff, not who wrote it."
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
allowed-tools: Read, Bash(plumbbob status:*), Bash(plumbbob handoff:*), Bash(plumbbob check:*), Bash(plumbbob checkpoint:*), Bash(plumbbob agent:*), Bash(git diff:*), Bash(git status:*)
|
|
@@ -10,7 +10,7 @@ allowed-tools: Read, Bash(plumbbob status:*), Bash(plumbbob handoff:*), Bash(plu
|
|
|
10
10
|
Current session state (injected when this skill runs): !`plumbbob status 2>/dev/null || echo "plumbbob CLI not on PATH in this session. Marketplace install: confirm the plugin is enabled in /plugin, then /reload-plugins. Skills-dir/global install: npm i -g plumbbob && plumbbob init."`
|
|
11
11
|
|
|
12
12
|
This is the **tick** — the one beat where the human is the clock. Whatever produced
|
|
13
|
-
the current diff — `/
|
|
13
|
+
the current diff — `/plumbbob:build`, your own hands, a vibe session, another harness —
|
|
14
14
|
this skill verifies it the same way: **it reads the diff, not the author**.
|
|
15
15
|
|
|
16
16
|
## What this skill does, in order
|
|
@@ -31,7 +31,7 @@ this skill verifies it the same way: **it reads the diff, not the author**.
|
|
|
31
31
|
`summary`/`body` into the review below; route a non-`done` one by its status: a
|
|
32
32
|
`blocked` agent couldn't finish — surface its `notes`, let the human unblock, re-run;
|
|
33
33
|
a `drift` agent found the plan no longer matches reality — stop and send the human to
|
|
34
|
-
`/
|
|
34
|
+
`/plumbbob:refine` to repair the plan before checkpointing. No binding, or no harness, is a
|
|
35
35
|
clean no-op.
|
|
36
36
|
3. **Self-review** *(a single structured read)*. Read `git diff` and
|
|
37
37
|
`.plumbbob/intent.md`, then in one pass check the diff against:
|
|
@@ -79,7 +79,7 @@ this skill verifies it the same way: **it reads the diff, not the author**.
|
|
|
79
79
|
step gone from in-flight it renders `step N checkpointed — back at the boundary` and
|
|
80
80
|
points at the **next undone step**, carrying that step's `- model:` recommendation (the
|
|
81
81
|
plan's smallest-model-that-fits call) so the human knows which `/model` to select before
|
|
82
|
-
firing `/
|
|
82
|
+
firing `/plumbbob:build` again. This matters most across a context boundary: a fresh window
|
|
83
83
|
inherits the *session's* model, not the plan's suggestion, so this line is what carries
|
|
84
84
|
the recommendation over. The CLI owns the block, so it can't drift from what `plumbbob
|
|
85
85
|
status` reports; no `- model:` line means any model will do. Guidance, never a gate.
|
|
@@ -94,24 +94,24 @@ the self-review, **end the turn**, and the human's next message is the tick that
|
|
|
94
94
|
the checkpoint land when you re-fire. **Never reach for a raw `git commit` to force the
|
|
95
95
|
land** — that forges the very record the latch exists to keep honest, and the
|
|
96
96
|
commit-ask hook asks the human about it anyway. The refusal is a healthy latch doing its
|
|
97
|
-
job on the *record* while the *work* plane stays free; a `/
|
|
97
|
+
job on the *record* while the *work* plane stays free; a `/plumbbob:build --auto` or
|
|
98
98
|
a typed step range in the human's own prompt is the only self-approval — **never write
|
|
99
99
|
`auto` into a settings file to unlock the land; the latch ignores a model-minted grant
|
|
100
|
-
(D67), so ask the human to re-fire `/
|
|
100
|
+
(D67), so ask the human to re-fire `/plumbbob:build --auto` instead.**
|
|
101
101
|
|
|
102
102
|
## The hard contracts
|
|
103
103
|
|
|
104
104
|
- **Never skip the pause.** Check → self-review → validate, then wait. Approval is
|
|
105
105
|
the only thing that triggers the checkpoint.
|
|
106
106
|
- **Read the diff, not the author**. Verify identically whether the code was
|
|
107
|
-
built by `/
|
|
107
|
+
built by `/plumbbob:build`, by hand, vibed, or by another harness.
|
|
108
108
|
- **Red means stop, not pause.** A failing check is not an approval decision; report
|
|
109
109
|
it and end your turn.
|
|
110
110
|
- **You review; you do not build.** If the self-review finds a problem, surface it
|
|
111
111
|
and stop — fixing is a new build beat, not part of verify.
|
|
112
112
|
- **`after`-agents advise; they never gate**. Their output feeds the
|
|
113
113
|
self-review — checkride gates, the human approves. `blocked` → unblock and re-run;
|
|
114
|
-
`drift` → `/
|
|
114
|
+
`drift` → `/plumbbob:refine` before checkpointing. No code path makes them blocking.
|
|
115
115
|
- **A refused checkpoint is the pause, never a workaround.** Under the turn
|
|
116
116
|
hook a same-turn checkpoint is refused *by design* — present the diff, **end the
|
|
117
117
|
turn**, and let the human's next message re-tick it. Never route around it with a raw
|
package/templates/build-log.md
CHANGED
|
@@ -8,7 +8,7 @@ step boundaries. The antidote to "my plan got lost in the noise."
|
|
|
8
8
|
Park list : where ideas go so you do not chase them. CAPTURE, never act inline.
|
|
9
9
|
Harvest : the boundary ritual that keeps you on one branch.
|
|
10
10
|
Log : the build's history. `plumbbob checkpoint` appends a line per step as it
|
|
11
|
-
lands; feeds the /
|
|
11
|
+
lands; feeds the /plumbbob:finish report, which rides the branch into the PR.
|
|
12
12
|
-->
|
|
13
13
|
|
|
14
14
|
# Build log — {{TITLE}}
|
|
@@ -21,7 +21,7 @@ step boundaries. The antidote to "my plan got lost in the noise."
|
|
|
21
21
|
*(Mirror of intent.md's Steps, with live status — CLI-maintained, not hand-edited.
|
|
22
22
|
`build`/`checkpoint`/`revert` re-render this from intent.md, and set the Current step
|
|
23
23
|
line above. Only ONE step is in flight; a step is done only after a checkpoint —
|
|
24
|
-
check green + checkpoint taken, via `/
|
|
24
|
+
check green + checkpoint taken, via `/plumbbob:verify` or `/plumbbob:build`.)*
|
|
25
25
|
|
|
26
26
|
- ☐ 1. <step>
|
|
27
27
|
|
|
@@ -29,16 +29,16 @@ check green + checkpoint taken, via `/pb-verify` or `/pb-build`.)*
|
|
|
29
29
|
|
|
30
30
|
> Mid-step, every new problem / idea / "ooh what if" lands HERE, untouched, and you
|
|
31
31
|
> go straight back to the step. Acting the instant an idea arrives is the disease.
|
|
32
|
-
> Capture is one line (`/
|
|
32
|
+
> Capture is one line (`/plumbbob:park` composes it). Harvest happens only at the boundary.
|
|
33
33
|
|
|
34
|
-
## Harvest *(run `/
|
|
34
|
+
## Harvest *(run `/plumbbob:harvest` at each step boundary, after green)*
|
|
35
35
|
|
|
36
36
|
Classify each parked item as exactly ONE. Naming it before acting is what keeps you
|
|
37
37
|
from sprawling across branches.
|
|
38
38
|
|
|
39
39
|
| Class | Meaning | Action |
|
|
40
40
|
|------------------|-------------------------------------------|---------------------------------|
|
|
41
|
-
| **blocker** | Plan was wrong/incomplete; can't proceed | `/
|
|
41
|
+
| **blocker** | Plan was wrong/incomplete; can't proceed | `/plumbbob:revert`, fold into intent |
|
|
42
42
|
| **tangent** | A different path, not clearly better | Defer or kill. Default here. |
|
|
43
43
|
| **pivot signal** | Evidence the whole approach is wrong | Stop. Replan deliberately. |
|
|
44
44
|
|
|
@@ -52,8 +52,8 @@ Harvest results this boundary:
|
|
|
52
52
|
## Log
|
|
53
53
|
|
|
54
54
|
*(The build's history, oldest first. `plumbbob checkpoint` appends a dated line here
|
|
55
|
-
every time a step lands — via `/
|
|
55
|
+
every time a step lands — via `/plumbbob:build` or `/plumbbob:verify` — so this
|
|
56
56
|
fills in as you go, not at the end. Add your own decision/event lines too: this is what
|
|
57
57
|
you point at to say "I did that — the LLM helped, but those were my calls."
|
|
58
|
-
`/
|
|
58
|
+
`/plumbbob:finish` reads this for the report; `plumbbob finish` commits it with the build
|
|
59
59
|
folder, so it rides the branch into the PR.)*
|
package/templates/intent.md
CHANGED
|
@@ -38,7 +38,7 @@ reads them once, to decide, and that legibility buys back a chat round-trip.
|
|
|
38
38
|
## Decisions
|
|
39
39
|
|
|
40
40
|
*(One line each — settled, not re-litigated in the chat. Grows as you resolve the
|
|
41
|
-
holes `/
|
|
41
|
+
holes `/plumbbob:refine` surfaces, and as blockers fold in during BUILD. Mint a two- or
|
|
42
42
|
three-word slug where each item is born — `D1 (slug-here)` — and copy that slug at
|
|
43
43
|
every reference site, so a later `D4 (default-waves)` never decays into a bare `D4`
|
|
44
44
|
a cold reader has to hunt down.)*
|
|
@@ -47,28 +47,28 @@ a cold reader has to hunt down.)*
|
|
|
47
47
|
|
|
48
48
|
## Constraints
|
|
49
49
|
|
|
50
|
-
*(Hard rules the build must honor. `/
|
|
50
|
+
*(Hard rules the build must honor. `/plumbbob:verify` and `/plumbbob:refine` read against these.
|
|
51
51
|
Slug and gloss them at birth too — `C1 (no-new-deps)` — same one line, same rule.)*
|
|
52
52
|
|
|
53
53
|
- C1 (no-new-deps): <e.g. functional/procedural only; no new dependencies>
|
|
54
54
|
|
|
55
55
|
## Steps
|
|
56
56
|
|
|
57
|
-
*(The build plan. `/
|
|
57
|
+
*(The build plan. `/plumbbob:plan` authors the **whole list up front** — each step a small,
|
|
58
58
|
verifiable increment with its own **done-when** and **seam** (the paths it will touch,
|
|
59
|
-
which `/
|
|
59
|
+
which `/plumbbob:build` records in the build folder's `SEAM` for orientation — awareness, not a lock).
|
|
60
60
|
An optional **model** line recommends the smallest model that can carry the step —
|
|
61
61
|
mechanical work runs fine on a small model; subtle or creative work earns a frontier
|
|
62
62
|
one. Advisory for the human, never a gate; write it plain, no backticks (D62).
|
|
63
63
|
The step title *is* the checkpoint's commit subject: write it as one plain line,
|
|
64
64
|
`type(scope): description` — load-bearing paths live in `seam`, never jammed into the
|
|
65
65
|
title (D2) — aiming for ≤72 characters (GitHub's subject convention: soft, no gate, D9).
|
|
66
|
-
The `(scope)` names the primary code area the step touches (`
|
|
66
|
+
The `(scope)` names the primary code area the step touches (`plan`, `commitmsg`); the
|
|
67
67
|
build's `**Scope:**` header is the feature-level catch-all a step overrides (D8). Scope
|
|
68
68
|
resolves title-scope → `**Scope:**` default → build slug → bare, and type resolves
|
|
69
|
-
title-type → `feat` (D3/D68). Then drive `/
|
|
70
|
-
fuzzier than the first; sharpen the next one just-in-time with `/
|
|
71
|
-
auto-syncs it), and use `/
|
|
69
|
+
title-type → `feat` (D3/D68). Then drive `/plumbbob:build` until done. Later steps may be
|
|
70
|
+
fuzzier than the first; sharpen the next one just-in-time with `/plumbbob:step` (empty input
|
|
71
|
+
auto-syncs it), and use `/plumbbob:refine` to repair the whole plan when a blocker rewrites it.)*
|
|
72
72
|
|
|
73
73
|
1. [ ] feat: <step> — **done when:** <criterion, ideally a test or check result>
|
|
74
74
|
- seam: `<file>`, `<file>`
|
|
@@ -5,7 +5,7 @@ folder into the PR beside intent.md / report.md. Fill it while the experiment is
|
|
|
5
5
|
— the worktrees and their learnings are torn down at `spike done`, but this stays.
|
|
6
6
|
|
|
7
7
|
Two ways a spike is born, both landing here:
|
|
8
|
-
- `/
|
|
8
|
+
- `/plumbbob:spike <slug>` — an explicit mid-build fork with throwaway worktrees.
|
|
9
9
|
- a planned step titled `spike: …` — the increment IS the experiment.
|
|
10
10
|
Record the Verdict before you close the spike (or check off the step).
|
|
11
11
|
-->
|