Skip to content

v2.2.1

Choose a tag to compare

@girishr girishr released this 30 Jul 07:03
· 279 commits to main since this release

Bug-fix release from an audit of the validator / archiver / backfiller triangle.

Fixed

  • specpilot backfill could never fix the "Missing MANDATE for prompt tracking" error. YAML_MANDATES only listed the 8 rules.critical mandates, so the rules.process mandate that specpilot validate checks for was never written — the validator reported an error that backfill structurally could not resolve.
  • specpilot backfill corrupted project.yaml when it had no rules: key. The fallback appended a bare, two-space-indented critical: block with no parent key, which YAML silently nested under whatever top-level key preceded it (e.g. producing dependencies.critical), leaving the mandates invisible to the validator.
  • specpilot archive silently destroyed any tasks.md section after ## Completed. archiveTasks() assumed the Completed section ran to end-of-file, so a following section (e.g. ## Multi-Dev Notes) was swept into tasks-archive.md while the active section kept unrelated lines. Compounding it, backfill placed its own generated ## Multi-Dev Notes exactly where the archiver would eat it.
  • Dead and incorrect validate --fix paths removed. addMandatesToProjectYaml() matched prompt where the validator requires prompts (so "unless prompted" counted as the mandate) and used yaml.dump(), destroying all comments. It and createInitialPromptsEntry() were unreachable; specpilot backfill already handles this with comment-preserving text insertion.
  • autoFix() could write arbitrary files into .specs/ — the create-* catch-all is now constrained to the validator's required files.
  • planning/roadmap.md never got a staleness warning.

216 tests passing.