plumbbob 0.12.1 → 0.13.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 +20 -13
- package/dist/cli-core.js +22 -6
- package/dist/lib/git.js +20 -8
- package/dist/lib/latch.js +23 -5
- package/dist/lib/notice.js +18 -3
- package/dist/lib/orient.js +350 -34
- package/dist/lib/sidecar.js +202 -3
- package/dist/lib/steplist.js +128 -0
- package/dist/verbs/abandon.js +19 -14
- package/dist/verbs/build.js +73 -14
- package/dist/verbs/checkpoint.js +31 -21
- package/dist/verbs/doctor.js +23 -4
- package/dist/verbs/finish.js +21 -17
- package/dist/verbs/handoff.js +259 -80
- package/dist/verbs/order.js +32 -20
- package/dist/verbs/park.js +6 -2
- package/dist/verbs/recover.js +31 -1
- package/dist/verbs/relay.js +306 -0
- package/dist/verbs/revert.js +17 -11
- package/dist/verbs/spike.js +50 -38
- package/dist/verbs/start.js +13 -9
- package/dist/verbs/status.js +2 -2
- package/dist/verbs/turn.js +90 -53
- package/dist/verbs/use.js +21 -17
- package/hooks/hooks.json +7 -0
- package/package.json +1 -1
- package/skills/build/SKILL.md +107 -49
- package/skills/harvest/SKILL.md +10 -1
- package/skills/order/SKILL.md +20 -10
- package/skills/park/SKILL.md +7 -0
- package/skills/plan/SKILL.md +52 -7
- package/skills/refine/SKILL.md +21 -3
- package/skills/status/SKILL.md +8 -3
- package/skills/step/SKILL.md +16 -3
- package/skills/verify/SKILL.md +35 -18
- package/templates/intent.md +23 -5
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/park/SKILL.md
CHANGED
|
@@ -47,6 +47,13 @@ Then:
|
|
|
47
47
|
the capture plus that one pointer are the whole turn, and both are the CLI's to render,
|
|
48
48
|
never yours to compose from the dashboard. The capture is a one-beat interruption; the
|
|
49
49
|
step keeps its focus.
|
|
50
|
+
4. **A question beside the tangent is answered first.** When the human's message also
|
|
51
|
+
asks something, answer the question, then relay the park's block after the answer,
|
|
52
|
+
and write nothing after it. A message that is only a tangent ends on the block alone.
|
|
53
|
+
Either way the block's pointer back at the step closes the turn, so run no
|
|
54
|
+
`plumbbob handoff` after it. The answer is what the human asked for; dropping it to
|
|
55
|
+
keep the block alone, or stacking a second ending under the block, are the two ways
|
|
56
|
+
this goes wrong.
|
|
50
57
|
|
|
51
58
|
## The one hard contract
|
|
52
59
|
|
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:*)
|
|
@@ -117,7 +117,48 @@ an agent can follow with `/plumbbob:build`. The argument only seeds how you get
|
|
|
117
117
|
It is advisory metadata for the human (`/plumbbob:status` surfaces it before each build),
|
|
118
118
|
never a gate, and nothing switches models automatically. Write it plain (no
|
|
119
119
|
backticks) and omit it when any model would do.
|
|
120
|
-
5. **
|
|
120
|
+
5. **Cut the build ranges.** With the steps written, say where the build stops for a
|
|
121
|
+
human call, under `## Build ranges`
|
|
122
|
+
([D92 (build-ranges)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d92)):
|
|
123
|
+
one sentence on how to drive the build, then one numbered item per range, in the
|
|
124
|
+
format the parser reads:
|
|
125
|
+
|
|
126
|
+
```markdown
|
|
127
|
+
1. `/plumbbob:build 1`, **stop:** at step 1's pause, approve the schema before anything writes to it
|
|
128
|
+
- model: opus
|
|
129
|
+
2. `/plumbbob:build 2-5`, **stop:** review the parser before the renderers build on it
|
|
130
|
+
- model: sonnet
|
|
131
|
+
- note: <optional; what the range should watch for>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**A range ends where a human call is due, and nowhere else.** Three things make a
|
|
135
|
+
call: a decision the plan leaves open (an Open question, or a fork only a spike can
|
|
136
|
+
settle), a review before later steps build on what landed, and a thing only the human
|
|
137
|
+
can do, such as a push, a live key, or spending money. A range that runs through one
|
|
138
|
+
has the model make the human's call; a stop that marks none of them is a pause nobody
|
|
139
|
+
needed. The command's form says what kind of stop it is
|
|
140
|
+
([D85 (range-top-lands)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d85)).
|
|
141
|
+
A span such as `2-5` lands every step it names and stops at the boundary after the
|
|
142
|
+
last, so its stop is a review of what landed, or a decision the next steps need before
|
|
143
|
+
they build. A bare `N` builds step N to its pause, so write one for a call that has to
|
|
144
|
+
be made before its step lands, on the step's own work: approving the wording it
|
|
145
|
+
drafted, or the rule it found. Write each stop as what the human decides or reviews
|
|
146
|
+
there, in words they can act on cold.
|
|
147
|
+
|
|
148
|
+
Name every step in exactly one range, by its plan number. A fresh plan has no build
|
|
149
|
+
order, so the ranges follow the numbering. Give each range a `- model:` line naming the
|
|
150
|
+
strongest model any step inside it recommends, written plain the way a step's is,
|
|
151
|
+
because that is the `/model` the human picks before typing the command; any other
|
|
152
|
+
sub-line (a `- note:` on what to watch for) is the reader's, and the CLI leaves it
|
|
153
|
+
alone. Replace the template's placeholder item rather than writing beside it: an item
|
|
154
|
+
still holding its `<...>` fill-ins reads as no range at all.
|
|
155
|
+
|
|
156
|
+
**Size the ranges to the work.** A plan of two or three steps may carry one range, or
|
|
157
|
+
none. When every step would be its own bare range, delete the section: the default
|
|
158
|
+
loop already stops at each step's pause. A range is advice, never a grant
|
|
159
|
+
([D67 (auto-not-a-grant)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d67)):
|
|
160
|
+
the card names the range to type beneath Next Up, and the human still types it.
|
|
161
|
+
6. **Offer harness bindings** *(optional)*. If the build will lean on
|
|
121
162
|
user-authored agents, author `harness.json` in the build folder (beside `intent.md`)
|
|
122
163
|
and review it at the **same plan pause**, alongside the steps; bindings are
|
|
123
164
|
plan-adjacent configuration, so they converge with the plan. It binds agents to a
|
|
@@ -138,7 +179,7 @@ an agent can follow with `/plumbbob:build`. The argument only seeds how you get
|
|
|
138
179
|
`note` and decides when to run one mid-build. Skip the file entirely when no step
|
|
139
180
|
uses an agent; the loop runs identically without it. The plan commit picks it
|
|
140
181
|
up automatically (it lives in the build folder).
|
|
141
|
-
|
|
182
|
+
7. **Commit the plan.** Once the human approves the frame and steps, run
|
|
142
183
|
`plumbbob checkpoint --plan` to commit the scaffold on its own: subject
|
|
143
184
|
`chore(<scope>): plan` (with a `plumbbob plan` body marker), only `.plumbbob/builds/<slug>/`,
|
|
144
185
|
a `plan <sha>` line in
|
|
@@ -148,8 +189,9 @@ an agent can follow with `/plumbbob:build`. The argument only seeds how you get
|
|
|
148
189
|
rationale is worth carrying; skip it for a small plan. Do this
|
|
149
190
|
only on the human's approval; the plan is their convergence.
|
|
150
191
|
- **The plan pause is a decision turn.** Present the framed plan for the human's call,
|
|
151
|
-
|
|
152
|
-
|
|
192
|
+
its build ranges with it (each range's command and its stop, since a stop is where
|
|
193
|
+
the human will be asked, and moving one is cheapest now), then give it the cold
|
|
194
|
+
read (**§ The cold read**), write the result into `.plumbbob/detail.md`, and relay `plumbbob handoff --plan`'s block whole: the CLI
|
|
153
195
|
renders the your-call block with the moves that apply before anything is recorded and
|
|
154
196
|
prints your recommendation last (the decision tier of the
|
|
155
197
|
[turn anatomy](https://github.com/robmclarty/plumbbob/blob/main/docs/presentation.md)),
|
|
@@ -182,7 +224,7 @@ an agent can follow with `/plumbbob:build`. The argument only seeds how you get
|
|
|
182
224
|
(the `--body` earns its keep here), the files staying untracked. Say that
|
|
183
225
|
instead: the rationale is published in `git log`, not the folder, so pass a
|
|
184
226
|
fuller `--body` than you otherwise would, since the message is the whole record.
|
|
185
|
-
|
|
227
|
+
8. **Offer to stress-test it.** Suggest `/plumbbob:refine` to attack the frame for holes (or
|
|
186
228
|
to repair the plan as it drifts). Optional, the human's call.
|
|
187
229
|
|
|
188
230
|
## The cold read
|
|
@@ -198,7 +240,9 @@ Open questions, and keep it to one screen of reading. The lens:
|
|
|
198
240
|
- a collision with the existing code (read the files the seams name);
|
|
199
241
|
- a done-when no test or check can measure, or a seam that names a file that does not
|
|
200
242
|
exist or misses one that must change;
|
|
201
|
-
- a step too large to review in one pass, or a Decision with no *because
|
|
243
|
+
- a step too large to review in one pass, or a Decision with no *because*;
|
|
244
|
+
- a range that runs through a call the plan leaves open, so the model would make it;
|
|
245
|
+
- a range that stops where no call is due, a pause the human did not need.
|
|
202
246
|
|
|
203
247
|
Write what you found into `.plumbbob/detail.md`, overwriting whatever a past session
|
|
204
248
|
left, the findings first and the recommendation last:
|
|
@@ -207,6 +251,7 @@ left, the findings first and the recommendation last:
|
|
|
207
251
|
# Detail · Plan · <the title>
|
|
208
252
|
|
|
209
253
|
## 1 <the first hole: one sentence, naming where it sits in intent.md>
|
|
254
|
+
|
|
210
255
|
<what it is, and what closing it would take>
|
|
211
256
|
|
|
212
257
|
## 2 ...
|
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,24 @@ 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), and a range the
|
|
63
|
+
repair breaks is re-cut in the same before/after
|
|
64
|
+
([D92 (build-ranges)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d92)).
|
|
65
|
+
Read `plumbbob status` once the edits are written: its ranges block carries a `⚠` row
|
|
66
|
+
for a range naming a step the plan lacks, a step two ranges name, a step the build order
|
|
67
|
+
puts inside a range that does not name it, and an undone step no range names, and none
|
|
68
|
+
once the section is sound.
|
|
69
|
+
- **Re-cut the ranges (`/plumbbob:refine ranges`).** On request, re-cut the whole
|
|
70
|
+
`## Build ranges` section against the plan as it stands, by the rule `/plumbbob:plan`
|
|
71
|
+
cuts it with: a range ends where a human call is due (a decision the plan leaves open,
|
|
72
|
+
a review before later steps build on what landed, or a thing only the human can do)
|
|
73
|
+
and nowhere else, a bare build for a call made on a step's own work before it lands,
|
|
74
|
+
every undone step in exactly one range, walked in build order, and a `- model:` line
|
|
75
|
+
per range. A landed range stays as written, since its call was made. Show the section
|
|
76
|
+
before and after, and write only what the human approves.
|
|
77
|
+
|
|
60
78
|
## The hard contracts
|
|
61
79
|
|
|
62
80
|
- **You propose; the human converges.** Surface holes and draft repairs, but the human
|
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,9 @@ 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. Its `next →` then names the range's command to type. You relay the block
|
|
38
|
+
with the rest; a `⚠` row is `/plumbbob:refine`'s to fix.
|
|
39
|
+
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,18 @@ 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
|
+
A step the build order places between two of a range's steps belongs to that range. A
|
|
63
|
+
split or re-cut that moves where a call falls moves the stop with it, so re-cut any
|
|
64
|
+
range the edit breaks, and show the range edit in the same before/after, since it
|
|
65
|
+
changes where the human will be asked. Then read `plumbbob status`: its ranges block
|
|
66
|
+
carries a `⚠` row for any range still broken, and none once every undone step sits in
|
|
67
|
+
exactly one range.
|
|
56
68
|
4. **Revise the step's harness bindings if they drifted too** *(optional)*. If the
|
|
57
69
|
build carries a `harness.json` (beside `intent.md`) and the reality that moved the
|
|
58
70
|
step also changed which agents it wants, sharpen that step's slot bindings
|
|
@@ -66,9 +78,10 @@ grew, but its everyday job is to sharpen, not to invent.
|
|
|
66
78
|
|
|
67
79
|
- **One verifiable increment.** Each step carries a done-when `/plumbbob:verify` can check
|
|
68
80
|
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
|
-
|
|
81
|
+
- **Edit `## Steps` only**, in the standard format `status` and `build` parse, plus the
|
|
82
|
+
`## Build ranges` items a step edit moves: never the Roadmap, never loose prose. A done
|
|
83
|
+
step (`[x]`) is history; do not rewrite it. The `## Build order` line is
|
|
84
|
+
`plumbbob order`'s to write, never yours to edit.
|
|
72
85
|
- **Cite the plan's own numbers in the linked form.** A `D`/`C`/`Q` you write into a
|
|
73
86
|
step's done-when, seam, or notes reads `[D4 (default-waves)](#d4)`; the slug travels
|
|
74
87
|
with the number, and the link lands on the `<a id="d4">` anchor minted where the item
|
package/skills/verify/SKILL.md
CHANGED
|
@@ -76,6 +76,7 @@ this skill verifies it the same way: **it reads the diff, not the author**
|
|
|
76
76
|
short paragraph when the step needs explaining>
|
|
77
77
|
|
|
78
78
|
## 1 <the first highlight: one sentence, one move>
|
|
79
|
+
|
|
79
80
|
<the full story: what moved, why, what was tried and dropped>
|
|
80
81
|
|
|
81
82
|
## 2 ...
|
|
@@ -118,26 +119,42 @@ this skill verifies it the same way: **it reads the diff, not the author**
|
|
|
118
119
|
turn. The number is what lets a diff built outside `/plumbbob:build` reach its pause:
|
|
119
120
|
nothing is in flight for that diff, and a bare `handoff` would read the moment as a
|
|
120
121
|
boundary and render no Your Call block. Never nest it inside a fence of
|
|
121
|
-
your own; it carries fences of its own and they cannot nest. It prints the
|
|
122
|
-
its highlights, the Readout fence (its
|
|
123
|
-
rows folded with your three), a `diff`
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
122
|
+
your own; it carries fences of its own and they cannot nest. It prints the Now line
|
|
123
|
+
naming the step you reviewed, the Summary and its highlights, the Readout fence (its
|
|
124
|
+
measured `check`, `seam`, `diff`, and `spent` rows folded with your three), a `diff`
|
|
125
|
+
fence when the change is 20 lines or fewer, the Verdict folded worst-of from the same
|
|
126
|
+
rows, Next Up, Your Call, and your recommendation last. Run it once: a second run at an
|
|
127
|
+
unchanged pause prints the one-line reminder instead of the card, so if that line comes
|
|
128
|
+
back where the card belongs (you ran handoff earlier in this turn), run
|
|
129
|
+
`plumbbob handoff <n> --full` and paste that. At the pause the check row reads green,
|
|
130
|
+
since a red one stopped you back at step 1. The gate verdict's one home is that row:
|
|
131
|
+
no standalone verdict line exists, and you never restate the verdict in prose. A
|
|
132
|
+
narrowed run names the slots it skipped there (`· without test`), and that named
|
|
133
|
+
narrowing is the whole disclosure. The notice checkride's Stop hook appends after your
|
|
134
|
+
turn is not yours to relay or repeat; the trailing blank line you kept is what lands it
|
|
135
|
+
on its own line. Relayed CLI strings keep their em-dashes; your own lines never use
|
|
136
|
+
one, the write-versus-relay line of
|
|
132
137
|
[D78 (em-dash-ban)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d78).
|
|
133
138
|
|
|
134
139
|
*Then read the reply as an ask or a direction.* A message that **asks** ("expand 2",
|
|
135
|
-
"what does that mean?", "why did the seam row flag that?") is an expand: answer it from
|
|
136
|
-
`git diff`, or from the build-log's `## Log` for an older step,
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
140
|
+
"what does that mean?", "why did the seam row flag that?") is an expand: answer it from
|
|
141
|
+
the detail file, from `git diff`, or from the build-log's `## Log` for an older step,
|
|
142
|
+
never from recall, then run `plumbbob handoff <n>` and paste its output beneath your
|
|
143
|
+
answer, whole and verbatim. The turn is your answer, then that output, and nothing after
|
|
144
|
+
it. The pause renders its card once
|
|
145
|
+
([D87 (pause-once)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d87)):
|
|
146
|
+
while nothing about it has changed, handoff prints one line,
|
|
147
|
+
`**Next Up**: Back to Step <N> of <M> - <title>`, in place of the card the human already
|
|
148
|
+
read, so your answer stays on screen. The CLI picks the form, never you: paste whichever
|
|
149
|
+
one it prints, and never retype the card or reach for `--full` to put it beneath an
|
|
150
|
+
answer.
|
|
151
|
+
|
|
152
|
+
Two moments bring the whole card back, and in both you run `plumbbob handoff <n> --full`
|
|
153
|
+
and paste its output whole, with nothing written around it: the human asks to see the
|
|
154
|
+
pause (`show the pause`, or any wording of it), or the card is not in this conversation
|
|
155
|
+
(a fresh session, or one after `/clear`, that finds the step still at its pause). A
|
|
156
|
+
message that **directs** is needs-work: take it as what to change, and nothing lands
|
|
157
|
+
until the human says `looks good`.
|
|
141
158
|
|
|
142
159
|
- **Reconcile a drifted subject here, in the open.** The planned title *is* the
|
|
143
160
|
checkpoint subject ([D68 (conventional-subjects)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d68)). If the diff drifted from it (the
|
|
@@ -203,7 +220,7 @@ the checkpoint land when you run it again. **Never reach for a raw `git commit`
|
|
|
203
220
|
land**; that forges the very record the latch exists to keep honest, and the
|
|
204
221
|
commit-ask hook asks the human about it anyway. The refusal is a healthy latch doing its
|
|
205
222
|
job on the *record* while the *work* plane stays free; a `/plumbbob:build --auto` or
|
|
206
|
-
a typed step range in the human's own prompt is the only self-approval; **never write
|
|
223
|
+
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
|
|
207
224
|
`auto` into a settings file to unlock the land; the latch ignores a model-minted grant
|
|
208
225
|
([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
|
|
209
226
|
instead.**
|
package/templates/intent.md
CHANGED
|
@@ -82,11 +82,29 @@ auto-syncs it), and use `/plumbbob:refine` to repair the whole plan when a block
|
|
|
82
82
|
## Build order
|
|
83
83
|
|
|
84
84
|
*(Optional. The sequence to build the steps in once it stops being their numbering: one
|
|
85
|
-
line of
|
|
86
|
-
order. `plumbbob order 7 8 5 10 6`
|
|
87
|
-
`
|
|
88
|
-
`/plumbbob:build`, and the card's Next Up
|
|
89
|
-
line is where the sequence lives.)*
|
|
85
|
+
line of step numbers and spans, comma-separated, such as `7, 8, 5, 10, 6` or
|
|
86
|
+
`1, 6, 2-4, 7, 5`; empty means document order. `plumbbob order 7 8 5 10 6`
|
|
87
|
+
(`/plumbbob:order`) writes it, and `status`, `build`, `checkpoint`, and `handoff` all
|
|
88
|
+
read it, so the dashboard's `← next`, a bare `/plumbbob:build`, and the card's Next Up
|
|
89
|
+
agree. A step keeps its number for life; this line is where the sequence lives.)*
|
|
90
|
+
|
|
91
|
+
## Build ranges
|
|
92
|
+
|
|
93
|
+
*(Where the build stops for a human call, written with the steps: one numbered item per
|
|
94
|
+
range, the command the human types, then `**stop:**` and the call that ends it, with an
|
|
95
|
+
optional `- model:` line naming the model to run it on. The command's form says where it
|
|
96
|
+
stops: a bare `/plumbbob:build 4` builds step 4 to its pause, so its stop is a decision
|
|
97
|
+
made before the step lands, and a span such as `/plumbbob:build 5-9` lands every step it
|
|
98
|
+
names, so its stop is a review of what landed. A range ends where a human call is due
|
|
99
|
+
and nowhere else, so a plan of two or three steps may need one range or none. The card
|
|
100
|
+
names the range to type beneath Next Up and the dashboard lists them, but a range is
|
|
101
|
+
advice, never a grant: the human still types the command (plumbbob
|
|
102
|
+
[D92 (build-ranges)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d92)).
|
|
103
|
+
The item below is scaffold while it holds its `<...>` fill-ins; fill it in, or delete
|
|
104
|
+
the section when the build needs no range.)*
|
|
105
|
+
|
|
106
|
+
1. `/plumbbob:build <N-M>`, **stop:** <the call that is the human's here: a decision the plan leaves open, a review before later steps build on what landed, or a thing only a human can do>
|
|
107
|
+
- model: <the strongest model any step inside it recommends>
|
|
90
108
|
|
|
91
109
|
## Open questions
|
|
92
110
|
|