plumbbob 0.13.4 → 0.13.6
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 +23 -23
- package/dist/cli-core.js +6 -5
- package/dist/lib/notice.js +42 -7
- package/dist/lib/orient.js +102 -23
- package/dist/lib/sidecar.js +53 -31
- package/dist/verbs/checkpoint.js +12 -12
- package/dist/verbs/finish.js +7 -7
- package/dist/verbs/handoff.js +368 -302
- package/dist/verbs/harvest.js +20 -21
- package/dist/verbs/relay.js +48 -6
- package/dist/verbs/turn.js +111 -31
- package/package.json +1 -1
- package/skills/build/SKILL.md +59 -52
- package/skills/finish/SKILL.md +10 -4
- package/skills/harvest/SKILL.md +26 -13
- package/skills/plan/SKILL.md +13 -9
- package/skills/run/SKILL.md +38 -24
- package/skills/verify/SKILL.md +48 -40
package/skills/harvest/SKILL.md
CHANGED
|
@@ -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,24 +54,37 @@ 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
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
(
|
|
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
|
|
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
|
package/skills/plan/SKILL.md
CHANGED
|
@@ -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,
|
|
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
|
|
209
|
-
|
|
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
|
|
228
|
-
the step the build starts on,
|
|
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,11 @@ 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.
|
|
286
|
-
|
|
286
|
+
refine's. A shell command you want the human to run never rides inside a sentence: end the
|
|
287
|
+
sentence on a colon and give the command a fenced `sh` block of its own, one command to a
|
|
288
|
+
line, which handoff keeps line for line; `/plumbbob:refine` stays in backticks in the
|
|
289
|
+
sentence. `plumbbob handoff --plan` prints the label and your recommendation beneath the
|
|
290
|
+
state table, then the `more details` link to the file, "expand 2" opens `## 2`, and `checkpoint --plan` records the read beneath the
|
|
287
291
|
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
292
|
full attack discoverable at the moment it would pay, and lets a sound plan skip it. Refine
|
|
289
293
|
is where the real adversary looks; this is an estimate, and it says so by staying short.
|
package/skills/run/SKILL.md
CHANGED
|
@@ -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
|
|
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
|
|
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,25 +172,34 @@ 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
|
-
|
|
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
|
|
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
|
|
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
|
|
181
|
-
parked is `P3` whether or not the two above it are flipped, and the card, the detail
|
|
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
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
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
|
-
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.
|
|
192
203
|
|
|
193
204
|
*Render it and stop.* Run `plumbbob handoff --stop` and paste its output whole, verbatim, at
|
|
194
205
|
top level, trailing blank line included, then end the turn. Write nothing before it or after
|
|
@@ -210,29 +221,32 @@ and the Your Call block names the replies. Read the human's message as one of th
|
|
|
210
221
|
own, never into the range this card reviews: that range has landed, its call is the one
|
|
211
222
|
being made, and the step would reopen it. Relay the record's ending whole and end the
|
|
212
223
|
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
|
|
214
|
-
|
|
215
|
-
|
|
224
|
+
- **A change** (`make P7 a tangent`, or a change to the review) is direction, and the turn
|
|
225
|
+
that makes it is your reply
|
|
226
|
+
([D110 (reply-after-the-card)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d110)).
|
|
227
|
+
Rewrite the detail file's line or section, say in your own words what moved, then run
|
|
228
|
+
`plumbbob handoff --stop` and paste the one-line reminder it prints beneath your reply.
|
|
229
|
+
The card does not come back for a change; nothing is recorded until `looks good`, which
|
|
230
|
+
records every lean as the detail file then reads.
|
|
216
231
|
- **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
|
|
218
|
-
beneath your answer
|
|
219
|
-
`
|
|
220
|
-
`plumbbob handoff --stop --full`.
|
|
232
|
+
the Log, never from recall; then run `plumbbob handoff --stop` and paste the one-line
|
|
233
|
+
reminder it prints beneath your answer. Only `show the stop`, or any wording of it, takes
|
|
234
|
+
`plumbbob handoff --stop --full`, and never to read the card for yourself.
|
|
221
235
|
- **`/plumbbob:run`** typed at the card confirms everything the way `looks good` does, and
|
|
222
236
|
runs the next range. Record first: fold the blockers and run `plumbbob harvest`, then read
|
|
223
237
|
`plumbbob status --run "<the same argument>"` again. When its grant line says
|
|
224
238
|
`unlike the run`, the record re-cut the range the run would walk (a blocker added or moved a
|
|
225
239
|
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
|
|
227
|
-
the human to type
|
|
240
|
+
the record's ending whole and end the turn there, where its Range row names the re-cut run
|
|
241
|
+
for the human to type
|
|
228
242
|
([D102 (settle-in-one-reply)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d102)).
|
|
229
243
|
Otherwise relay the record's ending and walk the run from section 4.
|
|
230
244
|
- **`/plumbbob:finish`** at the plan's last range is the finish skill's to settle: it
|
|
231
245
|
records the card the way `looks good` would before it writes the report.
|
|
232
246
|
|
|
233
247
|
`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
|
|
235
|
-
`plumbbob handoff --stop` again, and end the turn on
|
|
248
|
+
parked) and a class outside the three, and it refuses a range no card showed; fix what the
|
|
249
|
+
refusal names, run `plumbbob handoff --stop` again, and end the turn on what it prints. One refusal takes another
|
|
236
250
|
path: `step 13 joined it after it landed` means a blocker went into the range the card
|
|
237
251
|
reviews. Move that step to a range still to come, or a bare range of its own, leave
|
|
238
252
|
`.plumbbob/detail.md` as it is, fold nothing again, and run `plumbbob harvest` once more in
|
package/skills/verify/SKILL.md
CHANGED
|
@@ -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
|
|
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,18 +101,23 @@ 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
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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**:`
|
|
115
|
-
label, which you never type.
|
|
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
|
|
116
121
|
is turn presentation, never the diff under review; the author-blind contract below still
|
|
117
122
|
holds. `checkpoint` records this file beneath the step's dated line in the build-log's
|
|
118
123
|
`## Log` and then truncates it (the detail plane in the
|
|
@@ -123,13 +128,14 @@ this skill verifies it the same way: **it reads the diff, not the author**
|
|
|
123
128
|
turn. The number is what lets a diff built outside `/plumbbob:build` reach its pause:
|
|
124
129
|
nothing is in flight for that diff, and a bare `handoff` would read the moment as a
|
|
125
130
|
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
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
rows,
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
your own; it carries fences of its own and they cannot nest. It prints the Summary, the
|
|
132
|
+
Readout fence (its measured `check`, `seam`, `diff`, and `spent` rows folded with your
|
|
133
|
+
three, the changed files listed beneath `diff`), a `diff` fence when the change is 20
|
|
134
|
+
lines or fewer, Your Call, the state table (the Verdict folded worst-of from the same
|
|
135
|
+
rows, the Now row naming the step you reviewed, Next Up, and the rows beneath it), your
|
|
136
|
+
recommendation, and the `more details` link last. Run it once: a second run at the same
|
|
137
|
+
pause prints the one-line reminder instead of the card, so if that line comes back
|
|
138
|
+
where the card belongs (you ran handoff earlier in this turn), run
|
|
133
139
|
`plumbbob handoff <n> --full` and paste that. At the pause the check row reads green,
|
|
134
140
|
since a red one stopped you back at step 1. The gate verdict's one home is that row:
|
|
135
141
|
no standalone verdict line exists, and you never restate the verdict in prose. A
|
|
@@ -140,32 +146,34 @@ this skill verifies it the same way: **it reads the diff, not the author**
|
|
|
140
146
|
one, the write-versus-relay line of
|
|
141
147
|
[D78 (em-dash-ban)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d78).
|
|
142
148
|
|
|
143
|
-
*Then
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
answer
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
149
|
+
*Then answer the reply in your own words.* The card shows once
|
|
150
|
+
([D110 (reply-after-the-card)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d110)):
|
|
151
|
+
every later turn at this pause is your reply, closed by one line. A message that
|
|
152
|
+
**asks** ("expand 2", "what does that mean?", "why did the seam row flag that?") is an
|
|
153
|
+
expand: answer it from the detail file, from `git diff`, or from the build-log's
|
|
154
|
+
`## Log` for an older step, never from recall. A message that **directs** is needs-work:
|
|
155
|
+
make the change, run the check, and say what moved and what the check found; when the
|
|
156
|
+
change moves what the card said, write the detail file again so the record matches what
|
|
157
|
+
lands. Nothing lands until the human says `looks good`. Either way, then run
|
|
158
|
+
`plumbbob handoff <n>` and paste its output beneath your reply, whole and verbatim: at a
|
|
159
|
+
pause whose card has shown it prints one line,
|
|
160
|
+
`**Next Up**: Back to Step <N> of <M> - <title>`, whatever changed since, so your reply
|
|
161
|
+
stays on screen. The turn is your reply, then that line, and nothing after it. The CLI
|
|
162
|
+
picks the form, never you: paste whichever one it prints, and never retype the card.
|
|
163
|
+
|
|
164
|
+
The card comes back one way: the human asks to see it (`show the pause`, or any wording
|
|
165
|
+
of it). Then run `plumbbob handoff <n> --full` and paste its output whole, with nothing
|
|
166
|
+
written around it. Never run `--full` to read the card for yourself, after a compaction
|
|
167
|
+
or in a fresh session; what it prints is the turn's ending, and the relay check holds a
|
|
168
|
+
turn that does not close on it. Read the detail file and `plumbbob status` instead.
|
|
162
169
|
|
|
163
170
|
- **Reconcile a drifted subject here, in the open.** The planned title *is* the
|
|
164
171
|
checkpoint subject ([D68 (conventional-subjects)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d68)). If the diff drifted from it (the
|
|
165
172
|
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
|
|
167
|
-
|
|
168
|
-
|
|
173
|
+
corrected subject, but it **presents** it at this pause for explicit approval, in
|
|
174
|
+
the recommendation the card shows (`Approve it, landing it as <proposed subject>.`),
|
|
175
|
+
so it is part of what the human OKs, with the reasoning in a `## <n>` section of the
|
|
176
|
+
detail file titled `planned title → proposed subject`.
|
|
169
177
|
This is the exception, not the default: with **nothing presented**, the deterministic
|
|
170
178
|
title-derived subject lands untouched. A silent `-m` swap is exactly the
|
|
171
179
|
agent-authored subject [D68 (conventional-subjects)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d68) refuses, so a reconcile is
|