plumbbob 0.4.13 → 0.4.14

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "plumbbob",
3
3
  "displayName": "PlumbBob",
4
- "version": "0.4.13",
4
+ "version": "0.4.14",
5
5
  "description": "Attention-first build process — driver skills + a CLI that keep you the decider; guidance, not enforcement.",
6
6
  "author": { "name": "Rob McLarty", "email": "hello@robmclarty.com", "url": "https://robmclarty.com" },
7
7
  "homepage": "https://github.com/robmclarty/plumbbob#readme",
package/README.md CHANGED
@@ -33,11 +33,14 @@ PlumbBob installs **once, globally** — like `gh` or your dotfiles — in one o
33
33
  co-equal, mutually-exclusive ways (both register a Claude Code plugin named
34
34
  `plumbbob`).
35
35
 
36
- **Marketplace plugin** — self-contained; ships the skills *and* the CLI on PATH, so
37
- it needs neither `npm` nor `init`:
36
+ **Marketplace plugin** — Claude Code installs the published `plumbbob` package for
37
+ you (skills, hook, and the CLI on PATH), so you run no `npm i -g` and no `init`. It's
38
+ published in the [`agent-tools`](https://github.com/robmclarty/agent-tools)
39
+ marketplace — add that once, then install:
38
40
 
39
41
  ```text
40
- /plugin install plumbbob@<marketplace>
42
+ /plugin marketplace add robmclarty/agent-tools
43
+ /plugin install plumbbob@robmclarty
41
44
  ```
42
45
 
43
46
  **npm global + `init`** — installs the CLI, then links the skills and hook into
package/dist/cli-core.js CHANGED
@@ -24,14 +24,14 @@ const VERBS = [
24
24
  { name: 'revert', summary: 'revert [--to n]: git reset --hard to a checkpoint SHA' },
25
25
  { name: 'park', summary: 'park "<text>": append a raw line to the park list' },
26
26
  { name: 'spike', summary: 'spike "<slug>" | spike done: throwaway worktree experiment' },
27
- { name: 'wrap', summary: 'v2 close-out: archive intent+log+report (no gate), clear the sidecar, close the session' },
27
+ { name: 'wrap', summary: 'close-out: archive intent+log+report (no gate), clear the sidecar, close the session' },
28
28
  { name: 'init', summary: 'link plumbbob into Claude Code as an in-place plugin (~/.claude/skills/plumbbob); --uninstall to undo' },
29
29
  { name: 'doctor', summary: 'diagnose the plugin link (manifest, skills, hook) and print the fix for anything broken' },
30
30
  ];
31
- // Plumbbob v2 (D1/D10/D13): the deciding/executing boundary is no longer a lock,
31
+ // PlumbBob (D1/D10/D13): the deciding/executing boundary is a pause, not a lock,
32
32
  // so there is nothing to defend — every verb runs the same whether a human or the
33
- // model triggers it. The old human-only `mode` escape hatch and its CLAUDECODE
34
- // in-session refusal are gone; what keeps the human the decider is the pause at
33
+ // model triggers it. There is no human-only `mode` escape hatch and no CLAUDECODE
34
+ // in-session refusal; what keeps the human the decider is the pause at
35
35
  // the step boundary (the skills), not a refusal here.
36
36
  export function formatHelp() {
37
37
  const width = Math.max(...VERBS.map((v) => v.name.length));
@@ -1,4 +1,4 @@
1
- // The finish-phase archive helper (D20: archive is local-only markdown in v1).
1
+ // The finish-phase archive helper (D20: archive is local-only markdown).
2
2
  // `finish` copies the three active files into .plumbbob/archive/<date>-<slug>/
3
3
  // before clearing the actives — "archive-then-clear, never destroy" (C4).
4
4
  // Functional/procedural, node builtins only (C1/C2).
@@ -58,7 +58,7 @@ function uniqueArchiveDir(root, base) {
58
58
  }
59
59
  // Copy intent + build-log + report into archive/<date>-<slug>/ and return the
60
60
  // directory created. Intent and build-log always exist in an active session; the
61
- // report is copied only when present — v2 `wrap` does not gate on it (D9), so a
61
+ // report is copied only when present — `wrap` does not gate on it (D9), so a
62
62
  // close-out without a report still archives the rest.
63
63
  export function archiveSession(root) {
64
64
  const dir = uniqueArchiveDir(root, `${today()}-${slugify(sessionTitle(root))}`);
@@ -24,6 +24,6 @@ export function build(cwd, args) {
24
24
  }
25
25
  writeFileSync(seamPath(root), `${parsed.seam.join('\n')}\n`);
26
26
  writeFileSync(stepPath(root), `${step}\n`);
27
- process.stdout.write(`plumbbob: building step ${step}. Seam (for orientation; not a lock in v2):\n${parsed.seam.map((p) => ` ${p}`).join('\n')}\n`);
27
+ process.stdout.write(`plumbbob: building step ${step}. Seam (for orientation; not a lock):\n${parsed.seam.map((p) => ` ${p}`).join('\n')}\n`);
28
28
  return 0;
29
29
  }
@@ -1,5 +1,5 @@
1
1
  // `plumbbob checkpoint [<n>] [-m <msg>]` — the executor-agnostic commit tick (D3).
2
- // Unlike v1 `done`, it does NOT require a STEP file: the step is whatever you pass,
2
+ // It does NOT require a STEP file: the step is whatever you pass,
3
3
  // else the in-flight STEP, else the next undone step in intent. It gates on a green
4
4
  // check, then commits any pending work (or records the existing HEAD when the tree
5
5
  // is already clean — the human's commit skill may have committed first), records the
@@ -1,8 +1,8 @@
1
- // `plumbbob wrap` (D9) — the v2 close-out, replacing the v1 four-verb
2
- // finish ceremony. It archives intent + build-log + report
1
+ // `plumbbob wrap` (D9) — the close-out: one verb does the whole thing.
2
+ // It archives intent + build-log + report
3
3
  // (the `/plumbbob:pb-wrap` skill writes the report by default) under .plumbbob/archive/,
4
- // clears the active files, and deletes the control state (STATE last). Unlike v1
5
- // `finish` there is NO refuse-without-report gate — guidance offers the artifact, it
4
+ // clears the active files, and deletes the control state (STATE last). There is
5
+ // NO refuse-without-report gate — guidance offers the artifact, it
6
6
  // does not wall the exit. Archive-then-clear, never destroy (C4); git untouched (C5).
7
7
  import { appendFileSync, existsSync, readFileSync, rmSync } from 'node:fs';
8
8
  import { join, relative } from 'node:path';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plumbbob",
3
- "version": "0.4.13",
3
+ "version": "0.4.14",
4
4
  "description": "Attention-first build process: 11 skills + a CLI that keep you the decider — guidance, not enforcement.",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -27,7 +27,7 @@ at the pause for your approval. **Re-firing `/pb-build` is itself the clock tick
27
27
  the next undone, planned step in `.plumbbob/intent.md`. If there is no planned step
28
28
  to build, stop and tell the human to `/pb-step` first.
29
29
  2. **Enter the step.** Run `plumbbob build <n>` (records the in-flight STEP +
30
- SEAM so `/pb-status` shows the step in flight; in v2 the seam is awareness, not a
30
+ SEAM so `/pb-status` shows the step in flight; the seam is awareness, not a
31
31
  lock).
32
32
  3. **Read the plan.** Read the step's **done-when**, its **seam**, and the
33
33
  **Decisions** and **Constraints** in `intent.md`. Build to *that* — the deciding
@@ -46,8 +46,8 @@ holes `/pb-refine` surfaces, and as blockers fold in during BUILD.)*
46
46
 
47
47
  *(The build plan. `/pb-plan` authors the **whole list up front** — each step a small,
48
48
  verifiable increment with its own **done-when** and **seam** (the paths it will touch,
49
- which `/pb-build` records in `.plumbbob/SEAM` for orientation — awareness, not a lock
50
- in v2). Then drive `/pb-build` until done. Later steps may be fuzzier than the first;
49
+ which `/pb-build` records in `.plumbbob/SEAM` for orientation — awareness, not a lock).
50
+ Then drive `/pb-build` until done. Later steps may be fuzzier than the first;
51
51
  sharpen the next one just-in-time with `/pb-step` (empty input auto-syncs it), and use
52
52
  `/pb-refine` to repair the whole plan when a blocker rewrites it.)*
53
53