docs: record os-backlog AFK slices (refs #9, #10-#13, #15)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XknQRvihHDpYE47RTmUR4N
This commit is contained in:
jared 2026-07-10 13:46:22 -04:00
parent 27f8e5f2b2
commit 763fb7727b
1 changed files with 41 additions and 0 deletions

View File

@ -119,6 +119,19 @@ correctly once caches are fresh.
note on failure (offline machine), never blocking session start. Closes the push-only gap noted
below; mirrors the push style of `vault_sync.py`/`memsearch_sync.py` in the opposite direction.
**os-backlog AFK slices shipped (2026-07-10):** PRD published as Forgejo issue #9 (state
pointer: Planka card `1816234194716592051`); sliced into issues #10#17 via `/to-issues`.
The five AFK slices are implemented and committed: #10 plugin scaffold + `board-ensure`
(uniform lists/labels incl. new `semi` autonomy label, Planka 2.1.1 quirks, `archived--`
rename convention), #11 `tracker` key in `.cc-os/config` + os-status `tracker-configured`
check, #12 pure routing resolver CLI, #13 `/os-backlog:capture` + `/os-backlog:list`
skills + card CLI, #15 `card-triage` + `board-audit` named agents. All deterministic parts
covered by stubbed-client tests (34 runs os-backlog, 49 os-status). Semi slices #14
(routing/migration skill), #16 (injection note + /to-issues routing), #17 (ops board +
rubric category + routing ADR) await human decision gates. Note: the planka-api gem is not
installed on this machine — fail-soft paths verified live; a live capture run is a
follow-up on a machine with the gem + Planka credentials.
**Remaining optional items:** additional project onboarding (one at a time, per ADR-013); bulk
vault migration. All required build steps complete as of 2026-06-15.
@ -475,6 +488,34 @@ symlinked into `~/.claude/plugins/os-status`
- Auto-commit+push via `vault_sync.py` SessionEnd hook (mirrors `memsearch_sync.py`;
push-only — SessionStart pull is optional future item for multi-machine)
**Global os-backlog plugin** — `cc-os/plugins/os-backlog/` (git-tracked, 2026-07-10);
symlinked into `~/.claude/plugins/os-backlog`; PRD Forgejo issue #9, slices #10#17
- Purpose: the AI's process-management surface over Planka — deterministic tracker routing
(Planka = task state by default; git issues = implementation specs only), mid-session
capture, pull-only listing, board lifecycle, and the three-value autonomy convention
(`hitl`/`semi`/`afk-ready`).
- Lib (Ruby, os-adr `lib/`+`bin/` pattern, installed planka-api gem only — no source
coupling): `board_spec.rb` (uniform lists/labels contract), `board_ensurer.rb`
(idempotent create/repair; Planka 2.1.1 `type` fields, shared-project + owner-manager
visibility fix, label color candidates with fallback; `archived--` rename convention),
`config.rb` (`.cc-os/config` parser), `resolver.rb` (pure repo→board decision:
`use`/`activate`/`stop-and-discuss`; no network), `cards.rb` (add-at-Backlog, snapshot,
attach_label, comment).
- CLI: `bin/os-backlog``board-ensure`, `activate`, `archive`, `resolve`, `card-add`,
`cards`, `snapshot`, `card-label`, `card-comment`; every path fails soft (one-line error,
exit 1) when the gem/Planka is unavailable.
- Skills: `/os-backlog:capture`, `/os-backlog:list` — carry the column-ownership rules (AI
creates at Backlog, Doing→Review at most, never Next or Review→Done, never self-assigns
`hitl`); list is pull-only per notification policy v2.
- Agents: `agents/card-triage.md` (priority + autonomy labels only; ambiguity → `hitl`),
`agents/board-audit.md` (four drift classes; writes at most comments).
- Tests: `tests/` — 34 runs/70 assertions against an in-memory `FakePlankaClient`; no live
API. Companion os-status check `tracker-configured` (issue #11) validates the `tracker`
key grammar and nudges unconfigured git projects (daily-snoozed).
- Outstanding: Semi slices #14/#16/#17 (routing/migration skill, injection note +
/to-issues routing, ops board + rubric category + routing ADR); live verification run on
a machine with the gem installed.
## Operational procedures
### Renaming or moving a local plugin