Commit Graph

6 Commits

Author SHA1 Message Date
jared 46b0584643 os-backlog: cache resolved Planka board id in .cc-os/config (issue #22)
- Backlog::BoardResolver with injected config read/write; Cards does no filesystem I/O
- board_id honored only for planka: trackers; id hit validated against returned board
  name; 404/mismatch/cache failure degrades to name lookup and rewrites the cache
- comment-preserving Config.set mirrors os-status's writer (Config.merge not used)
- FakePlankaClient boards.get 404 support; 14 new tests; suite 90 runs / 0 failures

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CLeMz48rvG3s9XpAsDxeho
2026-07-13 09:18:45 -04:00
jared 7a264f1175 os-backlog: card-move with CLI-enforced column ownership (ADR-029)
Adds card-move over planka-api Cards#move; ownership rules enforced in
lib (never Next, never hitl, never out of Done, Done only for
afk-ready). afk-ready cards now skip Review per user decision; semi
still stops at Review. Skills updated to "working a card means moving
it". Suite 68 runs/153 assertions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QBAYNm4AmczQaEHfXwai5a
2026-07-12 19:11:49 -04:00
jared 8df0cb7e1e os-backlog: migrate to planka-api 0.2.0 typed returns
0.2.0 returns Planka::Types value objects instead of parsed-JSON
hashes. Replace all hash access with typed accessors, rebuild
Cards#snapshot output as explicit string-keyed hashes (JSON output
stays byte-compatible, so skill/agent contracts are unchanged), and
rewrite test fakes on real Planka::Types records. 34 runs green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GjXD4ZDsucFZXNgVVrnZB
2026-07-10 16:51:49 -04:00
jared 27f8e5f2b2 os-backlog: card-triage + board-audit named agents (refs #15)
Two agent definitions. card-triage batch-labels raw Backlog cards with
one priority (P0-P3) and one autonomy (hitl/semi/afk-ready) label —
label changes only, ambiguity defaults to hitl. board-audit reports the
four drift classes (stale Doing, WIP over cap, Waiting unblocked, aging
Review) and writes at most one comment per drifting card. Both
definitions state the column-ownership constraints: never move cards
past Review, never pull Next, never touch Done.

Supporting read/write primitives: Cards#attach_label + Cards#comment,
exposed as card-label / card-comment subcommands alongside the existing
read-only snapshot JSON. Fake-client unit tests, no live API.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XknQRvihHDpYE47RTmUR4N
2026-07-10 13:44:13 -04:00
jared 3bcf3a1b48 os-backlog: capture + list skills, card CLI (refs #13)
/os-backlog:capture resolves repo -> board via the pure resolver, runs
board-ensure transparently when the board is missing, and creates the
card at Backlog only. /os-backlog:list is strictly pull-based — board
state is never injected unasked. Both skills state the column-ownership
rules (create at Backlog only, move Doing -> Review at most, never pull
Next, never move Review -> Done, never self-assign hitl cards) and fail
soft when the gem/Planka is unavailable.

New Backlog::Cards lib class + card-add / cards / snapshot subcommands;
fake-client unit tests, no live API. Manual live verification is still
pending: the planka-api gem is not installed in this environment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XknQRvihHDpYE47RTmUR4N
2026-07-10 13:41:44 -04:00
jared 9a0e8a79fb os-backlog: plugin scaffold + board-ensure (refs #10)
Idempotent board-ensure over the installed planka-api gem: uniform lists
(Backlog/Next/Doing/Waiting/Review/Done), uniform label set (P0-P3, hitl,
semi, afk-ready) with per-label color-candidate fallback since Planka's
color whitelist isn't documented, the archived--<name> rename convention
(activate/archive primitives; ensure never archives automatically), and
the bot-created-project visibility fix (shared-type project + explicit
project-manager add + null ownerProjectManagerId). Unit tests stub the
client layer entirely — no live API calls.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XknQRvihHDpYE47RTmUR4N
2026-07-10 13:35:18 -04:00