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.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +24 -24
- package/dist/cli-core.js +6 -5
- package/dist/lib/notice.js +42 -7
- package/dist/lib/orient.js +379 -11
- 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/order.js +65 -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 +55 -51
- package/skills/finish/SKILL.md +10 -4
- package/skills/harvest/SKILL.md +43 -25
- package/skills/order/SKILL.md +19 -16
- package/skills/plan/SKILL.md +10 -9
- package/skills/refine/SKILL.md +17 -10
- package/skills/run/SKILL.md +34 -23
- package/skills/step/SKILL.md +28 -23
- package/skills/verify/SKILL.md +44 -39
package/skills/step/SKILL.md
CHANGED
|
@@ -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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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`,
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
range the
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
|
92
|
-
step (`[x]`) is history; do not
|
|
93
|
-
`plumbbob order`'s to write, never yours to
|
|
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
|
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,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
|
|
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**:`
|
|
@@ -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
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
rows,
|
|
131
|
-
|
|
132
|
-
|
|
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
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
answer
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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
|
|
167
|
-
|
|
168
|
-
|
|
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
|