plumbbob 0.13.3 → 0.13.5

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.
@@ -168,15 +168,16 @@ switch with `/model` and rerun to honor it, or wave you on. Advisory, never a ga
168
168
  fence's 80 columns (13 of label, 67 of value); two or more items break onto indented
169
169
  continuation lines opening with `-`, and a red row's evidence onto an indented `→` line.
170
170
 
171
- The `## Summary` lead and the `## <n>` section titles are the turn's opening block:
172
- handoff prints the lead behind the `**Summary**:` label, appends the `(details: …)`
173
- bracket, and renders the titles as the numbered highlights, so you type neither the path
174
- nor the list. Five highlights at most, each one sentence and one move, plain English
175
- first, a path in backticks only when the name itself is the news. The numbers are
176
- handles: "expand 2" opens `## 2`, so every highlight has a section behind it with the
177
- full story. A judgment or a flag (a stray the seam row will name, a decision you had to
178
- bend, a doubt about the done-when) is one of those highlights, never a paragraph of its
179
- own. The recommendation is the last section: the move you would take as its own
171
+ The `## Summary` lead opens the card: handoff prints it behind the `**Summary**:` label.
172
+ The `## <n>` sections stay in the detail file, where `expand 2` opens `## 2` and the
173
+ build log's record keeps them; the card prints none of them and closes instead on a
174
+ `[more details](…)` link to the file, which handoff writes, so you type no path. Five
175
+ sections at most, each titled with one sentence and one move, plain English first, a
176
+ path in backticks only when the name itself is the news. A judgment or a flag (a stray
177
+ the seam row will name, a decision you had to bend, a doubt about the done-when) is one
178
+ of those sections, and the card carries it where it bears on the call: a bent row's `→`
179
+ line points at it, and your recommendation names it when it changes the move. It is
180
+ never a paragraph of its own. The recommendation is the last section: the move you would take as its own
180
181
  sentence, closed by a period, then the reason as a capitalized sentence or two. The lead
181
182
  and the recommendation are flowing prose and handoff unwraps both to the renderer's
182
183
  width, so never hard-wrap them; handoff also prepends the bold `**Recommendation**:`
@@ -192,14 +193,15 @@ switch with `/model` and rerun to honor it, or wave you on. Advisory, never a ga
192
193
 
193
194
  *Paste the turn.* Run `plumbbob handoff` and paste its output whole, verbatim, at top
194
195
  level, trailing blank line included, then end the turn. Never nest it inside a fence of
195
- your own; it carries fences of its own and they cannot nest. It prints the Now line
196
- naming the step in flight, the Summary and its highlights, the Readout fence (its
197
- measured `check`, `seam`, `diff`, and `spent` rows folded with your three), a `diff`
198
- fence when the change is 20 lines or fewer, the Verdict folded worst-of from the same
199
- rows, Next Up, Your Call, and your recommendation last. Run it once: a second run at an
200
- unchanged pause prints the one-line reminder instead of the card, so if that line comes
201
- back where the card belongs (you ran handoff earlier in this turn), run
202
- `plumbbob handoff --full` and paste that. The gate verdict's one home is that `check`
196
+ your own; it carries fences of its own and they cannot nest. It prints the Summary, the
197
+ Readout fence (its measured `check`, `seam`, `diff`, and `spent` rows folded with your
198
+ three, the changed files listed beneath `diff`), a `diff` fence when the change is 20
199
+ lines or fewer, Your Call, the state table (the Verdict folded worst-of from the same
200
+ rows, the Now row naming the step in flight, Next Up, and the Range, Order, and Parked
201
+ rows when they apply), your recommendation, and the `more details` link last. Run it
202
+ once: a second run at the same pause prints the one-line reminder instead of the card,
203
+ so if that line comes back where the card belongs (you ran handoff earlier in this
204
+ turn), run `plumbbob handoff --full` and paste that. The gate verdict's one home is that `check`
203
205
  row: no standalone verdict line exists, and you never restate the verdict in prose. A
204
206
  narrowed run names the slots it skipped there (`· without test`), and that named
205
207
  narrowing is the whole disclosure. The notice checkride's Stop hook appends after your
@@ -208,37 +210,39 @@ switch with `/model` and rerun to honor it, or wave you on. Advisory, never a ga
208
210
  one, the write-versus-relay line of
209
211
  [D78 (em-dash-ban)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d78).
210
212
 
211
- *Then read the reply as an ask or a direction.* A message that **asks** ("expand 2",
212
- "what does that mean?", "why did the seam row flag that?") is an expand: answer it from
213
- the detail file, from `git diff`, or from the build-log's `## Log` for an older step,
214
- never from recall, then run `plumbbob handoff` and paste its output beneath your answer,
215
- whole and verbatim. The turn is your answer, then that output, and nothing after it. The
216
- pause renders its card once
217
- ([D87 (pause-once)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d87)):
218
- while nothing about it has changed, handoff prints one line,
219
- `**Next Up**: Back to Step <N> of <M> - <title>`, in place of the card the human already
220
- read, so your answer stays on screen. The CLI picks the form, never you: paste whichever
221
- one it prints, and never retype the card or reach for `--full` to put it beneath an
222
- answer.
223
-
224
- Two moments bring the whole card back, and in both you run `plumbbob handoff --full` and
225
- paste its output whole, with nothing written around it: the human asks to see the pause
226
- (`show the pause`, or any wording of it), or the card is not in this conversation (a
227
- fresh session, or one after `/clear`, that finds the step still at its pause). A
228
- message that **directs** is needs-work: take it as what to change, and nothing lands
229
- until the human says `looks good`. Once the change is made, rewrite the detail file and
230
- end on `plumbbob handoff` as the first render did; the pause has changed, so it prints
231
- the whole card.
213
+ *Then answer the reply in your own words.* The card shows once
214
+ ([D110 (reply-after-the-card)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d110)):
215
+ every later turn at this pause is your reply, closed by one line. A message that
216
+ **asks** ("expand 2", "what does that mean?", "why did the seam row flag that?") is an
217
+ expand: answer it from the detail file, from `git diff`, or from the build-log's
218
+ `## Log` for an older step, never from recall. A message that **directs** is needs-work:
219
+ make the change, run the check, and say what moved and what the check found; when the
220
+ change moves what the card said (a judgment row, the Summary, the recommendation), write
221
+ the detail file again so the record matches what lands. Nothing lands until the human
222
+ says `looks good`. Either way, then run `plumbbob handoff` and paste its output beneath
223
+ your reply, whole and verbatim: at a pause whose card has shown it prints one line,
224
+ `**Next Up**: Back to Step <N> of <M> - <title>`, whatever changed since, so your reply
225
+ stays on screen. The turn is your reply, then that line, and nothing after it. The CLI
226
+ picks the form, never you: paste whichever one it prints, and never retype the card.
227
+
228
+ The card comes back one way: the human asks to see it (`show the pause`, or any wording
229
+ of it). Then run `plumbbob handoff --full` and paste its output whole, with nothing
230
+ written around it. Never run `--full` to read the card for yourself, after a compaction
231
+ or in a fresh session; what it prints is the turn's ending, and the relay check holds a
232
+ turn that does not close on it. Read the detail file and `plumbbob status` instead. A
233
+ tangent the human hands you at the pause is still a park.
232
234
 
233
235
  **Then hand off with the next model.** `plumbbob checkpoint` prints the whole boundary
234
- ending itself: `**Checkpoint**: Step N complete (<sha>)`, the Verdict the step earned,
235
- any advisory (a staged path outside the seam is the common one), the Stop part when
236
- this landing completes a range (`**Stop**: Range 3 of 5 landed - <its stop>`, the reason
237
- the build stops here), and Next Up. Relay that block whole, the Stop part with the rest
238
- (the relay check holds a boundary that dropped it), run no second command, and write
239
- nothing around it. It is the
240
- orientation tier (no Your Call block, no recommendation), and it points at the next
241
- undone step carrying that step's `- model:` recommendation (the plan's
236
+ ending itself: `**Checkpoint**: Step N complete (<sha>)`, any advisory (a staged path
237
+ outside the seam is the common one), and the state table: the Verdict the step earned,
238
+ the Stop row when this landing completes a range (`| Stop | Range 3 of 5 landed - <its
239
+ stop> |`, the reason the build stops here), Next Up, and the rows beneath it. Relay that
240
+ block whole, the table with the rest (the relay check holds a boundary that dropped a
241
+ row), run no second command, and write nothing around it. A later turn at this boundary
242
+ is your reply; a `plumbbob handoff` there prints Next Up's one line, since the boundary
243
+ has shown. It is the
244
+ orientation tier (no Your Call block, no recommendation), and its Next Up points at the
245
+ next undone step carrying that step's `- model:` recommendation (the plan's
242
246
  smallest-model-that-fits call) so the human knows which `/model` to select before
243
247
  running `/plumbbob:build` again. It is what carries the plan's suggestion across a fresh
244
248
  context window, which inherits the session model, not the plan's. No `- model:` line
@@ -376,13 +380,13 @@ out, or the next step in build order is one the range does not name),
376
380
  the next one. A run's range ends on the stop card, which lists every open park with a
377
381
  proposed class, and the reply that settles the card records them (the run skill's
378
382
  section on the reply at a stop). A range landed here, by a typed range, ends on the plain
379
- boundary instead; when the human asks what comes next there with parks open (the note's
380
- `parked 2 of 7 open`), the move is `/plumbbob:harvest`, then the run the card names.
383
+ boundary instead; when the human asks what comes next there with parks open (the table's
384
+ `Parked` row, `2 of 7 open`), the move is `/plumbbob:harvest`, then the run the card names.
381
385
  - **After an early stop, settle the step, then rerun what is left.** A halt on trouble
382
386
  inside a range ends at that step's pause, and the grant ends with the turn. Once the
383
- human approves and the step lands, the note beneath Next Up names the run that lands
384
- what is left of the range (`· range 3 of 5: /plumbbob:run (steps 8-9)`), and that is what
385
- the human types to carry on; `/plumbbob:build 8-9` lands the same steps by hand.
387
+ human approves and the step lands, the state table's Range row names the run that lands
388
+ what is left of the range (`| Range | 3 of 5: /plumbbob:run (steps 8-9) |`), and that is
389
+ what the human types to carry on; `/plumbbob:build 8-9` lands the same steps by hand.
386
390
 
387
391
  ## The hard contracts
388
392
 
@@ -41,7 +41,13 @@ record.
41
41
  - `## Decisions and why`: the settled calls that shaped the build (the *why* behind
42
42
  the log). Copy each one's `D# (slug)` from `intent.md` (never a bare `D#`) so
43
43
  the report reads without flipping back to the intent.
44
- - `## Parked & harvested`: what was captured and how each was classified.
44
+ - `## Parked & harvested`: what was captured and how each was classified, as the
45
+ table the stop card's leans use, with the settled class where the card had the lean
46
+ ([D112 (lean-table)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d112)):
47
+ `| Park | What it is | Why it matters | Settled |`, one row per park, its handle and a
48
+ short title, the park's text as the Park list holds it, why it matters (the why the
49
+ stop's record kept, or your own clause for a park harvested before the table), and
50
+ the class it settled as with its reason.
45
51
  - `## Final status`: done or partial, and what is left.
46
52
  - `## Deferred tangents`: the harvested items that become future work.
47
53
  Stop there. `plumbbob finish` appends `## Checkpoints` (the baseline and step SHAs) and
@@ -74,9 +80,9 @@ record.
74
80
  the `plumbbob finish` marker subject only.
75
81
  4. **Point at the next goal.** Relay `plumbbob finish`'s output verbatim, blank lines
76
82
  included: its lead line, which names the branch the tracked folder now rides into the
77
- PR, any advisory beneath it, and `**Next Up**: Nothing planned - /plumbbob:plan`. That
78
- is the orientation tier's close (the
79
- [turn anatomy](https://github.com/robmclarty/plumbbob/blob/main/docs/presentation.md)):
83
+ PR, any advisory beneath it, and its state table, whose one row is
84
+ `| **Next Up** | Nothing planned - /plumbbob:plan |`. That is the orientation tier's close
85
+ (the [turn anatomy](https://github.com/robmclarty/plumbbob/blob/main/docs/presentation.md)):
80
86
  the lead line, then the forward pointer. `finish` renders that pointer itself rather
81
87
  than leaving it to `plumbbob handoff`, because finish has just cleared the session
82
88
  handoff would read one from. Relay the block and write nothing after it.
@@ -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) for every open parked item at once, and once the human settles them in one reply, fold a confirmed blocker into intent and record the rest with plumbbob harvest. A run's stop card carries its own harvest."
4
4
  disable-model-invocation: true
5
- allowed-tools: Read, Edit, Write, Bash(plumbbob status:*), Bash(plumbbob order:*), Bash(plumbbob harvest:*)
5
+ allowed-tools: Read, Edit, Write, Bash(plumbbob status:*), Bash(plumbbob order:*), Bash(plumbbob handoff:*), Bash(plumbbob harvest:*)
6
6
  ---
7
7
 
8
8
  # PlumbBob: harvest the park list
@@ -54,41 +54,59 @@ the call on each one theirs. The detail file you write first is the proposal; re
54
54
  **only after** that reply confirms them:
55
55
 
56
56
  - Write the proposals into `.plumbbob/detail.md` first, under a `# Detail · Harvest`
57
- header, one line per open item in a `## Harvest` section:
58
- `- P6 → tangent: <the reason, one clause>`, the class written `blocker`, `tangent`,
59
- or `pivot` (for a pivot signal). A park's handle is `P` and its place in the
60
- Park list, counting the harvested lines too (the count the note sizes as
61
- `parked 3 of 8 open`), and it is the one name the detail file, the turn, and the
62
- human's reply all use
57
+ header, one proposal per open item in a `## Harvest` section, with two lines indented
58
+ beneath it:
59
+
60
+ ```markdown
61
+ - P6 → tangent: <the reason, one clause>
62
+ - title: <two to five words naming the park>
63
+ - why: <why it matters, one clause>
64
+ ```
65
+
66
+ The class is written `blocker`, `tangent`, or `pivot` (for a pivot signal). A park's
67
+ handle is `P` and its place in the Park list, counting the harvested lines too (the
68
+ count the state table's Parked row sizes as `3 of 8 open`), and it is the one name the
69
+ detail file, the turn, and the human's reply all use
63
70
  ([D105 (park-handles)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d105)).
64
- Then list the same proposals in the turn, each with its handle and the park's text, and
65
- end the turn there.
66
- - A reply that changes a proposal (`make P7 a tangent`) is the human's call: rewrite
67
- that line, list the proposals again, and end the turn. A reply that confirms them
68
- (`looks good`) is what lets you write.
71
+ Then run `plumbbob handoff --harvest` and paste its output whole, verbatim, and end the
72
+ turn there: it prints the lean table, one row per open park with its handle and your
73
+ title, the park's text as the list holds it, your why, and your lean, then the moves that
74
+ settle it
75
+ ([D112 (lean-table)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d112)).
76
+ Write nothing before or after it; the park's text is the CLI's to quote, never yours.
77
+ - A reply that changes a proposal (`make P7 a tangent`) is the human's call and your
78
+ reply: rewrite that line, say in your own words which lean moved, and end the turn
79
+ without printing the table again; the human who wants to see it asks, and
80
+ `plumbbob handoff --harvest` prints it. A reply that confirms them (`looks good`) is what
81
+ lets you write.
69
82
  - On that confirmation, run `plumbbob harvest`
70
83
  ([D104 (harvest-records)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d104)).
71
84
  It flips each settled item from `- [ ]` to `- [x]` in the Park list, so
72
85
  `/plumbbob:status` stops counting it as open, and records each confirmed class under
73
86
  `build-log.md`'s `## Harvest` section. Relay its ending whole, the `**Recorded**:` line
74
- and the Next Up beneath it. It refuses a proposal naming a handle the list lacks (`P9`
87
+ and the state table beneath it. It refuses a proposal naming a handle the list lacks (`P9`
75
88
  with eight parked) or a class other than blocker, tangent, or pivot; fix the line it
76
89
  names and run it again.
77
90
  - A confirmed **blocker** also folds its decision into `intent.md`, slugged at birth
78
91
  like any Decision, anchored the same way
79
92
  (`- <a id="d5"></a>**D5 (retry-cap)**: <the call>, *because* <why>`), never a bare `D5`.
80
- A blocker that becomes a new step takes the next free number under `## Steps` and,
81
- when it has to land before an existing undone step, its place in the sequence through
82
- `plumbbob order 7 8 5` (the `## Build order` line), never by renumbering. When the plan
83
- carries `## Build ranges`, the new step goes into a range too: a range still to come
84
- (the one it builds with), or a bare range of its own when it brings a call the human
85
- has to make before it lands, and never a range that has landed, since that range's call
86
- was made and the step would reopen it. A new range takes the next free item number, and
87
- no item is renumbered, because the stop card's stamp, the detail file's header, and
88
- `plumbbob harvest` find a landed range by its number. A range the step breaks is re-cut
89
- in the same confirmed edit
90
- ([D92 (build-ranges)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d92));
91
- `plumbbob status` afterward carries a `⚠` row for any range still broken.
93
+ A blocker that becomes a new step takes the next free number under `## Steps` and its
94
+ place in the sequence through `plumbbob order 7 8 5` (the `## Build order` line, every
95
+ undone step in the sequence to build them), never by renumbering, even when it builds
96
+ last. When the plan carries `## Build ranges`, the verb files the new step for you: it
97
+ re-cuts the ranges to follow the sequence it writes, so the step joins the range still
98
+ to come that the order puts it in, the one it builds ahead of when it lands first, and
99
+ never a range that has landed, since that range's call was made and the step would
100
+ reopen it
101
+ ([D109 (ranges-follow-the-order)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d109)).
102
+ Give the step a bare range of its own instead, written before you run the verb, when it
103
+ brings a call the human has to make before it lands. A new range takes the next free item
104
+ number, and no item is renumbered, because the stop card's stamp, the detail file's
105
+ header, and `plumbbob harvest` find a landed range by its number
106
+ ([D92 (build-ranges)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d92)).
107
+ The verb's ending names each range it re-cut, and an advisory names any it left for
108
+ you; re-cut that one in the same confirmed edit, and `plumbbob status` afterward carries
109
+ a `⚠` row for any range still broken.
92
110
  - Fold a confirmed blocker into `intent.md` before you run `plumbbob harvest`, so the
93
111
  record and the plan agree when it lands.
94
112
  - Never reclassify or resolve an item the human hasn't confirmed, and default every
@@ -1,6 +1,6 @@
1
1
  ---
2
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."
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, and the CLI re-cuts the build ranges to follow it."
4
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
@@ -15,7 +15,10 @@ A step keeps its number for life, so once `/plumbbob:step` or `/plumbbob:refine`
15
15
  that has to land before an existing one, the sequence to build them stops being the
16
16
  numbering (`4, 7, 8, 5, 10, 6`). This skill writes that sequence down where every other move
17
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.
18
+ `/plumbbob:build`, `plumbbob checkpoint`, and the card's Next Up all follow. When the plan
19
+ carries `## Build ranges`, the same verb re-cuts them to follow the sequence, so
20
+ `/plumbbob:run` walks the steps the new order put in its range
21
+ ([D109 (ranges-follow-the-order)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d109)).
19
22
 
20
23
  ## Wrong-state refusal
21
24
 
@@ -39,22 +42,22 @@ after the step in flight is the usual reason to run it.
39
42
  as typed, and the line it writes spells the span out. `plumbbob order --reset` drops the
40
43
  line, and the plan reads in document order again.
41
44
  4. **Relay the ending verbatim, then stop.** The verb prints its whole ending: the
42
- `**Build order**: 7, 8, 5, 10, 6` line, a blank line, and the `**Next Up**` pointer (back
43
- at the step in flight, or forward to the first step in the new sequence). Run no second
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.
45
+ `**Build order**: 7, 8, 5, 10, 6` line; a
46
+ `**Build ranges**: range 2 of 3 re-cut (steps 10,4-6)` line when the new sequence moved a
47
+ step into or out of a range, naming each range it re-cut; an advisory for each range the
48
+ order left for the human, in the words its dashboard row carries
49
+ (`Range 2 of 3 needs a re-cut ⚠ (...)`), with
50
+ `→ /plumbbob:refine ranges` beneath the last; and the `**Next Up**` pointer (back at the
51
+ step in flight, or forward to the first step in the new sequence). Relay it whole as the
52
+ turn's last text and run no second command: the advisory already names the range and the
53
+ move, so there is no dashboard to read again. A refusal (a number the plan lacks, a
54
+ repeat, a step already checkpointed) is the CLI's call: report it verbatim, never retry
55
+ or work around it, and ask the human which number they meant.
54
56
 
55
57
  ## The one hard contract
56
58
 
57
59
  The line is written by the **dumb CLI**, never by an edit. This skill carries **no Edit and
58
60
  no Write tool** on purpose: you may not touch `intent.md` yourself. Compose, get approval,
59
- then shell `plumbbob order`; that is the only write path, and it is the one that validates
60
- every number against the plan.
61
+ then shell `plumbbob order`; that is the only write path, it validates every number against
62
+ the plan, and it is the one that re-cuts the ranges, so a range the order leaves for the
63
+ human is `/plumbbob:refine`'s to re-cut, never yours to edit here.
@@ -163,8 +163,8 @@ The argument only seeds how you get there.
163
163
 
164
164
  **The card names the run, not the item.** The item's command is the range's
165
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
166
+ `/plumbbob:run` in the Range row beneath Next Up for the range holding the next step,
167
+ with the steps it will land beside it, and `/plumbbob:run 3` runs range 3 by its item number
168
168
  ([D95 (run-verb)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d95)).
169
169
  A range grants nothing until the human types the run that names it, and then the turn
170
170
  hook mints the grant from the plan as it stands
@@ -205,8 +205,9 @@ The argument only seeds how you get there.
205
205
  its build ranges with it (each range's command and its stop, since a stop is where
206
206
  the human will be asked, and moving one is cheapest now), then give it the cold
207
207
  read (**§ The cold read**), write the result into `.plumbbob/detail.md`, and relay `plumbbob handoff --plan`'s block whole: the CLI
208
- renders the your-call block with the moves that apply before anything is recorded and
209
- prints your recommendation last (the decision tier of the
208
+ renders the your-call block with the moves that apply before anything is recorded,
209
+ the state table headed by Next Up, your recommendation, and a `more details` link to
210
+ the cold read (the decision tier of the
210
211
  [turn anatomy](https://github.com/robmclarty/plumbbob/blob/main/docs/presentation.md)),
211
212
  so the moves are relayed, never hand-composed. *looks good* marks the plan decided, and
212
213
  its row names the move the human types next: `/plumbbob:run` for the range holding
@@ -224,9 +225,9 @@ The argument only seeds how you get there.
224
225
  commit predates the ledger and stays guidance-governed; it lands without a
225
226
  refusal.)
226
227
  - **The plan commit prints its own close.** `plumbbob checkpoint --plan` emits the
227
- whole boundary ending: `**Plan**: committed (<sha>)`, any advisory, and the pointer at
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
228
+ whole boundary ending: `**Plan**: committed (<sha>)`, any advisory, and the state
229
+ table headed by the pointer at the step the build starts on, its Range row naming the
230
+ run that lands that step's range when the plan declares ranges. Relay that block whole and run no second command; the
230
231
  plan-pause card above is the one place `handoff` is still called, because no verb has
231
232
  run yet there.
232
233
  - **Say what the commit publishes.** The close-out line names the tracked folder:
@@ -282,8 +283,8 @@ read checked and found sound. A plan with a hole gets `Sharpen <the one worst ho
282
283
  and why it matters; when the read found more than one, say how many sit behind `expand`
283
284
  and name `/plumbbob:refine` as the move that writes them up as Open questions, with their
284
285
  plain and lean sub-lines, for the human to settle. Three findings at most; the rest is
285
- refine's. `plumbbob handoff --plan` prints the label and your recommendation as the turn's
286
- last text, "expand 2" opens `## 2`, and `checkpoint --plan` records the read beneath the
286
+ refine's. `plumbbob handoff --plan` prints the label and your recommendation beneath the
287
+ state table, then the `more details` link to the file, "expand 2" opens `## 2`, and `checkpoint --plan` records the read beneath the
287
288
  plan's line in the build-log's `## Log`, the build's first entry. The cold read is the tip of refine: it makes the
288
289
  full attack discoverable at the moment it would pay, and lets a sound plan skip it. Refine
289
290
  is where the real adversary looks; this is an estimate, and it says so by staying short.
@@ -54,18 +54,25 @@ is fine; refining is always available.
54
54
  Show the before/after for each, and **write only what the human approves**. A repair
55
55
  that inserts a step, or moves one ahead of another, keeps every number where it is and
56
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.
57
+ sequence to build them, an inserted step included even when it builds last, and the
58
+ `## Build order` line it writes is what every next-step pick follows. Never renumber,
59
+ and never edit that line by hand.
59
60
 
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
61
+ **A repair keeps the build ranges true.** When the plan carries `## Build ranges`,
62
+ `plumbbob order` re-cuts them to follow the sequence it writes
63
+ ([D109 (ranges-follow-the-order)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d109)):
64
+ a step it places joins the range whose steps sit on both sides of it, else the one it
65
+ builds ahead of, else the one it builds after, never a bare range, and never a range that
66
+ has landed, since that range's call was made and the step would reopen it; its ending
67
+ names each range it re-cut. Edit a range yourself only where the
68
+ order cannot say it, and before you run the verb: a bare range of its own for a step
69
+ that brings a call the human has to make before it lands, or a re-cut that moves where a
70
+ call falls, shown in the same before/after
67
71
  ([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
72
+ A new range takes the next free item number, and no item is renumbered, because the stop
73
+ card's stamp, the detail file's header, and `plumbbob harvest` find a landed range by its
74
+ number. A range the verb's ending names as still needing a re-cut is yours to re-cut in
75
+ the same approved edit. Read `plumbbob status` once the edits are written: its ranges block carries a `⚠` row
69
76
  for a range naming a step the plan lacks, a step two ranges name, a step the build order
70
77
  puts inside a range that does not name it, and an undone step no range names, and none
71
78
  once the section is sound.
@@ -111,7 +111,7 @@ ends there: relay the checkpoint's block whole and end the turn. A run whose lan
111
111
  that step completed ends on the stop card, below, even when the paused step was the range's
112
112
  last. Otherwise carry on through what is left, below. A halt the human approves with
113
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
114
+ (its checkpoint block's table carries the `Stop` row for it), the run ends on the stop card
115
115
  too.
116
116
 
117
117
  **A range that lands its steps.** Walk it exactly as the build skill walks a typed range,
@@ -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 part (`**Stop**: Range 3 of 5 landed - <its stop>`); relay none of it, and end
125
+ with the Stop row (`| Stop | Range 3 of 5 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
@@ -161,6 +161,8 @@ constraints all honored
161
161
  ## Harvest
162
162
 
163
163
  - P<handle> → <blocker, tangent, or pivot>: <the reason, one clause>
164
+ - title: <two to five words naming the park>
165
+ - why: <why it matters, one clause>
164
166
 
165
167
  ## Recommendation
166
168
 
@@ -170,22 +172,28 @@ constraints all honored
170
172
  The header names the range by its item number, and that is how `checkpoint` and
171
173
  `plumbbob harvest` tell the file from a step's. The three rows judge the whole range: every
172
174
  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
175
+ numbered sections are the range's, not its last step's, and you draw them from the range's
174
176
  checkpoint bodies (`git log` over its commits) and their entries in the build-log's `## Log`,
175
177
  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.
178
+ early steps. A step that landed a hair off comes first among the sections; five at most. The
179
+ card prints the Summary and links the rest
180
+ ([D113 (short-card)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d113)).
177
181
 
178
- The `## Harvest` section carries one line for every open park in the build-log's
182
+ The `## Harvest` section carries one proposal for every open park in the build-log's
179
183
  `## 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`
184
+ lines too, which is the count the table's Parked row sizes as `3 of 8 open`: the third line
185
+ ever parked is `P3` whether or not the two above it are flipped, and the card, the detail
186
+ file, and the human's reply all name it `P3`
183
187
  ([D105 (park-handles)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d105)).
184
188
  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
+ with the reason in one clause, and beneath it two indented lines: a title of two to five
190
+ words that names the park, and why it matters in one clause. The card prints each park as a
191
+ row of the lean table: its handle and your title, the park's text as the list holds it, your
192
+ why, and the lean (`tangent: <the reason>`)
193
+ ([D112 (lean-table)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d112)),
194
+ so write the class, the reason, the title, and the why alone and leave the table to handoff.
195
+ A park you leave out reads `no lean proposed` on the card and stays open, and a missing why
196
+ reads `not given`. The section vanishes when no park is open, and so does the card's Harvested part
189
197
  ([D100 (stop-card)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d100)).
190
198
  The recommendation speaks to the plan's stop, the header's `stop:` line, and to the
191
199
  proposals: the move you would take on both, then why.
@@ -210,29 +218,32 @@ and the Your Call block names the replies. Read the human's message as one of th
210
218
  own, never into the range this card reviews: that range has landed, its call is the one
211
219
  being made, and the step would reopen it. Relay the record's ending whole and end the
212
220
  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`.
221
+ - **A change** (`make P7 a tangent`, or a change to the review) is direction, and the turn
222
+ that makes it is your reply
223
+ ([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.
226
+ The card does not come back for a change; nothing is recorded until `looks good`, which
227
+ records every lean as the detail file then reads.
216
228
  - **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`.
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.
221
232
  - **`/plumbbob:run`** typed at the card confirms everything the way `looks good` does, and
222
233
  runs the next range. Record first: fold the blockers and run `plumbbob harvest`, then read
223
234
  `plumbbob status --run "<the same argument>"` again. When its grant line says
224
235
  `unlike the run`, the record re-cut the range the run would walk (a blocker added or moved a
225
236
  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
237
+ the record's ending whole and end the turn there, where its Range row names the re-cut run
238
+ for the human to type
228
239
  ([D102 (settle-in-one-reply)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d102)).
229
240
  Otherwise relay the record's ending and walk the run from section 4.
230
241
  - **`/plumbbob:finish`** at the plan's last range is the finish skill's to settle: it
231
242
  records the card the way `looks good` would before it writes the report.
232
243
 
233
244
  `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
245
+ parked) and a class outside the three, and it refuses a range no card showed; fix what the
246
+ refusal names, run `plumbbob handoff --stop` again, and end the turn on what it prints. One refusal takes another
236
247
  path: `step 13 joined it after it landed` means a blocker went into the range the card
237
248
  reviews. Move that step to a range still to come, or a bare range of its own, leave
238
249
  `.plumbbob/detail.md` as it is, fold nothing again, and run `plumbbob harvest` once more in