Problem
When a task syncs to Todoist, the task title gets the vault-relative source path(s) tacked on as raw text (e.g. Draft executive intro email 05-Areas/People/Internal/X.md) — not clickable, and the description is empty apart from the internal [dex:task-id] marker. You have to go find the right page yourself. This is a worse experience than Todoist's own Gmail/Slack integrations, where a task created from an email or Slack message is directly clickable back to its source.
Fix
parse_tasks_file in work_server.py now splits the trailing | path1 path2 ... reference list off the display title into a separate source_paths field, instead of leaving it baked into the title (the old cleanup regex assumed a bare People//Active/ prefix and silently failed to match the current 05-Areas/People/... convention).
Found and fixed a related bug in extract_file_refs_from_task: an unanchored pattern matched People/... as a substring of the correct 05-Areas/People/... path, producing a second, truncated, invalid duplicate for every reference.
task_sync.py builds an obsidian://open?vault=&file= URI for each source_paths entry, and picks a primary one (preferring a meeting/project/company page over a person page, since that's usually where the task's real context lives).
The Todoist adapter (.claude/hooks/adapters/todoist.cjs) now renders the task title as title and lists every referenced page as its own link in the description, alongside the existing sync-loop marker.
Caveats for a general fix
This assumes Obsidian usage — vault name is derived from the vault folder's name, which works but isn't configurable. Worth gating behind obsidian_mode (already tracked in user-profile.yaml) and/or generalizing for non-Obsidian vaults.
Only affects newly-created tasks — the Todoist adapter has no update operation, so tasks already synced before this fix keep their old plain-path format. Retrofitting existing tasks would need real update support.
Verified end-to-end against a live vault: clean title, correct link, click-through confirmed in the Todoist app.
Problem
When a task syncs to Todoist, the task title gets the vault-relative source path(s) tacked on as raw text (e.g. Draft executive intro email 05-Areas/People/Internal/X.md) — not clickable, and the description is empty apart from the internal [dex:task-id] marker. You have to go find the right page yourself. This is a worse experience than Todoist's own Gmail/Slack integrations, where a task created from an email or Slack message is directly clickable back to its source.
Fix
parse_tasks_file in work_server.py now splits the trailing | path1 path2 ... reference list off the display title into a separate source_paths field, instead of leaving it baked into the title (the old cleanup regex assumed a bare People//Active/ prefix and silently failed to match the current 05-Areas/People/... convention).
Found and fixed a related bug in extract_file_refs_from_task: an unanchored pattern matched People/... as a substring of the correct 05-Areas/People/... path, producing a second, truncated, invalid duplicate for every reference.
task_sync.py builds an obsidian://open?vault=&file= URI for each source_paths entry, and picks a primary one (preferring a meeting/project/company page over a person page, since that's usually where the task's real context lives).
The Todoist adapter (.claude/hooks/adapters/todoist.cjs) now renders the task title as title and lists every referenced page as its own link in the description, alongside the existing sync-loop marker.
Caveats for a general fix
This assumes Obsidian usage — vault name is derived from the vault folder's name, which works but isn't configurable. Worth gating behind obsidian_mode (already tracked in user-profile.yaml) and/or generalizing for non-Obsidian vaults.
Only affects newly-created tasks — the Todoist adapter has no update operation, so tasks already synced before this fix keep their old plain-path format. Retrofitting existing tasks would need real update support.
Verified end-to-end against a live vault: clean title, correct link, click-through confirmed in the Todoist app.