plumbbob 0.3.1 → 0.4.2
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 +11 -0
- package/README.md +199 -53
- package/dist/cli-core.js +83 -0
- package/dist/cli.js +6 -82
- package/dist/lib/archive.js +1 -1
- package/dist/lib/orient.js +35 -15
- package/dist/verbs/check.js +1 -1
- package/dist/verbs/checkpoint.js +1 -1
- package/dist/verbs/doctor.js +44 -142
- package/dist/verbs/init.js +81 -0
- package/dist/verbs/{reset.js → wrap.js} +7 -7
- package/hooks/hooks.json +12 -0
- package/package.json +4 -3
- package/skills/build/SKILL.md +70 -0
- package/skills/{pb-harvest → harvest}/SKILL.md +6 -6
- package/skills/{pb-park → park}/SKILL.md +6 -6
- package/skills/plan/SKILL.md +85 -0
- package/skills/refine/SKILL.md +45 -0
- package/skills/{pb-revert → revert}/SKILL.md +5 -5
- package/skills/{pb-spike → spike}/SKILL.md +5 -5
- package/skills/{pb-status → status}/SKILL.md +5 -5
- package/skills/step/SKILL.md +49 -0
- package/skills/{pb-verify → verify}/SKILL.md +8 -8
- package/skills/{pb-reset → wrap}/SKILL.md +8 -8
- package/templates/build-log.md +14 -14
- package/templates/intent.md +10 -6
- package/dist/lib/settings.js +0 -83
- package/dist/verbs/setup.js +0 -163
- package/skills/pb-build/SKILL.md +0 -49
- package/skills/pb-plan/SKILL.md +0 -38
- package/skills/pb-step/SKILL.md +0 -37
- package/skills/plumbbob-interrogate/SKILL.md +0 -33
package/skills/pb-build/SKILL.md
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pb-build
|
|
3
|
-
description: The optional engine — read the current planned step from intent, implement it (its done-when, seam, Decisions, Constraints), then verify it through to the approval pause. Skip it entirely to implement by hand, vibed, or with another harness.
|
|
4
|
-
disable-model-invocation: true
|
|
5
|
-
model: opus
|
|
6
|
-
allowed-tools: Read, Edit, Write, Bash(__PLUMBBOB_BIN__ status:*), Bash(__PLUMBBOB_BIN__ build:*), Bash(__PLUMBBOB_BIN__ check:*), Bash(__PLUMBBOB_BIN__ checkpoint:*), Bash(git diff:*)
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Plumbbob — build a step (the optional engine)
|
|
10
|
-
|
|
11
|
-
Current session state (injected when this skill runs): !`__PLUMBBOB_BIN__ status 2>/dev/null || echo "plumbbob CLI not found - install the dep and re-run: npx plumbbob setup"`
|
|
12
|
-
|
|
13
|
-
This is the **bundled executor** — one way to turn a planned step into code. It is
|
|
14
|
-
**optional** (D3): you can implement any step by hand, in a vibe session, or with
|
|
15
|
-
another harness and go straight to `/pb-verify` instead — plumbbob does not care how
|
|
16
|
-
the diff appeared. When you do run it, it reads the plan, writes the step, and
|
|
17
|
-
carries straight through to the verify pause.
|
|
18
|
-
|
|
19
|
-
## What this skill does, in order
|
|
20
|
-
|
|
21
|
-
1. **Pick the step.** Use the number you were invoked with (e.g. `/pb-build 4`), else
|
|
22
|
-
the next undone, planned step in `.plumbbob/intent.md`. If there is no planned step
|
|
23
|
-
to build, stop and tell the human to `/pb-step` first.
|
|
24
|
-
2. **Enter the step.** Run `__PLUMBBOB_BIN__ build <n>` (records the in-flight STEP +
|
|
25
|
-
SEAM so `/pb-status` shows the step in flight; in v2 the seam is awareness, not a
|
|
26
|
-
lock).
|
|
27
|
-
3. **Read the plan.** Read the step's **done-when**, its **seam**, and the
|
|
28
|
-
**Decisions** and **Constraints** in `intent.md`. Build to *that* — the deciding
|
|
29
|
-
already happened, off the chat.
|
|
30
|
-
4. **Implement** the step, and only that step, staying within the declared seam. A
|
|
31
|
-
new problem or "ooh what if" that surfaces mid-build is a `/pb-park`, **not** an
|
|
32
|
-
edit — capture it and stay on the step. If you genuinely cannot finish without
|
|
33
|
-
touching more than the seam, that is scope drift: surface it to the human rather
|
|
34
|
-
than sprawling.
|
|
35
|
-
5. **Verify, through to the pause.** Run the verify tick exactly as `/pb-verify`
|
|
36
|
-
does: `__PLUMBBOB_BIN__ check` → self-review the diff against the done-when, the
|
|
37
|
-
Decisions, and the Constraints (a single structured read, D16) → validate → **PAUSE
|
|
38
|
-
for the human's approval** → only on approval, checkpoint with
|
|
39
|
-
`__PLUMBBOB_BIN__ checkpoint`. Do **not** bump the version or changelog — that is
|
|
40
|
-
the human's `/version` call.
|
|
41
|
-
|
|
42
|
-
## The hard contracts
|
|
43
|
-
|
|
44
|
-
- **Optional, never required.** The loop works without this skill; `/pb-verify`
|
|
45
|
-
checkpoints a hand-built or vibed diff just the same (D3).
|
|
46
|
-
- **Build the decided step, not a new one.** Implement what `intent.md` settled. A
|
|
47
|
-
new idea mid-build is a `/pb-park`, not an edit.
|
|
48
|
-
- **Always end at the pause.** Implement → verify → wait for approval. Never
|
|
49
|
-
checkpoint without it; the human is the clock.
|
package/skills/pb-plan/SKILL.md
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pb-plan
|
|
3
|
-
description: Frame a fresh goal — scaffold the session and author the intent's Frame, Decisions, and Constraints before any code. Steps stay empty; they come one at a time from /pb-step.
|
|
4
|
-
disable-model-invocation: true
|
|
5
|
-
model: opus
|
|
6
|
-
allowed-tools: Read, Edit, Write, Bash(__PLUMBBOB_BIN__ status:*), Bash(__PLUMBBOB_BIN__ start:*)
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Plumbbob — frame a goal (the whole-goal move)
|
|
10
|
-
|
|
11
|
-
Current session state (injected when this skill runs): !`__PLUMBBOB_BIN__ status 2>/dev/null || echo "plumbbob CLI not found - install the dep and re-run: npx plumbbob setup"`
|
|
12
|
-
|
|
13
|
-
`/pb-plan` is the **whole-goal** move — it opens a session and gets the deciding out
|
|
14
|
-
of your head and onto `intent.md` *before* any code. (Planning a single increment is
|
|
15
|
-
the separate `/pb-step` move; do not confuse the two.)
|
|
16
|
-
|
|
17
|
-
## What this skill does
|
|
18
|
-
|
|
19
|
-
1. **Scaffold.** If there is no active session, run `__PLUMBBOB_BIN__ start "<title>"`
|
|
20
|
-
to create `.plumbbob/` (STATE=DESIGN, baseline recorded). If a session already
|
|
21
|
-
exists, say so and edit the existing `intent.md` rather than starting over.
|
|
22
|
-
2. **Frame** (`.plumbbob/intent.md`), with the human: the **Problem** in plain words,
|
|
23
|
-
the **smallest thing** that solves it, what **done looks like**, and what you are
|
|
24
|
-
**explicitly NOT doing**. This is the human's convergence — propose wording, but
|
|
25
|
-
the human decides every line.
|
|
26
|
-
3. **Decisions & Constraints.** Record the settled calls (one line each, with the
|
|
27
|
-
*because*) and the hard rules the build must honor. An unresolved hole goes to
|
|
28
|
-
**Open questions**, never guessed into a Decision.
|
|
29
|
-
4. **Leave `## Steps` empty.** Steps are planned just-in-time (D6) — one at a time
|
|
30
|
-
with `/pb-step` — so do not write the build plan here.
|
|
31
|
-
|
|
32
|
-
## The hard contracts
|
|
33
|
-
|
|
34
|
-
- **Deciding before code.** `/pb-plan` writes `intent.md` only — never source.
|
|
35
|
-
- **The human converges.** You surface options and draft wording; the human picks.
|
|
36
|
-
An unresolved hole is an Open question, not a guessed Decision.
|
|
37
|
-
- **Size to the work.** A small change fills Frame + a couple of Decisions and stops;
|
|
38
|
-
ceremony on a one-liner is the failure mode, not thoroughness.
|
package/skills/pb-step/SKILL.md
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pb-step
|
|
3
|
-
description: Plan the next increment — propose one small step with a done-when criterion and a seam, get the human's OK, and append it to intent's ## Steps. One by default; several only if the human already knows them.
|
|
4
|
-
disable-model-invocation: true
|
|
5
|
-
model: opus
|
|
6
|
-
allowed-tools: Read, Edit, Bash(__PLUMBBOB_BIN__ status:*)
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Plumbbob — plan the next step (the single-increment move)
|
|
10
|
-
|
|
11
|
-
Current session state (injected when this skill runs): !`__PLUMBBOB_BIN__ status 2>/dev/null || echo "plumbbob CLI not found - install the dep and re-run: npx plumbbob setup"`
|
|
12
|
-
|
|
13
|
-
`/pb-step` plans the **next increment** just-in-time (D6) — the smallest verifiable
|
|
14
|
-
piece of the framed goal, planned only when you reach it. (Framing the whole goal is
|
|
15
|
-
the separate `/pb-plan` move.)
|
|
16
|
-
|
|
17
|
-
## What this skill does
|
|
18
|
-
|
|
19
|
-
1. **Read the plan.** Read `intent.md`'s Frame, Decisions, Constraints, and the steps
|
|
20
|
-
already done, to see what the *next* increment should be.
|
|
21
|
-
2. **Propose one step.** Draft a single step:
|
|
22
|
-
- a one-line **title**,
|
|
23
|
-
- a **done-when** criterion — ideally a test or check result, something
|
|
24
|
-
`/pb-verify` can actually validate,
|
|
25
|
-
- a **seam**: the specific files it should touch (exact paths, or a `dir/` grant).
|
|
26
|
-
Keep it small enough to verify in one review pass.
|
|
27
|
-
3. **Get the human's OK**, then **append** it to `## Steps` in the standard format —
|
|
28
|
-
`N. [ ] <title> — **done when:** <criterion>` with a `- seam:` sub-line. Default
|
|
29
|
-
to **one** step; plan several only when the human already knows them.
|
|
30
|
-
|
|
31
|
-
## The hard contracts
|
|
32
|
-
|
|
33
|
-
- **One verifiable increment.** Each step carries a done-when `/pb-verify` can check
|
|
34
|
-
and a seam small enough to review in one pass.
|
|
35
|
-
- **Append to `## Steps` only**, in the standard format `status` and `build` parse —
|
|
36
|
-
never the Roadmap, never loose prose.
|
|
37
|
-
- **The human approves the step** before it lands. You propose; they decide.
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plumbbob-interrogate
|
|
3
|
-
description: DESIGN-phase frame interrogation — attack the plan for holes and append them as Open questions, without deciding anything.
|
|
4
|
-
disable-model-invocation: true
|
|
5
|
-
model: opus
|
|
6
|
-
allowed-tools: Read, Edit, Bash(__PLUMBBOB_BIN__ status:*)
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Plumbbob — interrogate the frame
|
|
10
|
-
|
|
11
|
-
Current session state (injected when this skill runs): !`__PLUMBBOB_BIN__ status 2>/dev/null || echo "plumbbob CLI not found - install the dep and re-run: npx plumbbob setup"`
|
|
12
|
-
|
|
13
|
-
## Wrong-state refusal
|
|
14
|
-
|
|
15
|
-
This skill runs in **DESIGN only**. Read the state injected above and **stop before touching anything** if it is not `DESIGN`:
|
|
16
|
-
|
|
17
|
-
- `STATE: BUILD` or `STATE: REVIEW` — you are mid-step. Return to DESIGN first: finish the step with `plumbbob done`, or drop a half-built step with `plumbbob revert`. Then re-invoke.
|
|
18
|
-
- `STATE: SPIKE` — close the experiment with `plumbbob spike done` first.
|
|
19
|
-
- `STATE: FINISH` — the session is wrapping up; there is nothing left to interrogate.
|
|
20
|
-
- `NO ACTIVE SESSION` — start one with `plumbbob start "<title>"`.
|
|
21
|
-
|
|
22
|
-
When the state is wrong, refuse in one line naming the verb above, and edit nothing.
|
|
23
|
-
|
|
24
|
-
## What this skill does
|
|
25
|
-
|
|
26
|
-
Hand the frame (the **Frame** and **Architecture sketch** in `intent.md`) a cold, adversarial read and **attack it for holes** — ambiguities, unhandled edge cases, hidden assumptions, and collisions with the existing code. This is the one place early divergence is wanted, and it is divergence in the **problem space only**: surface what is unclear, never propose a solution and never pick between options.
|
|
27
|
-
|
|
28
|
-
## The one hard contract
|
|
29
|
-
|
|
30
|
-
- Append every hole as a bullet under `intent.md`'s `## Open questions` section, and **nowhere else**.
|
|
31
|
-
- **Never append to `## Decisions`** — resolving a hole is the human's convergence, not yours (D13). You surface; you do not decide.
|
|
32
|
-
- One question per hole, phrased as a question, each standing on its own.
|
|
33
|
-
- Once the Open questions are appended, **end your turn**. Do not answer them, do not start the next step, do not slide from interrogating into deciding.
|