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.
Files changed (47) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +56 -44
  3. package/dist/cli-core.js +35 -15
  4. package/dist/lib/agents.js +230 -112
  5. package/dist/lib/buildlog.js +50 -30
  6. package/dist/lib/buildlogsync.js +21 -12
  7. package/dist/lib/check.js +69 -35
  8. package/dist/lib/commitmsg.js +53 -32
  9. package/dist/lib/git.js +86 -31
  10. package/dist/lib/intent.js +91 -31
  11. package/dist/lib/latch.js +70 -39
  12. package/dist/lib/orient.js +78 -39
  13. package/dist/lib/plugins.js +11 -8
  14. package/dist/lib/settings.js +65 -32
  15. package/dist/lib/sidecar.js +320 -150
  16. package/dist/lib/templates.js +17 -6
  17. package/dist/verbs/agent.js +116 -55
  18. package/dist/verbs/build.js +27 -12
  19. package/dist/verbs/check.js +33 -7
  20. package/dist/verbs/checkpoint.js +153 -78
  21. package/dist/verbs/doctor.js +192 -95
  22. package/dist/verbs/finish.js +87 -44
  23. package/dist/verbs/handoff.js +56 -20
  24. package/dist/verbs/init.js +37 -12
  25. package/dist/verbs/park.js +14 -3
  26. package/dist/verbs/revert.js +64 -24
  27. package/dist/verbs/spike.js +89 -30
  28. package/dist/verbs/start.js +72 -38
  29. package/dist/verbs/status.js +44 -17
  30. package/dist/verbs/turn.js +88 -45
  31. package/dist/verbs/use.js +20 -9
  32. package/package.json +2 -2
  33. package/skills/{pb-build → build}/SKILL.md +25 -25
  34. package/skills/{pb-doctor → doctor}/SKILL.md +1 -1
  35. package/skills/{pb-finish → finish}/SKILL.md +18 -5
  36. package/skills/{pb-harvest → harvest}/SKILL.md +4 -4
  37. package/skills/{pb-park → park}/SKILL.md +2 -2
  38. package/skills/{pb-plan → plan}/SKILL.md +11 -11
  39. package/skills/{pb-refine → refine}/SKILL.md +7 -7
  40. package/skills/{pb-revert → revert}/SKILL.md +2 -2
  41. package/skills/{pb-spike → spike}/SKILL.md +4 -4
  42. package/skills/{pb-status → status}/SKILL.md +3 -3
  43. package/skills/{pb-step → step}/SKILL.md +9 -9
  44. package/skills/{pb-verify → verify}/SKILL.md +8 -8
  45. package/templates/build-log.md +7 -7
  46. package/templates/intent.md +8 -8
  47. package/templates/spike-report.md +1 -1
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: pb-refine
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
- `/pb-refine` keeps `intent.md` honest. Use it at **any point** — right after `/pb-plan`
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 `/pb-step` (which only
16
- sharpens the *next* step): `/pb-refine` works the *whole* plan.
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 `/pb-plan`) first, and edit nothing. Every active state
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.** `/pb-refine` touches `intent.md` only — turning a
60
- decision into a diff is `/pb-build` or your own hands, never this skill.
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: pb-revert
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. `/pb-revert --to 2` → step `2`). With no target, revert goes to the last done-checkpoint.
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: pb-spike
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. `/pb-spike redis-cache`), `report <slug>` to scaffold a report without worktrees (`/pb-spike report auth-store`), or the literal `done` to tear the current spike down (`/pb-spike done`). If none is present, ask which and run nothing.
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
- - **`/pb-spike <slug>`** scaffolds the report *at open*, so findings accrue while the throwaway worktrees are still live. Fill its **Findings** and **Verdict** before `/pb-spike done`.
27
- - **`/pb-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.
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: pb-status
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 `/pb-build` — or ignore it. Guidance,
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 `/pb-plan` to frame a goal.
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: pb-step
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
- `/pb-plan` authors the **whole** step list up front, so `/pb-step` is the
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 `/pb-build` it. (Framing the whole goal
16
- is the separate `/pb-plan` move.) It can also add or re-cut a step when scope genuinely
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
- - **`/pb-step` (no input) → automatic sharpen.** Re-examine the next undone step
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
- - **`/pb-step <what changed>` → directed revision.** Take the human's input and propose
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
- `/pb-verify` can validate, and a **seam** (exact paths, or a `dir/` grant). Keep it
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 `/pb-plan`'s plan-time binding. `plumbbob agent list` shows what's
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 `/pb-verify` can check
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: pb-verify
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 — `/pb-build`, your own hands, a vibe session, another harness —
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
- `/pb-refine` to repair the plan before checkpointing. No binding, or no harness, is a
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 `/pb-build` again. This matters most across a context boundary: a fresh window
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 `/pb-build --auto` or
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 `/pb-build --auto` instead.**
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 `/pb-build`, by hand, vibed, or by another harness.
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` → `/pb-refine` before checkpointing. No code path makes them blocking.
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
@@ -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 /pb-finish report, which rides the branch into the PR.
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 `/pb-verify` or `/pb-build`.)*
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 (`/pb-park` composes it). Harvest happens only at the boundary.
32
+ > Capture is one line (`/plumbbob:park` composes it). Harvest happens only at the boundary.
33
33
 
34
- ## Harvest *(run `/pb-harvest` at each step boundary, after green)*
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 | `/pb-revert`, fold into intent |
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 `/pb-build` or `/pb-verify` — so this
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
- `/pb-finish` reads this for the report; `plumbbob finish` commits it with the build
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.)*
@@ -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 `/pb-refine` surfaces, and as blockers fold in during BUILD. Mint a two- or
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. `/pb-verify` and `/pb-refine` read against these.
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. `/pb-plan` authors the **whole list up front** — each step a small,
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 `/pb-build` records in the build folder's `SEAM` for orientation — awareness, not a lock).
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 (`pb-plan`, `commitmsg`); the
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 `/pb-build` until done. Later steps may be
70
- fuzzier than the first; sharpen the next one just-in-time with `/pb-step` (empty input
71
- auto-syncs it), and use `/pb-refine` to repair the whole plan when a blocker rewrites it.)*
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
- - `/pb-spike <slug>` — an explicit mid-build fork with throwaway worktrees.
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
  -->