Commit Graph

127 Commits

Author SHA1 Message Date
jared cc2f2914c5 Remediate cc-architect audit findings across os-* plugins (#75-#79)
- os-context: audit-sessions rubric updated to ADR-0042 git-issues-only
  boundary (#75)
- os-backlog: drop dead Planka Config#board/#configured?, retarget tests;
  record ADR-0025 exemption for bin/wakeup-poll in plugin CLAUDE.md (#76)
- os-vault: align hooks/config.py default to graphify-out; refresh stale
  eval/README.md WS2 status (#77)
- gitignore .pytest_cache/ (#78)
- cc-architect: plugin_config resolves actual marketplace from
  installed_plugins.json instead of assuming cc-os (#79)

Opus-reviewed PASS; os-backlog 85 runs / cc-architect script suites green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CTE1yYvTEg1cJZBhKNRZvL
2026-07-16 16:36:23 -04:00
jared f2fe45bab8 openspec: to-issues renamed to to-tickets (Pocock v1.1) in issue-backlog spec
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VgG2g9ooqbnBiZYGAonGYG
2026-07-16 16:24:36 -04:00
jared 06fff77d75 Merge branch 'worktree-os-sdlc' (os-sdlc concept map + to-tickets rename)
# Conflicts:
#	plugins/os-backlog/skills/route/SKILL.md
2026-07-16 16:24:25 -04:00
jared 23fa2fbdbd os-sdlc: /implement is a skill-as-orchestrator over the agent pipeline
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VgG2g9ooqbnBiZYGAonGYG
2026-07-16 16:23:45 -04:00
jared 5c18ba696f os-sdlc: reviewer is a named agent with hook-assembled context packet
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VgG2g9ooqbnBiZYGAonGYG
2026-07-16 16:18:28 -04:00
jared 4cc524b3a5 os-sdlc: observability node, ADR copy-tag-audit pattern, to-issues→to-tickets rename adopted
- reference/pipeline-observability.md: new tenth concept node (run exhaust,
  predefined lifespans via os-doc-hygiene, copy-tag-audit pattern)
- self-improvement-loops: ADR-audit mechanics via vault-copy hook + virgin-tag
- spec-and-ticket-layer: to-tickets confirmed as Pocock v1.1 rename of
  to-issues (leftover skill removed from ~/.agents/skills)
- OVERVIEW: map + index updated, grill queue recorded
- repo docs: live /to-issues references swapped to /to-tickets

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VgG2g9ooqbnBiZYGAonGYG
2026-07-16 16:08:23 -04:00
jared 65cc751c6f Merge branch 'worktree-os-plugin-standards-audit' (os-plugin standards audit)
Conflicts in CLAUDE.md and docs/implementation-status.md resolved keep-both:
main's Planka-retirement changes + the branch's standards-audit additions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014HWNfGWoWnhrub4EJa1M1Y
2026-07-16 15:51:04 -04:00
jared 0dd9bc1bee Retire Planka: os-backlog reworked to git-issues-only (ADR-0042)
Executes OpenSpec change retire-planka-git-issues-only (archived, 25/25 tasks):
- os-backlog v0.3.0: Planka lib/CLI/agents deleted; issue-create/issues
  helpers (tea/gh/repo-file dispatch); ten-label taxonomy, human-only next
- planka: rejected fail-soft citing ADR-0042 in tracker grammar,
  config-write, and the os-status check
- Skills, SessionStart note (~687 -> ~444 tokens), /to-issues, os-status fix
  rewritten to the single-tracker model
- All boards snapshotted + pg-dumped (ovh-vps ~/planka-final-snapshot-2026-07-16);
  cards migrated to jared/cc-os#61-70, jared/ops#1-21, jared/llf-schema#7-10
- Planka server decommissioned; planka gem repo archived read-only
- Delta specs synced to openspec/specs/ (issue-backlog, issue-state-labels)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014HWNfGWoWnhrub4EJa1M1Y
2026-07-16 15:48:40 -04:00
jared 79012c4fda os-sdlc: design mapped into concept-node reference docs + OVERVIEW v0.2
Decompose the 2026-07-16 design session into nine independent-context
nodes under plugins/os-sdlc/reference/, with OVERVIEW.md rewritten as
the central concept map + index. Also fixes the dangling
matt-pocock-skills-v1.1-notes.md reference (notes live in the vault as
matt-pocock-skills-v1-1-changes.md; ADR-0037 affected-paths cleaned).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VgG2g9ooqbnBiZYGAonGYG
2026-07-16 15:39:35 -04:00
jared a2b329dd7f Audit os-* plugins against cc-architect standards + remediate
Post-Phase-B standards audit (backlog ticket): ran cc-architect's
audit-plugin checklist against all 8 os-* plugins and remediated:

- index-style CLAUDE.md (ADR-0032) for every plugin; os-doc-hygiene's
  stale cc-plugins-era CLAUDE.md/PRD.md reconciled
- invariants.md added for os-shortcuts and os-vault
- naming convention folded into cc-architect references (canonical:
  references/conventions/cc-os-naming.md); CLAUDE.md + vault note point there
- repo-level bin/test runner for the mixed minitest/pytest suites (6 pass)
- os-vault settings.json hook wiring documented as deliberate
- ADR-0025/os-adr: exemption already recorded in the ADR; no retrofit
- deferred to retire-planka rework: os-backlog ADR-0025 deviations
  (Forgejo jared/cc-os#74), Planka refs in os-context/os-status

Detail: docs/implementation-status/standards-audit.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NCs64GAhRWrnjwfGwS4biX
2026-07-16 15:34:41 -04:00
jared 3f76755e85 Adopt cc-architect from cc-plugins (Phase B)
cc-architect (plugin standards authority, v1.0.1) now lives here with the
other universal system plugins, registered in the marketplace manifest and
installed via the standard local-plugins symlink.

Also sync the os-backlog marketplace description to its updated
plugin.json so the cross-repo acceptance gate passes; that rewrite is
otherwise untouched here.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UmdZ3xYPSGpuGv8V3mNv6c
2026-07-16 15:07:46 -04:00
jared e82bfcb0cd Add marketplace manifest for os-* plugins
Centralizes plugin registry in a committed, machine-independent format
rather than relying solely on local ~/.claude/plugins install state.
Enables cc-architect's structural validator to verify plugins against the
manifest, and makes the registry shareable across clones. Part of
cross-repo standards-centralization (jaredswanson/cc-plugins#13).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UmdZ3xYPSGpuGv8V3mNv6c
2026-07-16 13:11:54 -04:00
jared b062ac354e docs: hygiene cleanup (2 edits across 2 files)
Auto: 1 (freeze ×1)
Confirmed: 1 (delete ×1)
Skipped (re-analysis recommended): 1
2026-07-15 15:41:55 -04:00
jared 39356ebdbf wip: checkpoint before hygiene cleanup 2026-07-15 15:41:09 -04:00
jared 3466159f7c os-doc-hygiene: sync calibrate-assessment-inventory delta specs to main + archive change
Main specs updated: lifecycle-rulebook (+nominations memory, +canonical
writer-enforced ordering, envelope modified), calibrate (+intake filter,
+consult persistence, persistence-by-scope and class-never-path modified),
doc-clean (extract-then-delete extracted.md pointer). Change archived to
openspec/changes/archive/2026-07-15-calibrate-assessment-inventory/.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjFRroqLsvkL2WrMJtRBrK
2026-07-15 15:06:38 -04:00
jared 0d303caf43 os-doc-hygiene: calibrate assessment inventory implemented (map #49)
RulesFileWriter (canonical .dochygiene-rules.json serialization) +
NominationIntakeFilter (deterministic Step 3.5) in calibrate_helpers.py;
calibrate SKILL.md Steps 3.5/5/6 wired (open-consults exits, keep/decline/
consult persistence through the writer); patch_applier extract-then-delete
appends the extracted.md vault pointer fail-closed; clean SKILL.md Step 6.5
supplies extraction_pointer. Suite 434 passed (26 new tests). OpenSpec
change: calibrate-assessment-inventory.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjFRroqLsvkL2WrMJtRBrK
2026-07-15 14:59:58 -04:00
jared 9f11df3e2a os-doc-hygiene: calibrate assessment-inventory design locked — spec deltas + ADR amendments (map #49, ticket #58)
Persist the full :calibrate assessment inventory + rulebook refinements
per wayfinder map #49 (tickets #51-#57, #59): nominations memory
(consults/rejected) in the rules file, deterministic nomination intake
filter, writer-enforced canonical ordering, keep-verdict persistence with
keep-tier relaxation, enumerate-siblings rule-quality test, extracted.md
extract-index convention + global keep rule, judge.md corrective edits,
and the test-coverage decisions. Implementation hands off to an OpenSpec
change.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjFRroqLsvkL2WrMJtRBrK
2026-07-15 13:58:07 -04:00
jared 807dcc8d90 os-doc-hygiene: post-calibration follow-ups
- Rules: 4 new lifecycle rules for OpenSpec trees (specs/** keep;
  changes/archive/*/ temporary retain 3 / 90d), root + plugins/*
- Fill TBD Purpose placeholders in doc-check + doc-clean specs (the
  doc-check one was a check-run miss: sat under file_length thresholds)
- Report header: "findings: N" + "cleared: K of M evaluated entries"
  (cleared no longer masquerades as files-scanned)
- CLAUDE.md: vault user-guide pointer; fix stale .dochygiene/ state
  path to .cc-os/dochygiene/ (ADR-0027)

Suite: 408 passed, 3 skipped.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LAw7YxP71Fk6K9AHNaYPj2
2026-07-15 10:22:41 -04:00
jared fe04297604 os-doc-hygiene: sync lifecycle delta specs to main + archive change
Main specs gain calibrate, determinism-promotion, lifecycle-deletion,
lifecycle-rulebook (new) and rulebook-aware updates to doc-check,
doc-clean, report-schema. Change archived to
openspec/changes/archive/2026-07-15-lifecycle-aware-doc-hygiene.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LAw7YxP71Fk6K9AHNaYPj2
2026-07-15 08:51:21 -04:00
jared 7b9afb1f6a os-doc-hygiene: lifecycle-aware hygiene implementation + calibration pass #1 (map #31)
Implements the lifecycle-aware-doc-hygiene change (ADR-0038..0041):
rulebook loader (global rulebook.json + per-project .dochygiene-rules.json,
add-only merge, two-axis precedence, IGNORE-sentinel zero-emission prune),
scanner lifecycle signals + temporary/delete-once-served tiers, report
schema delete/extract-then-delete ops with git-state tier derivation,
promotion_candidates from conventions.json, patch-applier deletion ops with
apply-time git re-verification, and the /os-doc-hygiene:calibrate skill.

Calibration pass #1 (cc-os) PASSED: protected-set hard gate + recall floor
9/10 with all 4 mandatory rows; 4 human-approved rules persisted to
repo-root .dochygiene-rules.json. invariants.md #3 (.cc-os/dochygiene per
ADR-0027) and #9 (rulebook IGNORE as third ignore mechanism) corrected
with explicit human approval per the META-RULE.

test_no_global_index_created now runs against an isolated HOME (the real
~/.cc-os legitimately exists since os-backlog's projects registry).
Suite: 408 passed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LAw7YxP71Fk6K9AHNaYPj2
2026-07-15 07:41:59 -04:00
jared e1d22d83ba os-doc-hygiene: lifecycle-aware hygiene design locked — spec + ADR set (map #31, ticket #46)
lifecycle-spec.md consolidates wayfinder decisions #32-#48; ADR-0038
(repo-root .dochygiene-rules.json override), ADR-0039 (evidence-quality
deletion tiers), ADR-0040 (no ignore-surface propagation), ADR-0041
(determinism promotion + conventions catalog).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bvc6togVPDXvkoq8fbHj3e
2026-07-14 16:33:26 -04:00
jared b5bc8813fb docs: hygiene cleanup (1 edits across 1 files)
Auto: 1 (freeze ×1)
Confirmed: 0 (none)
Skipped (re-analysis recommended): 0
2026-07-13 17:10:39 -04:00
jared 61317d0169 docs: mark SB migration candidate pool migrated 2026-07-13 (issue #7)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MuWQ8oJbFU9uPKp7dAB1Pn
2026-07-13 16:39:24 -04:00
jared 8be597838d os-backlog: reject flag-like positional board names (card #1818501985909868001)
board-ensure/activate/archive took NAME positionally with no validation, so
`os-backlog board-ensure --board apprise-api` silently created a board
literally named "--board". Add a shared validate_board_name! guard, checked
right after each command shifts its name arg and before build_client, so a
flag-like name fails loudly with no Planka API call.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MuWQ8oJbFU9uPKp7dAB1Pn
2026-07-13 16:35:40 -04:00
jared 58f330fdf3 os-adr: ADR-0024 addendum — apprise-api gem + CLI done, apprise-client retired
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BuTaxjCa543Sf77Ti7zYkh
2026-07-13 16:13:43 -04:00
jared bd7615d962 os-context: audit-driven delegation wording — TDD-loophole + review-convergence gate (issues #29, #30)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SjyyMTpscUFMwXfF2BTaSC
2026-07-13 13:28:07 -04:00
jared 0879ef10ae os-context: orchestration prompt — TDD loops and confirmed-defect lists are delegable units
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TUGCrg5osQMLUaSfkBdVZE
2026-07-13 13:26:28 -04:00
jared d303b957f5 os-backlog: board-ensure fails loudly when PLANKA_HUMAN_USER_ID is unset (card #1818408943538406701)
fix_visibility now raises MissingHumanUserIdError instead of silently
creating a bot-only Planka project when no human user id is available.
Existing projects still ensure without the env var. Supersedes card
#1818396164853073182.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TUGCrg5osQMLUaSfkBdVZE
2026-07-13 13:26:27 -04:00
jared b0a21d6211 os-backlog: post-ship review corrections for the triage hook + project index (cards #1818330518584820864, #1818330528525321347)
Codex review + verification pass over f9a81a1/3708c00 found the triage
hook resolving boards differently from the CLI. Corrections:
- Config#planka_board: tracker=planka:<board> now counts as board
  configuration everywhere (Resolver included), not just the explicit
  board key that config-write never writes.
- Triage hook board resolution extracted to pure
  TriageCheck.board_name_for honoring the umbrella rule: the session
  cwd's .cc-os/config overrides the git root's (the hook previously
  walked up and read only the root config).
- config-write keys the global project index by the realpath of the
  directory the config lands in, not the git toplevel — umbrella
  subprojects no longer overwrite the umbrella's row.
- projects <filter> matches name, tracker, or path; hook timeout
  8s->15s; CC_OS_DEBUG=1 surfaces swallowed hook errors on stderr.
Residual (name-only board lookup across all Planka projects) captured
as Backlog card #1818385174308586768. Suite 138/295/0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkeTPRWqaqJZEpf48H1aC7
2026-07-13 12:27:43 -04:00
jared 43932d40ab os-backlog: wakeup-polling + tmux-convention design spike (issue #28, ADR-0035/0036)
Poll + tmux direction chosen at the human gate. Thin pilot: Backlog::Wakeup
+ bin/wakeup-poll (dry-run default; opt-in wakeup=true; afk-ready acts,
semi triage-only, else pull-only notify). No cron installed. Suite 128/0.
Follow-up: single designated poller machine; cadence deferred to first opt-in.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CLeMz48rvG3s9XpAsDxeho
2026-07-13 11:02:44 -04:00
jared 3708c0099d os-backlog: wire the triage-trigger hook + arbitrary-project test coverage (cards #1818330518584820864, #1818330528525321347)
hooks/triage_check.rb and the Servers project heuristic/board-ensure
generalization already landed in f9a81a1 but the triage hook was never
registered in hooks.json, so it could never fire. This wires it in
(second SessionStart command, 8s timeout) and adds the missing test
coverage: TriageCheck's needs-triage/note-composition logic, an
arbitrary-project (Servers) BoardEnsurer case, and the ~/servers
resolver-ambiguity fix. Also reconciles session_start.py's pull-beats-push
docstring with the new hook's sanctioned exception, and fixes a stray
comment-indent bug in board_ensurer.rb. Suite 128/282/0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PLudjwx2GWw8CFdYaBzVzK
2026-07-13 11:00:26 -04:00
jared f9a81a17c5 os-backlog: cross-project filing convention + derived global project index (issue #27, ADR-0034)
Backlog::ProjectIndex at ~/.cc-os/projects.json, upserted fail-soft by
config-write, queried via new 'projects' subcommand. Discoverer template +
filing mechanics reference doc; CROSS-PROJECT rule line in the SessionStart
note. ADR-0034 Accepted. Suite 112/233/0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CLeMz48rvG3s9XpAsDxeho
2026-07-13 10:48:19 -04:00
jared 9415eb0d65 os-backlog: route inspect issue-shape classification, split-by-kind default (issue #26)
inspect fetches remote-issue metadata (fail-soft) and emits issue_shape:
sequential-chain|flat-adhoc|mixed|null via a pure classifier. Route step 2
rewritten as three branches with split as the default for spec-shaped issue
sets (one tracker key, no migration); step 3 never-re-trigger exception;
boundary rule cites ADR-0033. Suite 103/212/0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CLeMz48rvG3s9XpAsDxeho
2026-07-13 10:32:58 -04:00
jared 49c8f5eace os-backlog slice 8: Operations board + tracker-routing rubric + ADR-0033 (issue #17)
- ADR-0033 canonizes Planka=state / git-issues=specs, tracker key grammar,
  card-as-pointer and promotion rules (cites route/to-issues/session-start).
- os-context audit rubric: new category 8 tracker-routing (compliance only).
- BoardEnsurer label-color fallback also rescues Planka::BadRequestError
  (Planka rejects unknown colors as HTTP 400, found live) + regression test.
- os-status /os-status:fix step d: invoke /os-backlog:route directly instead
  of pre-asking forgejo-vs-planka (boundary rule uses both; cf. issue #26).
- Records updated per index+leaf convention.

Closes #17.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CLeMz48rvG3s9XpAsDxeho
2026-07-13 10:00:36 -04:00
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 90db409721 os-backlog slice 7: SessionStart injection note + /to-issues tracker routing (issue #16)
- hooks/session_start.py + hooks.json: WHEN->THEN rules for capture, routing, promotion,
  column ownership, autonomy labels — ADR-0029 semantics (issue body's contract was wrong),
  rules only, zero board state, ~447 tokens injected
- Backlog::Tracker.issues_destination routes /to-issues output by the tracker key
- /to-issues skill itself (global, ~/.agents/skills/to-issues/) updated out-of-repo:
  planka:/unset default = git issues on the repo remote + one Planka pointer card
  (spec/state boundary preserved; human gate decided 2026-07-13)

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 15807ef342 docs: distill implementation-status.md to index+PD; ADR-0032 records the convention (issue #25 parts 2-3)
- implementation-status.md: 729 lines/~9k tokens -> index (~110 lines/~1.8k tokens);
  per-component detail in docs/implementation-status/ leaf files; operational runbooks
  preserved in operational-procedures.md; ADR-restated detail removed, not moved
- CLAUDE.md record-keeping rule and pointers updated (convention migration, not just reorg)
- ADR-0032 (Accepted): AI-maintained knowledge files are indexes with progressive
  disclosure; the os-doc-hygiene file_length signal enforces it

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CLeMz48rvG3s9XpAsDxeho
2026-07-13 09:18:23 -04:00
jared ef8b7e4a52 os-doc-hygiene: deterministic file_length scanner signal (issue #25 part 1)
Objective signal (line count + estimated tokens) fires when either
threshold is exceeded; defaults 400 lines / 4000 tokens, configurable via
constructor and --max-lines/--max-tokens. Injectable token estimator for
tests. Suite: 286 passed. Parts 2-3 (implementation-status distill +
index+PD convention ADR) remain human-gated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CLeMz48rvG3s9XpAsDxeho
2026-07-13 08:06:48 -04:00
jared 46ebfb1b2f ADR-030: read-only work uses plan mode; no /readonly shortcut
Closes the /readonly backlog card as convention-only: plan mode enforces
read-only at the permission layer; a skill cannot activate plan mode and
would imply enforcement it doesn't have.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CLeMz48rvG3s9XpAsDxeho
2026-07-13 08:06:48 -04:00
jared 1ab1bf5f8c os-context: prompt-composer plugin supersedes os-orchestration; prompt files authored (ADR-031)
Rename plugins/os-orchestration -> plugins/os-context. SessionStart hook is
now a composer: globs prompts/session-start/*.md in filename order, emits one
additionalContext block, byte-identical for the existing orchestration rules
(tested), line budgets enforced (warn 120 / refuse 240). ORCHESTRATION.md ->
prompts/session-start/10-orchestration.md. New prompt files from the
2026-07-09 audit: 20-kickoff-conventions, 30-standing-safety,
40-decision-memos (total injection 102/120 lines). os-status audit-skill and
state-path references updated (old ~/.local/state path symlinked;
OS_ORCH_AUDIT_LEDGER name kept for compatibility).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CLeMz48rvG3s9XpAsDxeho
2026-07-13 08:06:48 -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 d6f316008d os-shortcuts: new plugin + /wrap session-close skill (ADR-028)
User-invoked QOL commands plugin; domain boundary vs hook-injection
plugins recorded in ADR-028. First resident /os-shortcuts:wrap encodes
the session-close ritual (commit per repo conventions, doc sweep,
handoff) from the 2026-07-09 workflow audit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QBAYNm4AmczQaEHfXwai5a
2026-07-12 18:53:07 -04:00
jared 537d6215b1 Migrate ADR log to docs/adr/, one file per decision
The monolithic docs/memory-system/03-architecture-decisions.md had
grown to 27 entries and was becoming hard to navigate and diff. Run
/os-adr:migrate to split it into docs/adr/ (one file per ADR plus a
generated README index and migration report), promoting the cc-os
retrofit ahead of pilot projects per the ADR-020 amendment recorded
in the monolith.

The monolith is retained as the historical source (tagged with
migration_source frontmatter) but new decisions now go in docs/adr/.
Update CLAUDE.md's layout and conventions sections and
docs/implementation-status.md's timeline/rollout notes to point at
the new location.

Closes out the /os-status:fix run; refs ADR-020.
2026-07-12 18:10:31 -04:00
jared cf14bb33f9 os-status/os-backlog/os-doc-hygiene: snooze lifecycle + config normalization + .cc-os/<plugin> state consolidation (closes #23, #24; ADR-027)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EFjUjvdsuqjarpNTKKX7pq
2026-07-12 17:47:01 -04:00
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 ba34e547f7 docs: ADR-026 — unified /os-status:fix setup/update command (refs #21, #14)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EUyiRB4vHaRkhYKUdoMW2P
2026-07-12 15:45:14 -04:00
jared 4b4e08c89b docs: ADR-025 — standard Ruby structure for cc-os plugins
lib/ + single-dispatcher bin/, fail-soft errors, installed-gem-only
dependencies, minitest with in-memory fakes; os-backlog is the
template, os-adr retrofit opportunistic.

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 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