Tab · Product
Roadmap
The single source of truth for what's shipped vs. what's queued. Phases, progress bars, and a track filter — generated from docs/roadmap.md and reflected into TODO.md on every PR.
See it in motion
Where to find it
- Localhost:
http://localhost:4000/roadmap.html?repo=<id> - Source: Generated from
docs/roadmap.md.TODO.mdis the regenerated view that AI agents read. - Keyboard: ⌘ K then
roadmap, or g r jumps direct. - Sidebar: Product → Roadmap (first item).
What it does for you
You'll know what's shipped vs. queued.Phase-by-phase progress bars with shipped (✅) vs. in-flight (🚧) vs. queued (⏳). No drift between the website and the brain — they read the same source.
You'll see the receipts.Each row links to the PR that shipped it, the feature doc that describes it, and the plan doc that scoped it. You can trace any checkbox back to the conversation it came from.
Your AI reads the same plan.
TODO.md regenerates from this file on every PR. Hand your agent the roadmap and it knows exactly which phase to extend.Configure
Nothing — the roadmap is a flat .md. Edits flow through the standard PR process.
- Edit
docs/roadmap.mdin a state-doc PR — these auto-merge in minutes. - Run
npm run sync-todoto regenerateTODO.md. The generated-view CI gate enforces this. - Status drift is a defect — flip a row to ✅ in the same PR that ships the code.
Use it well
Edit the roadmap in a dedicated state-doc PR.
Don't bundle a roadmap change into a feature PR — feature branches are long-lived and silently roll back sibling roadmap updates on main.Flip the checkbox in the same PR that ships the code.
Every shipped feature moves its row to ✅ atomically. A row showing 🚧/⏳ for done work is a defect, not a cosmetic lag.Link every row to receipts.
Each entry should link the PR, the feature doc, and the plan doc. Tracing a checkbox back to the conversation it came from is what makes this a brain, not a TODO list.Run sync-todo on every roadmap edit.
CI's generated-view gate enforces it. The regeneratedTODO.mdis what your AI reads next time it walks in cold.
Examples
✓
Adding a new phase
New phase = new ## ⏳ Phase N — <Name> heading + sub-checklist. Link to a plan doc at docs/plans/phase-N-<slug>.md. Run npm run sync-todo. State-doc PR. Auto-merges.⚠
When the roadmap and the live tabs disagree
That's a status-drift defect. Open the offending feature's row, check the actual surface, and fix the row in the same PR. CI's surface-drift gate catches the worst of it; the rest is process.