Classify, tag, and contextualize a ticket that arrived with incomplete metadata. Use ONLY after raw pipe capture (log or test output with no type, tags, or file context) or after a bulk todo scan sweep. Do NOT use for tickets you created yourself with full metadata — that is wasted ceremony. Must NOT transition to active — that's for todo-analyze or todo-implement.
Purpose: Enrich tickets that arrived incomplete. Not a mandatory lifecycle phase.
Contract: Do NOT transition to active here. Leave tickets in open state unless marking wontfix or duplicate.
Use it when:
todo scan and need bulk classificationSkip it when:
--type, --tags, and --file already settodo-implementIf you already know what to do with a ticket, go directly to todo-implement. Triage is overhead unless the ticket is actually missing information.
todo show <id>
| Signal | Correct type |
|---|---|
| Something broken, incorrect behavior | bug |
| New capability requested | feature |
| Internal restructuring, no behavior change | refactor |
| Config, tooling, deps, cleanup | chore |
| Known-bad code to address later | debt |
todo edit <id> --type bug
Tags are freeform. Use kebab-case. Examples: auth, crash, regression, parser, performance.
todo edit <id> --tags "auth,crash,regression"
todo link <id> --to src/auth/handler.ts
todo dedup --strategy fingerprint
todo dedup --strategy file-line
If a duplicate is confirmed:
todo transition <id> duplicate --duplicate-of <canonical-id>
git add .todo/ && git commit -m "todo:<id> — duplicate of <canonical-id>"
todo transition <id> wontfix --note "Intended behavior: empty list is valid state"
git add .todo/ && git commit -m "todo:<id> — wontfix"
git add .todo/
git commit -m "todo:<id> — triage"
A ticket in open state with correct type, tags, and file links.
Hand off to todo-analyze (root cause unknown) or todo-implement (root cause known).
See CLI reference for all flags.