Release v1.0.0 — everything booping does became a playbook - #20
Merged
Conversation
…j2 partial (M1) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… loader (M2) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… --project (M3) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… (M4) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…k skill + docs (M5) Kill criterion failed (+10% vs -30% target); old /groom stays canonical, new experimental /groom-playbook skill drives the core groom playbook. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… dirs Each jinja body now renders with its own ChoiceLoader chain: the body itself (by basename) -> step dir -> playbook dir -> local/global/core playbook roots -> src/templates. A PlaybookEnvironment.join_path override resolves ./ and ../ against the including file's own directory at any nesting depth; bare names fall through to the chain unchanged. src/templates stays last so _partials/ keeps resolving plugin-root relative, at the cost of a playbook-local _partials/ shadowing it. The graph and step chrome templates render through a separate plugin-only env so a playbook cannot shadow them. Also drop the "no playbook.md, skipping" warning: a directory without a manifest is now skipped silently. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…se, validation, per-scope waves (M1)
…reference docs (M4)
…amed states in loader (M1) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… transition report (M2) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…or (M3) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ll-run integration test (M4) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…iving protocol, docs (M5) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…lenient inputs/outputs parsing (M1)
…ch + inputs/outputs bullets (M2)
…iving protocol (M3)
…uts reference + bootstrap driving (M4)
…ybook scan + name clash (M1) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ons.j2 + step append + clash STOP + --no-lessons (M2) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rker + driving lessons binding (M3) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…s reference, stale shadowing refs removed (M4) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…tch file target + {instance} interpolation, plan-transition rejection, report prefix (M1)
…vocabulary docs across playbook.md, CLAUDE.md, driving partials (M2)
…ites Rebuild core groom playbook: playbook.yaml with states/graph, new steps (draft-plan, decompose-work, verify-references), _scripts status hooks, _specs design docs. Each step ships promptfoo eval suite (tests.yaml, fixtures, model variants). Add eval tooling: justfile recipes (eval, eval-md, smoke, regress), bin/eval-md.sh + bin/report-md.jq markdown reporter. Ignore repo-root _booping/ runtime log. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- frontmatter-update on a file without a frontmatter block now prepends one instead of aborting; existing content becomes the body unchanged - groom steps stop authoring `reviewed_at: null` — run hooks own the artifact frontmatter, files open at their H1 - run slugs take their timestamp from the local clock (`date +%Y%m%d-%H-%M`), never from model memory Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ansition An absolute --target ending in the machine's declared artifact: now implies the workdir, so hooks run beside the artifact without a separate --workdir. Relative targets, non-matching paths, and machines without artifact: keep cwd. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…script mining core
…capture and wiring
A workdir inside home_dir/{project}/ now assembles the same context as a
repo workdir; repo_directory becomes optional and hook resolution falls
back to the process cwd when the containment-resolved project has none.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…eview to awaiting-approval Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…or release — M1 snapshots + mdcheck as Python scripts Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…or release — M2 eval tooling moves to scripts/ Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…or release — M3 dead code deleted Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…or release — M4 CLAUDE.md layout + commands sweep Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nting — M1 extraction engine
…nting — M2 session-stats subcommand, session-time retired
…nting — M3 metrics_ key rename, migration 006, config surfacing and docs
…nting — CHANGELOG entry for session-stats
…agnitudes in units
…ncached remainder
The vault lived under home_dir at ~/Dev/@A/notes/projects/claude-booping, tracked in the private notes repo. Move it to vault/ here so plans, retros and lessons version alongside the code they describe. - .booping gains vault_path: vault - _core_playbooks becomes a relative symlink (../playbooks), keeping the absolute home path out of a public repo - vault/notes/ and .booping.log are gitignored: local scratchpad and operational log, not part of the published vault - drop _booping/.booping.log, dead since migration 004
Migration 004 converted _booping/agent_*.md into targeted _lessons/ files; nothing has read that path since. The developer agent description still pointed at it. Lessons are discovered automatically, so the sentence is removed rather than repointed.
…ss cases Both judged a freshly generated artifact whose shape varies run to run — the fixtures corpus rubrics and the llm-tests row-quality rubrics went red on roughly half the runs without any source change. The deterministic smoke cases stay. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The suites judge freshly generated artifacts, so a full run lands on a different red set each time — a per-sha gate blocked merges on judge variance rather than on source drift. The sticky PR comment stays as the advisory record of a run. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Six incremental migrations described a history no 1.0 vault will ever walk step by step. Fold them into three that each cover a coherent layout change: vault layout, tracks and lessons, session metrics. - fixture marker watermark drops 6 -> 3, and the migrate snapshot follows - README gains a 'What it's for' section, links the checked-in vault/, and states the beta-grade maturity of 1.0
astral-sh/setup-uv publishes moving major tags only through v7, so @v9 never resolved and every CI run died at 'Set up job' before a single test ran. v9.0.0 is a real tag; pin it exactly.
Two failures the setup-uv breakage had been masking — every run died at 'Set up job', so neither had ever executed on CI. The mdcheck job installed just and Rust but never uv, while `just mdcheck` shells out to `uv run`; it failed with 'uv: not found'. test_sets_commit_with_the_git_macro resolved its repo from pytest's cwd, so it passed only on a machine where this checkout is itself an attached booping project. `.booping` is gitignored, so CI resolved no project, repo_dir came through as None and the `cwd: repo` macro aborted. The test now brings its own git repo and marker.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Everything booping does became a playbook.
/playbookis now the only skill the plugin ships — groom, develop, retro, learn, code-review, setup, migrate and playbook-authoring all run as playbooks, discovered beside the ones you write yourself. Runs carry their own state and resume across sessions, and retro and code review became tracks of their own.This release is dogfooded: the repo's own Project Vault is checked in at
vault/— browse a finished plan, the targeted lessons the loop accumulated, or a retrospective to see what the artifacts actually look like. 1.0 works end to end but is beta-grade; expect rough edges, and if installation gives you trouble, run/playbook setupand talk the problem through with it./chatand/helpare gone —/playbookis the plugin's only skill.config.yamlneeds re-nesting under acorenamespace: a key one playbook owns atcore.{name}_playbook, shared keys directly undercore./playbook migrate._lessons/directories and the lessonstep:key no longer route lessons — legacy content surfaces a migration note instead.agent:becamedetached:(a leftoveragent:key stops the run), and the@headshorthand was dropped in favour of thegit_commitmacro.Migration notes at the end.
Running the loop
doneimmediately instead of holding it open. Retro and learn advance a standaloneretrospectives/{slug}.md, linked back from the plan'sretro:key; retro queues everydoneplan not yet covered, mines session logs and the sprint diff for what actually happened, and takes your raw feedback before triaging by root cause.codereviews/{plan}/{timestamp}.mdmoving throughin-agent-review→human-review→done, while the plan carries the fullcode_reviews:history and stays in the queue — so a plan can be reviewed, fixed, and reviewed again without leaving its track. You give the verdict; only approved fixes are applied.plans/{slug}/holds itsindex.md, briefing and web research together..boopingmarker, and a home-dir symlink for Obsidian. It skips phases already satisfied, so re-running it reports state instead of changing it, and seeds fresh vaults at the highest shipped migration id.sprints.mdreports what a sprint cost — active time excluding every stretch the run spent waiting on you, alongside token totals and the models that ran.Making it yours
_lessons/roots — the global level and your Project Vault — and each carries atargets:list naming exactly where it applies:{playbook},{playbook}/{step},agent:{id}orskill:{name}. An untargeted lesson injects nowhere. Shaping an agent for one project is now a lesson rather than a separate extension file.detached:— inline (the runner performs it), assisted (the runner performs it but hands heavy reads to your configured research agent, resuming it across a loopback rather than respawning), and detached (its own sub-agent).core.research_agentpoints assisted reads wherever you like.graph:node can be a subgraph — its own dependencies, an inner graph of steps, an optional proserepeat:, one nesting level.jinja: truerenders preamble and step bodies against live project context. A step is a directory holdingprompt.md, optionally per-model bodies (opus-5.md,fable-5.md) and its own eval suite. Bodies load one at a time, so a run's context grows with the graph it walks, not with every body the playbook contains.--wherefilters, sorting and projection. Config can also declare scaffold trees and argv macros that rendered bodies call throughmacro().frontmatter-updatehook can write to any workdir-relative file with{instance}interpolation, not only the machine's own artifact; script hooks resolve from shared_scripts/roots, playbook-local first, and take arguments, so one parameterised script replaces a family of near-duplicates.playbook-authoringships in core — it drives a new playbook from brief and decomposition through manifest, then per step a spec, fixtures, prompt and eval suite driven to green.Other changes
states:machine.sprints.mdis seeded once at setup as a live Obsidian Bases view and never regenerated;render-sprintswas retired.targets:before writing.awaiting-plan-reviewtoawaiting-approval.mdcheckstructural rules, parallel CI jobs.Migration notes
/playbook migrate. It surveys what is pending against your marker's watermark, applies each migration in id order on one up-front approval, and commits each to the vault separately. A failing migration halts and names the id, the failure, and a hand-applicable remedy.config.yamlundercore.agent:todetached:and replace@headwith thegit_commitmacro._lessons/root and give each atargets:list.