From kata
Appends auto-numbered phase to current roadmap milestone from args or --issue file, updating ROADMAP.md and STATE.md. Handles discovered work during execution.
npx claudepluginhub withmartian-sandbox/ghrc-x-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.
This command appends sequential phases to the current milestone's phase list, automatically calculating the next phase number based on existing phases.
Purpose: Add planned work discovered during execution that belongs at the end of current milestone.
IMPORTANT: When showing examples to users, always use /kata-add-phase (the command), not the skill name.
<execution_context> @.planning/ROADMAP.md @.planning/STATE.md </execution_context>
Parse the command arguments:With --issue flag:
/kata-add-phase --issue .planning/issues/open/2026-02-06-phase-lookup.mddescription = issue title from frontmatterISSUE_FILE = the path argumentISSUE_PROVENANCE = provenance field from frontmatter (e.g., github:owner/repo#102)ISSUE_NUMBER = extracted from provenance if GitHub-linked (e.g., 102)if echo "$ARGUMENTS" | grep -q "^--issue "; then
ISSUE_FILE=$(echo "$ARGUMENTS" | sed 's/^--issue //')
if [ ! -f "$ISSUE_FILE" ]; then
echo "ERROR: Issue file not found: $ISSUE_FILE"
exit 1
fi
description=$(grep "^title:" "$ISSUE_FILE" | cut -d':' -f2- | xargs)
ISSUE_PROVENANCE=$(grep "^provenance:" "$ISSUE_FILE" | cut -d' ' -f2)
ISSUE_NUMBER=""
if echo "$ISSUE_PROVENANCE" | grep -q "^github:"; then
ISSUE_NUMBER=$(echo "$ISSUE_PROVENANCE" | grep -oE '#[0-9]+' | tr -d '#')
fi
fi
Without --issue flag:
/kata-add-phase Add authentication → description = "Add authentication"ISSUE_FILE, ISSUE_PROVENANCE, ISSUE_NUMBER are emptyIf no arguments provided:
ERROR: Phase description required
Usage: /kata-add-phase <description>
/kata-add-phase --issue <issue-file-path>
Example: /kata-add-phase Add authentication system
Exit.
**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 the roadmap file:if [ -f .planning/ROADMAP.md ]; then
ROADMAP=".planning/ROADMAP.md"
else
echo "ERROR: No roadmap found (.planning/ROADMAP.md)"
exit 1
fi
Read roadmap content for parsing.
Parse the roadmap to find the current milestone section:Example structure:
## Current Milestone: v1.0 Foundation
### Phase 4: Focused Command System
### Phase 5: Path Routing & Validation
### Phase 6: Documentation & Distribution
Find the highest integer phase number in the current milestone:
Example: If phases are 4, 5, 5.1, 6 → next is 7
Format as two-digit: printf "%02d" $next_phase
# Example transformation:
# "Add authentication" → "add-authentication"
# "Fix critical performance issues" → "fix-critical-performance-issues"
slug=$(echo "$description" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g' | sed 's/^-//;s/-$//')
Phase directory name: {two-digit-phase}-{slug}
Example: 07-add-authentication
Read slicing principles:
cat "$(dirname "$0")/references/slicing-principles.md"
Check phase description against red flags:
Red Flag 1: Horizontal layer name
Red Flag 2: Setup-only phase
Red Flag 3: Continuation of previous phase
If red flag detected, use AskUserQuestion:
The phase description "{description}" may not follow vertical slicing principles.
**Detected issue:** {red flag type}
**Vertical slicing principle:** Each phase should deliver a complete, demo-able feature (DB + API + UI) rather than a horizontal layer or infrastructure setup.
**Alternative structures:**
Option 1: Feature-focused phase
- Description: "{suggest feature-focused alternative}"
- Structure: Complete capability from DB to UI
- Demo-able: {what can be demonstrated}
Option 2: Inline setup with feature
- Description: "{suggest inlined alternative}"
- Structure: Setup combined with first feature using it
- Demo-able: {what can be demonstrated}
Option 3: Proceed as-is
- Use current description
- Note: May result in non-demo-able phase
If no red flags, continue silently.
Purpose: Prevent horizontal layer phases and setup-only phases from entering the roadmap. Catch slicing issues at insertion time, not during planning.
Create the phase directory structure:phase_dir=".planning/phases/pending/${phase_num}-${slug}"
mkdir -p "$phase_dir"
Confirm: "Created directory: $phase_dir"
Add the new phase entry to the roadmap:Find the insertion point (after last phase in current milestone, before "---" separator)
Insert new phase heading:
### Phase {N}: {Description}
**Goal:** [To be planned]
**Depends on:** Phase {N-1}
{if ISSUE_NUMBER: **Issue:** Closes #{ISSUE_NUMBER}}
**Plans:** 0 plans
Plans:
- [ ] TBD (run /kata-plan-phase {N} to break down)
**Details:**
[To be added during planning]
If ISSUE_NUMBER is set (from --issue flag), include the **Issue:** Closes #{N} line.
This ensures PRs referencing this phase will auto-close the GitHub issue.
Write updated roadmap back to file
Preserve all other content exactly (formatting, spacing, other phases).
Update STATE.md to reflect the new phase:.planning/STATE.md- Phase {N} added: {description}
If "Roadmap Evolution" section doesn't exist, create it.
Present completion summary:Phase {N} added to current milestone:
- Description: {description}
- Directory: .planning/phases/{phase-num}-{slug}/
- Status: Not planned yet
{if ISSUE_NUMBER: - Issue: Closes #${ISSUE_NUMBER} (linked from ${ISSUE_FILE})}
Roadmap updated: {roadmap-path}
Project state updated: .planning/STATE.md
---
## ▶ Next Up
**Phase {N}: {description}**
`/kata-plan-phase {N}`
<sub>`/clear` first → fresh context window</sub>
---
**Also available:**
- `/kata-add-phase <description>` — add another phase
- Review roadmap
---
<anti_patterns>
<success_criteria> Phase addition is complete when:
.planning/phases/pending/{NN}-{slug}/