--- name: track-backlog description: View and manage the tracker backlog — show in-progress work, current priorities, sprint contents; triage untriaged items; promote ideas to ready; plan a sprint (big rocks + little rocks, parallel-safe). Use when the user says /track-backlog, "what's in progress", "show the backlog", "triage", "promote X", "plan a sprint", "what should we work on next". argument-hint: [status | triage | promote | sprint plan | sprint show] --- # track-backlog — query and manage the backlog Issue frontmatter (`tracker/issues/*.md`) is the database; all reads and writes go through `tools/track.py`. Never hand-edit BACKLOG.md (generated) or frontmatter status fields (use `set`). Process reference: `tracker/readme.md`. ## Operations (pick by argument or intent) ### status (default, no argument) Show the working picture, three short views: ``` python tools/track.py list --status in-progress python tools/track.py list --sprint # if a sprint is active python tools/track.py list --status ready --sort priority ``` Report: what's moving, what's queued, anything stale (in-progress with no recent commits touching its area — flag, don't assume). Keep it to one screen. ### triage ``` python tools/track.py list --status idea --sort priority ``` For each untriaged item (`?` fields) or aging idea, propose: priority (severity × frequency × what it blocks), effort, risk, and promote/keep/drop. Present as a short table of proposals; apply only what the user approves, via: ``` python tools/track.py set --priority p2 --effort M --risk low [--status ready] ``` Recommend dropping ideas untouched for weeks with no champion — closing with `--dropped` is cheap; the file remains greppable. ### promote Promotion = `idea` → `ready` ("an agent may pick this up"). Before flipping: - priority/effort/risk must be real values, not `?` - `feature`/`debt`/`bug` REQUIRE a `## Done means` section (2–5 verifiable statements) to exist in the body first — add it if missing before promoting - `problem` needs no acceptance criteria (it closes with an ADR) ``` python tools/track.py set --status ready --priority ... --effort ... --risk ... ``` ### sprint plan (e.g. 2026-01-A) A sprint is a **working set**, not a time-box: the batch of issues selected for parallel execution now. Selection is not priority order alone — compose it: 1. **Big rocks** (1–3): highest impact `ready` items, typically L/M effort. 2. **Little rocks**: S/M items that fill gaps — quick wins, debt paydown, and items that de-risk future big rocks. 3. **Parallel safety**: check each candidate's `## Dependencies` section (blocked-by must be empty or done; "touches" must not collide with another sprint member — two agents editing the same area = merge pain). Prefer spreading across areas. 4. **Risk balance**: not all high-risk items at once; pair each risky item with sure things so the sprint always ships something. Propose the set with one-line reasoning each; on approval: ``` python tools/track.py set --sprint # for each member ``` Remove with `--sprint none`. Only one sprint should normally be active. ### sprint show ``` python tools/track.py list --sprint ``` Plus per-item one-liner: on track / blocked / not started. ## Queries agents can use directly ``` python tools/track.py list --open --area --format csv python tools/track.py list --status ready --sort priority python tools/track.py list --type debt ``` ## Rules - Every `set` regenerates BACKLOG.md — no manual index edits, ever. - Don't change priorities silently: triage and promotion changes are proposed to the user first (exception: filing brand-new items, where the filer sets initial values). - Closing items goes through `python tools/track.py close --outcome "..."` (banner + archive the plan doc; see readme lifecycle step 4).