plumbbob 0.9.3 → 0.10.0
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 +92 -89
- package/dist/cli-core.js +25 -8
- package/dist/cli.js +1 -1
- package/dist/lib/agents.js +26 -26
- package/dist/lib/buildlog.js +11 -11
- package/dist/lib/buildlogsync.js +8 -8
- package/dist/lib/check.js +55 -22
- package/dist/lib/commitbody.js +72 -0
- package/dist/lib/commitmsg.js +7 -7
- package/dist/lib/git.js +44 -15
- package/dist/lib/intent.js +21 -20
- package/dist/lib/latch.js +19 -19
- package/dist/lib/orient.js +36 -17
- package/dist/lib/reentry.js +70 -0
- package/dist/lib/settings.js +16 -16
- package/dist/lib/sidecar.js +54 -54
- package/dist/lib/templates.js +1 -1
- package/dist/verbs/agent.js +27 -27
- package/dist/verbs/build.js +9 -9
- package/dist/verbs/check.js +6 -6
- package/dist/verbs/checkpoint.js +48 -47
- package/dist/verbs/doctor.js +31 -30
- package/dist/verbs/finish.js +28 -41
- package/dist/verbs/handoff.js +9 -8
- package/dist/verbs/init.js +9 -9
- package/dist/verbs/park.js +3 -3
- package/dist/verbs/recover.js +297 -0
- package/dist/verbs/revert.js +13 -13
- package/dist/verbs/spike.js +25 -19
- package/dist/verbs/start.js +49 -19
- package/dist/verbs/status.js +8 -8
- package/dist/verbs/turn.js +16 -16
- package/dist/verbs/use.js +4 -4
- package/hooks/post-edit.sh +4 -4
- package/hooks/pre-bash-commit.sh +3 -3
- package/node_modules/checkride/.claude-plugin/plugin.json +11 -0
- package/node_modules/checkride/CHANGELOG.md +1404 -0
- package/node_modules/checkride/LICENSE +201 -21
- package/node_modules/checkride/README.md +197 -38
- package/node_modules/checkride/dist/__tests__/fixtures/released-stanzas.d.ts +15 -0
- package/node_modules/checkride/dist/__tests__/fixtures/released-stanzas.d.ts.map +1 -0
- package/node_modules/checkride/dist/__tests__/fixtures/released-stanzas.js +17 -0
- package/node_modules/checkride/dist/__tests__/fixtures/released-stanzas.js.map +1 -0
- package/node_modules/checkride/dist/adapters.d.ts +30 -10
- package/node_modules/checkride/dist/adapters.d.ts.map +1 -1
- package/node_modules/checkride/dist/adapters.js +62 -23
- package/node_modules/checkride/dist/adapters.js.map +1 -1
- package/node_modules/checkride/dist/agent-setup/claude.d.ts +88 -0
- package/node_modules/checkride/dist/agent-setup/claude.d.ts.map +1 -0
- package/node_modules/checkride/dist/agent-setup/claude.js +305 -0
- package/node_modules/checkride/dist/agent-setup/claude.js.map +1 -0
- package/node_modules/checkride/dist/agent-setup/command.d.ts +43 -0
- package/node_modules/checkride/dist/agent-setup/command.d.ts.map +1 -0
- package/node_modules/checkride/dist/agent-setup/command.js +77 -0
- package/node_modules/checkride/dist/agent-setup/command.js.map +1 -0
- package/node_modules/checkride/dist/agent-setup/cursor.d.ts +69 -0
- package/node_modules/checkride/dist/agent-setup/cursor.d.ts.map +1 -0
- package/node_modules/checkride/dist/agent-setup/cursor.js +247 -0
- package/node_modules/checkride/dist/agent-setup/cursor.js.map +1 -0
- package/node_modules/checkride/dist/agent-setup/files.d.ts +50 -0
- package/node_modules/checkride/dist/agent-setup/files.d.ts.map +1 -0
- package/node_modules/checkride/dist/agent-setup/files.js +80 -0
- package/node_modules/checkride/dist/agent-setup/files.js.map +1 -0
- package/node_modules/checkride/dist/agent-setup/harness.d.ts +101 -0
- package/node_modules/checkride/dist/agent-setup/harness.d.ts.map +1 -0
- package/node_modules/checkride/dist/agent-setup/harness.js +93 -0
- package/node_modules/checkride/dist/agent-setup/harness.js.map +1 -0
- package/node_modules/checkride/dist/agent-setup/hook.d.ts +45 -52
- package/node_modules/checkride/dist/agent-setup/hook.d.ts.map +1 -1
- package/node_modules/checkride/dist/agent-setup/hook.js +64 -95
- package/node_modules/checkride/dist/agent-setup/hook.js.map +1 -1
- package/node_modules/checkride/dist/agent-setup/index.d.ts +10 -4
- package/node_modules/checkride/dist/agent-setup/index.d.ts.map +1 -1
- package/node_modules/checkride/dist/agent-setup/index.js +9 -4
- package/node_modules/checkride/dist/agent-setup/index.js.map +1 -1
- package/node_modules/checkride/dist/agent-setup/scripts.d.ts +81 -0
- package/node_modules/checkride/dist/agent-setup/scripts.d.ts.map +1 -0
- package/node_modules/checkride/dist/agent-setup/scripts.js +604 -0
- package/node_modules/checkride/dist/agent-setup/scripts.js.map +1 -0
- package/node_modules/checkride/dist/agent-setup/skills.d.ts +31 -0
- package/node_modules/checkride/dist/agent-setup/skills.d.ts.map +1 -0
- package/node_modules/checkride/dist/agent-setup/skills.js +56 -0
- package/node_modules/checkride/dist/agent-setup/skills.js.map +1 -0
- package/node_modules/checkride/dist/artifacts/configured.d.ts +30 -0
- package/node_modules/checkride/dist/artifacts/configured.d.ts.map +1 -0
- package/node_modules/checkride/dist/artifacts/configured.js +45 -0
- package/node_modules/checkride/dist/artifacts/configured.js.map +1 -0
- package/node_modules/checkride/dist/artifacts/format.d.ts +33 -0
- package/node_modules/checkride/dist/artifacts/format.d.ts.map +1 -0
- package/node_modules/checkride/dist/artifacts/format.js +56 -0
- package/node_modules/checkride/dist/artifacts/format.js.map +1 -0
- package/node_modules/checkride/dist/artifacts/freshness.d.ts +32 -0
- package/node_modules/checkride/dist/artifacts/freshness.d.ts.map +1 -0
- package/node_modules/checkride/dist/artifacts/freshness.js +37 -0
- package/node_modules/checkride/dist/artifacts/freshness.js.map +1 -0
- package/node_modules/checkride/dist/artifacts/index.d.ts +22 -0
- package/node_modules/checkride/dist/artifacts/index.d.ts.map +1 -0
- package/node_modules/checkride/dist/artifacts/index.js +19 -0
- package/node_modules/checkride/dist/artifacts/index.js.map +1 -0
- package/node_modules/checkride/dist/artifacts/json.d.ts +31 -0
- package/node_modules/checkride/dist/artifacts/json.d.ts.map +1 -0
- package/node_modules/checkride/dist/artifacts/json.js +47 -0
- package/node_modules/checkride/dist/artifacts/json.js.map +1 -0
- package/node_modules/checkride/dist/artifacts/raw.d.ts +60 -0
- package/node_modules/checkride/dist/artifacts/raw.d.ts.map +1 -0
- package/node_modules/checkride/dist/artifacts/raw.js +91 -0
- package/node_modules/checkride/dist/artifacts/raw.js.map +1 -0
- package/node_modules/checkride/dist/artifacts/summary.d.ts +69 -0
- package/node_modules/checkride/dist/artifacts/summary.d.ts.map +1 -0
- package/node_modules/checkride/dist/artifacts/summary.js +108 -0
- package/node_modules/checkride/dist/artifacts/summary.js.map +1 -0
- package/node_modules/checkride/dist/atomic.d.ts +16 -1
- package/node_modules/checkride/dist/atomic.d.ts.map +1 -1
- package/node_modules/checkride/dist/atomic.js +25 -3
- package/node_modules/checkride/dist/atomic.js.map +1 -1
- package/node_modules/checkride/dist/baseline/fallow.d.ts +9 -5
- package/node_modules/checkride/dist/baseline/fallow.d.ts.map +1 -1
- package/node_modules/checkride/dist/baseline/fallow.js +163 -60
- package/node_modules/checkride/dist/baseline/fallow.js.map +1 -1
- package/node_modules/checkride/dist/baseline/fingerprint.d.ts +20 -11
- package/node_modules/checkride/dist/baseline/fingerprint.d.ts.map +1 -1
- package/node_modules/checkride/dist/baseline/fingerprint.js +73 -23
- package/node_modules/checkride/dist/baseline/fingerprint.js.map +1 -1
- package/node_modules/checkride/dist/baseline/history.d.ts +98 -0
- package/node_modules/checkride/dist/baseline/history.d.ts.map +1 -0
- package/node_modules/checkride/dist/baseline/history.js +232 -0
- package/node_modules/checkride/dist/baseline/history.js.map +1 -0
- package/node_modules/checkride/dist/baseline/index.d.ts +7 -5
- package/node_modules/checkride/dist/baseline/index.d.ts.map +1 -1
- package/node_modules/checkride/dist/baseline/index.js +5 -4
- package/node_modules/checkride/dist/baseline/index.js.map +1 -1
- package/node_modules/checkride/dist/baseline/store.d.ts +41 -10
- package/node_modules/checkride/dist/baseline/store.d.ts.map +1 -1
- package/node_modules/checkride/dist/baseline/store.js +65 -24
- package/node_modules/checkride/dist/baseline/store.js.map +1 -1
- package/node_modules/checkride/dist/baseline-command.d.ts +5 -5
- package/node_modules/checkride/dist/baseline-command.js +7 -7
- package/node_modules/checkride/dist/baseline-command.js.map +1 -1
- package/node_modules/checkride/dist/cli.d.ts +21 -4
- package/node_modules/checkride/dist/cli.d.ts.map +1 -1
- package/node_modules/checkride/dist/cli.js +350 -36
- package/node_modules/checkride/dist/cli.js.map +1 -1
- package/node_modules/checkride/dist/config.d.ts +114 -9
- package/node_modules/checkride/dist/config.d.ts.map +1 -1
- package/node_modules/checkride/dist/config.js +142 -23
- package/node_modules/checkride/dist/config.js.map +1 -1
- package/node_modules/checkride/dist/digest/digest.d.ts +5 -5
- package/node_modules/checkride/dist/digest/digest.js +6 -6
- package/node_modules/checkride/dist/digest/index.d.ts +2 -2
- package/node_modules/checkride/dist/digest/index.js +2 -2
- package/node_modules/checkride/dist/doctor.d.ts +27 -6
- package/node_modules/checkride/dist/doctor.d.ts.map +1 -1
- package/node_modules/checkride/dist/doctor.js +231 -27
- package/node_modules/checkride/dist/doctor.js.map +1 -1
- package/node_modules/checkride/dist/gate.d.ts +180 -0
- package/node_modules/checkride/dist/gate.d.ts.map +1 -0
- package/node_modules/checkride/dist/gate.js +617 -0
- package/node_modules/checkride/dist/gate.js.map +1 -0
- package/node_modules/checkride/dist/init.d.ts +79 -12
- package/node_modules/checkride/dist/init.d.ts.map +1 -1
- package/node_modules/checkride/dist/init.js +385 -81
- package/node_modules/checkride/dist/init.js.map +1 -1
- package/node_modules/checkride/dist/json.d.ts +21 -0
- package/node_modules/checkride/dist/json.d.ts.map +1 -0
- package/node_modules/checkride/dist/json.js +21 -0
- package/node_modules/checkride/dist/json.js.map +1 -0
- package/node_modules/checkride/dist/links.d.ts +31 -5
- package/node_modules/checkride/dist/links.d.ts.map +1 -1
- package/node_modules/checkride/dist/links.js +141 -32
- package/node_modules/checkride/dist/links.js.map +1 -1
- package/node_modules/checkride/dist/node-pin.d.ts +129 -0
- package/node_modules/checkride/dist/node-pin.d.ts.map +1 -0
- package/node_modules/checkride/dist/node-pin.js +211 -0
- package/node_modules/checkride/dist/node-pin.js.map +1 -0
- package/node_modules/checkride/dist/orchestrator.d.ts +53 -10
- package/node_modules/checkride/dist/orchestrator.d.ts.map +1 -1
- package/node_modules/checkride/dist/orchestrator.js +312 -113
- package/node_modules/checkride/dist/orchestrator.js.map +1 -1
- package/node_modules/checkride/dist/pack.d.ts +8 -9
- package/node_modules/checkride/dist/pack.d.ts.map +1 -1
- package/node_modules/checkride/dist/pack.js +53 -17
- package/node_modules/checkride/dist/pack.js.map +1 -1
- package/node_modules/checkride/dist/pm/detect.d.ts +6 -1
- package/node_modules/checkride/dist/pm/detect.d.ts.map +1 -1
- package/node_modules/checkride/dist/pm/detect.js +6 -1
- package/node_modules/checkride/dist/pm/detect.js.map +1 -1
- package/node_modules/checkride/dist/pm/index.d.ts +7 -2
- package/node_modules/checkride/dist/pm/index.d.ts.map +1 -1
- package/node_modules/checkride/dist/pm/index.js +6 -2
- package/node_modules/checkride/dist/pm/index.js.map +1 -1
- package/node_modules/checkride/dist/pm/launch.d.ts +72 -0
- package/node_modules/checkride/dist/pm/launch.d.ts.map +1 -0
- package/node_modules/checkride/dist/pm/launch.js +108 -0
- package/node_modules/checkride/dist/pm/launch.js.map +1 -0
- package/node_modules/checkride/dist/pm/tools.d.ts +73 -0
- package/node_modules/checkride/dist/pm/tools.d.ts.map +1 -0
- package/node_modules/checkride/dist/pm/tools.js +124 -0
- package/node_modules/checkride/dist/pm/tools.js.map +1 -0
- package/node_modules/checkride/dist/pm/translate.d.ts +35 -9
- package/node_modules/checkride/dist/pm/translate.d.ts.map +1 -1
- package/node_modules/checkride/dist/pm/translate.js +78 -18
- package/node_modules/checkride/dist/pm/translate.js.map +1 -1
- package/node_modules/checkride/dist/proc.d.ts +30 -0
- package/node_modules/checkride/dist/proc.d.ts.map +1 -0
- package/node_modules/checkride/dist/proc.js +42 -0
- package/node_modules/checkride/dist/proc.js.map +1 -0
- package/node_modules/checkride/dist/qa/cli.d.ts +20 -0
- package/node_modules/checkride/dist/qa/cli.d.ts.map +1 -0
- package/node_modules/checkride/dist/qa/cli.js +24 -0
- package/node_modules/checkride/dist/qa/cli.js.map +1 -0
- package/node_modules/checkride/dist/qa/dead.d.ts +39 -0
- package/node_modules/checkride/dist/qa/dead.d.ts.map +1 -0
- package/node_modules/checkride/dist/qa/dead.js +88 -0
- package/node_modules/checkride/dist/qa/dead.js.map +1 -0
- package/node_modules/checkride/dist/qa/dupes.d.ts +45 -0
- package/node_modules/checkride/dist/qa/dupes.d.ts.map +1 -0
- package/node_modules/checkride/dist/qa/dupes.js +62 -0
- package/node_modules/checkride/dist/qa/dupes.js.map +1 -0
- package/node_modules/checkride/dist/qa/health.d.ts +85 -0
- package/node_modules/checkride/dist/qa/health.d.ts.map +1 -0
- package/node_modules/checkride/dist/qa/health.js +109 -0
- package/node_modules/checkride/dist/qa/health.js.map +1 -0
- package/node_modules/checkride/dist/qa/index.d.ts +23 -0
- package/node_modules/checkride/dist/qa/index.d.ts.map +1 -0
- package/node_modules/checkride/dist/qa/index.js +22 -0
- package/node_modules/checkride/dist/qa/index.js.map +1 -0
- package/node_modules/checkride/dist/qa/mutation.d.ts +80 -0
- package/node_modules/checkride/dist/qa/mutation.d.ts.map +1 -0
- package/node_modules/checkride/dist/qa/mutation.js +195 -0
- package/node_modules/checkride/dist/qa/mutation.js.map +1 -0
- package/node_modules/checkride/dist/qa/qa.d.ts +71 -0
- package/node_modules/checkride/dist/qa/qa.d.ts.map +1 -0
- package/node_modules/checkride/dist/qa/qa.js +158 -0
- package/node_modules/checkride/dist/qa/qa.js.map +1 -0
- package/node_modules/checkride/dist/qa/read.d.ts +40 -0
- package/node_modules/checkride/dist/qa/read.d.ts.map +1 -0
- package/node_modules/checkride/dist/qa/read.js +47 -0
- package/node_modules/checkride/dist/qa/read.js.map +1 -0
- package/node_modules/checkride/dist/qa/render.d.ts +26 -0
- package/node_modules/checkride/dist/qa/render.d.ts.map +1 -0
- package/node_modules/checkride/dist/qa/render.js +310 -0
- package/node_modules/checkride/dist/qa/render.js.map +1 -0
- package/node_modules/checkride/dist/recover.d.ts +48 -0
- package/node_modules/checkride/dist/recover.d.ts.map +1 -0
- package/node_modules/checkride/dist/recover.js +220 -0
- package/node_modules/checkride/dist/recover.js.map +1 -0
- package/node_modules/checkride/dist/security.d.ts +45 -0
- package/node_modules/checkride/dist/security.d.ts.map +1 -0
- package/node_modules/checkride/dist/security.js +86 -0
- package/node_modules/checkride/dist/security.js.map +1 -0
- package/node_modules/checkride/dist/smoke.d.ts +6 -6
- package/node_modules/checkride/dist/smoke.js +6 -6
- package/node_modules/checkride/dist/snippets.d.ts +27 -30
- package/node_modules/checkride/dist/snippets.d.ts.map +1 -1
- package/node_modules/checkride/dist/snippets.js +26 -30
- package/node_modules/checkride/dist/snippets.js.map +1 -1
- package/node_modules/checkride/dist/tool-json.d.ts +33 -0
- package/node_modules/checkride/dist/tool-json.d.ts.map +1 -0
- package/node_modules/checkride/dist/tool-json.js +58 -0
- package/node_modules/checkride/dist/tool-json.js.map +1 -0
- package/node_modules/checkride/dist/triage/cli.d.ts +21 -0
- package/node_modules/checkride/dist/triage/cli.d.ts.map +1 -0
- package/node_modules/checkride/dist/triage/cli.js +26 -0
- package/node_modules/checkride/dist/triage/cli.js.map +1 -0
- package/node_modules/checkride/dist/triage/doctor-fold.d.ts +51 -0
- package/node_modules/checkride/dist/triage/doctor-fold.d.ts.map +1 -0
- package/node_modules/checkride/dist/triage/doctor-fold.js +88 -0
- package/node_modules/checkride/dist/triage/doctor-fold.js.map +1 -0
- package/node_modules/checkride/dist/triage/env.d.ts +54 -0
- package/node_modules/checkride/dist/triage/env.d.ts.map +1 -0
- package/node_modules/checkride/dist/triage/env.js +81 -0
- package/node_modules/checkride/dist/triage/env.js.map +1 -0
- package/node_modules/checkride/dist/triage/gate.d.ts +61 -0
- package/node_modules/checkride/dist/triage/gate.d.ts.map +1 -0
- package/node_modules/checkride/dist/triage/gate.js +121 -0
- package/node_modules/checkride/dist/triage/gate.js.map +1 -0
- package/node_modules/checkride/dist/triage/index.d.ts +22 -0
- package/node_modules/checkride/dist/triage/index.d.ts.map +1 -0
- package/node_modules/checkride/dist/triage/index.js +20 -0
- package/node_modules/checkride/dist/triage/index.js.map +1 -0
- package/node_modules/checkride/dist/triage/render.d.ts +19 -0
- package/node_modules/checkride/dist/triage/render.d.ts.map +1 -0
- package/node_modules/checkride/dist/triage/render.js +419 -0
- package/node_modules/checkride/dist/triage/render.js.map +1 -0
- package/node_modules/checkride/dist/triage/triage.d.ts +83 -0
- package/node_modules/checkride/dist/triage/triage.d.ts.map +1 -0
- package/node_modules/checkride/dist/triage/triage.js +131 -0
- package/node_modules/checkride/dist/triage/triage.js.map +1 -0
- package/node_modules/checkride/package.json +18 -15
- package/node_modules/checkride/schema/checkride.config.schema.json +70 -5
- package/node_modules/checkride/schema/checkride.summary.schema.json +1 -1
- package/node_modules/checkride/skills/check/SKILL.md +265 -0
- package/node_modules/checkride/skills/qa/SKILL.md +231 -0
- package/node_modules/checkride/templates/shared/cspell.json +1 -0
- package/node_modules/checkride/templates/shared/oxlintrc.json +1 -1
- package/node_modules/checkride/templates/shared/styles/Repo/Drift.yml +41 -0
- package/node_modules/checkride/templates/shared/styles/Repo/Latin.yml +14 -0
- package/node_modules/checkride/templates/shared/styles/Repo/LyHyphen.yml +28 -0
- package/node_modules/checkride/templates/shared/styles/Repo/Minted.yml +33 -0
- package/node_modules/checkride/templates/shared/styles/Repo/ThereIs.yml +16 -0
- package/node_modules/checkride/templates/shared/styles/Repo/Weasel.yml +26 -0
- package/node_modules/checkride/templates/shared/vale.ini +34 -0
- package/package.json +10 -9
- package/skills/build/SKILL.md +85 -76
- package/skills/doctor/SKILL.md +11 -11
- package/skills/finish/SKILL.md +21 -18
- package/skills/harvest/SKILL.md +13 -11
- package/skills/park/SKILL.md +10 -10
- package/skills/plan/SKILL.md +69 -59
- package/skills/recover/SKILL.md +28 -0
- package/skills/refine/SKILL.md +21 -18
- package/skills/revert/SKILL.md +6 -6
- package/skills/spike/SKILL.md +9 -9
- package/skills/status/SKILL.md +5 -5
- package/skills/step/SKILL.md +20 -15
- package/skills/verify/SKILL.md +56 -46
- package/templates/build-log.md +7 -7
- package/templates/intent.md +52 -41
- package/templates/spike-report.md +10 -10
package/skills/verify/SKILL.md
CHANGED
|
@@ -1,65 +1,69 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: verify
|
|
3
|
-
description: "The verify tick
|
|
3
|
+
description: "The verify tick: run the check, self-review the diff against intent, validate the step's done-when, pause for your approval, then checkpoint. Executor-agnostic: it reads the diff, not who wrote it."
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
allowed-tools: Read, Bash(plumbbob status:*), Bash(plumbbob handoff:*), Bash(plumbbob check:*), Bash(plumbbob checkpoint:*), Bash(plumbbob agent:*), Bash(git diff:*), Bash(git status:*)
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# PlumbBob
|
|
8
|
+
# PlumbBob: verify a step (the tick)
|
|
9
9
|
|
|
10
10
|
Current session state (injected when this skill runs): !`plumbbob status 2>/dev/null || echo "plumbbob CLI not on PATH in this session. Marketplace install: confirm the plugin is enabled in /plugin, then /reload-plugins. Skills-dir/global install: npm i -g plumbbob && plumbbob init."`
|
|
11
11
|
|
|
12
|
-
This is the **tick
|
|
13
|
-
the current diff
|
|
14
|
-
this skill verifies it the same way: **it reads the diff, not the author
|
|
12
|
+
This is the **tick**: the one beat where the human is the clock. Whatever produced
|
|
13
|
+
the current diff (`/plumbbob:build`, your own hands, a vibe session, another harness),
|
|
14
|
+
this skill verifies it the same way: **it reads the diff, not the author**
|
|
15
|
+
([D3 (author-blind-executor)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d3)).
|
|
15
16
|
|
|
16
17
|
## What this skill does, in order
|
|
17
18
|
|
|
18
|
-
1. **Check.** Run `plumbbob check` (the heavy gate
|
|
19
|
+
1. **Check.** Run `plumbbob check` (the heavy gate: checkride unless the repo
|
|
19
20
|
configures a `check` override). If it comes back **red**, stop here: the gate
|
|
20
|
-
names the failing slots and where each tool's raw output landed
|
|
21
|
+
names the failing slots and where each tool's raw output landed: read
|
|
21
22
|
`.check/summary.json`, then the failing slot's own file (`.check/<slot>.json` or
|
|
22
23
|
`.check/<slot>.stdout.txt`) for the actual diagnostics instead of scraping
|
|
23
|
-
scrollback. Report what failed and do **not** pause for approval
|
|
24
|
+
scrollback. Report what failed and do **not** pause for approval; there is
|
|
24
25
|
nothing to approve yet. The human fixes it and re-invokes. (Exit 2 means the gate
|
|
25
|
-
itself broke
|
|
26
|
+
itself broke: a harness problem to surface, not a code failure.)
|
|
26
27
|
2. **Run any bound `after`-agents** *(optional)*. If the build's `harness.json`
|
|
27
28
|
binds agents to this step's `after` slot, run `plumbbob agent run --step <n> --mode
|
|
28
|
-
after`. Their envelopes are **advisory input to the self-review, never a gate
|
|
29
|
+
after`. Their envelopes are **advisory input to the self-review, never a gate**;
|
|
29
30
|
`plumbbob check` already gated in step 1, and an `after`-agent that could fail a step
|
|
30
|
-
|
|
31
|
-
`summary`/`body` into the review below; route a non-`done` one by its status
|
|
32
|
-
`blocked` agent couldn't finish
|
|
33
|
-
|
|
31
|
+
would be the old lock back in another form. Fold a `done` envelope's
|
|
32
|
+
`summary`/`body` into the review below; route a non-`done` one by its status. A
|
|
33
|
+
`blocked` agent couldn't finish: surface its `notes`, let the human unblock, re-run.
|
|
34
|
+
A `drift` agent found the plan no longer matches reality: stop and send the human to
|
|
34
35
|
`/plumbbob:refine` to repair the plan before checkpointing. No binding, or no harness, is a
|
|
35
36
|
clean no-op.
|
|
36
37
|
3. **Self-review** *(a single structured read)*. Read `git diff` and
|
|
37
38
|
`.plumbbob/intent.md`, then in one pass check the diff against:
|
|
38
|
-
- the current step's **done-when** criterion
|
|
39
|
-
- the **Decisions
|
|
40
|
-
- the **Constraints
|
|
41
|
-
- any **`after`-agent findings** from step 2
|
|
42
|
-
Surface every mismatch plainly
|
|
39
|
+
- the current step's **done-when** criterion: is it actually met?
|
|
40
|
+
- the **Decisions**: does anything contradict a settled call?
|
|
41
|
+
- the **Constraints**: are any violated?
|
|
42
|
+
- any **`after`-agent findings** from step 2: advisory, weigh them, don't defer to them.
|
|
43
|
+
Surface every mismatch plainly, and when you cite a Decision or Constraint, carry its
|
|
44
|
+
slug from `intent.md` (`C1 (no-new-deps)`, never a bare `C1`) so each finding reads
|
|
45
|
+
on its own. You are reviewing, not building; do not fix anything.
|
|
43
46
|
4. **Validate.** State, yes or no, whether the step's done-when is met, with the evidence.
|
|
44
47
|
5. **PAUSE.** Present the check result, the self-review (with any `after`-agent
|
|
45
48
|
findings), and the validation, then
|
|
46
49
|
**stop and wait for the human's explicit approval.** This is the convergence beat;
|
|
47
50
|
the human is the clock. Never checkpoint without it.
|
|
48
|
-
- **Reconcile a drifted subject here, in the open
|
|
49
|
-
checkpoint subject (
|
|
50
|
-
title no longer describes
|
|
51
|
-
**presents** it at this pause for explicit approval: show
|
|
52
|
-
subject`, one line, as part of what the human OKs. This is
|
|
53
|
-
default
|
|
54
|
-
lands untouched. A silent `-m` swap is exactly the
|
|
55
|
-
|
|
51
|
+
- **Reconcile a drifted subject here, in the open.** The planned title *is* the
|
|
52
|
+
checkpoint subject ([D68 (conventional-subjects)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d68)). If the diff drifted from it (the
|
|
53
|
+
step landed something the title no longer describes), the body pass may propose a
|
|
54
|
+
corrected subject, but it **presents** it at this pause for explicit approval: show
|
|
55
|
+
`planned title → proposed subject`, one line, as part of what the human OKs. This is
|
|
56
|
+
the exception, not the default: with **nothing presented**, the deterministic
|
|
57
|
+
title-derived subject lands untouched. A silent `-m` swap is exactly the
|
|
58
|
+
agent-authored subject [D68 (conventional-subjects)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d68) refuses, so a reconcile is
|
|
59
|
+
*only ever* the visible, approved kind.
|
|
56
60
|
6. **Checkpoint** *(only after approval)*. Run `plumbbob checkpoint`: it makes the WIP
|
|
57
61
|
commit, records the SHA, flips the step to done, appends the step to the build-log's
|
|
58
|
-
`## Log`, and returns to DESIGN. The CLI owns the commit **subject**
|
|
59
|
-
`<type>(<scope>): <description>` composed from the step title and the build slug
|
|
62
|
+
`## Log`, and returns to DESIGN. The CLI owns the commit **subject** (a Conventional
|
|
63
|
+
`<type>(<scope>): <description>` composed from the step title and the build slug) and
|
|
60
64
|
leads the **body** with a `plumbbob step N` marker; you own the rest of the **body**.
|
|
61
|
-
Compose a body *proportional to the step*
|
|
62
|
-
paragraph on the what/why for a meatier one
|
|
65
|
+
Compose a body *proportional to the step* (a one-liner for a trivial change, a short
|
|
66
|
+
paragraph on the what/why for a meatier one) and pass it on stdin:
|
|
63
67
|
|
|
64
68
|
```bash
|
|
65
69
|
plumbbob checkpoint <n> --body <<'BODY'
|
|
@@ -67,11 +71,16 @@ this skill verifies it the same way: **it reads the diff, not the author**.
|
|
|
67
71
|
BODY
|
|
68
72
|
```
|
|
69
73
|
|
|
70
|
-
|
|
74
|
+
Redirect the heredoc *into* the command (`--body <<'BODY'`). Do **not** pass it as
|
|
75
|
+
an argument value (`--body "$(cat <<'BODY'…)"`): `--body` ignores an argument and
|
|
76
|
+
always reads stdin. Under an agent harness that stdin is a socket, and `--body` now
|
|
77
|
+
refuses rather than blocking on one; the refusal names this exact heredoc form.
|
|
78
|
+
|
|
79
|
+
Do **not** run a TIL scan or reach for a separate commit skill; the body is yours to
|
|
71
80
|
write in one breath. Omit `--body` entirely and the CLI writes a deterministic body
|
|
72
81
|
(done-when + seam + diffstat) on its own. Either way, do **not** bump the version or
|
|
73
|
-
touch the changelog
|
|
74
|
-
drifted subject the human approved, land *that* subject by adding `-m "<subject>"
|
|
82
|
+
touch the changelog; that is the human's `/version` call. And if step 5 surfaced a
|
|
83
|
+
drifted subject the human approved, land *that* subject by adding `-m "<subject>"`,
|
|
75
84
|
overriding the title-derived default for this one commit; unpresented, the CLI's
|
|
76
85
|
deterministic subject stands.
|
|
77
86
|
7. **Hand off with the next model** *(once the checkpoint lands)*. `plumbbob checkpoint`
|
|
@@ -79,7 +88,7 @@ this skill verifies it the same way: **it reads the diff, not the author**.
|
|
|
79
88
|
step gone from in-flight it renders `step N checkpointed — back at the boundary` and
|
|
80
89
|
points at the **next undone step**, carrying that step's `- model:` recommendation (the
|
|
81
90
|
plan's smallest-model-that-fits call) so the human knows which `/model` to select before
|
|
82
|
-
|
|
91
|
+
running `/plumbbob:build` again. This matters most across a context boundary: a fresh window
|
|
83
92
|
inherits the *session's* model, not the plan's suggestion, so this line is what carries
|
|
84
93
|
the recommendation over. The CLI owns the block, so it can't drift from what `plumbbob
|
|
85
94
|
status` reports; no `- model:` line means any model will do. Guidance, never a gate.
|
|
@@ -87,17 +96,18 @@ this skill verifies it the same way: **it reads the diff, not the author**.
|
|
|
87
96
|
## The latch makes the pause real
|
|
88
97
|
|
|
89
98
|
When this session runs under plumbbob's turn hook, `plumbbob checkpoint` **refuses to
|
|
90
|
-
land a step in the same turn it was entered
|
|
91
|
-
an error to route around. If the checkpoint prints
|
|
92
|
-
since this step began
|
|
99
|
+
land a step in the same turn it was entered**, and that refusal **is** this pause, not
|
|
100
|
+
an error to route around. If the checkpoint prints `checkpoint refused — no human turn
|
|
101
|
+
since this step began`, you have reached the pause the hard way: present the diff and
|
|
93
102
|
the self-review, **end the turn**, and the human's next message is the tick that lets
|
|
94
|
-
the checkpoint land when you
|
|
95
|
-
land
|
|
103
|
+
the checkpoint land when you run it again. **Never reach for a raw `git commit` to force the
|
|
104
|
+
land**; that forges the very record the latch exists to keep honest, and the
|
|
96
105
|
commit-ask hook asks the human about it anyway. The refusal is a healthy latch doing its
|
|
97
106
|
job on the *record* while the *work* plane stays free; a `/plumbbob:build --auto` or
|
|
98
|
-
a typed step range in the human's own prompt is the only self-approval
|
|
107
|
+
a typed step range in the human's own prompt is the only self-approval; **never write
|
|
99
108
|
`auto` into a settings file to unlock the land; the latch ignores a model-minted grant
|
|
100
|
-
(D67), so ask the human to
|
|
109
|
+
([D67 (auto-not-a-grant)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d67)), so ask the human to type `/plumbbob:build --auto` again
|
|
110
|
+
instead.**
|
|
101
111
|
|
|
102
112
|
## The hard contracts
|
|
103
113
|
|
|
@@ -108,15 +118,15 @@ a typed step range in the human's own prompt is the only self-approval — **nev
|
|
|
108
118
|
- **Red means stop, not pause.** A failing check is not an approval decision; report
|
|
109
119
|
it and end your turn.
|
|
110
120
|
- **You review; you do not build.** If the self-review finds a problem, surface it
|
|
111
|
-
and stop
|
|
121
|
+
and stop; fixing is a new build beat, not part of verify.
|
|
112
122
|
- **`after`-agents advise; they never gate**. Their output feeds the
|
|
113
|
-
self-review
|
|
123
|
+
self-review; checkride gates, the human approves. `blocked` → unblock and re-run;
|
|
114
124
|
`drift` → `/plumbbob:refine` before checkpointing. No code path makes them blocking.
|
|
115
125
|
- **A refused checkpoint is the pause, never a workaround.** Under the turn
|
|
116
|
-
hook a same-turn checkpoint is refused *by design
|
|
126
|
+
hook a same-turn checkpoint is refused *by design*: present the diff, **end the
|
|
117
127
|
turn**, and let the human's next message re-tick it. Never route around it with a raw
|
|
118
128
|
`git commit`; the latch guards the record, not the work.
|
|
119
129
|
- **Close with the next model.** After the checkpoint lands, run `plumbbob handoff` and
|
|
120
|
-
relay its block
|
|
130
|
+
relay its block; it cites the completed step and the next undone step, and surfaces that
|
|
121
131
|
next step's `- model:` recommendation when it has one, which is what a fresh context
|
|
122
132
|
window needs to pick the right `/model`. Guidance, never a gate.
|
package/templates/build-log.md
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
<!--
|
|
2
|
-
build-log.md
|
|
2
|
+
build-log.md: your live ledger for execution. Append constantly; reorganize at
|
|
3
3
|
step boundaries. The antidote to "my plan got lost in the noise."
|
|
4
4
|
|
|
5
5
|
Steps : where you are. One step in flight at a time. CLI-maintained: `build`,
|
|
6
6
|
`checkpoint`, and `revert` keep this mirror and the Current step line
|
|
7
|
-
in sync with intent.md
|
|
7
|
+
in sync with intent.md; you never hand-edit them.
|
|
8
8
|
Park list : where ideas go so you do not chase them. CAPTURE, never act inline.
|
|
9
9
|
Harvest : the boundary ritual that keeps you on one branch.
|
|
10
10
|
Log : the build's history. `plumbbob checkpoint` appends a line per step as it
|
|
11
11
|
lands; feeds the /plumbbob:finish report, which rides the branch into the PR.
|
|
12
12
|
-->
|
|
13
13
|
|
|
14
|
-
# Build log
|
|
14
|
+
# Build log: {{TITLE}}
|
|
15
15
|
|
|
16
16
|
**Current step:** none (at the boundary)
|
|
17
17
|
**Heavy check:** {{CHECK}}
|
|
18
18
|
|
|
19
19
|
## Steps
|
|
20
20
|
|
|
21
|
-
*(Mirror of intent.md's Steps, with live status
|
|
21
|
+
*(Mirror of intent.md's Steps, with live status; CLI-maintained, not hand-edited.
|
|
22
22
|
`build`/`checkpoint`/`revert` re-render this from intent.md, and set the Current step
|
|
23
|
-
line above. Only ONE step is in flight; a step is done only after a checkpoint
|
|
23
|
+
line above. Only ONE step is in flight; a step is done only after a checkpoint:
|
|
24
24
|
check green + checkpoint taken, via `/plumbbob:verify` or `/plumbbob:build`.)*
|
|
25
25
|
|
|
26
26
|
- ☐ 1. <step>
|
|
@@ -52,8 +52,8 @@ Harvest results this boundary:
|
|
|
52
52
|
## Log
|
|
53
53
|
|
|
54
54
|
*(The build's history, oldest first. `plumbbob checkpoint` appends a dated line here
|
|
55
|
-
every time a step lands
|
|
55
|
+
every time a step lands (via `/plumbbob:build` or `/plumbbob:verify`), so this
|
|
56
56
|
fills in as you go, not at the end. Add your own decision/event lines too: this is what
|
|
57
|
-
you point at to say "I did that
|
|
57
|
+
you point at to say "I did that: the LLM helped, but those were my calls."
|
|
58
58
|
`/plumbbob:finish` reads this for the report; `plumbbob finish` commits it with the build
|
|
59
59
|
folder, so it rides the branch into the PR.)*
|
package/templates/intent.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!--
|
|
2
|
-
intent.md
|
|
2
|
+
intent.md: your canonical intent, written in DESIGN before any code. This is the
|
|
3
3
|
head; the chat is the hand. When the model floods you, read this, not your memory.
|
|
4
4
|
|
|
5
5
|
Size to the work: a small change fills Frame + a couple of Decisions and deletes
|
|
@@ -7,8 +7,8 @@ the rest; a medium feature fills it all. Opinionated where decided, explicit whe
|
|
|
7
7
|
open. If the implementor (you-later, or the LLM) has to guess, the doc failed.
|
|
8
8
|
|
|
9
9
|
One rule runs through the whole doc: compress what's settled; expand what's pending.
|
|
10
|
-
Decisions and Constraints stay one line each
|
|
11
|
-
so their tokens recur. Open questions expand into plain-then-lean prose
|
|
10
|
+
Decisions and Constraints stay one line each; they re-inject into every build step,
|
|
11
|
+
so their tokens recur. Open questions expand into plain-then-lean prose; a human
|
|
12
12
|
reads them once, to decide, and that legibility buys back a chat round-trip.
|
|
13
13
|
-->
|
|
14
14
|
|
|
@@ -16,11 +16,11 @@ reads them once, to decide, and that legibility buys back a chat round-trip.
|
|
|
16
16
|
|
|
17
17
|
**Phase** (your own bookkeeping while framing): frame
|
|
18
18
|
**Size:** tiny | small | medium
|
|
19
|
-
**Scope:** <short-scope> <!-- the build's default commit scope (
|
|
19
|
+
**Scope:** <short-scope> <!-- the build's default commit scope (plumbbob [D68 (conventional-subjects)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d68)): a short feature-level name each step's own `(scope)` overrides. Leave the `<…>` placeholder (or blank) and it parses as absent; commits fall through to the build slug. -->
|
|
20
20
|
|
|
21
21
|
## Frame
|
|
22
22
|
|
|
23
|
-
*(You, on paper first. The problem in plain words
|
|
23
|
+
*(You, on paper first. The problem in plain words, before any solution.)*
|
|
24
24
|
|
|
25
25
|
- **Problem:** <what is wrong or missing, and why it matters>
|
|
26
26
|
- **Smallest thing that solves it:** <the minimal change, not the ideal system>
|
|
@@ -37,84 +37,95 @@ reads them once, to decide, and that legibility buys back a chat round-trip.
|
|
|
37
37
|
|
|
38
38
|
## Decisions
|
|
39
39
|
|
|
40
|
-
*(One line each
|
|
41
|
-
holes `/plumbbob:refine` surfaces, and as blockers fold in during BUILD.
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
*(One line each: settled, not re-litigated in the chat. Grows as you resolve the
|
|
41
|
+
holes `/plumbbob:refine` surfaces, and as blockers fold in during BUILD. **Anchor and slug
|
|
42
|
+
each item where it is born**: a two- or three-word slug, and an `<a id="…">` for
|
|
43
|
+
references to land on; then cite it from anywhere else in this file as
|
|
44
|
+
`[D1 (slug-here)](#d1)`, carrying that same slug verbatim. One link, one glance: a later
|
|
45
|
+
`D4` never decays into a bare number a cold reader has to hunt down.)*
|
|
45
46
|
|
|
46
|
-
- D1 (slug-here)
|
|
47
|
+
- <a id="d1"></a>**D1 (slug-here)**: <decision>, *because* <the one reason that mattered>
|
|
47
48
|
|
|
48
49
|
## Constraints
|
|
49
50
|
|
|
50
51
|
*(Hard rules the build must honor. `/plumbbob:verify` and `/plumbbob:refine` read against these.
|
|
51
|
-
|
|
52
|
+
Anchor and slug them at birth too (cited as `[C1 (no-new-deps)](#c1)`): same one line,
|
|
53
|
+
same rule.)*
|
|
52
54
|
|
|
53
|
-
- C1 (no-new-deps)
|
|
55
|
+
- <a id="c1"></a>**C1 (no-new-deps)**: <for example functional/procedural only; no new dependencies>
|
|
54
56
|
|
|
55
57
|
## Steps
|
|
56
58
|
|
|
57
|
-
*(The build plan. `/plumbbob:plan` authors the **whole list up front
|
|
59
|
+
*(The build plan. `/plumbbob:plan` authors the **whole list up front**: each step a small,
|
|
58
60
|
verifiable increment with its own **done-when** and **seam** (the paths it will touch,
|
|
59
|
-
which `/plumbbob:build` records in the build folder's `SEAM` for orientation
|
|
60
|
-
An optional **model** line recommends the smallest model that can carry the step
|
|
61
|
+
which `/plumbbob:build` records in the build folder's `SEAM` for orientation: awareness, not a lock).
|
|
62
|
+
An optional **model** line recommends the smallest model that can carry the step:
|
|
61
63
|
mechanical work runs fine on a small model; subtle or creative work earns a frontier
|
|
62
|
-
one. Advisory for the human, never a gate; write it plain, no backticks (
|
|
63
|
-
The step title *is* the checkpoint's commit subject
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
one. Advisory for the human, never a gate; write it plain, no backticks (plumbbob
|
|
65
|
+
[D62 (model-recommendation)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d62)). The step title *is* the checkpoint's commit subject
|
|
66
|
+
(plumbbob [D68 (conventional-subjects)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d68)): write it as one plain line, `type(scope): description`
|
|
67
|
+
(load-bearing paths live in `seam`, never jammed into the title), aiming for ≤72
|
|
68
|
+
characters (GitHub's subject convention: soft, no gate).
|
|
66
69
|
The `(scope)` names the primary code area the step touches (`plan`, `commitmsg`); the
|
|
67
|
-
build's `**Scope:**` header is the feature-level catch-all a step overrides
|
|
70
|
+
build's `**Scope:**` header is the feature-level catch-all a step overrides. Scope
|
|
68
71
|
resolves title-scope → `**Scope:**` default → build slug → bare, and type resolves
|
|
69
|
-
title-type → `feat
|
|
72
|
+
title-type → `feat`. Then drive `/plumbbob:build` until done. Later steps may be
|
|
70
73
|
fuzzier than the first; sharpen the next one just-in-time with `/plumbbob:step` (empty input
|
|
71
74
|
auto-syncs it), and use `/plumbbob:refine` to repair the whole plan when a blocker rewrites it.)*
|
|
72
75
|
|
|
73
|
-
1. [ ] feat: <step
|
|
76
|
+
1. [ ] feat: <step>, **done when:** <criterion, ideally a test or check result>
|
|
74
77
|
- seam: `<file>`, `<file>`
|
|
75
|
-
- model: <smallest that can carry it,
|
|
76
|
-
2. [ ] <step
|
|
78
|
+
- model: <smallest that can carry it, for example sonnet (mechanical, fully specified)>
|
|
79
|
+
2. [ ] <step>, **done when:** <criterion>
|
|
77
80
|
- seam: `<file>`
|
|
78
81
|
|
|
79
82
|
## Open questions
|
|
80
83
|
|
|
81
|
-
*(Holes you could NOT resolve on paper
|
|
84
|
+
*(Holes you could NOT resolve on paper: the one section that expands rather than
|
|
82
85
|
compresses. Do not guess them into Decisions; a genuine fork goes to a SPIKE, with
|
|
83
86
|
the verdict recorded below and in Decisions.)*
|
|
84
87
|
|
|
85
88
|
<!--
|
|
86
89
|
Write each open question so a cold reader could answer it without flipping back to
|
|
87
|
-
the code or the chat
|
|
90
|
+
the code or the chat; that cold-reader test is the whole point of expanding it.
|
|
88
91
|
Three lines:
|
|
89
92
|
|
|
90
|
-
· the opener
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
· the opener: the hole as a question, anchored and slugged at birth the same way a
|
|
94
|
+
Decision is (`- <a id="q1"></a>**Q1 (slug-here)**: …`, so a `[Q1 (slug-here)](#q1)`
|
|
95
|
+
reference has somewhere to land), tagged *resolve by:* decide | spike | ask
|
|
96
|
+
· *plain:* what's at stake, in plain words: the context and the cost of getting
|
|
93
97
|
it wrong, enough to judge it cold
|
|
94
|
-
· *lean:*
|
|
98
|
+
· *lean:* the model's proposed resolution: one answer to react to, not a menu
|
|
95
99
|
|
|
96
|
-
The human reads *plain* to understand, then *lean* to approve or redirect
|
|
100
|
+
The human reads *plain* to understand, then *lean* to approve or redirect: one
|
|
97
101
|
pass, no round-trip.
|
|
98
102
|
|
|
99
103
|
When a question resolves, swap *resolve by:* for *resolved:* <date, the call> ON THE
|
|
100
104
|
OPENER LINE, e.g.
|
|
101
105
|
|
|
102
|
-
- Q3 (default-waves)
|
|
106
|
+
- <a id="q3"></a>**Q3 (default-waves)**: *resolved:* 2026-07-18, default off
|
|
103
107
|
|
|
104
108
|
The status counter reads opener lines only, so a *resolved:* left on a *plain:* or
|
|
105
|
-
*lean:* sub-line leaves the question still counted as open
|
|
106
|
-
|
|
107
|
-
|
|
109
|
+
*lean:* sub-line leaves the question still counted as open
|
|
110
|
+
([D76 (resolved-on-opener)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d76)).
|
|
111
|
+
It reads "resolved" as a whole word, so an opener that still calls itself
|
|
112
|
+
"unresolved" keeps counting. The scaffolded Q1 below stays uncounted for as long as
|
|
113
|
+
its body is unfilled, still opening on its `<...>` fill-in, which is how a fresh
|
|
114
|
+
build reports zero open questions
|
|
115
|
+
([D77 (placeholder-uncounted)](https://github.com/robmclarty/plumbbob/blob/main/docs/decisions.md#d77));
|
|
116
|
+
fill it in and it counts.
|
|
117
|
+
|
|
118
|
+
Size to the work: a tiny build's single, obvious question may stay one bare line;
|
|
108
119
|
the *plain:*/*lean:* pair earns its keep only when a human decision genuinely waits
|
|
109
120
|
on it.
|
|
110
121
|
-->
|
|
111
122
|
|
|
112
|
-
- Q1 (slug-here)
|
|
113
|
-
- *plain:* <what's at stake, in plain words
|
|
114
|
-
- *lean:* <the model's proposed resolution
|
|
123
|
+
- <a id="q1"></a>**Q1 (slug-here)**: <the unresolved hole, framed as a question>, *resolve by:* decide | spike | ask
|
|
124
|
+
- *plain:* <what's at stake, in plain words, enough to judge it cold>
|
|
125
|
+
- *lean:* <the model's proposed resolution: the answer to react to>
|
|
115
126
|
|
|
116
127
|
## Verdicts
|
|
117
128
|
|
|
118
|
-
*(Filled in as spikes and forks resolve
|
|
129
|
+
*(Filled in as spikes and forks resolve: the audit trail of "these were my calls.")*
|
|
119
130
|
|
|
120
|
-
- <date
|
|
131
|
+
- <date>: <fork> → chose <option> because <reason>; deleted <the rest>
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
<!--
|
|
2
|
-
spike-report.md
|
|
2
|
+
spike-report.md: the durable receipt for a spike (a fork the plan couldn't settle
|
|
3
3
|
on paper). One per spike, numbered and named `spike-NN-<slug>.md`, riding the build
|
|
4
|
-
folder into the PR beside intent.md / report.md. Fill it while the experiment is
|
|
5
|
-
|
|
4
|
+
folder into the PR beside intent.md / report.md. Fill it while the experiment is
|
|
5
|
+
live; the worktrees and their learnings are torn down at `spike done`, but this stays.
|
|
6
6
|
|
|
7
7
|
Two ways a spike is born, both landing here:
|
|
8
|
-
- `/plumbbob:spike <slug
|
|
9
|
-
- a planned step titled `spike:
|
|
8
|
+
- `/plumbbob:spike <slug>`: an explicit mid-build fork with throwaway worktrees.
|
|
9
|
+
- a planned step titled `spike: …`: the increment IS the experiment.
|
|
10
10
|
Record the Verdict before you close the spike (or check off the step).
|
|
11
11
|
-->
|
|
12
12
|
|
|
13
|
-
# Spike
|
|
13
|
+
# Spike: {{TITLE}}
|
|
14
14
|
|
|
15
15
|
**Via:** {{VIA}}
|
|
16
16
|
**Opened:** {{DATE}}
|
|
@@ -22,17 +22,17 @@ would each answer commit us to?)*
|
|
|
22
22
|
|
|
23
23
|
## Options tried
|
|
24
24
|
|
|
25
|
-
*(Each path you actually ran, and what it took
|
|
25
|
+
*(Each path you actually ran, and what it took: one bullet each.)*
|
|
26
26
|
|
|
27
27
|
## Findings
|
|
28
28
|
|
|
29
|
-
*(What the experiment showed
|
|
29
|
+
*(What the experiment showed: evidence, not opinion. Numbers, errors, surprises.)*
|
|
30
30
|
|
|
31
31
|
## Verdict
|
|
32
32
|
|
|
33
|
-
**Verdict:** *(viable | not viable | partial
|
|
33
|
+
**Verdict:** *(viable | not viable | partial; replace this line with the call and why)*
|
|
34
34
|
|
|
35
35
|
## What this decides
|
|
36
36
|
|
|
37
|
-
*(The intent.md Decision this feeds
|
|
37
|
+
*(The intent.md Decision this feeds: which option won, what dies, and the one reason
|
|
38
38
|
that settled it. Copy the call into intent.md's Decisions / Verdicts too.)*
|