Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Roadmap parsing, analysis, and mutation operations for ROADMAP.md. Handles phase and milestone lifecycle including add, insert (decimal), remove, complete, and requirements coverage analysis.
.claude/skills/a5c-ai-roadmap-management/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 180% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 667% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 274% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 346% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 5% | 0% |
This skill combines the original lib/roadmap.cjs and lib/phase.cjs modules. It handles all roadmap mutations: adding phases, inserting decimal phases for urgent work, removing phases with renumbering, and marking phases complete.
Parse ROADMAP.md into structured data:
markdown# Roadmap ## Milestone v1.0: MVP Launch ### Phase 70: Project Setup - **Status**: completed - **Requirements**: R1 (project scaffolding), R2 (dev environment) - **Deliverables**: Package.json, tsconfig, eslint config, CI pipeline ### Phase 71: Database Layer - **Status**: completed - **Requirements**: R3 (data model), R4 (migrations) - **Deliverables**: Schema definitions, migration scripts, seed data ### Phase 72: Authentication - **Status**: in-progress - **Requirements**: R5 (user auth), R6 (OAuth2) - **Deliverables**: Login flow, token management, middleware ### Phase 73: API Endpoints - **Status**: planned - **Requirements**: R7 (REST API), R8 (validation) - **Deliverables**: CRUD endpoints, input validation, error handling ## Milestone v2.0: Enhanced Features ...
Parsed result:
json{ "milestones": [ { "version": "v1.0", "title": "MVP Launch", "phases": [ { "number": 70, "title": "Project Setup", "status": "completed", "requirements": ["R1", "R2"] }, { "number": 71, "title": "Database Layer", "status": "completed", "requirements": ["R3", "R4"] }, { "number": 72, "title": "Authentication", "status": "in-progress", "requirements": ["R5", "R6"] }, { "number": 73, "title": "API Endpoints", "status": "planned", "requirements": ["R7", "R8"] } ] } ] }
Append a new phase to the end of the current milestone:
add_phase(
milestone: "v1.0",
title: "Admin Dashboard",
requirements: ["R12", "R13"],
deliverables: "Admin UI, user management, analytics"
)
-> Phase 74: Admin Dashboard (appended after Phase 73)Insert a phase between existing phases for urgent work:
insert_phase(
after: 72,
title: "Fix Auth Token Refresh",
requirements: ["R5.1"],
deliverables: "Token refresh logic, session persistence"
)
-> Phase 72.1: Fix Auth Token Refresh (inserted between 72 and 73)Decimal phases:
72.1 is between 72 and 7372.2 is between 72.1 and 73Remove a future phase and renumber subsequent phases:
remove_phase(73)
-> Phase 73 removed
-> Phase 74 renumbered to Phase 73
-> All references updatedOnly future (planned) phases can be removed. Completed and in-progress phases cannot be removed.
Update phase status in the roadmap:
complete_phase(72)
-> Phase 72 status: completed
-> If all phases in milestone completed -> milestone ready for auditStatus transitions:
planned -> in-progress (when planning begins)in-progress -> completed (when execution finishes)completed -> verified (when verification passes)Verify 100% requirement coverage across phases:
coverage_analysis()
-> Total requirements: 13
-> Mapped to phases: 13
-> Unmapped: 0
-> Coverage: 100%
-> R1: Phase 70 (completed)
-> R2: Phase 70 (completed)
-> R5: Phase 72 (in-progress)
-> R5.1: Phase 72.1 (planned)
...Determine execution order based on dependencies:
dependency_graph()
-> Phase 70: no dependencies (can start immediately)
-> Phase 71: depends on Phase 70
-> Phase 72: depends on Phase 71
-> Phase 72.1: depends on Phase 72
-> Phase 73: depends on Phase 71 (not 72, can parallelize)Determine which phases belong to a milestone:
milestone_scope("v1.0")
-> Phases: [70, 71, 72, 72.1, 73]
-> Total: 5 phases
-> Completed: 2
-> In Progress: 1
-> Planned: 2
-> Progress: 40%Query phases by status:
phases_by_status("completed") -> [70, 71]
phases_by_status("in-progress") -> [72]
phases_by_status("planned") -> [72.1, 73]
next_phase() -> 72.1 (first planned phase after current)Read to load .planning/ROADMAP.mdEdit to insert before the next milestone heading or end of fileEdit to insert between the two phasesRead to load .planning/REQUIREMENTS.md for full requirement listnew-project.js - Create initial ROADMAP.md with milestone and phase structureprogress.js - Read roadmap for progress display and next-action routingcomplete-milestone.js - Determine milestone scope, verify all phases completeaudit-milestone.js - Read phase scope for audit, requirements coverage checkplan-phase.js - Read phase requirements and deliverables for planning contextadd-phase command - Add integer phase via this skillinsert-phase command - Insert decimal phase via this skillremove-phase command - Remove phase via this skilljson{ "operation": "parse|add|insert|remove|complete|coverage|dependencies|scope|query", "status": "success|error", "roadmap": { "milestoneCount": 2, "totalPhases": 8, "currentMilestone": "v1.0" }, "phase": { "number": 72, "title": "Authentication", "status": "completed", "requirements": ["R5", "R6"] }, "coverage": { "total": 13, "mapped": 13, "percentage": 100, "gaps": [] } }
| Setting | Default | Description | |---------|---------|-------------| | roadmapFile | .planning/ROADMAP.md | Path to ROADMAP.md | | requirementsFile | .planning/REQUIREMENTS.md | Path for coverage analysis | | startingPhaseNumber | 70 | First phase number for new projects | | allowDecimalPhases | true | Enable decimal phase insertion | | autoStatusTransition | true | Auto-update phase status on events |
| Error | Cause | Resolution | |-------|-------|------------| | ROADMAP.md not found | Planning directory not initialized | Run new-project first | | Phase not found | Referenced phase does not exist | Check phase number, list available phases | | Cannot remove active phase | Trying to remove in-progress/completed phase | Only planned phases can be removed | | Duplicate phase number | Phase number already exists | Use next available number or decimal | | Coverage gap detected | Requirements not mapped to any phase | Add phase or update existing phase to cover requirement | | Circular dependency | Phase depends on itself or cycle exists | Review dependency graph, break cycle |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 8,618 | 4,322 | -50% | 1 | 1 | 0% | 1,669 | 2,572 | +54% | 0 | 0 | — |
case-02 | fail→fail | 15,977 | 4,816 | -70% | 1 | 1 | 0% | 258 | 2,624 | +917% | 0 | 0 | — |
case-03 | fail→fail | 23,214 | 4,318 | -81% | 1 | 1 | 0% | 4,100 | 2,579 | -37% | 0 | 0 | — |
case-04 | fail→fail | 6,119 | 2,518 | -59% | 1 | 1 | 0% | 1,139 | 2,803 | +146% | 0 | 0 | — |
case-05 | pass→pass | 2,110 | 3,511 | +66% | 1 | 1 | 0% | 380 | 2,960 | +679% | 0 | 0 | — |
case-06 | fail→pass | 9,031 | 7,380 | -18% | 1 | 1 | 0% | 1,155 | 3,237 | +180% | 0 | 0 | — |
case-07 | fail→fail | 5,138 | 5,517 | +7% | 1 | 1 | 0% | 223 | 2,546 | +1042% | 0 | 0 | — |
case-08 | pass→pass | 3,630 | 2,087 | -43% | 1 | 1 | 0% | 644 | 2,689 | +318% | 0 | 0 | — |
case-09 | pass→pass | 7,379 | 4,293 | -42% | 1 | 1 | 0% | 1,241 | 3,090 | +149% | 0 | 0 | — |
case-10 | fail→pass | 2,096 | 3,728 | +78% | 1 | 1 | 0% | 418 | 3,205 | +667% | 0 | 0 | — |
case-11 | pass→pass | 7,734 | 3,958 | -49% | 1 | 1 | 0% | 1,298 | 3,012 | +132% | 0 | 0 | — |
case-12 | fail→pass | 4,483 | 4,700 | +5% | 1 | 1 | 0% | 878 | 3,284 | +274% | 0 | 0 | — |
case-13 | fail→pass | 3,995 | 1,989 | -50% | 1 | 1 | 0% | 577 | 2,576 | +346% | 0 | 0 | — |
case-14 | fail→pass | 14,440 | 1,688 | -88% | 1 | 1 | 0% | 2,478 | 2,612 | +5% | 0 | 0 | — |
case-15 | pass→pass | 1,855 | 1,867 | +1% | 1 | 1 | 0% | 338 | 2,635 | +680% | 0 | 0 | — |
case-16 | fail→fail | 10,323 | 3,115 | -70% | 1 | 1 | 0% | 1,822 | 2,922 | +60% | 0 | 0 | — |
case-17 | pass→pass | 11,878 | 4,731 | -60% | 1 | 1 | 0% | 1,857 | 2,998 | +61% | 0 | 0 | — |
case-18 | pass→pass | 3,411 | 2,268 | -34% | 1 | 1 | 0% | 596 | 2,656 | +346% | 0 | 0 | — |
case-19 | pass→pass | 2,650 | 1,614 | -39% | 1 | 1 | 0% | 508 | 2,600 | +412% | 0 | 0 | — |
case-20 | fail→fail | 15,387 | 13,448 | -13% | 1 | 1 | 0% | 2,507 | 4,923 | +96% | 0 | 0 | — |
case-21 | fail→fail | 8,614 | 8,484 | -2% | 1 | 1 | 0% | 1,650 | 2,603 | +58% | 0 | 0 | — |
case-22 | fail→fail | 14,339 | 8,432 | -41% | 1 | 1 | 0% | 3,158 | 4,199 | +33% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 17 counted toward the lift figure. The other 5 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 17 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.