From kata
Moves phases between milestones or reorders them within a milestone in kata projects. Updates directories, ROADMAP.md, STATE.md, and git commits.
npx claudepluginhub withmartian-sandbox-darkside/ghrc-y-73d04e3c2aae45e2ac89d7e8506d8eaaThis skill uses the workspace's default tool permissions.
<objective>
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Purpose: Enable flexible phase reorganization (cross-milestone moves and within-milestone reordering). Output: Phase moved/reordered, directories renamed, ROADMAP.md updated, STATE.md updated, git commit as historical record.
Supported operations:
/kata-move-phase 3 to v1.6.0/kata-move-phase 3 before 1 or /kata-move-phase 3 after 1
<execution_context> @.planning/ROADMAP.md @.planning/STATE.md </execution_context>
Parse the command arguments. First arg is always the phase number (integer).Detect operation type from second arg:
"to" + milestone version → cross-milestone move"before" or "after" + target phase number → reorder within milestoneCross-milestone move:
/kata-move-phase 3 to v1.6.0Reorder within milestone:
/kata-move-phase 3 before 1 → Phase 3 takes position 1, everything shifts up/kata-move-phase 3 after 1 → Phase 3 takes position 2, phases 2+ shift upValidation:
ERROR: Phase number and operation required
Usage: /kata-move-phase <phase> to <milestone>
/kata-move-phase <phase> before|after <position>
Exit.
ERROR: Invalid operation "{arg}"
Expected: to, before, or after
Exit.
Store: PHASE_NUM, OPERATION (move|reorder), and either TARGET_MILESTONE or POSITION+TARGET_POSITION.
**Pre-flight: Check roadmap format (auto-migration)**If ROADMAP.md exists, check format and auto-migrate if old:
if [ -f .planning/ROADMAP.md ]; then
node scripts/kata-lib.cjs check-roadmap 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.
Load project state:cat .planning/STATE.md 2>/dev/null
cat .planning/ROADMAP.md 2>/dev/null
Parse current milestone version from ROADMAP.md. Use the "Current Milestone:" heading or 🔄 line marker:
VERSION=$(grep -E "Current Milestone:|🔄" .planning/ROADMAP.md | grep -oE 'v[0-9]+\.[0-9]+(\.[0-9]+)?' | head -1 | tr -d 'v')
Verify the phase exists in ROADMAP.md and find its directory:
#### Phase {N}: heading within the current milestoneERROR: Phase {N} not found in roadmap + list available phases. Exit.
ERROR: Phase {N} is in {state}/ and cannot be moved. Exit.ERROR: Phase {N} has completed work. Exit.
ERROR: Milestone {target} not found + list available. Exit.ERROR: Phase already in {milestone}. Use before/after to reorder. Exit.
Validate the target position phase exists in the same milestone:
Calculate the effective target position:
before N → target position = N (phase takes position N, everything at N+ shifts up)after N → target position = N+1 (phase takes position N+1, everything at N+1+ shifts up)If target position phase not found:
ERROR: Phase {target_position} not found in current milestone
Available phases: [list phase numbers]
Exit.
**Reorder only.** Skip for cross-milestone moves.Show the planned reorder and wait for confirmation:
Reordering Phase {N}: {Name}
Current order:
Phase 1: {name}
Phase 2: {name}
Phase 3: {name}
New order:
Phase 1: {name} (was Phase 3)
Phase 2: {name} (was Phase 1)
Phase 3: {name} (was Phase 2)
This will renumber all phase directories and update ROADMAP.md.
Proceed? (y/n)
Wait for confirmation.
**Reorder only.** Skip for cross-milestone moves.Update ROADMAP.md to reflect the new phase order:
#### Phase {old}: -> #### Phase {new}:{old}-01: -> {new}-01:Depends on: Phase {old} -> Depends on: Phase {new}Write updated ROADMAP.md.
**Reorder only.** Skip for cross-milestone moves.Rename ALL phase directories in the milestone to match new numbering. Use a three-pass approach to avoid collision:
tmp-{slug})Handle decimal phases: they follow their parent integer phase and renumber accordingly.
**Cross-milestone move only.** Skip for reorder operations.Find next phase number in target milestone: parse #### Phase N: headings, take highest + 1 (or 1 if empty). Format as two-digit padded.
Show: source milestone, target milestone, new phase number, directory rename, number of phases to renumber in source. Wait for confirmation.
**Cross-milestone move only.** Skip for reorder operations.Remove phase section from source milestone in ROADMAP.md and renumber remaining phases to close the gap. Follow the same renumbering approach as kata-remove-phase:
{old}-01: -> {new}-01:)Depends on: Phase {old} -> Phase {new})Insert phase section into target milestone in ROADMAP.md at the calculated destination number. Preserve goal, requirements, success criteria. Remove or note cross-milestone dependency references that no longer apply.
**Cross-milestone move only.** Skip for reorder operations (handled by renumber_all_directories).Rename phase directory to new number within pending/. Rename all files inside (PLAN.md, RESEARCH.md, etc.) to match. Handle decimal phases (N.1, N.2) by moving them with the parent, renumbering to NEW_NUM.1, NEW_NUM.2.
**Cross-milestone move only.** Skip for reorder operations (handled by renumber_all_directories).Renumber directories of phases that shifted in the source milestone. Process ascending order (for downward shifts). For each: find across state subdirectories, rename directory and internal files within same state.
Update STATE.md:For cross-milestone move:
- **Phase {N} moved from {source_milestone} to {target_milestone}** as Phase {NEW_NUM}
For reorder:
- **Phase {N} reordered {before|after} Phase {M}** in {milestone}
Both operations: Update REQUIREMENTS.md traceability if requirements reference affected phases. Update phase numbers in traceability table for all renumbered phases.
Check planning config:COMMIT_PLANNING_DOCS=$(node scripts/kata-lib.cjs read-config "commit_docs" "true")
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
If COMMIT_PLANNING_DOCS=false: Skip git operations
If COMMIT_PLANNING_DOCS=true (default):
git add .planning/
# Cross-milestone move:
git commit -m "chore: move phase {N} to {target_milestone}"
# Reorder:
git commit -m "chore: reorder phase {N} {before|after} {M}"
Present completion summary showing: operation performed, directories renamed, phases renumbered, files updated, commit message. Then offer next actions: `/kata-track-progress`, continue current phase, review roadmap.
<anti_patterns>
</anti_patterns>
<edge_cases>
Phase has PLAN.md files but no SUMMARY.md:
Target milestone is empty (no phases):
calculate_destination_number handles this (NEW_NUM=1 when HIGHEST is empty).Last phase in source milestone removed:
Decimal phases under moved integer phase:
Phase directory doesn't exist yet:
Reorder: moving to adjacent position:
before N+1 or after N-1 when phase is at position N is a no-op.Reorder: only two phases in milestone:
</edge_cases>
<success_criteria> Cross-milestone move is complete when:
Reorder is complete when:
Both operations: User informed of all changes. </success_criteria>