skills/doc-roadmap-add-tasks/SKILL.md
{{ 𝛀𝛀𝛀 }} 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.
npx skillsauth add jasonwarrenuk/goblin-mode Roadmap: Add TasksInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.
Check in this order:
.claude/roadmaps.json — parse if present. One entry: use it. Multiple: list and ask.docs/roadmaps/ directory — list .md files. One file: use it. Multiple: ask.Grep for classDef.*mile to find roadmap files elsewhere.Read the full roadmap file before proceeding. You need to understand the existing task graph before you can add to it.
Extract from the user's description:
If any of these are ambiguous, ask before proceeding. A badly placed task is worse than a delayed one.
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.
Scan existing tasks for ones that this new task logically requires. Candidates:
:::open that this task logically extendsIf the task has incoming dependencies, it goes in the Blocked section (or To Do if all its dependencies are already completed).
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.
Before writing anything, verify:
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:
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:
- [ ] {NewID}. {Unlocked capability} *(placeholder — depends on {NewTaskID})*Don't create placeholders for tasks that are obviously terminal (e.g. "deploy to production", "write final release notes").
| Condition | Section |
|------------------------------------|---------|
| All dependencies completed ([x]) | 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.
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."
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 — **depends on {NewID}** added
Update the Mermaid Progress Map (at <a name="map">):
:::open; otherwise omit (defaults to :::blocked):::open to itAdd any placeholder child task in the appropriate section and Mermaid diagram
Report:
These match the existing roadmap format — never deviate:
- [ ] {ID}. {Description}— **depends on {ID}, {ID}**- [x] {ID}. {Description}{ID}["{ID}<br/>{Category}<br/>{short desc}"]:::open (no blockers), default/:::blocked (has blockers), :::mile (milestone node){A} --> {B} (A must complete before B can start)tools
{{ 𝚫𝚫𝚫 }} Rebuild roadmap-system.zip, the distributable snapshot of the roadmap tooling (scripts, HTML template, conventions reference, and every roadmap-touching skill, including this one).
tools
--- name: "Suggest: Task" description: "{{ 𝚫𝚫𝚫 }} Suggest the next logical task — grounded in the roadmap's pre-vetted ready-set when one exists, codebase analysis otherwise" when_to_use: "When you don't know what to work on next and want a grounded recommendation rather than picking arbitrarily." model: haiku effort: low disable-model-invocation: true allowed-tools: ["Read", "Glob", "Grep", "Bash(python3:*)", "Bash(npm:*)", "Bash(bun:*)", "Bash(pnpm:*)", "Bash(deno:*)"] argument-hint: [named
development
{{ 𝛀𝛀𝛀 }} Convert an old simple-style roadmap (single Markdown, four statuses, <a name> anchors, roadmaps.json pointer registry) into the rich phase-array format (roadmaps.json source of truth + PHASE task list + prose overview).
data-ai
{{ ƔƔƔ }} Create a pull request to main — wordy or shiny (with screenshots), ready-for-review or draft