plumbbob 0.2.3 → 0.3.1
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/README.md +69 -141
- package/dist/cli.js +22 -37
- package/dist/lib/archive.js +6 -3
- package/dist/lib/git.js +0 -4
- package/dist/lib/intent.js +1 -1
- package/dist/lib/orient.js +160 -0
- package/dist/lib/settings.js +12 -8
- package/dist/lib/sidecar.js +0 -3
- package/dist/verbs/build.js +1 -1
- package/dist/verbs/check.js +17 -0
- package/dist/verbs/checkpoint.js +83 -0
- package/dist/verbs/doctor.js +172 -0
- package/dist/verbs/reset.js +54 -0
- package/dist/verbs/setup.js +31 -9
- package/dist/verbs/status.js +23 -4
- package/package.json +2 -2
- package/skills/pb-build/SKILL.md +40 -10
- package/skills/pb-harvest/SKILL.md +47 -0
- package/skills/pb-park/SKILL.md +40 -0
- package/skills/pb-plan/SKILL.md +38 -0
- package/skills/pb-reset/SKILL.md +39 -0
- package/skills/pb-revert/SKILL.md +1 -1
- package/skills/pb-spike/SKILL.md +1 -1
- package/skills/pb-status/SKILL.md +22 -0
- package/skills/pb-step/SKILL.md +37 -0
- package/skills/pb-verify/SKILL.md +47 -0
- package/skills/plumbbob-interrogate/SKILL.md +1 -1
- package/dist/verbs/done.js +0 -63
- package/dist/verbs/finish.js +0 -54
- package/dist/verbs/mode.js +0 -26
- package/dist/verbs/review.js +0 -24
- package/dist/verbs/wrap.js +0 -28
- package/hooks/bash-guard.sh +0 -62
- package/hooks/pre-edit.sh +0 -112
- package/skills/park/SKILL.md +0 -26
- package/skills/pb-done/SKILL.md +0 -18
- package/skills/pb-finish/SKILL.md +0 -18
- package/skills/pb-review/SKILL.md +0 -18
- package/skills/pb-start/SKILL.md +0 -19
- package/skills/pb-wrap/SKILL.md +0 -18
- package/skills/plumbbob-docs/SKILL.md +0 -25
- package/skills/plumbbob-report/SKILL.md +0 -35
- package/skills/plumbbob-triage/SKILL.md +0 -38
package/skills/pb-start/SKILL.md
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pb-start
|
|
3
|
-
description: Human-triggered driver for `plumbbob start` — scaffold a new session (.plumbbob/, STATE=DESIGN, baseline commit) without leaving the chat.
|
|
4
|
-
disable-model-invocation: true
|
|
5
|
-
model: haiku
|
|
6
|
-
allowed-tools: Bash(__PLUMBBOB_BIN__ status:*), Bash(__PLUMBBOB_BIN__ start:*)
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Plumbbob — start a session (driver)
|
|
10
|
-
|
|
11
|
-
Current session state (injected when this skill runs): !`__PLUMBBOB_BIN__ status`
|
|
12
|
-
|
|
13
|
-
This is a **driver skill** — a chat-side trigger for the mechanical `plumbbob start` verb, so the whole workflow runs from the agent window instead of a terminal. It is `disable-model-invocation: true`: only the human fires it. It carries **no Edit and no Write tool** — its only action is to shell the verb and report the verb's output verbatim, including any refusal. The CLI is the source of truth: never retry a refused transition, and never edit a file to work around one.
|
|
14
|
-
|
|
15
|
-
## What it does
|
|
16
|
-
|
|
17
|
-
1. Read the session title from the way you were invoked (e.g. `/pb-start "fix the widget"` → title `fix the widget`). If no title is present, ask for one and run nothing.
|
|
18
|
-
2. Run `__PLUMBBOB_BIN__ start "<title>"` via Bash.
|
|
19
|
-
3. Report the verb's output verbatim. If it refuses (e.g. a session already exists), relay that and stop.
|
package/skills/pb-wrap/SKILL.md
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pb-wrap
|
|
3
|
-
description: Human-triggered driver for `plumbbob wrap` — set STATE=FINISH so the report and docs skills can run.
|
|
4
|
-
disable-model-invocation: true
|
|
5
|
-
model: haiku
|
|
6
|
-
allowed-tools: Bash(__PLUMBBOB_BIN__ status:*), Bash(__PLUMBBOB_BIN__ wrap:*)
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Plumbbob — wrap into FINISH (driver)
|
|
10
|
-
|
|
11
|
-
Current session state (injected when this skill runs): !`__PLUMBBOB_BIN__ status`
|
|
12
|
-
|
|
13
|
-
This is a **driver skill** — a chat-side trigger for the mechanical `plumbbob wrap` verb, so the whole workflow runs from the agent window instead of a terminal. It is `disable-model-invocation: true`: only the human fires it. It carries **no Edit and no Write tool** — its only action is to shell the verb and report the verb's output verbatim, including any refusal. The CLI is the source of truth: never retry a refused transition, and never edit a file to work around one.
|
|
14
|
-
|
|
15
|
-
## What it does
|
|
16
|
-
|
|
17
|
-
1. Run `__PLUMBBOB_BIN__ wrap` via Bash.
|
|
18
|
-
2. Report the verb's output verbatim. FINISH is what unlocks `/plumbbob-report` and `/plumbbob-docs` — next, run `/plumbbob-report`.
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plumbbob-docs
|
|
3
|
-
description: FINISH-phase, optional docs update — conservatively project canonical intent into real docs/, only when warranted.
|
|
4
|
-
disable-model-invocation: true
|
|
5
|
-
model: opus
|
|
6
|
-
allowed-tools: Read, Edit, Write, Bash(__PLUMBBOB_BIN__ status:*)
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Plumbbob — update the docs
|
|
10
|
-
|
|
11
|
-
Current session state (injected when this skill runs): !`__PLUMBBOB_BIN__ status`
|
|
12
|
-
|
|
13
|
-
## Wrong-state refusal
|
|
14
|
-
|
|
15
|
-
`docs/` is writable **only in FINISH** (D19) — the muzzle blocks it everywhere else. Read the state injected above and **refuse if it is not `FINISH`**, naming `plumbbob wrap` as the verb that enters FINISH (the report skill runs first; this docs pass is the optional second Finish step). If the state is `NO ACTIVE SESSION` the hooks are dormant and there is nothing for this skill to gate — just edit docs the ordinary way.
|
|
16
|
-
|
|
17
|
-
## What this skill does
|
|
18
|
-
|
|
19
|
-
**Conservative by default.** Most sessions write no docs at all — **a bug fix usually shouldn't spawn a doc**. Update real documentation under `docs/` only when the work genuinely changed how the system should be described, and only from the **canonical** parts of `intent.md` (the Frame, the Decisions) — never from the chat transcript.
|
|
20
|
-
|
|
21
|
-
## The one hard contract
|
|
22
|
-
|
|
23
|
-
- Default to doing nothing. Open a doc edit only when you can name what changed for a reader of `docs/`.
|
|
24
|
-
- Project only from `intent.md`; the report is for the session, the docs are for the system.
|
|
25
|
-
- Stay inside `docs/` — and only in FINISH. An edit anywhere else, or in any other state, is the muzzle's job to refuse, not yours to attempt.
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plumbbob-report
|
|
3
|
-
description: FINISH-phase report — synthesize intent + build-log into exactly .plumbbob/report.md with the five required sections.
|
|
4
|
-
disable-model-invocation: true
|
|
5
|
-
model: opus
|
|
6
|
-
allowed-tools: Read, Write, Bash(__PLUMBBOB_BIN__ status:*)
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Plumbbob — write the report
|
|
10
|
-
|
|
11
|
-
Current session state (injected when this skill runs): !`__PLUMBBOB_BIN__ status`
|
|
12
|
-
|
|
13
|
-
## Wrong-state refusal
|
|
14
|
-
|
|
15
|
-
This skill writes the report **in FINISH only**. Read the state injected above:
|
|
16
|
-
|
|
17
|
-
- `STATE: FINISH` — proceed.
|
|
18
|
-
- Any other active state (`DESIGN`, `BUILD`, `REVIEW`, `SPIKE`) — **stop and tell the human to run `plumbbob wrap` first** (D28). Entering FINISH is what unlocks writing `report.md`, and this skill is the thing that tells you to wrap.
|
|
19
|
-
- `NO ACTIVE SESSION` — there is nothing to report; start a session with `plumbbob start "<title>"`.
|
|
20
|
-
|
|
21
|
-
## What this skill does
|
|
22
|
-
|
|
23
|
-
The first of the three Finish steps. Read `intent.md` and `build-log.md` and synthesize the conclusion — the "yeah, I did that" artifact — into **exactly one file: `.plumbbob/report.md`**. Write nothing else, and touch no other path.
|
|
24
|
-
|
|
25
|
-
## Required sections
|
|
26
|
-
|
|
27
|
-
`.plumbbob/report.md` must contain these five sections, in order:
|
|
28
|
-
|
|
29
|
-
1. **What shipped** — what this session actually built, measured against the Frame's "done looks like".
|
|
30
|
-
2. **The decisions and why** — the decisions taken (the `D#` ledger) and the reasoning behind each.
|
|
31
|
-
3. **Parked items and how each was triaged** — every Park-list item and its triage outcome (blocker / tangent / pivot signal).
|
|
32
|
-
4. **Final status** — done, partial, or abandoned, with the checkpoint SHAs.
|
|
33
|
-
5. **Deferred tangents (future Plumbbobs)** — the tangents worth their own future session.
|
|
34
|
-
|
|
35
|
-
Once `report.md` exists, the human runs `plumbbob finish` (the closing gate refuses without it) to archive and clear the session.
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plumbbob-triage
|
|
3
|
-
description: DESIGN-phase, step-boundary triage — propose one class per parked item, write only after the human confirms each.
|
|
4
|
-
disable-model-invocation: true
|
|
5
|
-
model: opus
|
|
6
|
-
allowed-tools: Read, Edit, Bash(__PLUMBBOB_BIN__ status:*)
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Plumbbob — triage the park list
|
|
10
|
-
|
|
11
|
-
Current session state (injected when this skill runs): !`__PLUMBBOB_BIN__ status`
|
|
12
|
-
|
|
13
|
-
## Wrong-state refusal
|
|
14
|
-
|
|
15
|
-
This skill runs in **DESIGN only**, at a **step boundary** (after the step's check has gone green). Read the state injected above and **stop before writing anything** if it is not `DESIGN`:
|
|
16
|
-
|
|
17
|
-
- `STATE: BUILD` or `STATE: REVIEW` — finish the step first with `plumbbob done`, which returns you to DESIGN; then triage.
|
|
18
|
-
- `STATE: SPIKE` — close the experiment with `plumbbob spike done` first.
|
|
19
|
-
- `STATE: FINISH` — too late to triage; the report skill folds the park list in instead.
|
|
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.
|
|
23
|
-
|
|
24
|
-
## What this skill does
|
|
25
|
-
|
|
26
|
-
Walk the **Park list** in `build-log.md` item by item and, for each, **propose exactly one class**:
|
|
27
|
-
|
|
28
|
-
- **blocker** — the plan was wrong or incomplete; can't proceed. Folds into `intent.md` and is handled now.
|
|
29
|
-
- **tangent** — a different path, not clearly better. **The default** — defer or kill.
|
|
30
|
-
- **pivot signal** — real evidence the whole approach is wrong. Stop and replan deliberately.
|
|
31
|
-
|
|
32
|
-
## The one hard contract
|
|
33
|
-
|
|
34
|
-
You **propose**; the **human calls it** (D13). For each item, state your proposed class and one line of reasoning, then **wait for the human to confirm or override**. Write **only after** per-item confirmation:
|
|
35
|
-
|
|
36
|
-
- Record each confirmed class in `build-log.md`'s `## Triage` section.
|
|
37
|
-
- A confirmed **blocker** also folds its decision into `intent.md`.
|
|
38
|
-
- Never reclassify or resolve an item the human hasn't confirmed, and default every uncertain item to **tangent**, never to blocker.
|