plumbbob 0.12.0 → 0.12.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 +3 -3
- package/dist/cli-core.js +11 -0
- package/dist/lib/orient.js +223 -18
- package/dist/verbs/build.js +45 -22
- package/dist/verbs/checkpoint.js +4 -4
- package/dist/verbs/handoff.js +64 -13
- package/dist/verbs/order.js +102 -0
- package/dist/verbs/recover.js +31 -1
- package/dist/verbs/turn.js +7 -6
- package/node_modules/checkride/.claude-plugin/plugin.json +1 -1
- package/node_modules/checkride/CHANGELOG.md +117 -0
- package/node_modules/checkride/dist/adapters.d.ts.map +1 -1
- package/node_modules/checkride/dist/adapters.js +14 -10
- package/node_modules/checkride/dist/adapters.js.map +1 -1
- package/node_modules/checkride/dist/baseline/fallow.d.ts +4 -3
- package/node_modules/checkride/dist/baseline/fallow.d.ts.map +1 -1
- package/node_modules/checkride/dist/baseline/fallow.js +15 -8
- package/node_modules/checkride/dist/baseline/fallow.js.map +1 -1
- package/node_modules/checkride/dist/gate.d.ts.map +1 -1
- package/node_modules/checkride/dist/gate.js +62 -44
- package/node_modules/checkride/dist/gate.js.map +1 -1
- package/node_modules/checkride/dist/init.js +3 -3
- package/node_modules/checkride/dist/init.js.map +1 -1
- package/node_modules/checkride/dist/orchestrator.d.ts.map +1 -1
- package/node_modules/checkride/dist/orchestrator.js +53 -8
- package/node_modules/checkride/dist/orchestrator.js.map +1 -1
- package/node_modules/checkride/dist/pack.js +3 -3
- package/node_modules/checkride/dist/security.d.ts +4 -2
- package/node_modules/checkride/dist/security.d.ts.map +1 -1
- package/node_modules/checkride/dist/security.js +42 -8
- package/node_modules/checkride/dist/security.js.map +1 -1
- package/node_modules/checkride/dist/triage/render.js +1 -1
- package/node_modules/checkride/dist/triage/render.js.map +1 -1
- package/node_modules/checkride/package.json +10 -10
- package/node_modules/checkride/skills/check/SKILL.md +4 -3
- package/node_modules/checkride/templates/shared/cspell.json +3 -24
- package/package.json +3 -3
- package/skills/build/SKILL.md +12 -4
- package/skills/harvest/SKILL.md +4 -1
- package/skills/order/SKILL.md +50 -0
- package/skills/plan/SKILL.md +3 -1
- package/skills/refine/SKILL.md +6 -2
- package/skills/step/SKILL.md +8 -3
- package/skills/verify/SKILL.md +10 -7
- package/templates/intent.md +9 -0
package/skills/build/SKILL.md
CHANGED
|
@@ -24,7 +24,7 @@ the diff appeared. When you do run it, it reads the plan, writes the step, and
|
|
|
24
24
|
carries straight through to the verify pause.
|
|
25
25
|
|
|
26
26
|
Since `/plumbbob:plan` lays down the whole step list up front, the happy path is to run
|
|
27
|
-
`/plumbbob:build` once per step until done: each run builds the next undone step and stops
|
|
27
|
+
`/plumbbob:build` once per step until done: each run builds the next undone step in build order and stops
|
|
28
28
|
at the pause for your approval. **Running `/plumbbob:build` again is itself the clock tick.**
|
|
29
29
|
|
|
30
30
|
A model note: this skill **inherits the session model**; nothing pins or switches
|
|
@@ -38,7 +38,8 @@ switch with `/model` and rerun to honor it, or wave you on. Advisory, never a ga
|
|
|
38
38
|
if you were given a range like `/plumbbob:build 1-3`, start at the first number and treat
|
|
39
39
|
the second as the last step you approve and land yourself (see the range note under
|
|
40
40
|
`--auto`). With no argument, don't resolve the next step yourself; the CLI does: bare `plumbbob build`
|
|
41
|
-
(step 2) enters the next undone step
|
|
41
|
+
(step 2) enters the next undone step in build order (the `## Build order` line when the
|
|
42
|
+
plan has one, else the numbering) and refuses with a `/plumbbob:step` nudge when every
|
|
42
43
|
step is checkpointed.
|
|
43
44
|
2. **Enter the step.** Run `plumbbob build <n>`, or bare `plumbbob build` to enter the
|
|
44
45
|
next undone step (records the in-flight STEP + SEAM so `/plumbbob:status` shows the step in
|
|
@@ -268,7 +269,9 @@ and approves in the human's place**, and it **chains**:
|
|
|
268
269
|
human has a call to make about it, so end on the same turn the default pause does:
|
|
269
270
|
write the detail file, run `plumbbob handoff`, and paste its block.
|
|
270
271
|
- **A clean halt lands its step first.** The top of a requested range is reached, or no
|
|
271
|
-
planned steps remain
|
|
272
|
+
planned steps remain, and `plumbbob build` names that step as it enters it (for
|
|
273
|
+
example `step 3 is the last undone step in the plan`). That step checkpoints like
|
|
274
|
+
every step before it, and its
|
|
272
275
|
checkpoint's block is the whole ending: relay it with nothing written around it, then
|
|
273
276
|
end the turn. Write no detail file and run no `handoff`, because nothing is pending.
|
|
274
277
|
The block already carries the Verdict the step earned and a Next Up pointing at what
|
|
@@ -289,7 +292,8 @@ any next step whose plan number is past the top of the range.** It adds no machi
|
|
|
289
292
|
the one more entry already in the halt list above, and it is a clean halt, so the top step
|
|
290
293
|
is never held back for approval. The human approved it by typing the range, and
|
|
291
294
|
`plumbbob build` says so as it enters that step:
|
|
292
|
-
`step 3 is the top of the range you granted
|
|
295
|
+
`step 3 is the top of the range you granted`, or, when the plan ends first,
|
|
296
|
+
`the last undone step in the range you granted`.
|
|
293
297
|
|
|
294
298
|
- **`N-M` with N ≤ M**: build N…M, self-approving and checkpointing each, M included, then
|
|
295
299
|
relay M's checkpoint block and end the turn. `N-N` is a range like any other: it builds
|
|
@@ -305,6 +309,10 @@ is never held back for approval. The human approved it by typing the range, and
|
|
|
305
309
|
- **N is above the next undone step**: you are jumping over earlier planned work; note
|
|
306
310
|
that you are skipping the steps before N, then proceed (the same latitude as a
|
|
307
311
|
single-number jump like `/plumbbob:build 4`).
|
|
312
|
+
- **The build order puts a number past the top ahead of the rest** (the order reads
|
|
313
|
+
`1, 4, 2, 3` under `/plumbbob:build 1-3`): a range names plan numbers, so the halt above
|
|
314
|
+
fires before step 4 and `plumbbob build` names step 1 as the last undone step in the
|
|
315
|
+
range. Build a re-sequenced stretch step by step, or grant `--auto`.
|
|
308
316
|
|
|
309
317
|
## The hard contracts
|
|
310
318
|
|
package/skills/harvest/SKILL.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: harvest
|
|
3
3
|
description: "Triage the park list at a step boundary: propose one class (blocker/tangent/pivot) per parked item, write only after the human confirms each, record under ## Harvest, and fold a confirmed blocker into intent."
|
|
4
4
|
disable-model-invocation: true
|
|
5
|
-
allowed-tools: Read, Edit, Bash(plumbbob status:*)
|
|
5
|
+
allowed-tools: Read, Edit, Bash(plumbbob status:*), Bash(plumbbob order:*)
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# PlumbBob: harvest the park list
|
|
@@ -45,5 +45,8 @@ one line of reasoning, then **wait for the human to confirm or override**. Write
|
|
|
45
45
|
- A confirmed **blocker** also folds its decision into `intent.md`, slugged at birth
|
|
46
46
|
like any Decision, anchored the same way
|
|
47
47
|
(`- <a id="d5"></a>**D5 (retry-cap)**: <the call>, *because* <why>`), never a bare `D5`.
|
|
48
|
+
A blocker that becomes a new step takes the next free number under `## Steps` and,
|
|
49
|
+
when it has to land before an existing undone step, its place in the sequence through
|
|
50
|
+
`plumbbob order 7 8 5` (the `## Build order` line), never by renumbering.
|
|
48
51
|
- Never reclassify or resolve an item the human hasn't confirmed, and default every
|
|
49
52
|
uncertain item to **tangent**, never to blocker.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: order
|
|
3
|
+
description: "Set the build order: turn the human's sequence (or a relative one, such as 7 and 8 before 5) into the full list of undone steps and write it by shelling `plumbbob order`, never by editing intent.md. A step keeps its number; the sequence moves."
|
|
4
|
+
argument-hint: "[steps in the sequence to build them]"
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
model: haiku
|
|
7
|
+
allowed-tools: Bash(plumbbob status:*), Bash(plumbbob order:*)
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PlumbBob: set the build order (the sequence, not the numbering)
|
|
11
|
+
|
|
12
|
+
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."`
|
|
13
|
+
|
|
14
|
+
A step keeps its number for life, so once `/plumbbob:step` or `/plumbbob:refine` appends a step
|
|
15
|
+
that has to land before an existing one, the sequence to build them stops being the
|
|
16
|
+
numbering (`4, 7, 8, 5, 10, 6`). This skill writes that sequence down where every other move
|
|
17
|
+
reads it: the `## Build order` line in `intent.md`, which `plumbbob status`, a bare
|
|
18
|
+
`/plumbbob:build`, `plumbbob checkpoint`, and the card's Next Up all follow.
|
|
19
|
+
|
|
20
|
+
## Wrong-state refusal
|
|
21
|
+
|
|
22
|
+
Ordering needs an **active session** with a plan. Read the dashboard injected above: if it
|
|
23
|
+
is `NO ACTIVE SESSION`, **refuse** and tell the human to run `plumbbob start "<title>"` (or
|
|
24
|
+
`/plumbbob:plan`) first. Any live state is fine, mid-step included: re-sequencing what comes
|
|
25
|
+
after the step in flight is the usual reason to run it.
|
|
26
|
+
|
|
27
|
+
## What this skill does
|
|
28
|
+
|
|
29
|
+
1. **Compose the full sequence.** Read the step list and the `build order` row on the
|
|
30
|
+
dashboard. Take the human's instruction, whether a full list (`7 8 5 10 6`) or a relative
|
|
31
|
+
one ("7 and 8 before 5", "10 last"), and turn it into **every undone step, in the sequence
|
|
32
|
+
to build them**. Never renumber a step and never move one inside `## Steps`; the sequence
|
|
33
|
+
lives in this one line.
|
|
34
|
+
2. **Show the sequence and get the human's OK in-turn.** When the human's own message states
|
|
35
|
+
the full sequence, that message **is** the approval: run the verb directly.
|
|
36
|
+
3. **Write it by shelling `plumbbob order 7 8 5 10 6`** via Bash. `plumbbob order --reset`
|
|
37
|
+
drops the line, and the plan reads in document order again.
|
|
38
|
+
4. **Relay the ending verbatim, then stop.** The verb prints its whole ending: the
|
|
39
|
+
`**Build order**: 7, 8, 5, 10, 6` line, a blank line, and the `**Next Up**` pointer (back
|
|
40
|
+
at the step in flight, or forward to the first step in the new sequence). Run no second
|
|
41
|
+
command. A refusal (a number the plan lacks, a repeat, a step already checkpointed) is the
|
|
42
|
+
CLI's call: report it verbatim, never retry or work around it, and ask the human which
|
|
43
|
+
number they meant.
|
|
44
|
+
|
|
45
|
+
## The one hard contract
|
|
46
|
+
|
|
47
|
+
The line is written by the **dumb CLI**, never by an edit. This skill carries **no Edit and
|
|
48
|
+
no Write tool** on purpose: you may not touch `intent.md` yourself. Compose, get approval,
|
|
49
|
+
then shell `plumbbob order`; that is the only write path, and it is the one that validates
|
|
50
|
+
every number against the plan.
|
package/skills/plan/SKILL.md
CHANGED
|
@@ -85,7 +85,9 @@ an agent can follow with `/plumbbob:build`. The argument only seeds how you get
|
|
|
85
85
|
Every step needs a **done-when** `/plumbbob:verify` can check and a **seam** (the exact
|
|
86
86
|
paths it touches). Later steps may be fuzzier than the first (that's fine); they get
|
|
87
87
|
sharpened just-in-time when you reach them with `/plumbbob:step`. Keep each small enough to
|
|
88
|
-
verify in one review pass.
|
|
88
|
+
verify in one review pass. Number them in the sequence you expect to build them and
|
|
89
|
+
leave `## Build order` alone: it is for later, when a refine appends a step that has to
|
|
90
|
+
land before an existing one (`plumbbob order`).
|
|
89
91
|
|
|
90
92
|
**The title *is* the commit subject; author it as one**
|
|
91
93
|
([D68 (conventional-subjects)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d68)): write each
|
package/skills/refine/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ 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
|
|
6
|
-
allowed-tools: Read, Edit, Bash(plumbbob status:*)
|
|
6
|
+
allowed-tools: Read, Edit, Bash(plumbbob status:*), Bash(plumbbob order:*)
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# PlumbBob: refine the plan
|
|
@@ -51,7 +51,11 @@ is fine; refining is always available.
|
|
|
51
51
|
load-bearing detail (file paths, module names) in `seam` and `done-when`,
|
|
52
52
|
**never jammed into the title**; the checkpoint body pass then reconciles and lands
|
|
53
53
|
that subject at the verify pause.
|
|
54
|
-
Show the before/after for each, and **write only what the human approves**.
|
|
54
|
+
Show the before/after for each, and **write only what the human approves**. A repair
|
|
55
|
+
that inserts a step, or moves one ahead of another, keeps every number where it is and
|
|
56
|
+
writes the sequence instead: shell `plumbbob order 7 8 5` with the undone steps in the
|
|
57
|
+
sequence to build them, and the `## Build order` line it writes is what every next-step
|
|
58
|
+
pick follows. Never renumber, and never edit that line by hand.
|
|
55
59
|
|
|
56
60
|
## The hard contracts
|
|
57
61
|
|
package/skills/step/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ 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
|
|
6
|
-
allowed-tools: Read, Edit, Write, Bash(plumbbob status:*), Bash(plumbbob agent list:*)
|
|
6
|
+
allowed-tools: Read, Edit, Write, Bash(plumbbob status:*), Bash(plumbbob order:*), Bash(plumbbob agent list:*)
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# PlumbBob: revise the next step (the single-increment move)
|
|
@@ -48,7 +48,11 @@ grew, but its everyday job is to sharpen, not to invent.
|
|
|
48
48
|
`**Scope:**` header; drop the scope and it falls back to that default → build slug →
|
|
49
49
|
bare, and the type to `feat` ([D68 (conventional-subjects)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d68)). Aim for a soft
|
|
50
50
|
≤72 chars, no gate. Revise the existing step in place; only append when you are
|
|
51
|
-
genuinely adding an increment.
|
|
51
|
+
genuinely adding an increment. An appended step keeps the next free number for life;
|
|
52
|
+
when it has to land before an existing undone step, place it by sequence, never by
|
|
53
|
+
renumbering: shell `plumbbob order 7 8 5` with every undone step in the sequence to
|
|
54
|
+
build them, and the `## Build order` line it writes is what `status`, a bare
|
|
55
|
+
`/plumbbob:build`, and the card's Next Up then follow.
|
|
52
56
|
4. **Revise the step's harness bindings if they drifted too** *(optional)*. If the
|
|
53
57
|
build carries a `harness.json` (beside `intent.md`) and the reality that moved the
|
|
54
58
|
step also changed which agents it wants, sharpen that step's slot bindings
|
|
@@ -63,7 +67,8 @@ grew, but its everyday job is to sharpen, not to invent.
|
|
|
63
67
|
- **One verifiable increment.** Each step carries a done-when `/plumbbob:verify` can check
|
|
64
68
|
and a seam small enough to review in one pass.
|
|
65
69
|
- **Edit `## Steps` only**, in the standard format `status` and `build` parse: never
|
|
66
|
-
the Roadmap, never loose prose. A done step (`[x]`) is history; do not rewrite it.
|
|
70
|
+
the Roadmap, never loose prose. A done step (`[x]`) is history; do not rewrite it. The
|
|
71
|
+
`## Build order` line is `plumbbob order`'s to write, never yours to edit.
|
|
67
72
|
- **Cite the plan's own numbers in the linked form.** A `D`/`C`/`Q` you write into a
|
|
68
73
|
step's done-when, seam, or notes reads `[D4 (default-waves)](#d4)`; the slug travels
|
|
69
74
|
with the number, and the link lands on the `<a id="d4">` anchor minted where the item
|
package/skills/verify/SKILL.md
CHANGED
|
@@ -113,8 +113,11 @@ this skill verifies it the same way: **it reads the diff, not the author**
|
|
|
113
113
|
`## Log` and then truncates it (the detail plane in the
|
|
114
114
|
[turn anatomy](https://github.com/robmclarty/plumbbob/blob/main/docs/presentation.md)).
|
|
115
115
|
|
|
116
|
-
*Paste the turn.* Run `plumbbob handoff
|
|
117
|
-
level, trailing blank line included, then end the
|
|
116
|
+
*Paste the turn.* Run `plumbbob handoff <n>`, naming the step you reviewed, and paste
|
|
117
|
+
its output whole, verbatim, at top level, trailing blank line included, then end the
|
|
118
|
+
turn. The number is what lets a diff built outside `/plumbbob:build` reach its pause:
|
|
119
|
+
nothing is in flight for that diff, and a bare `handoff` would read the moment as a
|
|
120
|
+
boundary and render no Your Call block. Never nest it inside a fence of
|
|
118
121
|
your own; it carries fences of its own and they cannot nest. It prints the Summary and
|
|
119
122
|
its highlights, the Readout fence (its measured `check`, `seam`, `diff`, and `spent`
|
|
120
123
|
rows folded with your three), a `diff` fence when the change is 20 lines or fewer, the
|
|
@@ -130,8 +133,8 @@ this skill verifies it the same way: **it reads the diff, not the author**
|
|
|
130
133
|
|
|
131
134
|
*Then read the reply as an ask or a direction.* A message that **asks** ("expand 2",
|
|
132
135
|
"what does that mean?", "why did the seam row flag that?") is an expand: answer it from the detail file, from
|
|
133
|
-
`git diff`, or from the build-log's `## Log` for an older step, never from recall, then run `plumbbob handoff
|
|
134
|
-
paste it. The step
|
|
136
|
+
`git diff`, or from the build-log's `## Log` for an older step, never from recall, then run `plumbbob handoff <n>` again and
|
|
137
|
+
paste it. The step has not landed, so it renders the same pause, and the Your Call
|
|
135
138
|
block stays the CLI's to render rather than yours to retype. A message that **directs**
|
|
136
139
|
is needs-work: take it as what to change, and nothing lands until the human says
|
|
137
140
|
`looks good`.
|
|
@@ -194,7 +197,7 @@ When this session runs under plumbbob's turn hook, `plumbbob checkpoint` **refus
|
|
|
194
197
|
land a step in the same turn it was entered**, and that refusal **is** this pause, not
|
|
195
198
|
an error to route around. If the checkpoint prints `checkpoint refused — no human turn
|
|
196
199
|
since this step began`, you have reached the pause the hard way: write the file, run
|
|
197
|
-
`plumbbob handoff
|
|
200
|
+
`plumbbob handoff <n>`, paste its block as step 5 says, **end the turn there**, and the
|
|
198
201
|
human's next message is the tick that lets
|
|
199
202
|
the checkpoint land when you run it again. **Never reach for a raw `git commit` to force the
|
|
200
203
|
land**; that forges the very record the latch exists to keep honest, and the
|
|
@@ -220,8 +223,8 @@ instead.**
|
|
|
220
223
|
self-review; checkride gates, the human approves. `blocked` → unblock and re-run;
|
|
221
224
|
`drift` → `/plumbbob:refine` before checkpointing. No code path makes them blocking.
|
|
222
225
|
- **A refused checkpoint is the pause, never a workaround.** Under the turn
|
|
223
|
-
hook a same-turn checkpoint is refused *by design*: write the file, run
|
|
224
|
-
handoff
|
|
226
|
+
hook a same-turn checkpoint is refused *by design*: write the file, run
|
|
227
|
+
`plumbbob handoff <n>`, paste its block, **end the turn there**, and let the human's next message
|
|
225
228
|
re-tick it. Never route around it with a
|
|
226
229
|
raw `git commit`; the latch guards the record, not the work.
|
|
227
230
|
- **Close with the next model.** When the checkpoint lands it prints the whole boundary
|
package/templates/intent.md
CHANGED
|
@@ -79,6 +79,15 @@ auto-syncs it), and use `/plumbbob:refine` to repair the whole plan when a block
|
|
|
79
79
|
2. [ ] <step>, **done when:** <criterion>
|
|
80
80
|
- seam: `<file>`
|
|
81
81
|
|
|
82
|
+
## Build order
|
|
83
|
+
|
|
84
|
+
*(Optional. The sequence to build the steps in once it stops being their numbering: one
|
|
85
|
+
line of comma-separated step numbers, such as `7, 8, 5, 10, 6`; empty means document
|
|
86
|
+
order. `plumbbob order 7 8 5 10 6` (`/plumbbob:order`) writes it, and `status`, `build`,
|
|
87
|
+
`checkpoint`, and `handoff` all read it, so the dashboard's `← next`, a bare
|
|
88
|
+
`/plumbbob:build`, and the card's Next Up agree. A step keeps its number for life; this
|
|
89
|
+
line is where the sequence lives.)*
|
|
90
|
+
|
|
82
91
|
## Open questions
|
|
83
92
|
|
|
84
93
|
*(Holes you could NOT resolve on paper: the one section that expands rather than
|