cc-os/docs/adr/0029-os-backlog-card-move-w...

2.6 KiB

id date status supersedes superseded-by affected-paths affected-components
0029 2026-07-12 Accepted
plugins/os-backlog/lib/backlog/cards.rb
plugins/os-backlog/bin/os-backlog
plugins/os-backlog/skills/capture/SKILL.md
plugins/os-backlog/skills/list/SKILL.md
os-backlog

0029 — os-backlog card-move with CLI-enforced column ownership; afk-ready cards skip Review

Context

The os-backlog process policy always intended the AI to move the cards it works (Doing -> Review at most), but the shipped slices scoped column moves out of the CLI entirely, so worked cards piled up in their original columns with status comments instead of moving — blocked cards sat in Backlog and shipped work waited on manual mouse-driven moves. Separately, the Review -> Done human sign-off gate meant every completed autonomous card demanded per-card sifting by the user, a growing annoyance the user explicitly rejected (2026-07-12).

Decision

Add os-backlog card-move --board NAME --card ID --to COLUMN backed by planka-api 0.2.0 Cards#move, with the ownership rules enforced deterministically in lib/backlog/cards.rb rather than skill prose: (1) no move into or out of Next (human-curated both directions); (2) hitl-labeled cards are never moved by the AI; (3) no move out of Done; (4) move to Done allowed only for afk-ready-labeled cards; (5) all other moves among Backlog/Doing/Waiting/Review allowed. Autonomy semantics amended: afk-ready cards skip Review — shipped + verified goes straight to Done; semi cards still stop at Review for human sign-off. Working a card now means moving it: Doing when started, Waiting + blocker comment when blocked, Review (semi) or Done (afk-ready) when shipped.

Consequences

Easier: board state reflects reality without human mousing; blocked work is visible in Waiting; no Review pile of autonomous work to sift. Harder: mistakes in afk-ready work surface later since no human skims it before Done (accepted trade-off — 'we will deal with it then'); the guardrail table lives in code and must be changed via a superseding ADR, not a skill edit.

Alternatives rejected

  1. Keep Review -> Done as a human gate but batch it (user says 'approve review', AI moves them) — rejected by the user: still a recurring sifting chore, deferred as a possible future correction if unreviewed-Done becomes a pain point. 2) Unrestricted card-move with rules only in SKILL.md prose — rejected: prose rules are exactly what drifted out of sync with the CLI in the first place; deterministic enforcement cannot be forgotten by a future skill edit. 3) Status quo (comments instead of moves) — rejected: blocked cards lingering in Backlog created confusion.