--- name: kata-complete-milestone description: Archive a completed milestone, preparing for the next version, marking a milestone complete, shipping a version, or wrapping up milestone work. Triggers include "complete milestone", "finish milestone", "archive milestone", "ship version", "mark milestone done", "milestone complete", "release version", "create release", and "ship milestone". metadata: version: "0.1.0" --- Mark milestone {{version}} complete, archive to milestones/, and update ROADMAP.md and REQUIREMENTS.md. Purpose: Create historical record of shipped version, archive milestone artifacts (roadmap + requirements), and prepare for next milestone. Output: Milestone archived (roadmap + requirements), PROJECT.md evolved, git tagged. **Load these files NOW (before proceeding):** - @./references/milestone-complete.md (main workflow) - @./references/milestone-archive-template.md (archive template) - @./references/version-detector.md (version detection functions) - @./references/changelog-generator.md (changelog generation functions) **Project files:** - `.planning/ROADMAP.md` - `.planning/REQUIREMENTS.md` - `.planning/STATE.md` - `.planning/PROJECT.md` **User input:** - Version: {{version}} (e.g., "1.0", "1.1", "2.0") **Follow milestone-complete.md workflow:** 0. **CRITICAL: Branch setup (if pr_workflow=true)** **Check pr_workflow config FIRST before any other work:** ```bash PR_WORKFLOW=$(cat .planning/config.json 2>/dev/null | grep -o '"pr_workflow"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "false") CURRENT_BRANCH=$(git branch --show-current) ``` **If `PR_WORKFLOW=true` AND on `main`:** You MUST create a release branch BEFORE proceeding. All milestone completion work goes on that branch. ```bash # Determine version from user input or detect from project files # (version-detector.md handles detection across project types) VERSION="X.Y.Z" # Set from user input or detection # Create release branch git checkout -b release/v$VERSION echo "Created release branch: release/v$VERSION" echo "All milestone completion work will be committed here." ``` Display: ``` ⚠ pr_workflow is enabled — creating release branch first. Branch: release/v$VERSION All milestone completion commits will go to this branch. After completion, a PR will be created to merge to main. ``` **If `PR_WORKFLOW=false` OR already on a non-main branch:** Proceed with current branch (commits go to main or current branch). **GATE: Do NOT proceed until branch is correct:** - If pr_workflow=true, you must be on release/vX.Y.Z branch - If pr_workflow=false, main branch is OK 0.1. **Pre-flight: Check roadmap format (auto-migration)** Read workflow-specific overrides for milestone completion. Also check and auto-migrate roadmap format if needed: ```bash if [ -f .planning/ROADMAP.md ]; then bash ../kata-doctor/scripts/check-roadmap-format.sh 2>/dev/null FORMAT_EXIT=$? if [ $FORMAT_EXIT -eq 1 ]; then echo "Old roadmap format detected. Running auto-migration..." fi fi ``` **If exit code 1 (old format):** Invoke kata-doctor in auto mode: ``` Skill("kata-doctor", "--auto") ``` Continue after migration completes. **If exit code 0 or 2:** Continue silently. ```bash # Validate config and template overrides bash ../kata-doctor/scripts/check-config.sh 2>/dev/null || true bash ../kata-doctor/scripts/check-template-drift.sh 2>/dev/null || true ``` 0.2. **Read workflow config:** Read workflow-specific overrides for milestone completion: ```bash VERSION_FILES_JSON=$(bash ../kata-configure-settings/scripts/read-pref.sh "workflows.complete-milestone.version_files" "[]") PRE_RELEASE_CMDS_JSON=$(bash ../kata-configure-settings/scripts/read-pref.sh "workflows.complete-milestone.pre_release_commands" "[]") ``` - `version_files`: overrides version-detector.md auto-detection when non-empty - `pre_release_commands`: run after version bump, before archive (failures blocking) Store for use in release workflow steps. See milestone-complete.md `read_workflow_config` step. 0.2. **Generate release artifacts:** Proactively generate changelog and version bump. Follow the release_workflow step in milestone-complete.md (loads version-detector.md and changelog-generator.md) to: 1. Detect version bump type from conventional commits 2. Calculate next version 3. Generate changelog entry 4. Bump version in all project version files detected by version-detector.md 5. Insert changelog entry into CHANGELOG.md Present all proposed changes for review: ``` ## Release Preview **Current version:** $CURRENT_VERSION **Bump type:** $BUMP_TYPE **Next version:** $NEXT_VERSION **Changelog entry:** ## [$NEXT_VERSION] - $DATE ### Added [feat commits formatted] ### Fixed [fix commits formatted] ### Changed [docs/refactor/perf commits formatted] **Files updated:** [list each version file detected and updated] - CHANGELOG.md → new entry prepended ``` Use AskUserQuestion: - header: "Release Changes" - question: "Review the release changes above. Approve?" - options: - "Approve" — Keep changes and proceed to verify readiness - "Edit changelog first" — Pause for user edits, then confirm - "Revert and skip release" — Undo release file changes, proceed to verify readiness without release artifacts 1. **Check for audit:** - Look for `.planning/v{{version}}-MILESTONE-AUDIT.md` - If missing or stale: recommend `/kata-audit-milestone` first - If audit status is `gaps_found`: recommend `/kata-plan-milestone-gaps` first - If audit status is `passed`: proceed to step 1 ```markdown ## Pre-flight Check {If no v{{version}}-MILESTONE-AUDIT.md:} ⚠ No milestone audit found. Run `/kata-audit-milestone` first to verify requirements coverage, cross-phase integration, and E2E flows. {If audit has gaps:} ⚠ Milestone audit found gaps. Run `/kata-plan-milestone-gaps` to create phases that close the gaps, or proceed anyway to accept as tech debt. {If audit passed:} ✓ Milestone audit passed. Proceeding with completion. ``` 1. **Verify readiness:** - Check all phases in milestone have completed plans (SUMMARY.md exists) - Present milestone scope and stats - Wait for confirmation 1. **Gather stats:** - Count phases, plans, tasks - Calculate git range, file changes, LOC - Extract timeline from git log - Present summary, confirm 1. **Extract accomplishments:** - Read all phase SUMMARY.md files in milestone range - Extract 4-6 key accomplishments - Present for approval 1. **Archive milestone:** - Create `.planning/milestones/v{{version}}-ROADMAP.md` - Extract full phase details from ROADMAP.md - Fill milestone-archive.md template - Update ROADMAP.md to one-line summary with link 1. **Archive requirements:** - Create `.planning/milestones/v{{version}}-REQUIREMENTS.md` - Mark all v1 requirements as complete (checkboxes checked) - Note requirement outcomes (validated, adjusted, dropped) - Delete `.planning/REQUIREMENTS.md` (fresh one created for next milestone) 1. **Update PROJECT.md:** - Add "Current State" section with shipped version - Add "Next Milestone Goals" section - Archive previous content in `
` (if v1.1+) 6.5. **Review Documentation (Non-blocking):** Before committing, offer final README review: Use AskUserQuestion: - header: "Final README Review" - question: "Revise README before completing milestone v{{version}}?" - options: - "Yes, draft an update for my review" — Revise README and present to the user for approval - "No, I'll make the edits myself" — Pause for user review, wait for "continue" - "Skip for now" — Proceed directly to commit **If "Yes, I'll review now":** ``` Review README.md for the complete v{{version}} milestone. Ensure all shipped features are documented. Say "continue" when ready to proceed. ``` **If "Show README":** Display README.md, then use AskUserQuestion: - header: "README Accuracy" - question: "Does this look accurate for v{{version}}?" - options: - "Yes, looks good" — Proceed to Step 7 - "Needs updates" — Pause for user edits, wait for "continue" **If "Skip" or review complete:** Proceed to Step 7. _Non-blocking: milestone completion continues regardless of choice._ 6.7. **Close GitHub Milestone:** If github.enabled, close the GitHub Milestone for this version. See milestone-complete.md `close_github_milestone` step for details. 7. **Commit and finalize:** - Stage: MILESTONES.md, PROJECT.md, ROADMAP.md, STATE.md, archive files - Commit: `chore: complete v{{version}} milestone` **PR workflow handling (branch was created in step 0):** ```bash PR_WORKFLOW=$(cat .planning/config.json 2>/dev/null | grep -o '"pr_workflow"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "false") CURRENT_BRANCH=$(git branch --show-current) ``` **If `PR_WORKFLOW=true` (on release/vX.Y.Z branch):** Push branch and create PR: ```bash # Push branch git push -u origin "$CURRENT_BRANCH" # Collect all phase issues for this milestone GITHUB_ENABLED=$(cat .planning/config.json 2>/dev/null | grep -o '"enabled"[[:space:]]*:[[:space:]]*[^,}]*' | head -1 | grep -o 'true\|false' || echo "false") ISSUE_MODE=$(cat .planning/config.json 2>/dev/null | grep -o '"issueMode"[[:space:]]*:[[:space:]]*"[^"]*"' | grep -o '"[^"]*"$' | tr -d '"' || echo "never") CLOSES_LINES="" if [ "$GITHUB_ENABLED" = "true" ] && [ "$ISSUE_MODE" != "never" ]; then # Get all phase issue numbers for this milestone # --state all includes already-closed issues (GitHub ignores redundant Closes #X, # but including them ensures PR body reflects all related work) # gh issue list --milestone only searches open milestones; use API to include closed REPO_SLUG=$(gh repo view --json nameWithOwner --jq '.nameWithOwner' 2>/dev/null) MS_NUM=$(gh api "repos/${REPO_SLUG}/milestones?state=all" --jq ".[] | select(.title==\"v{{version}}\") | .number" 2>/dev/null) PHASE_ISSUES="" if [ -n "$MS_NUM" ]; then PHASE_ISSUES=$(gh api "repos/${REPO_SLUG}/issues?milestone=${MS_NUM}&state=all&labels=phase&per_page=100" \ --jq '.[].number' 2>/dev/null) fi if [ -z "$PHASE_ISSUES" ]; then echo "Note: No phase issues found for milestone v{{version}}. This is expected for milestones without GitHub issues." fi # Build multi-line closes section for num in ${PHASE_ISSUES}; do CLOSES_LINES="${CLOSES_LINES}Closes #${num} " done fi # Create PR gh pr create \ --title "v{{version}}: [Milestone Name]" \ --body "$(cat < - Milestone archived to `.planning/milestones/v{{version}}-ROADMAP.md` - Requirements archived to `.planning/milestones/v{{version}}-REQUIREMENTS.md` - `.planning/REQUIREMENTS.md` deleted (fresh for next milestone) - ROADMAP.md collapsed to one-line entry - PROJECT.md updated with current state - Git tag v{{version}} created (if pr_workflow=false) OR PR created/instructions given (if pr_workflow=true) - GitHub Milestone v{{version}} closed (if github.enabled) - Commit successful - User knows next steps (including need for fresh requirements) **If release workflow was run:** - CHANGELOG.md updated with v{{version}} entry (reviewed and approved) - Version bumped in all detected project version files - GitHub Release created (if pr_workflow=false) OR instructions provided (if pr_workflow=true) - **Load workflow first:** Read milestone-complete.md before executing - **Verify completion:** All phases must have SUMMARY.md files - **User confirmation:** Wait for approval at verification gates - **Archive before deleting:** Always create archive files before updating/deleting originals - **One-line summary:** Collapsed milestone in ROADMAP.md should be single line with link - **Context efficiency:** Archive keeps ROADMAP.md and REQUIREMENTS.md constant size per milestone - **Fresh requirements:** Next milestone starts with `/kata-add-milestone` which includes requirements definition