Dependencies & relations

Dependencies & relations

Connect todos that block, relate to, or belong to each other — and let "ready" work sort itself out.

Real work has ordering: the migration can’t ship before the schema change, the blog post waits on the feature. createtodo models this directly instead of leaving it in your head.

Kinds of relations

  • Blocks / blocked by — one todo must finish before another can start
  • Related to — todos that share context without an ordering
  • Duplicate of — the same work filed twice
  • Parent / subtodo — a todo broken into pieces

Add relations from a todo’s page, from a row’s context menu (Blocked by…, Blocking…, Related to…, Duplicate of…), or in the composer while creating the todo — a follow-up or a blocker found mid-work is linked the moment it is filed. Search the other todo by title or identifier; both sides show the connection. Blocking relations that would form a cycle are rejected.

A blocked todo is marked in the list, and the Blocked filter hides or isolates blocked work.

Why blockers pay off

Once blockers are recorded, “what can I actually work on?” becomes a query instead of a puzzle. The ct CLI’s ct ready lists exactly the todos that are open with no unresolved blockers, and closing a blocker reports what it just unblocked:

ct dep add MZ-124 MZ-123   # MZ-124 waits on MZ-123
ct ready                   # MZ-124 is hidden while MZ-123 is open
ct close MZ-123            # → reports MZ-124 is now unblocked

This is what makes handing a backlog to an agent safe: the agent works the frontier of unblocked todos in the right order, without being told what’s next.