Skip to content

v1.0.1

Latest

Choose a tag to compare

@A A released this 13 Aug 11:50
· 1 commit to master since this release
62ddf6d

Milestones became real files. A plan is still a directory, but each milestone now lives in a directory of its own with its own file — its tasks, its definition of done, its verification command — and that file, not a slice of the plan, is what develop hands a coding agent. The agent gets the one milestone it is working on instead of the whole plan, which is both a tighter contract and a much smaller context.

Milestone files

  • Each milestone is its own file. A plan directory now holds milestones/M{nn}-{title}/M{nn}-{title}.md, one per milestone. Groom writes them as it drafts; the ## Milestones table in index.md and the plan's story-point total are generated from those files and are never hand-kept. Milestone titles in that table link to their files, so a plan browses as a tree in Obsidian.
  • Develop briefs by path, not by body. A worker is handed its milestone file as the contract with index.md alongside as context — never the whole plan to read through. The agent implements it, runs that milestone's own verification until it is green, and makes the repo commit; develop then checks the returned diff against the definition of done, ticks the boxes the diff earns, and moves the milestone on. Whoever ran the verification is the one who saw it run.
  • A stopped sprint resumes mid-plan. Each milestone carries its own status — pending → in-progress → done, plus blocked — as real run state. Pick a sprint back up in a later session and it continues at the first milestone that is not done, rather than at the top of the plan.
  • A rejected attempt keeps its notes. When a diff falls short of the definition of done, develop writes what it checked, what was wrong, and what the next attempt must do into a feedback.md beside that milestone file, then briefs a fresh agent with both paths. That file also counts the attempts, and it survives the session.

Plans are seeded, not typed

Groom creates the plan directory from a config-declared scaffold tree, so a fresh index.md arrives complete — with a real created timestamp and the repo commit stamped at creation rather than filled in by hand — and each milestone file is seeded the same way. The frontmatter shape lives in config alone, so a plan template describes the plan, not the boilerplate around it.

Other changes

  • Fixed a code-review bug where a plan whose code_reviews: was written inline lost its history when a review closed.
  • booping scaffold and booping frontmatter-update now answer with a unified diff of what they changed and stay silent about files that did not move, so a rendered prompt acts on the receipt instead of reading the file back.
  • booping scaffold decides per file: an existing target is skipped and named, --force overwrites, and a destination already holding part of the tree no longer aborts the run.
  • booping frontmatter-update writes scalars with their YAML type, so sp=23 lands as an integer.
  • Every CLI subcommand is now specified by an end-to-end contract corpus instead of unit tests reaching into internals; its case format and sandboxed runner were extracted and published as the standalone pytest-txtar pytest plugin.
  • Retired the build stage — the shipped skill and agent shells are hand-authored and rendered at load time — along with the unimplemented debug-template command.
  • Documentation, feature index and changelog brought current with all of the above.

Upgrading

No migration ships with this release, and existing vaults need no changes. One caveat: plans groomed before 1.0.1 have no milestone files, so develop finds nothing to execute. Finish in-flight sprints before upgrading, or re-groom the plan afterwards.