---
name: backlog
version: 1.0.0
description: "The engineering backlog registry for deferred-but-approved work in this codebase. Every job the user defers ('defer it', 'add it to the list', 'later', 'not now') lands HERE with its full spec, origin, and unblock condition, so deferral never means loss. Load when the user defers work, asks 'what's on the backlog / the list', says 'work the backlog' / 'pick up <item>', or when completing an item. The bundled BACKLOG.md is the registry; entries move deferred -> ready -> in-progress -> done and are never deleted."
user-invocable: true
argument-hint: [list | add | pick <id> | done <id>]
allowed-tools: Read, Grep, Glob, Edit, Write
---

# backlog - deferred work, kept whole

> **Layer:** workflow - the deterministic registry routine for deferred jobs.
> **Bundled:** [BACKLOG.md](BACKLOG.md) - the registry. The heart of this skill.
> **Iron rule:** moving a job onto this list is a MOVE, never a rewrite - the FULL spec
> travels verbatim. A compressed one-liner is a loss; the point of the backlog is that
> deferring costs nothing later.

## When to load

- The user defers work: "defer it", "add it to the list", "later", "not now", "backlog this".
- The user asks about it: "what's on the backlog", "what's on the list", "what's owed".
- The user works it: "work the backlog", "pick up <id>", "do the next one".
- An item completes: mark it done (never delete).

## The registry contract

Every entry in `BACKLOG.md` carries, verbatim:

- **id** - short stable slug (`kebab-case`), assigned on add.
- **title** - one line.
- **state** - `deferred` -> `ready` -> `in-progress` -> `done`. Entries only move forward; nothing is deleted.
- **origin** - where it came from (the task/PR/finding/conversation that spawned it).
- **spec** - the FULL description, verbatim from when it was deferred. Not a summary.
- **unblock** - the condition that makes it actionable (a dependency, a decision, a date). `deferred` items without an unblock condition are just `ready`.

Prefer an append-only markdown table or section list in `BACKLOG.md`; never overwrite an entry's spec on a state change - only its `state` line moves.

## Operations

| Command | Action |
|---|---|
| `list` | Show entries grouped by state (ready first, then deferred, then in-progress; done collapsed). |
| `add` | Capture the deferred job with its full spec + origin + unblock condition. Assign an id. |
| `pick <id>` | Move `ready`/`deferred` -> `in-progress`; surface the full spec so work resumes with zero context loss. |
| `done <id>` | Move -> `done`. Keep the entry (it becomes the record of what was owed and delivered). |

## Why keep it whole

The failure mode this skill prevents: an agent defers a job with a one-line note, the surrounding context evaporates, and picking it up later means re-deriving the spec (or silently dropping it). Storing the full spec at defer-time makes deferral safe - the cost of "later" is paid once, up front, not lost.
