todo
TODO Scanner
Scan a codebase for incomplete work and maintain a living TODO.md grouped by feature clusters ready for /prd input. Do NOT implement anything — only inventory and organise.
Detect Workflow
- TODO.md does not exist → run Steps 1–4 (Initial Creation)
- TODO.md exists → run Steps 0–4 (Subsequent Update)
Step 0 — Find Completed Work (update only)
Parse Last updated: YYYY-MM-DD from existing TODO.md. Run git log --since="<timestamp>" --oneline, map commits to unchecked items, mark completed with [x] and commit hash. Never remove unchecked items.
Step 1 — Scan Codebase for Gaps
Search for each category and collect findings:
- Code comments:
TODO,FIXME,HACK,XXX,PLACEHOLDER - Mock data: Hardcoded arrays,
faker,seed,mockin non-test files - Placeholder components: Empty
<div>bodies,<!-- TODO -->, stub templates - Missing pages: Routes referencing nonexistent files
- Untested code: Source files with no corresponding test file
- Empty/stub files: Files under 5 lines, empty function bodies
- Design references: Mockups, wireframes in
docs/,designs/,assets/
Step 2 — Check PRDs
Read tasks/prd-*.md. Annotate groups with > PRD exists — don't duplicate already-spec'd features.
Step 3 — Group into Feature Clusters
Organise findings into logical feature groups. Each group name should be descriptive enough to feed directly into /prd.
Step 4 — Compute Progress & Write / Update TODO.md
Count total items (- [ ] + - [x]), completed (- [x]), and remaining. Compute % = done / total * 100.
Overall Progress bar: Render a 40-char bar using █ for filled and ░ for empty, e.g. [████░░░░░░] 25.0% 10 / 40.
Weekly Snapshot table: On initial creation, add a baseline row with Done=0, Delta=—, and today's date. On update, append a new row only if the date differs from the last row — set Delta to +N (items completed since last row). Never remove previous rows.
Write to project root. On update, preserve all unchecked items and update the timestamp.
# TODO
> Last updated: YYYY-MM-DD via /todo
---
## Overall Progress
\`\`\`
[███████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 17.0% 28 / 165
\`\`\`
---
## Weekly Snapshot
| Date | Done | Delta | Remaining | % Complete | Notes |
| ---------- | ---- | ----- | --------- | ---------- | ----------------------------- |
| 2026-02-24 | 0 | — | 165 | 0.0% | Baseline — TODO files created |
| 2026-02-25 | 28 | +28 | 137 | 17.0% | First working week |
---
## [Feature Group Name]
- [ ] Self-contained feature description ready for /prd input (app/components/Foo.vue:12)
- [x] Completed item (via commit abc1234)
## [Another Feature Group]
> PRD exists: `tasks/prd-feature-name.md`
- [ ] Sub-task not covered by existing PRD (src/pages/bar.vue:5)
Rules
- Idempotent — running twice produces the same result
- Additive only — never remove unchecked items on update
- No implementation — only inventory and organise, never write code
- PRD-aware — check
tasks/prd-*.mdand annotate groups accordingly - Always timestamp — update
Last updatedon every run - Source locations — include file:line for traceability
- Self-contained items — each
- [ ]must work as standalone/prdinput
Checklist
- All gap categories scanned;
tasks/prd-*.mdchecked - Items grouped by feature with source locations
- Each item is self-contained
/prdinput -
Last updatedtimestamp set; no unchecked items removed