Commit Graph

107 Commits

Author SHA1 Message Date
jared 5c6d93965d docs: seed clutter-pattern inventory across 4 local repos (ticket #41)
Catalogs non-code process artifacts (graphify-out, handoffs, scratch-plans,
autoresearch runs, eval results, PRDs, ADR migration reports) across cc-os,
delta-refinery, hyperthrive_dev, and llf-schema, with proposed lifetimes
(keep-indefinitely / temporary / delete-once-served) and confidence levels
to seed a future clutter-management rulebook.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QWbzMGpesBnMWZwWQRRtv9
2026-07-14 12:55:56 -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
jared 91c6cbebd7 docs: record planka-api gem install + os-backlog live verification (2026-07-10)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XknQRvihHDpYE47RTmUR4N
2026-07-10 14:52:38 -04:00
jared 763fb7727b 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
2026-07-10 13:46:22 -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
jared 3c5a17c288 os-status: add tracker-configured SessionStart check (refs #11)
Reads the `tracker` key from .cc-os/config, validating the
planka:<board> | forgejo:<owner>/<repo> | github:<owner>/<repo> |
repo:<path> grammar. Present+valid is silent, malformed is a one-line
warn (never a crash), and absent-in-a-git-project is a daily-snoozed
nudge pointing at the os-backlog routing skill.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XknQRvihHDpYE47RTmUR4N
2026-07-10 13:27:42 -04:00
jared 3e42aecc13 os-orchestration: semi-automate the biweekly IRL audit (Option C)
Deterministic layer: audit/bin/audit-stats (Ruby) composes the existing
extract fact-sheets across all production transcripts since the last
run, writes per-run stats/flags/sheets to
~/.local/state/os-orchestration/audit/, and appends the metrics.tsv
trend ledger (seeded with the 2026-07-10 run: 23 sessions).
Judgment layer: new /os-orchestration:audit-sessions skill — sonnet
auditor fan-out over precomputed flagged regions only, tiered
synthesis with run-over-run trend verdicts, stops before any wording
edit. Nudge: os-status check orchestration-audit-due warns when the
ledger is >=14 days stale (missing ledger = machine not opted in).
Planka recurrence entry deferred: gem offsets are +1y/+6m/+3m/+1m by
design; +2w blocked on parked gem versioning decisions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XknQRvihHDpYE47RTmUR4N
2026-07-10 12:00:10 -04:00
jared 242ca84744 os-orchestration: WS4 IRL re-audit + Tier 1/2 wording patch
First production IRL audit (19 transcripts post-2026-07-08, 3 parallel
auditors; run artifacts in autoresearch/improve-260710-1057/,
gitignored). Solved: model-param discipline, over-delegation. Patched
into ORCHESTRATION.md: settled-design mid-session fan-out trigger,
never-sleep-poll rule, own eval/benchmark loops named as mechanical,
unfamiliar-tree Explore trigger. SendMessage example skipped (no
violations; token budget). One-shot patch — WS4 grids contaminated;
acceptance = next IRL audit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XknQRvihHDpYE47RTmUR4N
2026-07-10 11:24:59 -04:00
jared 7dae595526 openspec: archive completed add-os-status-plugin change, sync specs to main
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Mb3V8NNzAuns7vgX9A2jU
2026-07-10 10:08:17 -04:00
jared cc450c385b os-vault: add SessionStart git pull for multi-machine vault/memsearch freshness
Sync was push-only via SessionEnd (vault_sync.py/memsearch_sync.py); a second
machine's copies could go stale. session_start.py now runs a fast-forward-only,
10s-timeout git pull for both repos before the staleness check — silent on
success, quiet one-line stderr note on failure, never blocking session start.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Mb3V8NNzAuns7vgX9A2jU
2026-07-10 10:06:55 -04:00
jared c629959f37 ADR-023 os-backlog plugin + ADR-024 Apprise transport; state cc-os operating-layer role
ADR-023: backlog process management ships as a new os-backlog plugin (not an
os-vault extension) and cc-os's ecosystem role is made explicit — the always-on
personal operating layer of mutually aware os-* plugins, vs cc-plugins' optional
shelf. CLAUDE.md opening updated to match.

ADR-024: Apprise supersedes Pushover as the notification transport (server on
OVH + minimal client this iteration; expansion seeded as P2/P3 board cards).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Mb3V8NNzAuns7vgX9A2jU
2026-07-10 09:45:55 -04:00
jared 33ae61a817 system-prompt profiles B2 + YAGNI tool deny: overlays shipped, −16k/session total
B2: enabledPlugins deep-merge verified empirically (transcript skill_listing);
three diff-only overlays shipped to ~/.claude/profiles/ (cc-os-design,
client-dev, brainstorm). Measured savings marginal (−32 to −632 tokens) —
plugin listings are cheap post-ToolSearch; profiles' value is focus.

Follow-on: transcript sweep since 2026-06-01 found Workflow/Artifact/
SendUserFile/ReportFindings at 0–1 lifetime calls while shipping non-deferred
schemas (Workflow alone ~6k tokens). permissions.deny in settings removes
schemas identically to --disallowedTools; applied globally in
~/.claude/settings.json → −6,509/session (29,045 → 22,536 floor).
Vault notes updated (deep-merge fact; new yagni-deny reference note).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uc1HZDxnpzTJ8EYLqruEnY
2026-07-08 14:47:51 -04:00
jared a06431c5fd system-prompt profiles Wave 1: CLAUDE.md split (~11k→~2.1k tokens), B3+C3 findings, slimmed plan
- B1: CLAUDE.md reduced to orientation only; status timeline, component detail,
  and plugin procedures moved to docs/implementation-status.md (loaded on demand).
  Fresh-session check: ~32k context vs 41.8k baseline (~9.7k/session saved),
  orientation probes pass.
- B3: memsearch SessionStart injection measured (61 sessions, median ~11.7KB);
  size is hardcoded in the hook, no config knob — report in docs/plans/.
- C3: --setting-sources must include "user" or all plugins silently drop;
  ~/.claude/profiles/*.json overlays are disjoint from bin/refresh-plugins.
- Plan docs: Gate G0 cleared (WS2/WS4 complete); scope slimmed — A1/A2 deferred
  behind an interactive /context check, D dropped (pointer kept), C minimized.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uc1HZDxnpzTJ8EYLqruEnY
2026-07-08 13:36:16 -04:00
jared 397145b27b os-orchestration: WS4 wording loop shipped — ORCHESTRATION.md v3
Candidate-1 (v3 draft) accepted on iteration 1, confirmed on full grid,
validated on frozen reserve (15/16 cells, negatives 20/20, E5P reserve twin
5/5 both tiers). H3 met: E5P fable median mltok 27,372 = 43% of 62,971
baseline. Results TSVs + loop log + CLAUDE.md/plan status; eval-results vault
note written; limit-banner sweep + econ-guard lessons promoted to methodology
notes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 11:18:43 -04:00
jared ab258d5ba1 os-orchestration eval: key E3P root-cause concepts by scenario id
The reserve twin E3P-retry-storm targets gen-logs' other planted incident
(2026-07-02 auth-token-expiry 401 storm) and was authored before axis B
existed; the single concept table would have failed a compliant model.
Fixed pre-reserve-measurement without reading reserve files (incident chain
comes from gen-logs). Run-set scoring byte-identical; self-test 34/34 incl.
keying proof both directions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 11:05:03 -04:00
jared a771163663 os-orchestration: WS4 pre-wording baseline grid (fable+sonnet, econ axes)
44 counted reps (15 session-limit-truncated reps mechanically excluded and
replaced; preserved as comments). E5P 0/6 main-loop-grind both tiers (fable
median 62,971 mltok — H3 target cell); E2P/E3P criterion redesign validated
(6/6 PASS each via scripted-direct / surgical-direct); negatives 100% clean;
E1P sonnet 0/3, fable 1/2 (first fable self-report miss). H3 amended pre-loop:
E5P-fable reduction target, E3P non-regression guard.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 10:39:05 -04:00
jared b226601bea os-orchestration: WS4 eval extension — econ axes, E5 batching pair, fable column, pre-registered E2P/E3P criterion redesign
- extract: main-loop/sidechain output-token accounting (subagent transcripts
  persist at <projects>/<flat>/<session-id>/subagents/agent-*.jsonl — the
  mini-audit's instrumentation gap, now solved) + SendMessage round counting
- check: econ info on every row (mltok/sctok/mlshare/prebytes/spawns/maxrounds);
  E2P v2 (scripted-direct branch + services task-complete); E3P v2 (74KB S7
  whole-session ingestion anchor + mechanical root-cause concepts, delegation
  no longer required); E5P/E5N arms (grouped-delegation vs parallel-fanout,
  ## Expected files coverage convention)
- run: fable → claude-fable-5 alias
- scenarios: E5P-handler-rollout + E5N-limit-rebalance (+ frozen reserve twins,
  authored unread by the orchestrating session) + handler-spec/probe-spec fixture docs
- self-test 32/32 model-free; ORCHESTRATION.v3-draft.md parked (NOT shipped —
  Step-3 baseline must run against v2); H3 threshold pre-registered in plan

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 09:49:44 -04:00
jared 42860d06d1 os-vault: WS2 wording loop — destination ladder shipped, reserve grid measured
4 iterations (destination ladder -> mechanical vault-root -> CLAUDE.md
cross-project-memory section -> ADR-vs-vault disambiguation) + candidates 2-4
unscored + post-reserve YAML-colon quoting rule. Confirm 18/18 sonnet, 16/18
haiku; held-out reserve trigger-axis 13/18, negatives 17/18 (baseline 1/19,
18/18). Checker breach-regex false positive fixed + rescored, 2 self-test
guards added. Run-set and reserve both contaminated now.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 14:01:15 -04:00
jared 638c6d03ed os-vault: WS2 write-behavior eval harness + untuned baseline grid
plugins/os-vault/eval/ — held-out unprompted vault-write discrimination eval:
ambiguity ladder L1 explicit -> L3 conceptual, paired positives/negatives,
6 run-set scenarios on a new reportgen Ruby fixture + 6 frozen reserve twins,
isolated sandbox vault, headless-only runner, deterministic-first Ruby checker
(narrow judge fallback stubbable via OS_VAULT_EVAL_JUDGE_CMD), model-free
self-test 21/21. Scenario Task blocks are held-out; reserve never read.

Isolation seam: OS_VAULT_PATH overrides vault_path via config.load_config();
OS_VAULT_SKIP_REBUILD suppresses the SessionStart graphify rebuild. Write
SKILL.md contract fix (defers to vault-conventions.md) + Vault location section.

Baseline grid (run-set x sonnet/haiku x 3 reps + 1 counted canary, 37 reps):
positives 1/19, negatives 18/18. L1 persists every rep but routes to built-in
auto-memory instead of the vault; L2/L3 mostly don't persist; zero
over-triggering. Wording loop (step 4, not started) targets: trigger at
L2/L3, route to vault at L1. Loop-input candidates: vault note
os-vault-write-eval-baseline-grid-results. CLAUDE.md pointers updated for
this and os-status.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 12:46:22 -04:00