Roadmap Management
Manage TODO.md - the sequenced project roadmap that drives all implementation work. TODO.md is the sequencing authority: milestones are deliberately ordered and each depends on the previous. Every mutation must preserve this invariant.
Authoritative format: See references/format-specification.md for the exact structural rules, naming conventions, line widths, indentation, and numbering scheme. Load this reference before any write operation.
Running scripts bundled with this skill
Script paths in this document (e.g. scripts/) are resolved relative to this SKILL.md file, not to your current working directory. If a relative command fails to resolve, prefix it with the path your platform loaded this SKILL.md from.
Fallback. If python3 cannot be located, analyze the script's purpose and logic and execute its intent with available tools, but warn the user that python is not available and the logic was executed with a fallback approach that may not be perfect.
Operations
Status - Progress Report
- Read
TODO.md completely.
- For each milestone, count completed (
[x]) vs total tasks.
- Identify the active milestone - the first milestone with incomplete tasks.
- Report:
- Overall progress (completed / total tasks, percentage)
- Per-milestone breakdown (completed / total)
- Active milestone name and remaining tasks
- Any tasks that appear blocked (reference other incomplete tasks)
Next - Determine What to Work On
- Read
TODO.md.
- Find the active milestone (first with incomplete tasks).
- Within that milestone, find the first
- [ ] task - this is the next task because milestones are sequential and tasks within them are ordered by dependency.
- Return the task ID, description, and verify criteria.
- If the task references architecture sections, note them so the implementer knows what to read first.
Add - Insert a New Task
- Read
TODO.md and references/format-specification.md.
- Determine the correct milestone based on the task's theme and dependencies. Fundamental infrastructure goes earlier; feature-specific work goes later.
- Determine the next sequential task number within that milestone. If the last task is
N.M, the new task is N.(M+1). Never renumber existing tasks.
- Write the task following the exact format:
- Checkbox:
- [ ] N.M
- Description: imperative form, self-contained, wrapped at 90 characters
- Continuation lines: 6-space indent
- Verify: line describing how to confirm completion (tests, commands, or observable outcomes)
- Insert after the last task in the target milestone, before the next milestone heading.
- Validate the result (see Validate operation).
Example - well-formed task:
- [ ] 6.14 Implement dispatch rate limiting: enforce a maximum number of
dispatches per tick to prevent thundering herd on startup with large
backlogs. Use `agent.max_dispatches_per_tick` from config (default: 5).
See architecture Section 8.3.
**Verify:** unit test confirms dispatch stops after limit is reached even
when more eligible candidates exist. A second test confirms default value
of 5 when config field is absent.
Example - task that violates conventions (do NOT produce this):
- [ ] Add rate limiting
Why this fails: no task number, no milestone context, not self-contained, no verify criteria, description is vague.
Update - Modify Existing Tasks
- Read
TODO.md.
- Locate the task by its ID (e.g.,
6.10).
- Apply the requested change:
- Mark complete: Change
- [ ] to - [x]. Do not modify the description or verify line.
- Edit description: Preserve task number, checkbox state, and verify line structure. Wrap at 90 characters.
- Move task: Only within the same milestone. Renumbering across milestones breaks external references (plans, specs, PRs).
- Validate the result.
Triage - Add Deferred Item from Review or Discussion
Triage applies three filters before adding. A concern that fails any filter is not added.
- Architecture conflict gate. Read the relevant section of architecture documentation (if present). If the suggestion contradicts the spec's design intent, explain why and stop - do not add it.
- Redundancy check. Scan TODO.md for an existing task that covers this concern. If found, note the task ID and stop - do not create duplicates.
- Roadmap horizon test. Would this matter before the last defined milestone ships? If not, mention it as a future consideration but do not add it.
If all filters pass, follow the Add operation. Place the task in the milestone whose theme most closely relates to the concern.
Validate - Check Structural Integrity
- Run the validation script scripts/validate_roadmap.py with
TODO.md as input
- If
python3 is unavailable, verify manually against references/format-specification.md using this checklist:
- Report all violations with line numbers and suggested fixes.
- If no violations found, confirm the file is structurally sound.
Constraints
- Renumber only to close the gap a removal leaves. External artifacts (plans, specs, PRs, commit messages) reference task IDs, and contiguous numbering is a hard validation error, so a removal and stable IDs cannot both hold. Search the repository and its history for the IDs that would move, renumber only when nothing references them, and report which IDs changed.
- Never reorder milestones. They encode a dependency chain. Reordering requires explicit user approval because it implies architectural replanning.
- Remove a task only when its premise is gone - the work is already done by other means, or the thing it described no longer exists. A task whose wording went stale gets rewritten in place; a task that was completed gets
[x]. Removal is the user's call, not the agent's.
- Never modify project documentation based on roadmap work. The architecture doc is the upstream authority; the roadmap is downstream.
- Append only within milestones. New tasks go after the last existing task in the target milestone. Do not insert between existing tasks.
1---2name: manage-todo3description: Read, update, validate, and report on the project roadmap (TODO.md). Use when asked to add tasks, mark tasks complete, check roadmap status, find what to work on next, triage deferred items into the roadmap, validate TODO.md format, reorder or renumber tasks, or edit milestone descriptions. Also use when the user mentions 'roadmap', 'TODO', 'backlog', 'milestone', 'task list', or asks 'what's next'. Do NOT use for architecture decisions, for changelog entries, for creating implementation plans from specs or managing Issue Trackers (Jira, GitHub, Linear, etc.).4---5
6# Roadmap Management
7
8Manage TODO.md - the sequenced project roadmap that drives all implementation work. TODO.md is the **sequencing authority**: milestones are deliberately ordered and each depends on the previous. Every mutation must preserve this invariant.
9
10> **Authoritative format:** See [references/format-specification.md](references/format-specification.md) for the exact structural rules, naming conventions, line widths, indentation, and numbering scheme. Load this reference before any write operation.
11
12## Running scripts bundled with this skill
13
14Script paths in this document (e.g. `scripts/`) are resolved relative to **this** SKILL.md file, not to your current working directory. If a relative command fails to resolve, prefix it with the path your platform loaded this SKILL.md from.
15
16**Fallback.** If `python3` cannot be located, analyze the script's purpose and logic and execute its intent with available tools, but warn the user that python is not available and the logic was executed with a fallback approach that may not be perfect.
17
18## Operations
19
20### Status - Progress Report
21
221. Read `TODO.md` completely.
232. For each milestone, count completed (`[x]`) vs total tasks.
243. Identify the **active milestone** - the first milestone with incomplete tasks.
254. Report:
26 - Overall progress (completed / total tasks, percentage)
27 - Per-milestone breakdown (completed / total)
28 - Active milestone name and remaining tasks
29 - Any tasks that appear blocked (reference other incomplete tasks)
30
31### Next - Determine What to Work On
32
331. Read `TODO.md`.
342. Find the active milestone (first with incomplete tasks).
353. Within that milestone, find the first `- [ ]` task - this is the next task because milestones are sequential and tasks within them are ordered by dependency.
364. Return the task ID, description, and verify criteria.
375. If the task references architecture sections, note them so the implementer knows what to read first.
38
39### Add - Insert a New Task
40
411. Read `TODO.md` and [references/format-specification.md](references/format-specification.md).
422. Determine the correct milestone based on the task's theme and dependencies. Fundamental infrastructure goes earlier; feature-specific work goes later.
433. Determine the next sequential task number within that milestone. If the last task is `N.M`, the new task is `N.(M+1)`. Never renumber existing tasks.
444. Write the task following the exact format:
45 - Checkbox: `- [ ] N.M `
46 - Description: imperative form, self-contained, wrapped at 90 characters
47 - Continuation lines: 6-space indent
48 - **Verify:** line describing how to confirm completion (tests, commands, or observable outcomes)
495. Insert after the last task in the target milestone, before the next milestone heading.
506. Validate the result (see Validate operation).
51
52**Example - well-formed task:**
53
54```markdown
55- [ ] 6.14 Implement dispatch rate limiting: enforce a maximum number of
56 dispatches per tick to prevent thundering herd on startup with large
57 backlogs. Use `agent.max_dispatches_per_tick` from config (default: 5).
58 See architecture Section 8.3.
59 **Verify:** unit test confirms dispatch stops after limit is reached even
60 when more eligible candidates exist. A second test confirms default value
61 of 5 when config field is absent.
62```
63
64**Example - task that violates conventions (do NOT produce this):**
65
66```markdown
67- [ ] Add rate limiting
68```
69
70Why this fails: no task number, no milestone context, not self-contained, no verify criteria, description is vague.
71
72### Update - Modify Existing Tasks
73
741. Read `TODO.md`.
752. Locate the task by its ID (e.g., `6.10`).
763. Apply the requested change:
77 - **Mark complete:** Change `- [ ]` to `- [x]`. Do not modify the description or verify line.
78 - **Edit description:** Preserve task number, checkbox state, and verify line structure. Wrap at 90 characters.
79 - **Move task:** Only within the same milestone. Renumbering across milestones breaks external references (plans, specs, PRs).
804. Validate the result.
81
82### Triage - Add Deferred Item from Review or Discussion
83
84Triage applies three filters before adding. A concern that fails any filter is not added.
85
861. **Architecture conflict gate.** Read the relevant section of architecture documentation (if present). If the suggestion contradicts the spec's design intent, explain why and stop - do not add it.
872. **Redundancy check.** Scan TODO.md for an existing task that covers this concern. If found, note the task ID and stop - do not create duplicates.
883. **Roadmap horizon test.** Would this matter before the last defined milestone ships? If not, mention it as a future consideration but do not add it.
89
90If all filters pass, follow the **Add** operation. Place the task in the milestone whose theme most closely relates to the concern.
91
92### Validate - Check Structural Integrity
93
941. Run the validation script [scripts/validate_roadmap.py](scripts/validate_roadmap.py) with `TODO.md` as input
952. If `python3` is unavailable, verify manually against [references/format-specification.md](references/format-specification.md) using this checklist:
96 - [ ] File starts with `# ` title
97 - [ ] Every milestone uses `## Milestone N: Name` format
98 - [ ] Every milestone has a description paragraph before tasks
99 - [ ] Every task uses `- [x] N.M ` or `- [ ] N.M ` format
100 - [ ] Task numbers are sequential within each milestone (no gaps, no duplicates)
101 - [ ] Milestone numbers in task IDs match the milestone they appear under
102 - [ ] Every task has a `**Verify:**` section
103 - [ ] Continuation lines use exactly 6-space indent
104 - [ ] No line exceeds 96 characters (target 90, hard limit 96; inline code exempt)
105 - [ ] Tasks are self-contained - description alone is enough to implement
106 - [ ] Ordering is fundamental-to-specific within each milestone
107 - [ ] Completed tasks (`[x]`) precede incomplete tasks (`[ ]`) within a milestone (no interleaving)
1083. Report all violations with line numbers and suggested fixes.
1094. If no violations found, confirm the file is structurally sound.
110
111## Constraints
112
113- **Renumber only to close the gap a removal leaves.** External artifacts (plans, specs, PRs, commit messages) reference task IDs, and contiguous numbering is a hard validation error, so a removal and stable IDs cannot both hold. Search the repository and its history for the IDs that would move, renumber only when nothing references them, and report which IDs changed.
114- **Never reorder milestones.** They encode a dependency chain. Reordering requires explicit user approval because it implies architectural replanning.
115- **Remove a task only when its premise is gone** - the work is already done by other means, or the thing it described no longer exists. A task whose wording went stale gets rewritten in place; a task that was completed gets `[x]`. Removal is the user's call, not the agent's.
116- **Never modify project documentation** based on roadmap work. The architecture doc is the upstream authority; the roadmap is downstream.
117- **Append only within milestones.** New tasks go after the last existing task in the target milestone. Do not insert between existing tasks.