housekeep-backlog — Living register of parked work
Degree of freedom: MIXED. Discovery scan [LOW freedom — run exactly].
Classification, dedup, priority [HIGH freedom].
Apply-now for the register only. You do not implement backlog items
here. Every plan-* skill creates parked work; this is the collector.
The failure mode is not making the inventory — it goes stale within a
month and nobody can tell if debt is shrinking. So this is docs-adr
for parked work: regenerate, diff against the last run, keep stable IDs.
Prefer docs/BACKLOG.md. Use a root BACKLOG.md only if the host already
has one.
This skill vs neighbors
| Skill |
Owns |
| housekeep-backlog (this) |
Discover + dedup + write/diff the register |
complete-everything |
Execute one approved plan to closure |
burndown-full |
Drive one mechanical change to 100% |
docs-adr |
Decision memory, not parked-work inventory |
plan-stub-checker |
Stub/dead-UI plan (feeds this register) |
workflow-feature-flag |
Flag debt execution |
workflow-housekeep |
README / dead files / deps — not the backlog |
workflow-release-prep |
What's done in the dirty tree → merge-ready PR |
enhance-agent-guardrails |
Installs the same-PR / "read BACKLOG.md" wording |
How to reason (every candidate)
- Locate — file:line or doc path; form (TODO / parked phase / skip /
open finding / flag)
- Interpret — what actual work is it? A bare
// TODO: fix is itself
a finding — tag needs-triage, do not drop it
- Classify — tech-debt / unfinished-feature / deferred-plan-phase /
test-gap / known-bug / decision-needed
- Status — still-relevant / verify-done / stale-or-obsolete
Skipping Interpret produces a register of context-free TODOs nobody can
action.
Worked example
Locate: docs/plans/auth-refactor.md — phases 1–2 checked, 3–4
unchecked; last commit 4 months ago.
Interpret: phase 3 is refresh-token rotation; phase 4 is audit
follow-ups parked mid-plan.
Classify: deferred-plan-phase (two items).
Status: ph3 still-relevant; ph4 — audit-auth-flows has since run,
so verify-done before carrying it.
Rows:
BL-014 | deferred-phase | auth-refactor ph3: refresh rotation | relevant | high | docs/plans/auth-refactor.md
BL-015 | deferred-phase | auth-refactor ph4: audit follow-ups | verify-done | med | docs/plans/auth-refactor.md
Phase 1 — Discover every source [LOW freedom — run all]
Miss none. Use workspace Grep/rg (not unbounded find). Load any
existing BACKLOG.md first — this run is a regeneration + diff.
- Code markers —
TODO|FIXME|HACK|XXX|WIP|@todo|@deprecated with
surrounding context; git blame when the age matters
- Plan/burndown docs —
docs/, plans/, plan-*.md,
.cursor/*-state.md: unchecked - [ ], "Phase N", "out of scope",
MATCH/DONE leftovers
- Closure deferrals —
complete-everything / burndown-full /
completion-judge recorded as deferred, blocked, or out-of-scope
- Disabled tests —
.skip / .todo / xit / xdescribe /
@Ignore / pytest.mark.skip
- Open audit findings — leftover
audit-* / plan-* reports not
yet burned down
- Commented-out blocks and flags gating unfinished features →
workflow-feature-flag for flag debt
- Tracker linkage — which items have tickets vs code-only
(untracked = highest risk of being lost)
Phase 2 — Deduplicate [HIGH freedom]
One real piece of work = one register row, even when a TODO, a plan
phase, and a deferral all describe it. Keep every source reference on
that row.
Phase 3 — Classify, status, prioritize [HIGH freedom]
- Status: relevant / verify-done (check before carrying) / stale
(propose removal — do not auto-delete)
- Priority: impact × effort as a signal, not a fake score. Security,
data-loss, and auth items are high regardless of effort
- Owner/context enough that a future session can act. No context →
needs-triage, not a guess
Phase 4 — Write the register [LOW freedom on format]
- Header — last-regenerated date, counts by class and status, delta
vs last run (new / closed / newly-stale)
- Index —
id | class | title | status | priority | source(s) | ticket?
- Stable IDs —
BL-NNN, never reused. Closed items move to
Recently closed (history is how you see debt shrinking)
- Agent hook — point agent rules at the register: read it before a
sprint/plan; new parked work adds a
BL- row in the same PR.
enhance-agent-guardrails installs that wording
Phase 5 — Keep it alive
Re-run diffs: gone markers → closed; new markers → new BL-; unchanged
rows keep ID and history. A scheduled pass fits workflow-housekeep.
High-priority items hand off to complete-everything / burndown-full.
Flag debt → workflow-feature-flag. Decisions-needed → docs-adr.
Self-critique before writing [LOW freedom — do not skip]
- Sources complete — every Phase-1 class was searched
- Deduped — one work item, one
BL-, all sources listed
- Actionable or tagged — context-free rows are
needs-triage, not dropped
- Inventory only — no implementation of backlog items this pass
- Diff honest — first run says so; later runs report new / closed / newly-stale
- IDs stable — no reuse; closed rows stay in Recently closed
Definition of Done
Output format
- Summary — totals by class and status; delta vs last run
- BACKLOG.md — index + Recently closed
- Newly discovered — the left-behind catch
- Verify-done / stale — await confirmation
- Handoffs — high →
complete-everything / burndown-full; flags →
workflow-feature-flag; decisions → docs-adr
1---2name: housekeep-backlog3description: Apply-now inventory of parked work — unfinished plans, deferred phases, TODO/FIXME, skipped tests, open findings — into a living BACKLOG.md that diffs new/done/stale. Use when "what's left behind", "inventory TODOs", "consolidate the backlog". Execute → complete-everything. Decisions → docs-adr.4license: MIT5---67# housekeep-backlog — Living register of parked work89**Degree of freedom: MIXED.** Discovery scan `[LOW freedom — run exactly]`.10Classification, dedup, priority `[HIGH freedom]`.1112Apply-now for the **register only**. You do not implement backlog items13here. Every `plan-*` skill *creates* parked work; this is the collector.14**The failure mode is not making the inventory — it goes stale within a15month and nobody can tell if debt is shrinking.** So this is `docs-adr`16for parked work: regenerate, diff against the last run, keep stable IDs.1718Prefer `docs/BACKLOG.md`. Use a root `BACKLOG.md` only if the host already19has one.2021## This skill vs neighbors2223| Skill | Owns |24|---|---|25| **housekeep-backlog** (this) | Discover + dedup + write/diff the register |26| `complete-everything` | Execute **one** approved plan to closure |27| `burndown-full` | Drive **one** mechanical change to 100% |28| `docs-adr` | Decision memory, not parked-work inventory |29| `plan-stub-checker` | Stub/dead-UI plan (feeds this register) |30| `workflow-feature-flag` | Flag debt execution |31| `workflow-housekeep` | README / dead files / deps — not the backlog |32| `workflow-release-prep` | What's *done* in the dirty tree → merge-ready PR |33| `enhance-agent-guardrails` | Installs the same-PR / "read BACKLOG.md" wording |3435## How to reason (every candidate)36371. **Locate** — file:line or doc path; form (TODO / parked phase / skip /38 open finding / flag)392. **Interpret** — what actual work is it? A bare `// TODO: fix` is itself40 a finding — tag `needs-triage`, do not drop it413. **Classify** — tech-debt / unfinished-feature / deferred-plan-phase /42 test-gap / known-bug / decision-needed434. **Status** — still-relevant / verify-done / stale-or-obsolete4445Skipping Interpret produces a register of context-free TODOs nobody can46action.4748## Worked example4950> **Locate:** `docs/plans/auth-refactor.md` — phases 1–2 checked, 3–451> unchecked; last commit 4 months ago.52> **Interpret:** phase 3 is refresh-token rotation; phase 4 is audit53> follow-ups parked mid-plan.54> **Classify:** deferred-plan-phase (two items).55> **Status:** ph3 still-relevant; ph4 — `audit-auth-flows` has since run,56> so verify-done before carrying it.57> **Rows:**58> `BL-014 | deferred-phase | auth-refactor ph3: refresh rotation | relevant | high | docs/plans/auth-refactor.md`59> `BL-015 | deferred-phase | auth-refactor ph4: audit follow-ups | verify-done | med | docs/plans/auth-refactor.md`6061---6263## Phase 1 — Discover every source [LOW freedom — run all]6465Miss none. Use workspace Grep/`rg` (not unbounded `find`). Load any66existing `BACKLOG.md` first — this run is a regeneration + diff.6768- **Code markers** — `TODO|FIXME|HACK|XXX|WIP|@todo|@deprecated` with69 surrounding context; `git blame` when the age matters70- **Plan/burndown docs** — `docs/`, `plans/`, `plan-*.md`,71 `.cursor/*-state.md`: unchecked `- [ ]`, "Phase N", "out of scope",72 MATCH/DONE leftovers73- **Closure deferrals** — `complete-everything` / `burndown-full` /74 `completion-judge` recorded as deferred, blocked, or out-of-scope75- **Disabled tests** — `.skip` / `.todo` / `xit` / `xdescribe` /76 `@Ignore` / `pytest.mark.skip`77- **Open audit findings** — leftover `audit-*` / `plan-*` reports not78 yet burned down79- **Commented-out blocks** and flags gating unfinished features →80 `workflow-feature-flag` for flag debt81- **Tracker linkage** — which items have tickets vs code-only82 (untracked = highest risk of being lost)8384## Phase 2 — Deduplicate [HIGH freedom]8586One real piece of work = one register row, even when a TODO, a plan87phase, and a deferral all describe it. Keep every source reference on88that row.8990## Phase 3 — Classify, status, prioritize [HIGH freedom]9192- Status: relevant / verify-done (check before carrying) / stale93 (propose removal — do not auto-delete)94- Priority: impact × effort as a signal, not a fake score. Security,95 data-loss, and auth items are **high** regardless of effort96- Owner/context enough that a future session can act. No context →97 `needs-triage`, not a guess9899## Phase 4 — Write the register [LOW freedom on format]100101- **Header** — last-regenerated date, counts by class and status, delta102 vs last run (new / closed / newly-stale)103- **Index** — `id | class | title | status | priority | source(s) | ticket?`104- **Stable IDs** — `BL-NNN`, never reused. Closed items move to105 **Recently closed** (history is how you see debt shrinking)106- **Agent hook** — point agent rules at the register: read it before a107 sprint/plan; new parked work adds a `BL-` row in the **same PR**.108 `enhance-agent-guardrails` installs that wording109110## Phase 5 — Keep it alive111112Re-run diffs: gone markers → closed; new markers → new `BL-`; unchanged113rows keep ID and history. A scheduled pass fits `workflow-housekeep`.114High-priority items hand off to `complete-everything` / `burndown-full`.115Flag debt → `workflow-feature-flag`. Decisions-needed → `docs-adr`.116117## Self-critique before writing [LOW freedom — do not skip]1181191. **Sources complete** — every Phase-1 class was searched1202. **Deduped** — one work item, one `BL-`, all sources listed1213. **Actionable or tagged** — context-free rows are `needs-triage`, not dropped1224. **Inventory only** — no implementation of backlog items this pass1235. **Diff honest** — first run says so; later runs report new / closed / newly-stale1246. **IDs stable** — no reuse; closed rows stay in Recently closed125126## Definition of Done127128- [ ] All Phase-1 sources scanned; existing register loaded and diffed129- [ ] Every item Locate→Interpret→Classify→Status130- [ ] Duplicates merged; security/data/auth flagged high131- [ ] `BACKLOG.md` written with stable IDs, counts, delta, Recently closed132- [ ] Same-PR / agent-rule hook recorded133- [ ] Stale items proposed, not auto-deleted134- [ ] High-priority handoffs named; items not implemented here135136## Output format1371381. **Summary** — totals by class and status; delta vs last run1392. **BACKLOG.md** — index + Recently closed1403. **Newly discovered** — the left-behind catch1414. **Verify-done / stale** — await confirmation1425. **Handoffs** — high → `complete-everything` / `burndown-full`; flags →143 `workflow-feature-flag`; decisions → `docs-adr`