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.
@@ -48,29 +48,33 @@ grew, but its everyday job is to sharpen, not to invent.
48
48
  `**Scope:**` header; drop the scope and it falls back to that default → build slug →
49
49
  bare, and the type to `feat` ([D68 (conventional-subjects)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d68)). Aim for a soft
50
50
  ≤72 chars, no gate. Revise the existing step in place; only append when you are
51
- genuinely adding an increment. An appended step keeps the next free number for life;
52
- when it has to land before an existing undone step, place it by sequence, never by
53
- renumbering: shell `plumbbob order 7 8 5` with every undone step in the sequence to
54
- build them, and the `## Build order` line it writes is what `status`, a bare
51
+ genuinely adding an increment. An appended step keeps the next free number for life,
52
+ and it takes its place by sequence, never by renumbering: shell `plumbbob order 7 8 5`
53
+ with every undone step in the sequence to build them, the new step included even when
54
+ it builds last, 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
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
57
+ **Keep the build ranges true.** When the plan carries `## Build ranges`,
58
+ `plumbbob order` files the step for you: it re-cuts the ranges to follow the sequence it
59
+ writes, so a step joins the range whose steps sit on both sides of it, else the range it
60
+ builds ahead of, else the one it builds after
61
+ ([D109 (ranges-follow-the-order)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d109)):
62
+ never a bare range, and never a range that has landed, since that range's call was made
63
+ and the step would reopen it. Edit `## Build ranges` yourself only where the order
64
+ cannot say what you mean, and before you run the verb. A step that brings a call the
65
+ human has to make before it lands gets a bare range of its own
61
66
  ([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
67
+ A new range takes the next free item number, and no item is renumbered, because the
68
+ stop card's stamp, the detail file's header, and `plumbbob harvest` find a landed range
69
+ by its number. A split or re-cut that moves where a call falls moves the stop with it. Show
70
+ any range edit in the same before/after, since it changes where the human will be
71
+ asked. The verb's ending names each range it re-cut
72
+ (`**Build ranges**: range 3 of 5 re-cut (steps 14,6-9)`), and an advisory beneath it
73
+ names any range the order left for you: re-cut that one by hand, in the same approved
74
+ edit. The edit lands on the item's command, the range's definition, not on the command
75
+ the card names: the card names `/plumbbob:run` for the range, and the turn hook mints a
76
+ run's grant from the plan as the human types the run, so the next run lands the range
77
+ as re-cut, while a run already typed keeps the grant it minted
74
78
  ([D96 (plan-names-the-grant)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d96)).
75
79
  Then read `plumbbob status`: its ranges block carries a `⚠` row for any range still
76
80
  broken, and none once every undone step sits in exactly one range.
@@ -88,9 +92,10 @@ grew, but its everyday job is to sharpen, not to invent.
88
92
  - **One verifiable increment.** Each step carries a done-when `/plumbbob:verify` can check
89
93
  and a seam small enough to review in one pass.
90
94
  - **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.
95
+ `## Build ranges` items the order cannot settle (a bare range of its own, a stop that
96
+ moves): never the Roadmap, never loose prose. A done step (`[x]`) is history; do not
97
+ rewrite it. The `## Build order` line is `plumbbob order`'s to write, never yours to
98
+ edit, and so is a range the order re-cuts.
94
99
  - **Cite the plan's own numbers in the linked form.** A `D`/`C`/`Q` you write into a
95
100
  step's done-when, seam, or notes reads `[D4 (default-waves)](#d4)`; the slug travels
96
101
  with the number, and the link lands on the `<a id="d4">` anchor minted where the item
@@ -41,8 +41,8 @@ this skill verifies it the same way: **it reads the diff, not the author**
41
41
  - the **Constraints**: are any violated?
42
42
  - any **`after`-agent findings** from step 2: advisory, weigh them, don't defer to them.
43
43
  A mismatch surfaces in exactly two places: as the failing word in its recap row, and
44
- as one highlight with its full story in a detail section, never as a freeform
45
- paragraph. When you cite a Decision or Constraint, carry its slug from `intent.md`
44
+ as a numbered section of the detail file with its full story, which the row's `→`
45
+ line points at, never as a freeform paragraph. When you cite a Decision or Constraint, carry its slug from `intent.md`
46
46
  (`C1 (no-new-deps)`, never a bare `C1`) so each finding reads on its own. You are
47
47
  reviewing, not building; do not fix anything.
48
48
  4. **Validate.** Decide, yes or no, whether the step's done-when is met. That verdict and
@@ -101,14 +101,16 @@ this skill verifies it the same way: **it reads the diff, not the author**
101
101
  fence's 80 columns (13 of label, 67 of value); two or more items break onto indented
102
102
  continuation lines opening with `-`, and a red row's evidence onto an indented `→` line.
103
103
 
104
- The `## Summary` lead and the `## <n>` section titles are the turn's opening block:
105
- handoff prints the lead behind the `**Summary**:` label, appends the `(details: …)`
106
- bracket, and renders the titles as the numbered highlights, so you type neither the path
107
- nor the list. Five highlights at most, each one move in plain English, drawn from the
108
- self-review. The numbers are handles: "expand 2" opens `## 2`, so every highlight has a
109
- section behind it. A judgment or a flag (a stray the seam row will name, a decision the
110
- diff bent, a doubt about the done-when) is one of those highlights, never a paragraph of
111
- its own. The recommendation is the last section: the move you would take as its own
104
+ The `## Summary` lead opens the card: handoff prints it behind the `**Summary**:` label.
105
+ The `## <n>` sections stay in the detail file, where `expand 2` opens `## 2` and the
106
+ build log's record keeps them; the card prints none of them and closes instead on a
107
+ `[more details](…)` link to the file, which handoff writes, so you type no path. Five
108
+ sections at most, each titled with one move in plain English, drawn from the
109
+ self-review. A judgment or a flag (a stray the seam row will name, a decision the diff
110
+ bent, a doubt about the done-when) is one of those sections, and the card carries it
111
+ where it bears on the call: a bent row's `→` line points at it, and your recommendation
112
+ names it when it changes the move. It is never a paragraph of its own. The
113
+ recommendation is the last section: the move you would take as its own
112
114
  sentence, closed by a period, then the reason as a capitalized sentence or two. The lead
113
115
  and the recommendation are flowing prose and handoff unwraps both to the renderer's
114
116
  width, so never hard-wrap them; handoff also prepends the bold `**Recommendation**:`
@@ -123,13 +125,14 @@ this skill verifies it the same way: **it reads the diff, not the author**
123
125
  turn. The number is what lets a diff built outside `/plumbbob:build` reach its pause:
124
126
  nothing is in flight for that diff, and a bare `handoff` would read the moment as a
125
127
  boundary and render no Your Call block. Never nest it inside a fence of
126
- your own; it carries fences of its own and they cannot nest. It prints the Now line
127
- naming the step you reviewed, the Summary and its highlights, the Readout fence (its
128
- measured `check`, `seam`, `diff`, and `spent` rows folded with your three), a `diff`
129
- fence when the change is 20 lines or fewer, the Verdict folded worst-of from the same
130
- rows, Next Up, Your Call, and your recommendation last. Run it once: a second run at an
131
- unchanged pause prints the one-line reminder instead of the card, so if that line comes
132
- back where the card belongs (you ran handoff earlier in this turn), run
128
+ your own; it carries fences of its own and they cannot nest. It prints the Summary, the
129
+ Readout fence (its measured `check`, `seam`, `diff`, and `spent` rows folded with your
130
+ three, the changed files listed beneath `diff`), a `diff` fence when the change is 20
131
+ lines or fewer, Your Call, the state table (the Verdict folded worst-of from the same
132
+ rows, the Now row naming the step you reviewed, Next Up, and the rows beneath it), your
133
+ recommendation, and the `more details` link last. Run it once: a second run at the same
134
+ pause prints the one-line reminder instead of the card, so if that line comes back
135
+ where the card belongs (you ran handoff earlier in this turn), run
133
136
  `plumbbob handoff <n> --full` and paste that. At the pause the check row reads green,
134
137
  since a red one stopped you back at step 1. The gate verdict's one home is that row:
135
138
  no standalone verdict line exists, and you never restate the verdict in prose. A
@@ -140,32 +143,34 @@ this skill verifies it the same way: **it reads the diff, not the author**
140
143
  one, the write-versus-relay line of
141
144
  [D78 (em-dash-ban)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d78).
142
145
 
143
- *Then read the reply as an ask or a direction.* A message that **asks** ("expand 2",
144
- "what does that mean?", "why did the seam row flag that?") is an expand: answer it from
145
- the detail file, from `git diff`, or from the build-log's `## Log` for an older step,
146
- never from recall, then run `plumbbob handoff <n>` and paste its output beneath your
147
- answer, whole and verbatim. The turn is your answer, then that output, and nothing after
148
- it. The pause renders its card once
149
- ([D87 (pause-once)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d87)):
150
- while nothing about it has changed, handoff prints one line,
151
- `**Next Up**: Back to Step <N> of <M> - <title>`, in place of the card the human already
152
- read, so your answer stays on screen. The CLI picks the form, never you: paste whichever
153
- one it prints, and never retype the card or reach for `--full` to put it beneath an
154
- answer.
155
-
156
- Two moments bring the whole card back, and in both you run `plumbbob handoff <n> --full`
157
- and paste its output whole, with nothing written around it: the human asks to see the
158
- pause (`show the pause`, or any wording of it), or the card is not in this conversation
159
- (a fresh session, or one after `/clear`, that finds the step still at its pause). A
160
- message that **directs** is needs-work: take it as what to change, and nothing lands
161
- until the human says `looks good`.
146
+ *Then answer the reply in your own words.* The card shows once
147
+ ([D110 (reply-after-the-card)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d110)):
148
+ every later turn at this pause is your reply, closed by one line. A message that
149
+ **asks** ("expand 2", "what does that mean?", "why did the seam row flag that?") is an
150
+ expand: answer it from the detail file, from `git diff`, or from the build-log's
151
+ `## Log` for an older step, never from recall. A message that **directs** is needs-work:
152
+ make the change, run the check, and say what moved and what the check found; when the
153
+ 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.
160
+
161
+ The card comes back one way: the human asks to see it (`show the pause`, or any wording
162
+ of it). Then run `plumbbob handoff <n> --full` and paste its output whole, with nothing
163
+ written around it. Never run `--full` to read the card for yourself, after a compaction
164
+ or in a fresh session; what it prints is the turn's ending, and the relay check holds a
165
+ turn that does not close on it. Read the detail file and `plumbbob status` instead.
162
166
 
163
167
  - **Reconcile a drifted subject here, in the open.** The planned title *is* the
164
168
  checkpoint subject ([D68 (conventional-subjects)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d68)). If the diff drifted from it (the
165
169
  step landed something the title no longer describes), the body pass may propose a
166
- corrected subject, but it **presents** it at this pause for explicit approval: one
167
- highlight reading `planned title → proposed subject`, part of what the human OKs.
168
- That highlight is a `## <n>` section title in the detail file like any other.
170
+ corrected subject, but it **presents** it at this pause for explicit approval, in
171
+ the recommendation the card shows (`Approve it, landing it as <proposed subject>.`),
172
+ so it is part of what the human OKs, with the reasoning in a `## <n>` section of the
173
+ detail file titled `planned title → proposed subject`.
169
174
  This is the exception, not the default: with **nothing presented**, the deterministic
170
175
  title-derived subject lands untouched. A silent `-m` swap is exactly the
171
176
  agent-authored subject [D68 (conventional-subjects)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d68) refuses, so a reconcile is