Goblin-mode roadmap-task-adder
{{ ๐๐๐ }} Add a task to a project roadmap with correct ID, dependency wiring, and graph integrity. Use this skill whenever the user wants to add a task, feature, or work item to a roadmap โ even if they just say 'add this to the roadmap', 'put this in the plan', or 'track this as a task'. Handles task ID assignment, section placement, dependency edges in both directions, and ensures no task is left as an unconnected island.
git clone https://github.com/JasonWarrenUK/goblin-mode
T=$(mktemp -d) && git clone --depth=1 https://github.com/JasonWarrenUK/goblin-mode "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/roadmap-task-adder" ~/.claude/skills/jasonwarrenuk-goblin-mode-roadmap-task-adder && rm -rf "$T"
skills/roadmap-task-adder/SKILL.mdRoadmap Task Adder
Adds a well-formed task to an existing project roadmap. The job is not just appending a line โ it's placing the task correctly in the dependency graph, wiring its relationships, and leaving the roadmap in a coherent state.
Step 1 โ Locate the roadmap
Check in this order:
- User specified a path โ use it directly
โ parse if present. One entry: use it. Multiple: list and ask..claude/roadmaps.json
directory โ listdocs/roadmaps/
files. One file: use it. Multiple: ask..md- Fallback โ
forGrep
to find roadmap files elsewhere.classDef.*mile
Read the full roadmap file before proceeding. You need to understand the existing task graph before you can add to it.
Step 2 โ Understand what the user wants to add
Extract from the user's description:
- Task description โ what does this task involve?
- Milestone โ which milestone does it belong to? If unclear, ask.
- Category โ which 2โ3 letter category prefix fits? Look at existing categories in that milestone.
- Dependencies โ does this task require anything to be done first? Does it unblock anything that currently exists?
If any of these are ambiguous, ask before proceeding. A badly placed task is worse than a delayed one.
Step 3 โ Assign a task ID
Read the existing tasks in the target milestone and category. Find the highest sequence number used for that category, then assign
next = highest + 1.
Format:
{Milestone}{Category}.{Seq} โ e.g. 2TI.15, 1WA.4
Sub-tasks use alpha suffix:
2TI.15a, 2TI.15b
Never reuse an ID, even if a task was removed.
Step 4 โ Identify dependencies
Incoming dependencies (what this task depends on)
Scan existing tasks for ones that this new task logically requires. Candidates:
- Tasks the user explicitly mentioned
- Tasks whose descriptions suggest they're prerequisites
- Any task marked
that this task logically extends:::open
If the task has incoming dependencies, it goes in the Blocked section (or To Do if all its dependencies are already completed).
Outgoing dependencies (what this task enables)
Scan existing tasks for ones that would be unblocked or directly enabled by this new task. Ask yourself: does completing this task change the status of any existing task in the Blocked section?
If yes, you'll need to add this task as a dependency to those tasks' descriptions and add the corresponding edges to the Mermaid diagram.
Step 5 โ Graph integrity checks
Before writing anything, verify:
Orphan check
A task is orphaned if it has no dependency edges at all โ nothing flows into it, nothing flows out of it. This is a warning, not a blocker. Some tasks genuinely stand alone (e.g. a one-off spike, an independent refactor).
If the new task would be orphaned:
- Warn the user: "This task has no connections to the existing graph. Is that intentional?"
- Suggest the most plausible connection based on the task description
- Proceed with the user's call
Childless check
A task is "childless" if nothing depends on it โ it's a leaf node with no known successors. This is fine for near-future work, but for tasks that clearly enable further work, it's worth capturing that potential.
If the new task is childless and its nature suggests it unlocks future work:
- Create a placeholder child task in the appropriate future milestone (or the same milestone if relevant)
- Placeholder format:
- [ ] {NewID}. {Unlocked capability} *(placeholder โ depends on {NewTaskID})* - Place it in the Blocked section
- Add the dependency edge in the Mermaid diagram
- Tell the user what placeholder was created and why
Don't create placeholders for tasks that are obviously terminal (e.g. "deploy to production", "write final release notes").
Step 6 โ Determine section placement
| Condition | Section |
|---|---|
All dependencies completed () | To Do |
| Has incomplete dependencies | Blocked |
| User says work has started | In Progress |
| Work is already done | Completed |
Default to Blocked if uncertain โ it's easy to move up.
Step 7 โ Prepare the proposal
Do not edit the file yet. Present the proposal:
New task: {ID}. {Description} Milestone: {N} โ {Milestone Name} Section: {Blocked / To Do / In Progress} Dependencies (in): {list of task IDs, or "none"} Dependencies (out): {list of task IDs this enables, or "none"} Placeholder child: {ID and description, or "none"} Graph changes: + node: {ID}["`*{ID}*<br/>**{Category}**<br/>{short desc}`"]:::{open|blocked} + edges: {list of new edges} ~ modified: {any existing task descriptions updated with new dependency clause}
Then ask: "Does this look right? I'll write to the roadmap on your say-so."
Step 8 โ Write to the roadmap
Once approved:
-
Add the task line in the correct section under the correct milestone anchor
- [ ] {ID}. {Description} โ **depends on {IDs}**Omit the depends clause if there are no incoming dependencies.
-
Update any existing tasks whose descriptions now need
addedโ **depends on {NewID}** -
Update the Mermaid Progress Map (at
):<a name="map">- Add the node definition
- Add all new edges
- If the new task has no incoming dependencies, use
; otherwise omit (defaults to:::open
):::blocked - If any existing task's blockers are now all resolved, add
to it:::open
-
Add any placeholder child task in the appropriate section and Mermaid diagram
Step 9 โ Confirm
Report:
- Task ID and description added
- Section placed in
- Dependency edges added (list)
- Any existing tasks modified
- Any placeholder tasks created
- Orphan warning if applicable
Conventions
These match the existing roadmap format โ never deviate:
- Task line:
- [ ] {ID}. {Description} - Dependency clause:
โ **depends on {ID}, {ID}** - Completed task:
- [x] {ID}. {Description} - Mermaid node:
{ID}<br/>{Category}<br/>{short desc}{ID}[""] - Classes:
(no blockers), default/:::open
(has blockers),:::blocked
(milestone node):::mile - Edges:
(A must complete before B can start){A} --> {B}