Commit Graph

8 Commits

Author SHA1 Message Date
jared 3b9c4fbd88 os-backlog: align .cc-os/config with os-status key=value contract (refs #14)
Config parsed/wrote YAML while os-status owns the file as key=value
lines, so config-write output was invisible to the tracker-configured
check. Now reads key=value (legacy 'key: value' lines still accepted)
and merge emits key=value.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EUyiRB4vHaRkhYKUdoMW2P
2026-07-12 16:04:12 -04:00
jared 696aefcf23 os-status + os-backlog: /os-status:fix unified setup/update + /os-backlog:route tracker onboarding (closes #21, refs #14, ADR-026)
os-status (#21): fix skill orchestrates remediation of failing checks via a
new hooks/checks.py --json runner; remediation pointers on every Check; new
project-graph-present and config-version-current checks; version= stamping
in .cc-os/config; banner names /os-status:fix as the single entry point.
Suite 64 tests (was 36).

os-backlog (#14): route skill (inspect + config-write subcommands,
lib/backlog/tracker.rb + inspector.rb); destination choice and live-history
migration are named human gates; Config.merge preserves other keys. Suite
54 runs / 110 assertions (was 35). Rollout (onboard cc-os, then one more
project) still pending, so #14 stays open.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EUyiRB4vHaRkhYKUdoMW2P
2026-07-12 15:54:08 -04:00
jared bfb747bd7e os-backlog: restore full snapshot card key set + record/verify 0.2.0 migration (refs #18, #19, #20)
Cards#snapshot again emits all 19 Types::Card fields (camelCase) plus
labels — 8df0cb7 had narrowed it to 8 keys, dropping listChangedAt and
silently breaking board-audit's stale-Doing check. A regression test
now pins the complete key set (35 runs green). implementation-status
records the 0.2.0 typed-returns migration and the live end-to-end
verification against the real Planka board (run on ovh-vps 2026-07-10).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BS59Nkb7fvJMFB9dZiwZ7H
2026-07-10 17:13:57 -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 8d4b1c7f46 os-backlog: routing resolver CLI (refs #12)
Pure repo -> board decision function (Backlog::Resolver) plus the
`resolve` os-backlog subcommand: given repo path, .cc-os/config contents,
and a board-name inventory (all passed in — no filesystem or network
access in the resolver itself), returns exactly one of "use <board>" /
"activate <archived board>" / "stop-and-discuss". An explicit config
board takes precedence; otherwise the board name is derived from the
repo/client dir basename with project inferred from ~/dev vs ~/clients.
Unmapped paths, and configured-but-unmatched boards, both resolve to
stop-and-discuss rather than silently falling back. Pure Ruby unit tests,
no network.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XknQRvihHDpYE47RTmUR4N
2026-07-10 13:36:08 -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