Per-milestone plan files handed straight to dev agents - #23
Merged
Conversation
Tree keys go through the same Jinja env and --set globals as seed bodies, with the filesystem-safety check re-run on the rendered name so an unsafe render fails before any write. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
core.groom_playbook.milestone_scaffold seeds one file per milestone with a fixed identity frontmatter and the three required headings; the shared core.plans.milestones key describes where they live and how index.md's table projects them. Ids are quoted so zero-padded values do not read back as octal ints and scramble sorting. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Each template's Milestones section is now a generated table and a new Milestone files section giving the per-file body shape for that surface; checklists check the plan directory instead of a single file. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
draft-plan scaffolds one file per milestone and writes its body in place, then generates index.md's table with booping query; present and cross-review read the same source. sp moves to develop's refresh script. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A milestone state machine addressed per instance writes status via
playbook-transition only; each edge runs refresh-milestone-table, which
rewrites index.md's Milestones table and re-sums the plan's sp from the
milestone files. develop-loop moves into a one-step milestones subgraph,
which is what makes the {instance} artifact legal.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
develop-loop composes one literal briefing block naming the milestone files as contract and index.md as context; provision groups from a query over milestone frontmatter and verify reads the milestone files. The worker contract states which path binds it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Uncommitted output of the docs-refresh run, captured before the milestone-file sprint rewrites the same surfaces. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
retro, code-review and the lesson-check partial read index.md plus the milestone files; the vault, develop and groom pages, README and CLAUDE.md describe the plan directory, the milestone file contract and the generated table. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Each hermetic fixture plan gains a milestones/ directory with two files and an index table generated by refresh-milestone-table; cache-warmup keeps none so the missing-sp branch stays covered. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A milestone becomes a directory whose file is named after it, so a runner-written feedback.md can sit beside the contract and a bare wikilink still resolves. The worker now runs its own Verify and commits; the runner validates the diff, keeps the bookkeeping and records failed attempts in feedback.md, routing fixes to a fresh fallback_agent. playbook-state strips the matched segment cleanly so instances key the same in filename and directory positions. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
A plan stops being one document. Each milestone becomes its own directory under
plans/{slug}/milestones/, holding a milestone file named after it — the authoritative work contract a develop worker is handed by path, never as pasted text.What changes
booping scaffoldrenders a tree's filename keys through the same Jinja env and--setglobals as seed bodies, with the filesystem-safety check re-run on the rendered name.core.groom_playbook.milestone_scaffoldseedsmilestones/M{nn}-{kebab}/M{nn}-{kebab}.md(frontmatterid,title,sp,status,plan; headings## Tasks,## Definition of Done,## Verify). The sharedcore.plans.milestoneskey gives the glob and the columnsindex.md's table projects. Naming the file after its directory keeps a bare Obsidian wikilink resolvable and leaves room for sidecars.draft-planseeds each milestone and writes its body in place, then generatesindex.md's## Milestonestable withbooping query. All five plan templates describe the new shape.milestonestate machine on develop, artifactmilestones/{instance}/{instance}.md,pending → in-progress → donewithblockedoff in-progress. Every edge runs the newrefresh-milestone-tablehook, which rewrites the index table and re-sums the plan'ssp.develop-loopmoves into a one-stepmilestonessubgraph, which is what makes the{instance}artifact legal.index.mdas context, and afeedback.mdsidecar as prior-attempt findings. The worker runs its own## Verifyand makes the repo commit; the runner validates that commit's diff against the DoD, keeps the bookkeeping, records failed attempts infeedback.mdand routes fixes to a freshcore.develop_playbook.fallback_agent.booping playbook-statestrips a matched instance segment cleanly, so instances key the same in filename and directory positions; fixture plans, public docs, README and CLAUDE.md all move to the new shape.Note
This branch is cut above
feat/scaffold-seeded-plans, so the PR also carries that unmerged sprint..claude-plugin/plugin.jsonstill reads 1.0.0 — the version bump belongs to the release cut, not here.🤖 Generated with Claude Code