plumbbob 0.13.0 → 0.13.2
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 +75 -54
- package/dist/cli-core.js +29 -9
- package/dist/lib/buildlog.js +77 -0
- package/dist/lib/git.js +53 -0
- package/dist/lib/latch.js +46 -5
- package/dist/lib/notice.js +3 -2
- package/dist/lib/orient.js +878 -61
- package/dist/lib/sidecar.js +164 -3
- package/dist/lib/steplist.js +128 -0
- package/dist/verbs/build.js +108 -14
- package/dist/verbs/checkpoint.js +41 -13
- package/dist/verbs/handoff.js +508 -42
- package/dist/verbs/harvest.js +224 -0
- package/dist/verbs/order.js +15 -11
- package/dist/verbs/recover.js +31 -1
- package/dist/verbs/relay.js +15 -2
- package/dist/verbs/status.js +64 -17
- package/dist/verbs/turn.js +170 -58
- package/package.json +1 -1
- package/skills/build/SKILL.md +85 -34
- package/skills/finish/SKILL.md +18 -4
- package/skills/harvest/SKILL.md +54 -11
- package/skills/order/SKILL.md +20 -10
- package/skills/plan/SKILL.md +77 -17
- package/skills/refine/SKILL.md +24 -3
- package/skills/run/SKILL.md +256 -0
- package/skills/status/SKILL.md +10 -3
- package/skills/step/SKILL.md +25 -3
- package/skills/verify/SKILL.md +6 -2
- package/templates/intent.md +30 -8
package/skills/order/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: order
|
|
3
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]"
|
|
4
|
+
argument-hint: "[steps in the sequence to build them, such as 1, 6, 2-4, 7, 5]"
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
model: haiku
|
|
7
7
|
allowed-tools: Bash(plumbbob status:*), Bash(plumbbob order:*)
|
|
@@ -27,20 +27,30 @@ after the step in flight is the usual reason to run it.
|
|
|
27
27
|
## What this skill does
|
|
28
28
|
|
|
29
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
|
|
31
|
-
one ("7 and 8 before 5", "10
|
|
32
|
-
|
|
33
|
-
lives in this one
|
|
30
|
+
dashboard. Take the human's instruction, whether a full list (`7 8 5 10 6`, or
|
|
31
|
+
`1, 6, 2-4, 7, 5` with spans and commas) or a relative one ("7 and 8 before 5", "10
|
|
32
|
+
last"), and turn it into **every undone step, in the sequence to build them**. Never
|
|
33
|
+
renumber a step and never move one inside `## Steps`; the sequence lives in this one
|
|
34
|
+
line.
|
|
34
35
|
2. **Show the sequence and get the human's OK in-turn.** When the human's own message states
|
|
35
36
|
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.
|
|
37
|
-
|
|
37
|
+
3. **Write it by shelling `plumbbob order 7 8 5 10 6`** via Bash. The verb reads spans and
|
|
38
|
+
commas, with or without a space after one, so a list typed as `1, 6, 2-4, 7, 5` goes to it
|
|
39
|
+
as typed, and the line it writes spells the span out. `plumbbob order --reset` drops the
|
|
40
|
+
line, and the plan reads in document order again.
|
|
38
41
|
4. **Relay the ending verbatim, then stop.** The verb prints its whole ending: the
|
|
39
42
|
`**Build order**: 7, 8, 5, 10, 6` line, a blank line, and the `**Next Up**` pointer (back
|
|
40
43
|
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
|
|
42
|
-
CLI's call: report it verbatim, never retry or work around
|
|
43
|
-
number they meant.
|
|
44
|
+
command but the one in step 5. A refusal (a number the plan lacks, a repeat, a step
|
|
45
|
+
already checkpointed) is the CLI's call: report it verbatim, never retry or work around
|
|
46
|
+
it, and ask the human which number they meant.
|
|
47
|
+
5. **Read the ranges when the plan has them.** If the dashboard injected above shows a
|
|
48
|
+
`ranges` block, run `plumbbob status` after the verb and read that block again. A `⚠`
|
|
49
|
+
row that was not there before means the new sequence broke a range (most often
|
|
50
|
+
`the build order puts step 11 inside it`). This skill edits nothing, so it cannot re-cut
|
|
51
|
+
one: open the turn with one line naming the range, its drift words, and
|
|
52
|
+
`/plumbbob:refine` as the move that re-cuts it, then the verb's ending, whole, as the
|
|
53
|
+
turn's last text. With no new `⚠` row, or no ranges block, relay the ending alone.
|
|
44
54
|
|
|
45
55
|
## The one hard contract
|
|
46
56
|
|
package/skills/plan/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plan
|
|
3
|
-
description: "Frame a fresh goal and author the whole plan (Frame, Decisions, Constraints, and
|
|
3
|
+
description: "Frame a fresh goal and author the whole plan (Frame, Decisions, Constraints, all Steps, and the build ranges) before any code. Three input modes: no arg interviews you; a file path (or @-mention) absorbs a spec; any other text expands your inline intent."
|
|
4
4
|
argument-hint: "[spec-path | intent]"
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
allowed-tools: Read, Edit, Write, Bash(plumbbob status:*), Bash(plumbbob handoff:*), Bash(plumbbob start:*), Bash(plumbbob checkpoint:*), Bash(plumbbob agent list:*)
|
|
@@ -12,9 +12,11 @@ Current session state (injected when this skill runs): !`plumbbob status 2>/dev/
|
|
|
12
12
|
|
|
13
13
|
`/plumbbob:plan` is the **whole-goal** move; it opens a session and gets the deciding out
|
|
14
14
|
of your head and onto `intent.md` *before* any code. By default it authors the
|
|
15
|
-
**complete plan, including all the Steps**, so the happy path
|
|
16
|
-
`/plumbbob:
|
|
17
|
-
|
|
15
|
+
**complete plan, including all the Steps and the build ranges**, so the happy path
|
|
16
|
+
afterward is `/plumbbob:run` until done: each run lands one range and stops where the plan
|
|
17
|
+
says a human call is due. A plan without ranges is driven with `/plumbbob:build`, a step
|
|
18
|
+
at a time, and `/plumbbob:build` stays the granular move inside any plan. (Revising a
|
|
19
|
+
single increment later is the separate `/plumbbob:step` move; do not confuse the two.)
|
|
18
20
|
|
|
19
21
|
A model note: this skill **inherits the session model**; nothing pins or switches
|
|
20
22
|
it. Planning is where frontier-class judgment pays for itself, so if the session is
|
|
@@ -42,7 +44,8 @@ Look at the argument the human gave and pick the mode yourself:
|
|
|
42
44
|
genuinely ambiguous.
|
|
43
45
|
|
|
44
46
|
All three modes converge on the **same artifact**: a complete, standalone `intent.md`
|
|
45
|
-
an agent can follow with `/plumbbob:
|
|
47
|
+
an agent can follow with `/plumbbob:run`, or with `/plumbbob:build` when it cuts no ranges.
|
|
48
|
+
The argument only seeds how you get there.
|
|
46
49
|
|
|
47
50
|
## What this skill does
|
|
48
51
|
|
|
@@ -117,7 +120,58 @@ an agent can follow with `/plumbbob:build`. The argument only seeds how you get
|
|
|
117
120
|
It is advisory metadata for the human (`/plumbbob:status` surfaces it before each build),
|
|
118
121
|
never a gate, and nothing switches models automatically. Write it plain (no
|
|
119
122
|
backticks) and omit it when any model would do.
|
|
120
|
-
5. **
|
|
123
|
+
5. **Cut the build ranges.** With the steps written, say where the build stops for a
|
|
124
|
+
human call, under `## Build ranges`
|
|
125
|
+
([D92 (build-ranges)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d92)):
|
|
126
|
+
one sentence on how to drive the build, a `/plumbbob:run` per range, then one numbered
|
|
127
|
+
item per range, in the format the parser reads:
|
|
128
|
+
|
|
129
|
+
```markdown
|
|
130
|
+
1. `/plumbbob:build 1`, **stop:** at step 1's pause, approve the schema before anything writes to it
|
|
131
|
+
- model: opus
|
|
132
|
+
2. `/plumbbob:build 2-5`, **stop:** review the parser before the renderers build on it
|
|
133
|
+
- model: sonnet
|
|
134
|
+
- note: <optional; what the range should watch for>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**A range ends where a human call is due, and nowhere else.** Three things make a
|
|
138
|
+
call: a decision the plan leaves open (an Open question, or a fork only a spike can
|
|
139
|
+
settle), a review before later steps build on what landed, and a thing only the human
|
|
140
|
+
can do, such as a push, a live key, or spending money. A range that runs through one
|
|
141
|
+
has the model make the human's call; a stop that marks none of them is a pause nobody
|
|
142
|
+
needed. The command's form says what kind of stop it is
|
|
143
|
+
([D85 (range-top-lands)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d85)).
|
|
144
|
+
A span such as `2-5` lands every step it names and stops at the boundary after the
|
|
145
|
+
last, so its stop is a review of what landed, or a decision the next steps need before
|
|
146
|
+
they build. A bare `N` builds step N to its pause, so write one for a call that has to
|
|
147
|
+
be made before its step lands, on the step's own work: approving the wording it
|
|
148
|
+
drafted, or the rule it found. Write each stop as what the human decides or reviews
|
|
149
|
+
there, in words they can act on cold.
|
|
150
|
+
|
|
151
|
+
Name every step in exactly one range, by its plan number. A fresh plan has no build
|
|
152
|
+
order, so the ranges follow the numbering. Give each range a `- model:` line naming the
|
|
153
|
+
strongest model any step inside it recommends, written plain the way a step's is,
|
|
154
|
+
because that is the `/model` the human picks before typing the run; any other
|
|
155
|
+
sub-line (a `- note:` on what to watch for) is the reader's, and the CLI leaves it
|
|
156
|
+
alone. Replace the template's placeholder item rather than writing beside it: an item
|
|
157
|
+
still holding its `<...>` fill-ins reads as no range at all.
|
|
158
|
+
|
|
159
|
+
**Size the ranges to the work.** A plan of two or three steps may carry one range, or
|
|
160
|
+
none. When every step would be its own bare range, delete the section: the default
|
|
161
|
+
loop already stops at each step's pause, and `/plumbbob:build` drives a plan without
|
|
162
|
+
ranges a step at a time.
|
|
163
|
+
|
|
164
|
+
**The card names the run, not the item.** The item's command is the range's
|
|
165
|
+
definition: the form the parser reads, and the kind of stop it makes. The card names
|
|
166
|
+
`/plumbbob:run` beneath Next Up for the range holding the next step, with the steps it
|
|
167
|
+
will land beside it, and `/plumbbob:run 3` runs range 3 by its item number
|
|
168
|
+
([D95 (run-verb)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d95)).
|
|
169
|
+
A range grants nothing until the human types the run that names it, and then the turn
|
|
170
|
+
hook mints the grant from the plan as it stands
|
|
171
|
+
([D96 (plan-names-the-grant)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d96)),
|
|
172
|
+
so a range you cut is never a grant you mint
|
|
173
|
+
([D67 (auto-not-a-grant)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d67)).
|
|
174
|
+
6. **Offer harness bindings** *(optional)*. If the build will lean on
|
|
121
175
|
user-authored agents, author `harness.json` in the build folder (beside `intent.md`)
|
|
122
176
|
and review it at the **same plan pause**, alongside the steps; bindings are
|
|
123
177
|
plan-adjacent configuration, so they converge with the plan. It binds agents to a
|
|
@@ -138,7 +192,7 @@ an agent can follow with `/plumbbob:build`. The argument only seeds how you get
|
|
|
138
192
|
`note` and decides when to run one mid-build. Skip the file entirely when no step
|
|
139
193
|
uses an agent; the loop runs identically without it. The plan commit picks it
|
|
140
194
|
up automatically (it lives in the build folder).
|
|
141
|
-
|
|
195
|
+
7. **Commit the plan.** Once the human approves the frame and steps, run
|
|
142
196
|
`plumbbob checkpoint --plan` to commit the scaffold on its own: subject
|
|
143
197
|
`chore(<scope>): plan` (with a `plumbbob plan` body marker), only `.plumbbob/builds/<slug>/`,
|
|
144
198
|
a `plan <sha>` line in
|
|
@@ -148,16 +202,19 @@ an agent can follow with `/plumbbob:build`. The argument only seeds how you get
|
|
|
148
202
|
rationale is worth carrying; skip it for a small plan. Do this
|
|
149
203
|
only on the human's approval; the plan is their convergence.
|
|
150
204
|
- **The plan pause is a decision turn.** Present the framed plan for the human's call,
|
|
151
|
-
|
|
152
|
-
|
|
205
|
+
its build ranges with it (each range's command and its stop, since a stop is where
|
|
206
|
+
the human will be asked, and moving one is cheapest now), then give it the cold
|
|
207
|
+
read (**§ The cold read**), write the result into `.plumbbob/detail.md`, and relay `plumbbob handoff --plan`'s block whole: the CLI
|
|
153
208
|
renders the your-call block with the moves that apply before anything is recorded and
|
|
154
209
|
prints your recommendation last (the decision tier of the
|
|
155
210
|
[turn anatomy](https://github.com/robmclarty/plumbbob/blob/main/docs/presentation.md)),
|
|
156
|
-
so the moves are relayed, never hand-composed. *looks good* marks the plan decided and
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
message that
|
|
160
|
-
|
|
211
|
+
so the moves are relayed, never hand-composed. *looks good* marks the plan decided, and
|
|
212
|
+
its row names the move the human types next: `/plumbbob:run` for the range holding
|
|
213
|
+
Step 1 when the plan declares ranges, `/plumbbob:build` for Step 1 when it does not;
|
|
214
|
+
a message that asks (`expand 2`, or any question) is answered from the detail file or
|
|
215
|
+
`intent.md` and changes nothing; a message that directs is what to sharpen, cheap
|
|
216
|
+
now, before any code. The revert move vanishes there on its own: nothing has landed
|
|
217
|
+
to wind back.
|
|
161
218
|
- **The plan commit is latched too.** Once the turn ledger exists, `checkpoint
|
|
162
219
|
--plan` refuses to land in the same turn `start` stamped it: present the plan,
|
|
163
220
|
**end the turn**, and the human's approving message is the tick that lets it
|
|
@@ -168,7 +225,8 @@ an agent can follow with `/plumbbob:build`. The argument only seeds how you get
|
|
|
168
225
|
refusal.)
|
|
169
226
|
- **The plan commit prints its own close.** `plumbbob checkpoint --plan` emits the
|
|
170
227
|
whole boundary ending: `**Plan**: committed (<sha>)`, any advisory, and the pointer at
|
|
171
|
-
the step the build starts on
|
|
228
|
+
the step the build starts on, with the run that lands its range named beneath it when
|
|
229
|
+
the plan declares ranges. Relay that block whole and run no second command; the
|
|
172
230
|
plan-pause card above is the one place `handoff` is still called, because no verb has
|
|
173
231
|
run yet there.
|
|
174
232
|
- **Say what the commit publishes.** The close-out line names the tracked folder:
|
|
@@ -182,7 +240,7 @@ an agent can follow with `/plumbbob:build`. The argument only seeds how you get
|
|
|
182
240
|
(the `--body` earns its keep here), the files staying untracked. Say that
|
|
183
241
|
instead: the rationale is published in `git log`, not the folder, so pass a
|
|
184
242
|
fuller `--body` than you otherwise would, since the message is the whole record.
|
|
185
|
-
|
|
243
|
+
8. **Offer to stress-test it.** Suggest `/plumbbob:refine` to attack the frame for holes (or
|
|
186
244
|
to repair the plan as it drifts). Optional, the human's call.
|
|
187
245
|
|
|
188
246
|
## The cold read
|
|
@@ -198,7 +256,9 @@ Open questions, and keep it to one screen of reading. The lens:
|
|
|
198
256
|
- a collision with the existing code (read the files the seams name);
|
|
199
257
|
- a done-when no test or check can measure, or a seam that names a file that does not
|
|
200
258
|
exist or misses one that must change;
|
|
201
|
-
- a step too large to review in one pass, or a Decision with no *because
|
|
259
|
+
- a step too large to review in one pass, or a Decision with no *because*;
|
|
260
|
+
- a range that runs through a call the plan leaves open, so the model would make it;
|
|
261
|
+
- a range that stops where no call is due, a pause the human did not need.
|
|
202
262
|
|
|
203
263
|
Write what you found into `.plumbbob/detail.md`, overwriting whatever a past session
|
|
204
264
|
left, the findings first and the recommendation last:
|
package/skills/refine/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: refine
|
|
3
|
-
description: "Keep intent.md true: attack the plan for holes (append as Open questions) and refine or repair the Frame, Decisions, Constraints, and
|
|
4
|
-
argument-hint: "[focus]"
|
|
3
|
+
description: "Keep intent.md true: attack the plan for holes (append as Open questions) and refine or repair the Frame, Decisions, Constraints, Steps, and build ranges to match reality (`ranges` re-cuts the whole section). Usable at any point; you propose, the human approves."
|
|
4
|
+
argument-hint: "[focus | ranges]"
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
allowed-tools: Read, Edit, Bash(plumbbob status:*), Bash(plumbbob order:*)
|
|
7
7
|
---
|
|
@@ -22,7 +22,7 @@ it is `NO ACTIVE SESSION`, **refuse** in one line and tell the human to run
|
|
|
22
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
|
-
## Two modes
|
|
25
|
+
## Two modes, and a re-cut
|
|
26
26
|
|
|
27
27
|
- **Attack (diverge in the problem space).** Hand the **Frame**, **Decisions**, and
|
|
28
28
|
**Architecture sketch** a cold, adversarial read and surface holes: ambiguities,
|
|
@@ -57,6 +57,27 @@ is fine; refining is always available.
|
|
|
57
57
|
sequence to build them, and the `## Build order` line it writes is what every next-step
|
|
58
58
|
pick follows. Never renumber, and never edit that line by hand.
|
|
59
59
|
|
|
60
|
+
**A repair keeps the build ranges true.** When the plan carries `## Build ranges`, a
|
|
61
|
+
step the repair adds goes into a range (the one it builds with, or a bare range of its
|
|
62
|
+
own when it brings a call the human has to make before it lands), never a range that
|
|
63
|
+
has landed, since that range's call was made and the step would reopen it. A new range
|
|
64
|
+
takes the next free item number, and no item is renumbered, because the stop card's
|
|
65
|
+
stamp, the detail file's header, and `plumbbob harvest` find a landed range by its
|
|
66
|
+
number. A range the repair breaks is re-cut in the same before/after
|
|
67
|
+
([D92 (build-ranges)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d92)).
|
|
68
|
+
Read `plumbbob status` once the edits are written: its ranges block carries a `⚠` row
|
|
69
|
+
for a range naming a step the plan lacks, a step two ranges name, a step the build order
|
|
70
|
+
puts inside a range that does not name it, and an undone step no range names, and none
|
|
71
|
+
once the section is sound.
|
|
72
|
+
- **Re-cut the ranges (`/plumbbob:refine ranges`).** On request, re-cut the whole
|
|
73
|
+
`## Build ranges` section against the plan as it stands, by the rule `/plumbbob:plan`
|
|
74
|
+
cuts it with: a range ends where a human call is due (a decision the plan leaves open,
|
|
75
|
+
a review before later steps build on what landed, or a thing only the human can do)
|
|
76
|
+
and nowhere else, a bare build for a call made on a step's own work before it lands,
|
|
77
|
+
every undone step in exactly one range, walked in build order, and a `- model:` line
|
|
78
|
+
per range. A landed range stays as written, since its call was made. Show the section
|
|
79
|
+
before and after, and write only what the human approves.
|
|
80
|
+
|
|
60
81
|
## The hard contracts
|
|
61
82
|
|
|
62
83
|
- **You propose; the human converges.** Surface holes and draft repairs, but the human
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: run
|
|
3
|
+
description: "Run what is left of the range holding the next step, or of range N: the plan's `## Build ranges` names the steps, the turn hook mints their grant from the plan, and the run walks them the way a typed range is walked, then ends on the stop card, the range's review with every open park proposed, which one reply settles. A bare range builds its one step to its pause. Reads the build skill beside it for the per-step loop."
|
|
4
|
+
argument-hint: "[range-number]"
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
allowed-tools: Read, Edit, Write, Bash(plumbbob status:*), Bash(plumbbob build:*), Bash(plumbbob handoff:*), Bash(plumbbob check:*), Bash(plumbbob checkpoint:*), Bash(plumbbob park:*), Bash(plumbbob agent:*), Bash(plumbbob spike:*), Bash(git diff:*), Bash(plumbbob harvest:*), Bash(plumbbob order:*), Bash(git log:*)
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# PlumbBob: run a range
|
|
10
|
+
|
|
11
|
+
Current session state (injected when this skill runs): !`plumbbob status --run "$ARGUMENTS" 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
|
+
|
|
13
|
+
A run is one range of the plan being built. `/plumbbob:run` runs what is left of the range
|
|
14
|
+
holding the next undone step in build order, the step in flight counted undone, and
|
|
15
|
+
`/plumbbob:run 3` runs range 3, by the item number the plan's `## Build ranges` gives it
|
|
16
|
+
([D95 (run-verb)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d95)).
|
|
17
|
+
The plan names the steps, so you never work them out from the chat: the run header above the
|
|
18
|
+
dashboard names them, and the turn hook minted their grant from the plan when the human typed
|
|
19
|
+
the run
|
|
20
|
+
([D96 (plan-names-the-grant)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d96)).
|
|
21
|
+
|
|
22
|
+
This skill carries only what is the run's own: reading the header, refusing, how a run
|
|
23
|
+
starts, and the stop card it ends on. The loop that builds each step belongs to the build
|
|
24
|
+
skill, and the classes a park settles as belong to the harvest skill; you read both rather
|
|
25
|
+
than recall them
|
|
26
|
+
([D99 (one-loop)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d99)).
|
|
27
|
+
|
|
28
|
+
## 1. Read the build skill first
|
|
29
|
+
|
|
30
|
+
Before anything else, read `../build/SKILL.md` from this skill's base directory: the path
|
|
31
|
+
printed above this skill as its base directory, so `<base directory>/../build/SKILL.md`.
|
|
32
|
+
Read the file every run, whole; a copy of it from memory drifts. The parts a run follows are
|
|
33
|
+
its sections **What this skill does, in order** (steps 2 to 5: entering a step, reading the
|
|
34
|
+
plan, implementing within the seam, parking a tangent, and the verify tick with its pause),
|
|
35
|
+
**`--auto`: let the agent be the clock (opt-in)** with its halt list, **A step range (`N-M`,
|
|
36
|
+
or a list like `20,5-9`) is a bounded `--auto`**, **Running bound agents** when the dashboard
|
|
37
|
+
shows a `harness bindings:` block, and **The hard contracts**.
|
|
38
|
+
|
|
39
|
+
Its rules about its own invocation are about `/plumbbob:build` and do not apply here: its
|
|
40
|
+
first step (picking the step from its arguments) and its rule that the invocation outranks
|
|
41
|
+
its injected dashboard. For a run, this skill's invocation and the run header take their
|
|
42
|
+
place, below. Its rule for a clean halt (relay the top step's checkpoint block and end the
|
|
43
|
+
turn) gives way to the stop card here, below.
|
|
44
|
+
|
|
45
|
+
At the stop card you also read `../harvest/SKILL.md` from the same base directory, for its
|
|
46
|
+
three classes, its default, and its rules for folding a confirmed blocker into the plan.
|
|
47
|
+
|
|
48
|
+
## 2. Read the run header
|
|
49
|
+
|
|
50
|
+
The injected state opens on the run header when the run names a range it can walk:
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
run range 3 of 5 · steps 6-9 · ends at step 9's boundary
|
|
54
|
+
stop: review the card on a live boundary before the skills teach it
|
|
55
|
+
grant: steps 6-9
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The first line is the range, what is left of it in the order the run builds it, and where
|
|
59
|
+
the run ends: at the boundary after its last step for a range that lands its steps, or at
|
|
60
|
+
the pause of its one step for a bare range. The `stop:` line is the call the plan reserved
|
|
61
|
+
for the end of the range. The `grant:` line is what the turn hook minted at the keystroke,
|
|
62
|
+
and the dashboard beneath marks the run's first step `← requested`.
|
|
63
|
+
|
|
64
|
+
A fourth line, `waiting: range 2 of 5's stop card, recorded before the run`, means the last
|
|
65
|
+
range's stop card is still waiting for its reply. The run typed at it is that reply: settle
|
|
66
|
+
the card first (section 6, below), then walk the run.
|
|
67
|
+
|
|
68
|
+
**The typed number and the grant outrank the header.** The hook read the plan the human
|
|
69
|
+
typed against, so its grant is the run. When the human typed a number and the header names
|
|
70
|
+
another range (the host never passed the number through), or the grant line says
|
|
71
|
+
`unlike the run`, walk exactly the steps the grant names and say so in one line. A
|
|
72
|
+
`range M` grant, from a hook older than step lists, lands the steps up to M.
|
|
73
|
+
|
|
74
|
+
`grant: none` beside a range that lands its steps means the hook minted nothing, because
|
|
75
|
+
the plugin's hook is older than the run or the prompt was not a typed `/plumbbob:run`, so
|
|
76
|
+
no step could land without a pause. Report that in a sentence or two, name the range's own
|
|
77
|
+
command from the plan's `## Build ranges` (`/plumbbob:build 6-9`) as the way to land it by
|
|
78
|
+
hand, and stop without building. **Never write a grant yourself to get past it: a grant you
|
|
79
|
+
mint is no grant, and the latch ignores it
|
|
80
|
+
([D67 (auto-not-a-grant)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d67)).**
|
|
81
|
+
|
|
82
|
+
## 3. Refuse what the run cannot walk
|
|
83
|
+
|
|
84
|
+
No run header above the dashboard means the run names nothing it can walk, and the hook
|
|
85
|
+
minted nothing for it
|
|
86
|
+
([D97 (run-refuses)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d97)).
|
|
87
|
+
The dashboard's `next →` line carries the refusal and the move that unblocks it: a plan
|
|
88
|
+
without ranges (`/plumbbob:refine ranges`, or `/plumbbob:build` for the next step alone), a
|
|
89
|
+
next step no range names or a flagged range (`/plumbbob:refine ranges`), a range that has
|
|
90
|
+
landed or a number the plan lacks (the run the card names instead), nothing left
|
|
91
|
+
(`/plumbbob:finish`), a step in flight outside the range typed (`/plumbbob:verify` or
|
|
92
|
+
`/plumbbob:abandon` it), or a spike open (`plumbbob spike done`). A span or a list of ranges
|
|
93
|
+
(`/plumbbob:run 2-4`) is a form no run defines, and it refuses the same way.
|
|
94
|
+
|
|
95
|
+
Report the refusal in a sentence or two, quoting the move from that line, and stop: enter
|
|
96
|
+
no step, build nothing, and run no checkpoint. `NO ACTIVE SESSION` refuses too, with
|
|
97
|
+
`/plumbbob:plan` as the move.
|
|
98
|
+
|
|
99
|
+
## 4. Run the range
|
|
100
|
+
|
|
101
|
+
**A step waiting at its pause.** When the dashboard's phase reads `[BUILD]`, a step is in
|
|
102
|
+
flight, and the header's first step is that step. A run typed there is that pause's
|
|
103
|
+
`looks good`: land it the way the build skill lands an approved pause, with
|
|
104
|
+
`plumbbob checkpoint <n> --body <<'BODY'` and a body proportional to the step, and do not
|
|
105
|
+
enter it again with `plumbbob build`. The checkpoint runs the check, so the step lands only
|
|
106
|
+
on green. When the checkpoint refuses on a red check, the step stays at its pause: write the
|
|
107
|
+
detail file, run `plumbbob handoff`, paste its block, and end the turn. When the step is not
|
|
108
|
+
finished (its done-when unmet, and no pause card for it in this conversation), finish
|
|
109
|
+
building it first, then verify and land it the same way. Once it lands, a bare range's run
|
|
110
|
+
ends there: relay the checkpoint's block whole and end the turn. A run whose landing range
|
|
111
|
+
that step completed ends on the stop card, below, even when the paused step was the range's
|
|
112
|
+
last. Otherwise carry on through what is left, below. A halt the human approves with
|
|
113
|
+
`looks good` lands its step the same way, and when that landing completes the run's range
|
|
114
|
+
(its checkpoint block carries the `**Stop**:` part for it), the run ends on the stop card
|
|
115
|
+
too.
|
|
116
|
+
|
|
117
|
+
**A range that lands its steps.** Walk it exactly as the build skill walks a typed range,
|
|
118
|
+
in its section on step ranges: start at the header's first undone step, build each step the
|
|
119
|
+
grant names in build order, check, self-review, and checkpoint it on green, and take the
|
|
120
|
+
next undone step in build order after each landing. A step the grant does not name halts the
|
|
121
|
+
walk before it, since the checkpoint would refuse it. The halt list is the build skill's: a
|
|
122
|
+
red check, a self-review mismatch, a bound agent's `blocked` or `drift`, or a new decision
|
|
123
|
+
ends at that step's pause card. `plumbbob build` names the top step as the top of the range
|
|
124
|
+
you granted when it enters it. Once that step lands, its checkpoint prints the boundary
|
|
125
|
+
with the Stop part (`**Stop**: Range 3 of 5 landed - <its stop>`); relay none of it, and end
|
|
126
|
+
the run on the stop card, below, in the same turn.
|
|
127
|
+
|
|
128
|
+
**A bare range.** `grant: none, as a bare range builds to its pause`: build the range's one
|
|
129
|
+
step to its pause exactly as the build skill's default path does for `/plumbbob:build <n>`:
|
|
130
|
+
enter it, implement it, verify it, write the detail file, run `plumbbob handoff`, paste its
|
|
131
|
+
block, and end the turn. The plan reserved this pause for a call, and the header's `stop:`
|
|
132
|
+
line names it, so your recommendation speaks to that call.
|
|
133
|
+
|
|
134
|
+
## 5. End on the stop card
|
|
135
|
+
|
|
136
|
+
A run that lands its range ends on the stop card
|
|
137
|
+
([D100 (stop-card)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d100)):
|
|
138
|
+
the review the plan's stop asked for, with every open park on it and a lean proposed for
|
|
139
|
+
each. The checkpoint that landed the range's last step marked its ending as owing the card,
|
|
140
|
+
and the turn will not close on that boundary
|
|
141
|
+
([D103 (stop-latched)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d103)).
|
|
142
|
+
|
|
143
|
+
*Write the range's detail file.* Overwrite `.plumbbob/detail.md` in the range's shape:
|
|
144
|
+
|
|
145
|
+
```markdown
|
|
146
|
+
# Detail · Range <N> · <the stop, as the plan words it>
|
|
147
|
+
|
|
148
|
+
── recap · range <N> of <M> ──
|
|
149
|
+
done-when met
|
|
150
|
+
decisions honored: D1 (some-slug), D2 (another-slug)
|
|
151
|
+
constraints all honored
|
|
152
|
+
|
|
153
|
+
## Summary
|
|
154
|
+
|
|
155
|
+
<what the whole range built, in a sentence or a short paragraph>
|
|
156
|
+
|
|
157
|
+
## 1 <the first highlight across the range: one sentence, one move>
|
|
158
|
+
|
|
159
|
+
<the full story>
|
|
160
|
+
|
|
161
|
+
## Harvest
|
|
162
|
+
|
|
163
|
+
- P<handle> → <blocker, tangent, or pivot>: <the reason, one clause>
|
|
164
|
+
|
|
165
|
+
## Recommendation
|
|
166
|
+
|
|
167
|
+
<The move.> <The reason, one or two sentences.>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
The header names the range by its item number, and that is how `checkpoint` and
|
|
171
|
+
`plumbbob harvest` tell the file from a step's. The three rows judge the whole range: every
|
|
172
|
+
step's done-when, the decisions any step exercised, and the constraints. The Summary and the
|
|
173
|
+
highlights are the range's, not its last step's, and you draw them from the range's
|
|
174
|
+
checkpoint bodies (`git log` over its commits) and their entries in the build-log's `## Log`,
|
|
175
|
+
never from recall, since a long run can compact its context partway through and lose its
|
|
176
|
+
early steps. A step that landed a hair off comes first among the highlights; five at most.
|
|
177
|
+
|
|
178
|
+
The `## Harvest` section carries one line for every open park in the build-log's
|
|
179
|
+
`## Park list`. A park's handle is `P` and its place in that list, counting the harvested
|
|
180
|
+
lines too, which is the count the note sizes as `parked 3 of 8 open`: the third line ever
|
|
181
|
+
parked is `P3` whether or not the two above it are flipped, and the card, the detail file,
|
|
182
|
+
and the human's reply all name it `P3`
|
|
183
|
+
([D105 (park-handles)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d105)).
|
|
184
|
+
Propose one class per park by the harvest skill's rules, `tangent` for anything uncertain,
|
|
185
|
+
with the reason in one clause; the card prints it as the park's lean
|
|
186
|
+
(`→ lean: tangent, <the reason>`), so write the class and the reason alone and leave the
|
|
187
|
+
punctuation to handoff. A park you leave out reads `no lean proposed` on the card and stays
|
|
188
|
+
open. The section vanishes when no park is open, and so does the card's Harvested part
|
|
189
|
+
([D100 (stop-card)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d100)).
|
|
190
|
+
The recommendation speaks to the plan's stop, the header's `stop:` line, and to the
|
|
191
|
+
proposals: the move you would take on both, then why.
|
|
192
|
+
|
|
193
|
+
*Render it and stop.* Run `plumbbob handoff --stop` and paste its output whole, verbatim, at
|
|
194
|
+
top level, trailing blank line included, then end the turn. Write nothing before it or after
|
|
195
|
+
it, and record nothing in this turn: `plumbbob harvest` refuses in the turn the card printed,
|
|
196
|
+
because the human has not read it yet. If the turn is held with a reason saying the stop card
|
|
197
|
+
is still owed, do exactly what the reason says.
|
|
198
|
+
|
|
199
|
+
## 6. The reply at a stop
|
|
200
|
+
|
|
201
|
+
The card's proposals are settled in one reply
|
|
202
|
+
([D102 (settle-in-one-reply)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d102)),
|
|
203
|
+
and the Your Call block names the replies. Read the human's message as one of them:
|
|
204
|
+
|
|
205
|
+
- **`looks good`** confirms the review and locks in every lean as proposed, as the line
|
|
206
|
+
beneath the card's Your Call label says. Fold each confirmed blocker into `intent.md` by
|
|
207
|
+
the harvest skill's rules first, then run `plumbbob harvest`, which flips the parks,
|
|
208
|
+
writes the Harvest lines, and writes the range's review beneath a dated line in the Log.
|
|
209
|
+
A blocker that becomes a step goes into a range still to come, or a bare range of its
|
|
210
|
+
own, never into the range this card reviews: that range has landed, its call is the one
|
|
211
|
+
being made, and the step would reopen it. Relay the record's ending whole and end the
|
|
212
|
+
turn. It commits nothing; the record rides the next step's checkpoint.
|
|
213
|
+
- **A change** (`make P7 a tangent`, or a change to the review) is direction. Rewrite the
|
|
214
|
+
detail file's line or section, run `plumbbob handoff --stop`, paste the whole card it
|
|
215
|
+
prints, and end the turn. Nothing is recorded until `looks good`.
|
|
216
|
+
- **A question**, or `expand 2`, is answered from the detail file, the range's commits, or
|
|
217
|
+
the Log, never from recall; then run `plumbbob handoff --stop` and paste what it prints
|
|
218
|
+
beneath your answer, which is the one-line reminder while the stop is unchanged.
|
|
219
|
+
`show the stop`, or a session without the card in front of it, takes
|
|
220
|
+
`plumbbob handoff --stop --full`.
|
|
221
|
+
- **`/plumbbob:run`** typed at the card confirms everything the way `looks good` does, and
|
|
222
|
+
runs the next range. Record first: fold the blockers and run `plumbbob harvest`, then read
|
|
223
|
+
`plumbbob status --run "<the same argument>"` again. When its grant line says
|
|
224
|
+
`unlike the run`, the record re-cut the range the run would walk (a blocker added or moved a
|
|
225
|
+
step in it), and the grant the hook minted before the record no longer covers it: relay
|
|
226
|
+
the record's ending whole and end the turn there, where its note names the re-cut run for
|
|
227
|
+
the human to type
|
|
228
|
+
([D102 (settle-in-one-reply)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d102)).
|
|
229
|
+
Otherwise relay the record's ending and walk the run from section 4.
|
|
230
|
+
- **`/plumbbob:finish`** at the plan's last range is the finish skill's to settle: it
|
|
231
|
+
records the card the way `looks good` would before it writes the report.
|
|
232
|
+
|
|
233
|
+
`plumbbob harvest` refuses a proposal naming a handle the list lacks (`P9` with eight
|
|
234
|
+
parked) and a class outside the three, and it refuses a detail file no card showed; fix what the refusal names, run
|
|
235
|
+
`plumbbob handoff --stop` again, and end the turn on the card. One refusal takes another
|
|
236
|
+
path: `step 13 joined it after it landed` means a blocker went into the range the card
|
|
237
|
+
reviews. Move that step to a range still to come, or a bare range of its own, leave
|
|
238
|
+
`.plumbbob/detail.md` as it is, fold nothing again, and run `plumbbob harvest` once more in
|
|
239
|
+
the same turn, which records; `plumbbob handoff --stop` would refuse there.
|
|
240
|
+
|
|
241
|
+
## The hard contracts
|
|
242
|
+
|
|
243
|
+
- **The human types the run.** You never start one: `looks good` lands a step and never
|
|
244
|
+
starts the next range, and nothing chains ranges. A run ends where its range does, on the
|
|
245
|
+
stop card, or at a pause for a bare range or a halt, and the next run waits for the human's
|
|
246
|
+
next prompt.
|
|
247
|
+
- **The plan names the steps.** Walk what the header and the grant name, never a range
|
|
248
|
+
worked out from the chat, and never a step beyond the grant.
|
|
249
|
+
- **The latch holds the record.** A refused checkpoint is a pause, never an error to route
|
|
250
|
+
around: write the detail file, run `plumbbob handoff`, paste its block, and end the turn.
|
|
251
|
+
Never land a step with a raw `git commit`, and never write a grant into a settings or
|
|
252
|
+
control file; ask the human to type the run again instead.
|
|
253
|
+
- **The reply records the stop.** Never run `plumbbob harvest` in the turn the stop card
|
|
254
|
+
printed; the human's reply to the card is what records it, and the classes stay their call.
|
|
255
|
+
- **One loop.** Read `../build/SKILL.md` every run; the build skill is the engine both verbs
|
|
256
|
+
drive, and two copies of it would drift apart.
|
package/skills/status/SKILL.md
CHANGED
|
@@ -11,8 +11,8 @@ allowed-tools: Bash(plumbbob status:*)
|
|
|
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
|
This is a **thin driver** for `plumbbob status`. The dashboard above is your
|
|
14
|
-
orientation: the intent, the step list, the
|
|
15
|
-
inferred next move. Report it verbatim and point the human at that next move. This
|
|
14
|
+
orientation: the intent, the step list, the build ranges when the plan has them, the
|
|
15
|
+
parked/open-question counts, and the inferred next move. Report it verbatim and point the human at that next move. This
|
|
16
16
|
skill carries **no Edit and no Write tool**: the CLI is the source of truth, so
|
|
17
17
|
**never retry**, and never edit a file to change what the orientation says.
|
|
18
18
|
|
|
@@ -31,4 +31,11 @@ annotate it.
|
|
|
31
31
|
can switch (for example `/model sonnet`) before firing `/plumbbob:build`, or ignore it.
|
|
32
32
|
Guidance, never a gate. You relay that line; you do not re-state it on top of the
|
|
33
33
|
verbatim dashboard.
|
|
34
|
-
3.
|
|
34
|
+
3. When the plan carries `## Build ranges`, the dashboard lists them beneath the steps:
|
|
35
|
+
`ranges 2 of 5 done`, `✓` on a landed range and `▸` on the one holding the next step,
|
|
36
|
+
each undone range's stop on the line beneath it, and a `⚠` row for any range the plan
|
|
37
|
+
has outgrown. A landed range whose stop card still waits for its reply reads
|
|
38
|
+
`← stop card waiting`, and the `next →` names that card first. Each row keeps the command the plan wrote, the range's definition, while
|
|
39
|
+
the `next →` names the run to type, `/plumbbob:run` with the steps it will land beside
|
|
40
|
+
it. You relay the block with the rest; a `⚠` row is `/plumbbob:refine`'s to fix.
|
|
41
|
+
4. If it reads `NO ACTIVE SESSION`, tell the human to `/plumbbob:plan` to frame a goal.
|
package/skills/step/SKILL.md
CHANGED
|
@@ -53,6 +53,27 @@ grew, but its everyday job is to sharpen, not to invent.
|
|
|
53
53
|
renumbering: shell `plumbbob order 7 8 5` with every undone step in the sequence to
|
|
54
54
|
build them, and the `## Build order` line it writes is what `status`, a bare
|
|
55
55
|
`/plumbbob:build`, and the card's Next Up then follow.
|
|
56
|
+
|
|
57
|
+
**Keep the build ranges true.** When the plan carries `## Build ranges`, a step you add
|
|
58
|
+
goes into a range: the one it builds with (`/plumbbob:build 6-9` becomes `6-10`, or
|
|
59
|
+
`6-9,14` for a step numbered past the next range), or a bare range of its own when it
|
|
60
|
+
brings a call the human has to make before it lands
|
|
61
|
+
([D92 (build-ranges)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d92)).
|
|
62
|
+
Either way it is a range still to come, never a range that has landed, since that
|
|
63
|
+
range's call was made and the step would reopen it. A new range takes the next free
|
|
64
|
+
item number, and no item is renumbered, because the stop card's stamp, the detail
|
|
65
|
+
file's header, and `plumbbob harvest` find a landed range by its number.
|
|
66
|
+
A step the build order places between two of a range's steps belongs to that range. A
|
|
67
|
+
split or re-cut that moves where a call falls moves the stop with it, so re-cut any
|
|
68
|
+
range the edit breaks, and show the range edit in the same before/after, since it
|
|
69
|
+
changes where the human will be asked. The edit lands on the item's command, the
|
|
70
|
+
range's definition, not on the command the card names: the card names `/plumbbob:run`
|
|
71
|
+
for the range, and the turn hook mints a run's grant from the plan as the human types
|
|
72
|
+
the run, so the next run lands the range as you re-cut it, while a run already typed
|
|
73
|
+
keeps the grant it minted
|
|
74
|
+
([D96 (plan-names-the-grant)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d96)).
|
|
75
|
+
Then read `plumbbob status`: its ranges block carries a `⚠` row for any range still
|
|
76
|
+
broken, and none once every undone step sits in exactly one range.
|
|
56
77
|
4. **Revise the step's harness bindings if they drifted too** *(optional)*. If the
|
|
57
78
|
build carries a `harness.json` (beside `intent.md`) and the reality that moved the
|
|
58
79
|
step also changed which agents it wants, sharpen that step's slot bindings
|
|
@@ -66,9 +87,10 @@ grew, but its everyday job is to sharpen, not to invent.
|
|
|
66
87
|
|
|
67
88
|
- **One verifiable increment.** Each step carries a done-when `/plumbbob:verify` can check
|
|
68
89
|
and a seam small enough to review in one pass.
|
|
69
|
-
- **Edit `## Steps` only**, in the standard format `status` and `build` parse
|
|
70
|
-
the Roadmap, never loose prose. A done
|
|
71
|
-
|
|
90
|
+
- **Edit `## Steps` only**, in the standard format `status` and `build` parse, plus the
|
|
91
|
+
`## Build ranges` items a step edit moves: never the Roadmap, never loose prose. A done
|
|
92
|
+
step (`[x]`) is history; do not rewrite it. The `## Build order` line is
|
|
93
|
+
`plumbbob order`'s to write, never yours to edit.
|
|
72
94
|
- **Cite the plan's own numbers in the linked form.** A `D`/`C`/`Q` you write into a
|
|
73
95
|
step's done-when, seam, or notes reads `[D4 (default-waves)](#d4)`; the slug travels
|
|
74
96
|
with the number, and the link lands on the `<a id="d4">` anchor minted where the item
|
package/skills/verify/SKILL.md
CHANGED
|
@@ -58,7 +58,11 @@ this skill verifies it the same way: **it reads the diff, not the author**
|
|
|
58
58
|
"here is the pause", for reading the check verdict back in prose, or for a closing
|
|
59
59
|
courtesy. Each fact appears once, in its part.
|
|
60
60
|
|
|
61
|
-
*Write the detail file.*
|
|
61
|
+
*Write the detail file.* If `.plumbbob/detail.md` opens on a `# Detail · Range <N>`
|
|
62
|
+
header and the dashboard above marks that range `← stop card waiting`, that card is still
|
|
63
|
+
waiting: **refuse**, since writing this skill's detail file would overwrite the range's
|
|
64
|
+
review, and point the human at the card's own reply (`looks good`, or a change to a
|
|
65
|
+
lean). Otherwise, before you call `plumbbob handoff`, overwrite
|
|
62
66
|
`.plumbbob/detail.md`. It is the wire handoff parses, and it is the only path by which
|
|
63
67
|
the judgment you formed in steps 2 through 4 reaches the turn:
|
|
64
68
|
|
|
@@ -220,7 +224,7 @@ the checkpoint land when you run it again. **Never reach for a raw `git commit`
|
|
|
220
224
|
land**; that forges the very record the latch exists to keep honest, and the
|
|
221
225
|
commit-ask hook asks the human about it anyway. The refusal is a healthy latch doing its
|
|
222
226
|
job on the *record* while the *work* plane stays free; a `/plumbbob:build --auto` or
|
|
223
|
-
a typed step range in the human's own prompt is the only self-approval; **never write
|
|
227
|
+
a typed step range (`1-3`, or a list like `20,5-9`) in the human's own prompt is the only self-approval; **never write
|
|
224
228
|
`auto` into a settings file to unlock the land; the latch ignores a model-minted grant
|
|
225
229
|
([D67 (auto-not-a-grant)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d67)), so ask the human to type `/plumbbob:build --auto` again
|
|
226
230
|
instead.**
|