Bug
update_plan_tasks replaces the entire task list for an anchor, generating new UUIDs for every task. This breaks:
milestone_tasks links (orphaned task_ids)
task_context links (orphaned task_ids)
task_dependencies (orphaned blocked_by/blocks references)
Repro
- Create tasks via
update_plan_tasks
- Link tasks to milestones via
link_task_to_milestone
- Call
update_plan_tasks again with the same anchor (e.g. to add one task)
- All milestone links are now broken — old UUIDs no longer exist
Expected
Adding a task to an anchor should not destroy existing task UUIDs. Options:
- Add an
add_task MCP tool that appends without touching existing tasks (preferred — simple, no side effects)
- Make
update_plan_tasks preserve UUIDs by matching on task text and only creating new UUIDs for genuinely new tasks
- Add
upsert semantics — accept optional id field in the task list, preserve matching IDs
Impact
Any MCP client (Claude Code, Beacon, external tools) that calls update_plan_tasks to add/reorder tasks will silently break all relationship links. This makes milestone tracking unreliable.
Workaround
Use patch_task for modifying existing tasks. For adding new tasks, there is currently no safe MCP tool — must use the API directly.
Bug
update_plan_tasksreplaces the entire task list for an anchor, generating new UUIDs for every task. This breaks:milestone_taskslinks (orphaned task_ids)task_contextlinks (orphaned task_ids)task_dependencies(orphaned blocked_by/blocks references)Repro
update_plan_taskslink_task_to_milestoneupdate_plan_tasksagain with the same anchor (e.g. to add one task)Expected
Adding a task to an anchor should not destroy existing task UUIDs. Options:
add_taskMCP tool that appends without touching existing tasks (preferred — simple, no side effects)update_plan_taskspreserve UUIDs by matching on task text and only creating new UUIDs for genuinely new tasksupsertsemantics — accept optionalidfield in the task list, preserve matching IDsImpact
Any MCP client (Claude Code, Beacon, external tools) that calls
update_plan_tasksto add/reorder tasks will silently break all relationship links. This makes milestone tracking unreliable.Workaround
Use
patch_taskfor modifying existing tasks. For adding new tasks, there is currently no safe MCP tool — must use the API directly.