Skip to content

feat(milestones): add close/update lifecycle verbs with abandoned state - #101

Merged
utx0 merged 36 commits into
mainfrom
metta/fix-milestone-status-write-once-dead-field-no-close
Aug 26, 2026
Merged

feat(milestones): add close/update lifecycle verbs with abandoned state#101
utx0 merged 36 commits into
mainfrom
metta/fix-milestone-status-write-once-dead-field-no-close

Conversation

@utx0

@utx0 utx0 commented Aug 26, 2026

Copy link
Copy Markdown
Member

Resolves issue milestone-status-is-a-write-once-dead-field-with-no-close-or (major): milestone status was write-once — metta milestone create set status: open and no CLI path could ever close a milestone, edit its body, or change its target, so completed milestones permanently reported stale open state.

What changed

  • Store: MilestonesStore.update(slug, patch) — read → patch → full-frontmatter Zod re-validation before any I/O → write; failing patches leave the file byte-identical. MilestonePatch supports name, target, clearTarget, status, description.
  • Schema: status enum extended to open | closed | abandoned (additive; existing files unaffected).
  • CLI: new metta milestone close <slug> [--abandoned] (conflict pre-check, auto-commit chore: close milestone <slug>) and metta milestone update <slug> (--name/--target/--clear-target/--description/--status, reopen via --status open); typed exit-4 JSON envelopes; shared commitMilestones helper.
  • Renderers/rollup: rank-comparator sort (open first, terminal group slug-ascending — behavior-identical for open/closed-only data); shared MILESTONE_MARKERS (//); status/progress render abandoned in red .
  • Guard/mint hooks + skill: milestone close/update join the Tier-2 blocked set with scopes minted only for metta-backlog; deployed and template copies byte-identical; metta-backlog skill gained close/update dispatch branches.

Quality evidence

  • 3 parallel reviews: correctness PASS, security PASS, quality PASS_WITH_WARNINGS (single test-coverage warning, fixed in 26e0703f0).
  • Full suite: 135 files, 2802 passed, 0 failed; tsc --noEmit, lint, and build clean; all 22 spec scenarios across 6 requirements have cited passing tests.
  • All finalize gates green; specs merged; archived as spec/archive/2026-08-26-fix-milestone-status-write-once-dead-field-no-close/.

Risks: status: abandoned files fail validation under older metta builds (accepted one-way door); update re-serializes frontmatter, normalizing hand-edited key order/comments (accepted — hand-editing is the workflow this removes).

UAT results

Result: 7 pass / 0 fail / 36 skip (of 43 steps) — PASS
Run: 2026-08-26 · record committed as docs(fix-milestone-status-write-once-dead-field-no-close): UAT run record (b989e58) · spec/archive/2026-08-26-fix-milestone-status-write-once-dead-field-no-close/UAT.md

Skipped — needs manual acceptance

Step Reason
1.1–1.4, 2.1–2.5, 3.1–3.3, 4.1–4.3, 6.1–6.2, 6.10–6.24 require metta milestone CLI invocations forbidden to the sandboxed UAT runner (store-level equivalents of 2.2/2.4/2.5/6.16/6.18/6.19 verified in passing steps 6.7/6.8/6.9)
5.1–5.2, 6.25–6.26 require invoking guarded verbs with/without a session credential — forbidden to the runner (covered by 309 guard-hook unit tests)

🤖 Generated with Claude Code

https://claude.ai/code/session_01AA8wwFpob25iYZFCBBEtKK

ryder and others added 30 commits August 26, 2026 09:54
…ders abandoned milestone marker

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AA8wwFpob25iYZFCBBEtKK
…enders abandoned milestone marker

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AA8wwFpob25iYZFCBBEtKK
@utx0
utx0 merged commit b52e62e into main Aug 26, 2026
2 checks passed
@utx0
utx0 deleted the metta/fix-milestone-status-write-once-dead-field-no-close branch August 26, 2026 01:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant