Summary
The plan-epic workflow had no milestone handling — it only created a Phase custom field inside the project board. Issues had no milestone when viewed outside the project.
Changes
src/skills/epic-to-project/SKILL.md — Added "Milestone Handling" section: list existing milestones, match by title (case-insensitive), reuse if found, create only if missing. Output format extended with milestones[] array and milestone per item.
src/agents/github-project-manager.md — New step to resolve milestones before linking issues; assigns milestone to each issue via gh issue edit; report summary shows milestone column; added safety rule: never duplicate milestones, never overwrite existing in --link-only mode.
src/commands/plan-epic.md — Plan preview now shows a Milestones section (reuse vs create) and Milestone column in the issue table.
Behavior
- Each Phase → one GitHub Milestone (same title, kept in sync with Phase field)
- Before creating:
gh milestone list → match by title → reuse if found
- In
--link-only mode: read issue's existing milestone and map to Phase field; do not overwrite
- Plan approval step shows milestone resolution clearly:
Phase 1 → reuse existing #2
Summary
The
plan-epicworkflow had no milestone handling — it only created a Phase custom field inside the project board. Issues had no milestone when viewed outside the project.Changes
src/skills/epic-to-project/SKILL.md— Added "Milestone Handling" section: list existing milestones, match by title (case-insensitive), reuse if found, create only if missing. Output format extended withmilestones[]array andmilestoneper item.src/agents/github-project-manager.md— New step to resolve milestones before linking issues; assigns milestone to each issue viagh issue edit; report summary shows milestone column; added safety rule: never duplicate milestones, never overwrite existing in--link-onlymode.src/commands/plan-epic.md— Plan preview now shows a Milestones section (reuse vs create) and Milestone column in the issue table.Behavior
gh milestone list→ match by title → reuse if found--link-onlymode: read issue's existing milestone and map to Phase field; do not overwritePhase 1 → reuse existing #2