plumbbob 0.13.5 → 0.13.7

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.
@@ -122,7 +122,7 @@ walk before it, since the checkpoint would refuse it. The halt list is the build
122
122
  red check, a self-review mismatch, a bound agent's `blocked` or `drift`, or a new decision
123
123
  ends at that step's pause card. `plumbbob build` names the top step as the top of the range
124
124
  you granted when it enters it. Once that step lands, its checkpoint prints the boundary
125
- with the Stop row (`| Stop | Range 3 of 5 landed - <its stop> |`); relay none of it, and end
125
+ with the Stop row (`| Stop | **Range 3** landed - <its stop> |`); relay none of it, and end
126
126
  the run on the stop card, below, in the same turn.
127
127
 
128
128
  **A bare range.** `grant: none, as a bare range builds to its pause`: build the range's one
@@ -196,7 +196,10 @@ A park you leave out reads `no lean proposed` on the card and stays open, and a
196
196
  reads `not given`. The section vanishes when no park is open, and so does the card's Harvested part
197
197
  ([D100 (stop-card)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d100)).
198
198
  The recommendation speaks to the plan's stop, the header's `stop:` line, and to the
199
- proposals: the move you would take on both, then why.
199
+ proposals: the move you would take on both, then why. A shell command you want the human to
200
+ run never rides inside a sentence: end the sentence on a colon and give the command a fenced
201
+ `sh` block of its own, one command to a line, which handoff keeps line for line. A slash
202
+ command or a path stays in backticks in the sentence.
200
203
 
201
204
  *Render it and stop.* Run `plumbbob handoff --stop` and paste its output whole, verbatim, at
202
205
  top level, trailing blank line included, then end the turn. Write nothing before it or after
@@ -204,6 +207,15 @@ it, and record nothing in this turn: `plumbbob harvest` refuses in the turn the
204
207
  because the human has not read it yet. If the turn is held with a reason saying the stop card
205
208
  is still owed, do exactly what the reason says.
206
209
 
210
+ *After a halt the human approved, the card comes short.* When the step that completed the
211
+ range halted at its pause and `looks good` landed it, the human read that step's Summary,
212
+ Readout, and recommendation a moment ago, so `plumbbob handoff --stop` prints only the
213
+ Harvested table, the moves, the state table with its Stop row, and the link
214
+ ([D119 (short-stop-after-a-halt)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d119)).
215
+ Write the range's detail file all the same, in full: the stop's record reads it, and
216
+ `show the stop` prints the card whole from it. Paste the short card exactly as it printed;
217
+ never add back the parts it left out.
218
+
207
219
  ## 6. The reply at a stop
208
220
 
209
221
  The card's proposals are settled in one reply
@@ -221,14 +233,18 @@ and the Your Call block names the replies. Read the human's message as one of th
221
233
  - **A change** (`make P7 a tangent`, or a change to the review) is direction, and the turn
222
234
  that makes it is your reply
223
235
  ([D110 (reply-after-the-card)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d110)).
224
- Rewrite the detail file's line or section, say in your own words what moved, then run
225
- `plumbbob handoff --stop` and paste the one-line reminder it prints beneath your reply.
236
+ Rewrite the detail file's line or section, run `plumbbob handoff --stop` last among your
237
+ tool calls and keep the one-line reminder it prints, then say in your own words what
238
+ moved and end the turn on that line, with no tool call after your reply
239
+ ([D121 (reply-after-the-tools)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d121)).
226
240
  The card does not come back for a change; nothing is recorded until `looks good`, which
227
241
  records every lean as the detail file then reads.
228
242
  - **A question**, or `expand 2`, is answered from the detail file, the range's commits, or
229
- the Log, never from recall; then run `plumbbob handoff --stop` and paste the one-line
230
- reminder it prints beneath your answer. Only `show the stop`, or any wording of it, takes
231
- `plumbbob handoff --stop --full`, and never to read the card for yourself.
243
+ the Log, never from recall: read what you need and run `plumbbob handoff --stop` first,
244
+ then write the answer, and end the turn on the one-line reminder it printed, with no tool
245
+ call after the answer. Only `show the stop`, or any wording of it, takes
246
+ `plumbbob handoff --stop --full`, which prints the card whole after a short one too, and
247
+ never to read the card for yourself.
232
248
  - **`/plumbbob:run`** typed at the card confirms everything the way `looks good` does, and
233
249
  runs the next range. Record first: fold the blockers and run `plumbbob harvest`, then read
234
250
  `plumbbob status --run "<the same argument>"` again. When its grant line says
@@ -39,3 +39,10 @@ annotate it.
39
39
  the `next →` names the run to type, `/plumbbob:run` with the steps it will land beside
40
40
  it. You relay the block with the rest; a `⚠` row is `/plumbbob:refine`'s to fix.
41
41
  4. If it reads `NO ACTIVE SESSION`, tell the human to `/plumbbob:plan` to frame a goal.
42
+ 5. If the human asks what is still open, run `plumbbob status --questions` and relay its
43
+ output whole: a table row per question that waits on the human, linked to its entry in
44
+ `intent.md`, with why it matters and the lean, and a `Deferred` line beneath it naming
45
+ the questions left to the work and what settles each
46
+ ([D120 (deferred-questions)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d120)).
47
+ Never list the questions in your own words
48
+ ([D118 (questions-table)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d118)).
@@ -114,7 +114,10 @@ this skill verifies it the same way: **it reads the diff, not the author**
114
114
  sentence, closed by a period, then the reason as a capitalized sentence or two. The lead
115
115
  and the recommendation are flowing prose and handoff unwraps both to the renderer's
116
116
  width, so never hard-wrap them; handoff also prepends the bold `**Recommendation**:`
117
- label, which you never type. This is the **one** file `/plumbbob:verify` writes, and it
117
+ label, which you never type. A shell command you want the human to run never rides
118
+ inside a sentence: end the sentence on a colon and give the command a fenced `sh` block
119
+ of its own, one command to a line, which handoff keeps line for line. A slash command
120
+ or a path stays in backticks in the sentence. This is the **one** file `/plumbbob:verify` writes, and it
118
121
  is turn presentation, never the diff under review; the author-blind contract below still
119
122
  holds. `checkpoint` records this file beneath the step's dated line in the build-log's
120
123
  `## Log` and then truncates it (the detail plane in the
@@ -143,7 +146,7 @@ this skill verifies it the same way: **it reads the diff, not the author**
143
146
  one, the write-versus-relay line of
144
147
  [D78 (em-dash-ban)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d78).
145
148
 
146
- *Then answer the reply in your own words.* The card shows once
149
+ *Then answer the reply in your own words, after every tool call.* The card shows once
147
150
  ([D110 (reply-after-the-card)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d110)):
148
151
  every later turn at this pause is your reply, closed by one line. A message that
149
152
  **asks** ("expand 2", "what does that mean?", "why did the seam row flag that?") is an
@@ -151,12 +154,17 @@ this skill verifies it the same way: **it reads the diff, not the author**
151
154
  `## Log` for an older step, never from recall. A message that **directs** is needs-work:
152
155
  make the change, run the check, and say what moved and what the check found; when the
153
156
  change moves what the card said, write the detail file again so the record matches what
154
- lands. Nothing lands until the human says `looks good`. Either way, then run
155
- `plumbbob handoff <n>` and paste its output beneath your reply, whole and verbatim: at a
156
- pause whose card has shown it prints one line,
157
- `**Next Up**: Back to Step <N> of <M> - <title>`, whatever changed since, so your reply
158
- stays on screen. The turn is your reply, then that line, and nothing after it. The CLI
159
- picks the form, never you: paste whichever one it prints, and never retype the card.
157
+ lands. Nothing lands until the human says `looks good`. Either way, every tool call
158
+ comes before your reply and none after it
159
+ ([D121 (reply-after-the-tools)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d121)):
160
+ read, edit, run the check, write the detail file, and run `plumbbob handoff <n>` last
161
+ among them. At a pause whose card has shown it prints one line,
162
+ `**Next Up**: Back to **Step N** on <Model> - <title>`, whatever changed since. Keep
163
+ that line, then write your reply, and end the turn on the line, whole and verbatim. The
164
+ turn is your tool calls, then your reply, then that line, and nothing after it: a
165
+ client that folds text written before a tool call (Zed, through the agent bridge) shows
166
+ the line and hides a reply written above the call. The CLI picks the form, never you:
167
+ paste whichever one it prints, and never retype the card.
160
168
 
161
169
  The card comes back one way: the human asks to see it (`show the pause`, or any wording
162
170
  of it). Then run `plumbbob handoff <n> --full` and paste its output whole, with nothing
@@ -129,7 +129,9 @@ Three lines:
129
129
  · *lean:* the model's proposed resolution: one answer to react to, not a menu
130
130
 
131
131
  The human reads *plain* to understand, then *lean* to approve or redirect: one
132
- pass, no round-trip.
132
+ pass, no round-trip. The plan card tables the open questions a row each, and a cell
133
+ shows only the first sentence of its line, so open the question, *plain*, and *lean*
134
+ each on a sentence that stands alone: the question, why it matters, the answer.
133
135
 
134
136
  When a question resolves, swap *resolve by:* for *resolved:* <date, the call> ON THE
135
137
  OPENER LINE, e.g.
@@ -146,6 +148,17 @@ build reports zero open questions
146
148
  ([D77 (placeholder-uncounted)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d77));
147
149
  fill it in and it counts.
148
150
 
151
+ When the human would rather let the work answer a question, it is deferred, not
152
+ resolved: keep the question and swap *resolve by:* for *deferred:* <date>, until
153
+ <what settles it> ON THE OPENER LINE, so the opener reads
154
+
155
+ **Q4 (latency-budget)**: What latency budget do we hold?, *deferred:* 2026-10-31, until step 4's latency numbers
156
+
157
+ It stays open and still counts, but the card lists it on a line beneath the table
158
+ rather than in it, so `yes to all leans` leaves it alone. Once the work answers it,
159
+ swap the marker for *resolved:* as above
160
+ ([D120 (deferred-questions)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d120)).
161
+
149
162
  Size to the work: a tiny build's single, obvious question may stay one bare line;
150
163
  the *plain:*/*lean:* pair earns its keep only when a human decision genuinely waits
151
164
  on it.