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 gannonh/kata-orchestratorThis skill uses the workspace's default tool permissions.
<objective>
Removes a specified unstarted future phase from ROADMAP.md, renumbers subsequent phases sequentially, and commits changes to git. Use to clean up cancelled plans without context pollution.
Inserts urgent work as decimal phases (e.g., 72.1) between existing integer phases in roadmaps without renumbering. Useful for mid-milestone discoveries requiring workflow execution.
Manages project milestones: create new cycles with phases, complete/archive versions, preview changes, audit integration, analyze gaps. For structured delivery checkpoints.
Share bugs, ideas, or general feedback.
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>