Commit Graph

33 Commits

Author SHA1 Message Date
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 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 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
jared 1d1e7207c0 os-status: aggregated in-process SessionStart status checks (ADR-022)
New global plugin with one SessionStart hook running all checks in-process
(hooks/checks.py, check(ctx) -> CheckResult, single registry). Three states:
ok (silent), note (near-zero-token line, never suppressed), warn (one
aggregated banner, once-per-day snooze + permanent suppress in gitignored
per-project .cc-os/). Initial checks: subagent-model-env-override (catches
the WS1 Cluster 1 incident deterministically), adr-system-present (verbatim
port of os-adr's hook, legacy .os-adr/suppress honored), vault-hub-note-present.

os-adr's own SessionStart hook moved here atomically (its hooks.json now
empty; session_start.py stays as wording source of record). Built via
OpenSpec change add-os-status-plugin; 36 model-free tests; smoke-tested
2026-07-06 incl. env-override canary.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 12:46:10 -04:00
jared c2098525fe os-orchestration: baseline grid results + scripted-bulk-edit carve-out
Grid (36 reps + 2 canaries, all counted): negatives 18/18 both tiers, zero
over-triggering; positives 1/18 on delegate-at-all, but transcript
verification splits those FAILs into superior direct strategies (scripted
bulk edit, surgical greps - the audit's own justified-non-delegation shape)
vs genuine misses (haiku whole-file ingestion, per-file grind). Conditional
rules validated where engaged: 14/14 spawns explicit-model, self-report
downgrade flag worked. E2P/E3P criterion redesign pre-registered with
independently-anchored thresholds; reserve untouched. Analysis in vault:
os-orchestration-eval-baseline-grid-results.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 18:35:40 -04:00
jared fe83fdb290 os-orchestration: E1-E3 eval harness + cluster-1 wording v2 (self-report)
Harness: 6 run-set + 6 frozen-reserve paired scenarios from the WS1 verified
misses, Node relaystation fixture (deterministic sandbox-time logs), headless
runner with CLAUDE_CODE_SUBAGENT_MODEL stub for E1P, deterministic-first
checker driving audit/bin/extract (extended with per-segment read targets),
narrow frozen haiku-judge fallback for E1 language axes, model-free self-test
21/21 incl. shipped-instruction-compliant conformance transcripts.

Wording v2: the E1 canary (counted) proved resolvedModel is not model-visible
in the launch result, so the launch-stub-comparison rule was unactionable;
replaced with subagent model self-report on sonnet/opus spawns (subagents know
their exact model ID - verified live). Scenarios/checker/rubric untouched.
Deterministic env-override detection routed to WS3 (plan updated).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 18:04:15 -04:00
jared b01966bb10 os-orchestration: trigger-conditioned wording for audit clusters 1-3
Applies the Eval B when->then lesson to the three verified WS1 clusters:
explicit model: before every Agent call (cluster 2, cost exposure now that
CLAUDE_CODE_SUBAGENT_MODEL is removed), verify resolved model after launch
(cluster 1 policy gap), don't re-cover own ground before delegating
(cluster 3). Delegation thresholds unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 17:44:09 -04:00
jared 7965f033e6 WS1 orchestration audit: findings, extractor, and Cluster 1 root cause
- Add session-audit findings (10 stratified sessions, verified synthesis)
  and E1-E4 eval-scenario backlog: docs/orchestration-audit/
- Add Phase 1 fact-sheet extractor: plugins/os-orchestration/audit/bin/extract
- Post-audit correction: Cluster 1 (all 23 spawns downgraded to haiku) was
  NOT a Fable-5 harness bug — root cause was CLAUDE_CODE_SUBAGENT_MODEL=haiku
  in ~/.claude/settings.json env block, set by an earlier session as a cost
  measure. Removed 2026-07-06. Policy gap (no verify-resolvedModel rule)
  stands regardless; E1 remains valid.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 17:34:42 -04:00
jared 2e9d83f749 Record Eval C frozen grid run: 12/12 cells PASS, Eval B wording generalizes
First full run of the Eval C discrimination harness (3-level ambiguity ladder,
6-scenario run-set, 3 reps/cell, both sonnet+haiku): 36 headless reps, 12/12
cells PASS at ≥2/3 majority. Haiku 18/18 reps, sonnet 17/18 (P1-L1 rep 1: final
message citing only 0005, not governing 0002 — a boundary artifact, not a
behavioral miss). Zero over-trigger ADR creation on any negative at any level;
all positive passes via governing-ADR citation (16 reps) or judge fallback (1).

Two harness defects fixed before running the grid: (1) bin/run pipefail bug that
aborted remaining reps after first FAIL (changed checker invocation to || true);
(2) positive axis-b previously required ADR creation only, contradicting the
README's design statement that "consulting and/or recording is correct" — run-set
positives sit in already-decided territory, so find→cite→comply is the correct
behavior. Implemented three-branch axis-b check: created (new ADR file),
cited-governing (final message cites the governing Accepted ADR), or judge
fallback. Added two self-test guards to verify the compliance path.

Scenario metadata updated to document the corrected axis-b checker behavior
(cited-governing as a valid pass branch). TSV reasons column now records the
pass path via `B-via:` field for positives.

Verdict: Eval B wording generalizes to a new fixture, new language, new domain,
and decreasing cue explicitness. Grid ceiling not found; next signal is
production (rollout + IRL session audits). Run-set baseline locked; wording
tuning moves measurement to reserve-set.
2026-07-06 12:49:42 -04:00
jared d3be4c5ece Add os-adr Eval C: ambiguity-ladder discrimination eval
Eval B wording reached 8/8 (sonnet) / 7/8 (haiku) on its run-set
after five iterations; subsequent W3 stability testing confirmed
intermittent flicker but acceptable performance. As Eval B is now
contaminated by iteration, we need a held-out measurement set to
assess generalization to new projects and cues.

Eval C measures whether learned behavior generalizes across
decreasing cue explicitness (explicit → moderate → conceptual
framing) and, critically, whether the model correctly avoids
false positives (over-triggering) when no Accepted ADR is in play.
Six paired scenarios (positive/negative at each level) run against
a job-execution domain fixture; a frozen reserve-set (notifications
domain) becomes the measurement set if anyone tunes wording against
the run-set.

New: `plugins/os-adr/eval-c/` — bin/ (run/check/self-test/sandbox
scripts), fixture/ (taskq async job queue, 6 ADRs, trigger-phrased
CLAUDE.md), scenarios/ (6 run-set), scenarios-reserve/ (6 reserve-
set), README.md (measurement discipline + design), judge-rubric.md.
Model-free self-test passing. First real grid run is a pending
decision.
2026-07-06 12:02:58 -04:00
jared 7523663889 os-adr: trigger-conditioned wording from Eval B autoresearch loop (sonnet 8/8, haiku 7/8)
Five-iteration /autoresearch wording experiment against the Eval B baseline
(haiku 0/8, sonnet 5/8). Checker/fixtures/scenarios/rubric frozen; wording
surfaces: hook PRESENT_NOTE, find/create SKILL.mds, fixture CLAUDE.md
(declared a surface upfront — it is the real-project adoption template).

- Hook note + skill descriptions: when->then trigger-conditioned phrasing
  (H1 confirmed, both tiers)
- find skill: explicit-unconditional reversal->supersede offer where find's
  output is on screen (fixed sonnet W3)
- Mechanical lower-tier trigger: before first edit to any existing file,
  run find on those paths; additions count (fixed haiku R1/R4)
- New eval-b/fixture/project/CLAUDE.md carrying the same rules

Final grid: sonnet 8/8, haiku 7/8 (W3 axis-b judge flicker). Open: channel
ablation (hook vs CLAUDE.md) not run; R4-nograph now passes both tiers.
Hypothesis->result map: vault note os-adr-eval-b-wording-experiment-hypotheses.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 14:49:15 -04:00
jared c645faae59 Fix skill namespacing (drop name: frontmatter), add refresh-plugins, wire eval howto
- Remove explicit name: frontmatter from os-adr and os-doc-hygiene SKILL.mds
  so slash commands register namespaced (/os-adr:find, not bare /find)
- Add bin/refresh-plugins to refresh stale local plugin caches
- CLAUDE.md: cache-refresh procedure, naming-convention pointer, mandate
  reading the vault autoresearch-eval howto before the next eval

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 14:01:58 -04:00
jared 5b399d5614 Record Eval A and Eval B grid results in status docs
Eval A grid ran clean across all scenarios/tiers. Eval B grid (1 rep/cell)
shows a real gap: haiku never unprompted-consults the ADR system in any
scenario, while sonnet passes 5/8 (misses W3 write-trigger and R1 direct-
conflict retrieval). Updates CLAUDE.md component status and the eval-b
README so the next session picks up from here instead of re-running blind.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-03 17:36:37 -04:00
jared 00e22f1676 Add os-adr evaluation harnesses (Eval A and Eval B)
Build comprehensive evaluation framework for the os-adr plugin (ADR-021).

Eval A: prompted skill-execution evaluation across haiku/sonnet models.
Six ADR lifecycle scenarios, deterministic Ruby checker, sandbox runner,
/autoresearch loop for wording optimization.

Eval B: held-out unprompted-behavior evaluation. Seven scenarios
(W1–W3 write-trigger, R1–R4 retrieval), webhook fixture with 6-ADR history
(Superseded pair + distractors), headless runner (isolated SessionStart
context), two-axis deterministic-first checker (consultation + citation
accuracy, AI judge fallback for new-file writes).

Both harnesses self-tested model-free. Grid runs deferred per locked
rollout order. Updated docs/specs to freeze scenario shapes and document
methodologies.
2026-07-03 16:44:42 -04:00
jared 23a7efa6b3 Remove committed __pycache__ and gitignore Python bytecode
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:24:26 -04:00
jared 36abd43107 Build os-adr plugin: ADR authoring, session hook, migration, retrieval
Implements OpenSpec change add-os-adr-plugin (archived as
2026-07-03-add-os-adr-plugin; delta specs synced to openspec/specs/).

- plugins/os-adr/: Ruby OO core (Record, Repository, Index, Template,
  Detector, Migrator, MigrationReport, Finder) behind thin bin/ CLIs;
  Python SessionStart hook via plugin-relative hooks.json; four skills
  (create, init, migrate, find); invariants.md; 47 Ruby + 15 Python
  model-free tests, all passing.
- Migration pilot passed (threshold 25%): viking 0%, delta-refinery 0%,
  llf-schema 8.3%. Retrieval verified against the real llf-schema graph;
  resolved that ADRs need no Graphify tag/edge convention (layer 3
  expands query paths via node source_files).
- docs/adr-system/: requirements (04), PRD (05), eval sketches (06).
- ADR-020 recorded; CLAUDE.md Implemented Components updated with the
  locked rollout order (pilot projects -> cc-os retrofit -> wider).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:24:19 -04:00
jared 7ae45c7bf8 Align os-doc-hygiene skill naming and invocation with marketplace convention
Rename skills to bare verbs (hygiene-check -> check, hygiene-clean -> clean),
matching the os-vault/os-orchestration pattern. Remove the commands/hygiene.md
dispatcher in favor of two new skills, status and sweep, so all four actions
are invoked directly as /os-doc-hygiene:<skill> instead of through a custom
subcommand parser that no other plugin in the marketplace uses.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-03 11:23:24 -04:00
jared b235e99145 Migrate os-doc-hygiene plugin into cc-os; record ADR-019
Moves the doc-hygiene plugin from the standalone cc-plugins repo into
cc-os as plugins/os-doc-hygiene/, following the same pattern as
os-vault and os-orchestration. Also commits the previously-unstaged
ADR-019 (global os-orchestration plugin supersedes per-project
orchestration text), which documents the prior migration but never
made it into a commit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-03 11:12:31 -04:00
jared cebcc1b649 Migrate os-orchestration plugin from cc-plugins into cc-os
Renamed orchestration -> os-orchestration per naming convention, kept the
plugin's permissive delegation rule as the canonical global default, and
dropped cc-os's stricter local override so this repo behaves like every
other project (ADR-019).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-03 10:14:35 -04:00
jared f138c8d98b Rename memory plugin to os-vault; fix marketplace registration
The plugin directory, symlink, and settings.json were already renamed to
os-vault, but the local-plugins marketplace manifest still declared the old
memory/./memory entry, so skills/slash-commands silently stopped registering
while hooks (wired by absolute path) kept working. Re-registered the plugin
under its new name via the marketplace manifest + claude plugin install/
uninstall, and documented the fix and standing rename procedure (ADR-018,
CLAUDE.md) so this doesn't recur.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-03 09:43:18 -04:00
jared 553fc7d04a Implement SB Content Plan Phase 1: memory-template skill + note templates
Closes #1–#6 (Forgejo jared/cc-os).

- Reconcile vault-conventions.md to a single authoritative frontmatter schema (#1)
- Add memory-template plugin skill: template-design + new-type-creation (#2)
- Add howto/convention/reference note templates, each dogfooded (#3–#5)
- Patch 4 proof-of-concept notes to the settled schema (#6)

Note: vault note files (templates, patched notes, vault-conventions.md) live in the separate ~/Documents/SecondBrain repo and are committed by its own SessionEnd hook; this commit covers only the cc-os-tracked files (skill + docs).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 16:13:51 -04:00
jared 98f8290631 Refine memory-project onboarding: type-based exclude taxonomy + 16k-context model
Assessment now reasons about ignorable content by category (fetched
deps, build output, caches, tooling/AI-assistant dirs, lockfiles, bulk
data, binaries) so it generalizes across stacks. Onboarding switches to
the config.yaml model qwen25-coder-7b-16k: inference is GPU-bound at
~65 tok/s, so the speed lever is fewer chunks per doc via a larger
context window (GRAPHIFY_OLLAMA_NUM_CTX does not propagate through the
OpenAI-compatible path; context must come from the modelfile). Extends
ADR-017.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 10:57:06 -04:00
jared 72397a00b8 Add assessment-first onboarding to memory-project skill (ADR-017)
Onboarding ran a bare `graphify extract`, but graphify does not honor
.gitignore — it needs its own .graphifyignore. Without one, onboarding
viking-warrior-training-log walked node_modules/ (5,858 files) and
routed its non-code files through the Ollama doc pass; the run was
killed after ~1 hour with no graph.json.

Onboarding is now assessment-first: survey the repo, generate a
per-project .graphifyignore (the ignore set varies by stack), confirm
with the user, then extract. Records the gotcha and decision in ADR-017.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 09:17:33 -04:00
jared 7ede69ec85 Add vault_sync.py hook; complete Step 5b and 2e pilot
Step 5b (Obsidian vault -> VPS git sync) is now fully done: the vault is a
private Forgejo repo (SecondBrain) and vault_sync.py auto-commits+pushes it on
SessionEnd, mirroring memsearch_sync.py. Step 2e pilot done (llf-schema project
graph onboarded). Step 2d closed (live vault graph is the baseline). Docs and
implementation status updated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 15:23:32 -04:00
jared fa639cfad7 Remove dead bash hooks after Python port
- Delete the four ported bash hooks from plugins/memory/hooks (now live only in git history; runtime uses the Python ports)
- Update tests/README to reflect removal; test harness drives Python hooks via python-wrappers adapters (preserved)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 12:52:59 -04:00
jared 48e4d77795 Source memory plugin in git; port hooks to Python; archive change
- Move memory plugin source from ~/.claude/plugins/memory (untracked) into cc-os/plugins/memory under git
- Port four bash hooks to Python deep-module architecture (config.py, hook_io.py, session_state.py + thin entry points)
- Split memsearch auto-commit+push into dedicated memsearch_sync.py SessionEnd hook (relocation of ADR-015, behavior preserved)
- Cutover via symlink + settings.json rewrite; fresh-session test verified all hooks fire
- Add ADR-016; update CLAUDE.md, build plan, and fix stale bash-hook/source-path references
- Sync three new-capability delta specs into openspec/specs; archive change as 2026-06-12-memory-plugin-source-and-port

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 12:42:05 -04:00