## Dicklesworthstone/coding_agent_session_search — v0.9.0…v0.10.0

_141 commits._

### Features
- **feat(raw-mirror): CASS_RAW_MIRROR=0 stops raw capture, and doctor reports it as the operator's choice (coding_agent_session_search-0w3nq)** (e021334)
- **feat(doctor): --repair-leaked-pages frees leaked archive pages in place behind a restorable backup (coding_agent_session_search-2l1b0.73)** (73c0cf7)
- **feat(robot): pack echoes what its search ran in _meta.effective (coding_agent_session_search-2l1b0.68)** (67062d5)
- **feat(robot): _meta.effective echoes how the engine grouped the query (coding_agent_session_search-2l1b0.68)** (c35fa99)
- **feat(robot): search says why the automatic wildcard retry did not run (coding_agent_session_search-2l1b0.68)** (ce2d719)
- **feat(pages): the viewer accepts a typed recovery key (coding_agent_session_search-2l1b0.61)** (2d12309)
- **feat(search): explain an empty search filtered to one workspace (coding_agent_session_search-cass-fleet-resilience-20260608-uojcg.7.1)** (31eb05e)

### Fixes
- **fix(pack,search): redact pack's _meta.effective; no zero-result diagnosis past the last page** (1702d29)
- **fix(indexer): an inline lexical rebuild of a sliced batch indexes every conversation in it** (9f1d16d)
- **revert(sync): defer SQLite 0.4.7 integration because of the recorded read-only regression** (0450b11)
- **fix(indexer): pin canonical snapshot throughout lexical repair (coding_agent_session_search-2l1b0.72)** (f6d4973)
- **fix(indexer): bound targeted lexical repair memory (coding_agent_session_search-2l1b0.72)** (d3d85c9)
- **fix(archive): restore v20 and v21 logical archives into schema v22 (coding_agent_session_search-2l1b0.50)** (f644584)
- **fix(status): a retired not-viable FTS shadow is not reported as a pending repair (coding_agent_session_search-2l1b0.45)** (62140b6)
- **fix(pack): report why a pack fell back to lexical evidence (coding_agent_session_search-ze7sm)** (ae2c0cc)
- **fix(storage): writer opens on the schema-only lane retry busy/recovery errors (coding_agent_session_search-xcqqa)** (9c830c0)
- **fix(sync): keep the reconciled topology planner warning-free (coding_agent_session_search-dhfzn)** (911968d)
- **fix(sources): exclude Mullvad exit nodes before automatic SSH discovery** (3a48d21)
- **fix(persist): a sliced conversation records one raw-mirror link with its full count (coding_agent_session_search-m91r6)** (81f14db)
- **fix(storage): check table existence with PRAGMA table_info, not a sqlite_master query that makes fsqlite read the whole archive (coding_agent_session_search-xcqqa)** (1524897)
- **fix(persist): slice only fully timestamped conversations (coding_agent_session_search-m91r6)** (acccf05)
- **perf(persist): publish sliced lexical updates every 4 changed slices, never for unchanged ones (coding_agent_session_search-m91r6)** (fb195d0)
- **fix(storage): after the engine's first-open repair, continue in the schema-only lane (coding_agent_session_search-xcqqa)** (0871c89)
- **fix(storage): open archive writers in the schema-only lane so a point lookup cannot hydrate the whole archive (coding_agent_session_search-xcqqa)** (3c8b35e)
- **fix(persist): persist a giant conversation in bounded slices (coding_agent_session_search-m91r6)** (37675c6)
- **fix(doctor): do not send the GH #503 legacy shadow catalog to a repair this engine cannot run (coding_agent_session_search-an7w3)** (8b9cf27)
- **fix(lexical): index every message of a long session; cap text per message, stream long sessions in chunks (coding_agent_session_search-bgn6s)** (938bf98)
- **fix(status): name the derived-shadow repair when the strict open refuses the #434 legacy shape (coding_agent_session_search-an7w3)** (cae217e)
- **fix(indexer): watch-once sees commits that land only in a SQLite source's WAL (coding_agent_session_search-tnuaa)** (b420678)
- **fix(codex): honor CASS_CODEX_MAX_SOURCE_BYTES above 100 MiB again (franken-agent-detection 0.3.2) (coding_agent_session_search-ovdzu)** (1fc0726)
- **fix(codex): name over-budget rollouts instead of blaming the data dir (coding_agent_session_search-2l1b0.35)** (c7c67ef)
- **fix(index): the expected-docs delta no longer JOINs every message, so runs stop dying at startup and at the end (coding_agent_session_search-5ajer)** (95b8e91)
- **fix(search): an open search client follows a republished lexical index (coding_agent_session_search-4tnv3) (coding_agent_session_search-2l1b0.50) (coding_agent_session_search-2l1b0.78)** (87a3302)
- **fix(forget): a forgotten session stays forgotten when its neighbors change (coding_agent_session_search-2l1b0.50)** (6baab50)
- **fix(robot): every error kind is kebab-case (coding_agent_session_search-2l1b0.58)** (e9120d5)
- **fix(semantic): semantic search comes back after forget, dedup and agent purge (coding_agent_session_search-2l1b0.78)** (fb8de01)
- **fix(connectors): index Claude Code prompts typed mid-turn; pin franken-agent-detection 0.3.1 (coding_agent_session_search-df306)** (1171950)
- **fix(index): a plain cass index finishes an interrupted purge (coding_agent_session_search-2l1b0.79)** (43f0b19)
- **fix(storage): a missing sqlite3 CLI is named instead of a bare ENOENT (coding_agent_session_search-2l1b0.65)** (2ed4da1)
- **fix(status): size the topology planner from the cgroup-clamped memory, not host RAM (coding_agent_session_search-dhfzn)** (7175916)

### Backend
- **release: v0.10.0** (2bfe708)
- **deps: dirs 7 and semver-compatible lockfile updates** (3fd5932)
- **merge(storage): retain the published SQLite 0.4.7 adoption and GH503 repair** (a07efbe)
- **deps(fsqlite): adopt the 0.4.7 family; doctor repairs the GH#503 legacy shadow catalog in place (coding_agent_session_search-an7w3)** (ba4f45e)
- **deps(fsqlite): adopt the published 0.4.6 family: page-referenced-twice and lost-index-entry fixes (coding_agent_session_search-r190v)** (e69c141)
- **merge(sync): retain cgroup-aware topology beside current CASS main (coding_agent_session_search-dhfzn)** (d8a0770)
- **deps(fad): adopt franken-agent-detection 0.3.3 so OpenCode 2.x sessions are indexed (coding_agent_session_search-9su4d)** (6d75777)
- **merge(sync): join GH505 discovery updates with the cgroup-aware main line (coding_agent_session_search-dhfzn)** (e008dc5)
- **Merge remote-tracking branch 'origin/main'** (c4a2dac)
- **merge(sync): retain cgroup-aware topology planning on upstream main (coding_agent_session_search-dhfzn)** (b0ef71f)
- **Merge remote-tracking branch 'origin/main'** (5fdb94f)
- **Merge origin/main into the v0.9.0 release line (v0.9.0 = f6de87bd)** (fb6416a)

### Tests
- **test(cli_robot): bound pack's FIFO wait on its own clock, not process launch (coding_agent_session_search-d32jo)** (9210a28)
- **test(indexer): scope ingest OOM injection to the injecting test's thread (coding_agent_session_search-xicw9)** (9711756)
- **test(grok_bot): the default macOS store indexes the reporter's replica, chat only, through the real binary (coding_agent_session_search-2l1b0.13)** (c5a0e1b)
- **test(semantic): reach the tombstoned no-op case through in-place soft delete (coding_agent_session_search-fdvur)** (a83cde1)
- **test(kiro): prove Kiro CLI sessions index and search through the real binary (coding_agent_session_search-njx4p)** (0f10b97)
- **test(codex): restore the standalone raw-mirror and Codex contract crates (coding_agent_session_search-ech4y)** (1447e8b)
- **test(index): the expected-docs memo test follows the per-message content cap (coding_agent_session_search-fdvur)** (bdce342)
- **test(storage): FTS-count tests pin CASS_DEFER_LEXICAL_UPDATES off and run serially (coding_agent_session_search-jfsyt)** (cc61aec)
- **test(policy): clear the no-mock violations that fail the GH505 regression workflow on every commit (coding_agent_session_search-613k8)** (a90053c)
- **test(sources): GH505 CLI regressions assert the no_hosts contract instead of a non-zero exit (coding_agent_session_search-613k8)** (e7951ce)
- **test(storage): bound the xcqqa Track B read probe per thread, not per process (coding_agent_session_search-xcqqa)** (0b45d76)
- **test(fixtures): isolate repository and search oracles from checkout state** (f9b5809)
- **test(sources): preserve GH505 candidate independently of workflow permissions** (67fee10)
- **test(sources): execute GH505 candidate and Rust gates on the GitHub runner** (f6aaf63)
- **test(search_metamorphic): run cass from the fixture home, so a stray aider transcript in the checkout cannot leak into the oracle** (bfebf3c)
- **test(dashboard): build the beads-only root fixture outside every git repository (coding_agent_session_search-85p0s)** (6fb97ae)
- **test(docs): README and AGENTS dependency pins must match Cargo.toml (coding_agent_session_search-2l1b0.69)** (bd12660)
- **test(codex): incremental runs stay partial without re-parsing rollouts beside a rejected one (coding_agent_session_search-2l1b0.40)** (11b623c)
- **test(codex): the rejected run names the over-budget rollout, not an unreadable data dir (coding_agent_session_search-2l1b0.35); file ovdzu** (660fe9d)
- **test(search): the FTS5 lane answers the Boolean relations too (coding_agent_session_search-2l1b0.68)** (8ea8419)
- **test(search): an agent filter keeps exactly its sessions (coding_agent_session_search-2l1b0.68)** (81cdd0b)
- **test(search): a superseding WAL append tombstones the main record, as the engine does (coding_agent_session_search-nohx1)** (ad4fe06)
- **test(search): a workspace filter keeps exactly its sessions (coding_agent_session_search-2l1b0.68)** (335d73b)
- **test(search): the FTS5 lane answers the same term sets (coding_agent_session_search-2l1b0.68)** (a27c867)
- **test(search): forgetting a session removes exactly its messages (coding_agent_session_search-2l1b0.68)** (da68e67)
- **test(search): the echoed query grouping is what was searched (coding_agent_session_search-2l1b0.68)** (5a5db55)
- **test(tui): a page loaded under Date Newest joins one global order (coding_agent_session_search-2l1b0.53)** (f183786)
- **test(pages): a rotated archive unlocks with its new recovery secret only (coding_agent_session_search-2l1b0.61)** (5fbf409)
- **test(pages): run the viewer's JS assertions on current Node (coding_agent_session_search-2lnh5)** (f8f2adf)

### Docs
- **docs(changelog): record the user-facing fixes landed since v0.9.0 (coding_agent_session_search-ze7sm) (coding_agent_session_search-0w3nq) (coding_agent_session_search-9su4d)** (0d6710c)
- **docs(changelog): v0.9.0 known-open adds the two host-speed-sensitive deadline tests seen at the release commit** (eb99555)
- **docs: reality check night 2026-09-23 — logical round-trip import inconclusive (coding_agent_session_search-2l1b0)** (0e307ca)
- **docs: reality check night 2026-09-23 — owner full-history ingest result, corrected counts (coding_agent_session_search-2l1b0)** (d5d80fa)
- **docs: reality check — night of 2026-09-23 (owner archive, wrong-answer class, TUI, gate) (coding_agent_session_search-2l1b0)** (a5014a3)

### Chore
- **style(indexer): rustfmt the lexical reconcile snapshot code from f6d4973d/d3d85c93** (baeaf43)
- **chore(beads): close xicw9 (97117569); d32jo test fix landed 9210a281, left open for macOS verification (coding_agent_session_search-xicw9) (coding_agent_session_search-d32jo)** (d2c1f71)
- **chore(beads): export jtpuo, 85p0s and review/gate comments on 2l1b0.68 and uvii3** (cfdeb95)
- **chore(beads): 2l1b0.50 logical-archive restore regression and fix f6445847 (coding_agent_session_search-2l1b0.50)** (070e425)
- **chore(beads): 2l1b0.45 GH495 status fix landed (coding_agent_session_search-2l1b0.45)** (5833ad3)
- **ci(probes): seed generated probe crates with the CASS lockfile so a newer fsqlite publication cannot mix the engine family (coding_agent_session_search-e9f0v)** (c907257)
- **chore(beads): o9ixv owner-archive measurement: one lexical search reads the whole 6.6 GB Quill index (coding_agent_session_search-o9ixv)** (2a7caa9)
- **chore(beads): file e9f0v (adopt fsqlite with 48c6cf6b2; 0.4.7 regressed strict read-only opens); k2k20 A/B, an7w3 repair proof, xcqqa note (coding_agent_session_search-e9f0v) (coding_agent_session_search-k2k20) (coding_agent_session_search-an7w3)** (28699cf)
- **chore(beads): close ech4y on green contract workflows; fdvur and 2l1b0.13 evidence (coding_agent_session_search-ech4y) (coding_agent_session_search-fdvur) (coding_agent_session_search-2l1b0.13)** (24cfe6d)
- **chore(beads): close ze7sm (GH507 pack fallback cause) and njx4p (Kiro e2e); file ech4y; of9i7/scohn findings (coding_agent_session_search-ze7sm) (coding_agent_session_search-njx4p) (coding_agent_session_search-ech4y)** (4402deb)
- **ci(raw-mirror): give the Windows contract build 30 minutes (coding_agent_session_search-ech4y)** (cebca11)
- **ci(codex-contract): pin the upstream baseline to FAD v0.3.3, the release CASS consumes (coding_agent_session_search-ech4y)** (1b6d7b8)
- **chore(beads): fdvur ANN diagnosis - WAL replacement tombstones make frankensearch refuse the retained graph (coding_agent_session_search-fdvur)** (9dabb0d)
- **chore(beads): fdvur progress - memo test fixed bdce342f, diagnosis of the remaining 4 (coding_agent_session_search-fdvur)** (14a8013)
- **chore(beads): close 0w3nq (GH506 CASS_RAW_MIRROR switch landed e0213341) (coding_agent_session_search-0w3nq)** (e49b60f)
- **chore(beads): close r190v (fsqlite 0.4.6 pin e69c1414, gate + release smoke); file fdvur (5 pre-existing lib failures); scohn writer-side note (coding_agent_session_search-r190v) (coding_agent_session_search-fdvur) (coding_agent_session_search-scohn)** (7a38752)
- **chore(beads): file and close jfsyt (storage FTS-count tests raced CASS_DEFER_LEXICAL_UPDATES; fixed cc61aecf) (coding_agent_session_search-jfsyt)** (bf04a54)
- **chore(beads): close gh505 613k8 on the green gh505 workflow + negative control; 0w3nq design and in-progress (coding_agent_session_search-613k8) (coding_agent_session_search-0w3nq)** (5331dff)
- **chore(beads): file gh505 (613k8) and gh506 (0w3nq); close 9su4d on the GH504 release-binary e2e; xcqqa base comparison (coding_agent_session_search-613k8) (coding_agent_session_search-0w3nq) (coding_agent_session_search-9su4d) (coding_agent_session_search-xcqqa)** (43e15fa)
- **style(tests): format GH505 discovery assertion (coding_agent_session_search-dhfzn)** (484742e)
- **style: cargo fmt two files that left main's fmt check red** (0238b6f)
- **chore(beads): xcqqa writer-open regression + fixes (9c830c01, frankensqlite 0853f5e8e); 9su4d FAD 0.3.3 landed; r190v re-plan (coding_agent_session_search-xcqqa) (coding_agent_session_search-9su4d) (coding_agent_session_search-r190v)** (3d15dc3)
- **chore(rch): project transfer excludes that keep tracked model fixtures, so the gate's source-identity stage can pass** (4b0f467)
- **chore(beads): gothf.8/.9 dependency status** (037aab4)
- **chore(beads): root cause of the red ann_shards::wal_tests on 962e8/ds7uy.3.3** (3727f97)
- **chore(beads): close m91r6 with A/B evidence; cross-link 2l1b0.72** (74a68ee)
- **chore(beads): file r190v (fsqlite 0.4.6 adoption) with its gate status; scohn depends on it (coding_agent_session_search-r190v)** (4773d03)
- **chore(beads): xcqqa final proof: completes under 24G, Track B spike gone, daily-stats phase still unbounded (coding_agent_session_search-xcqqa)** (006a422)
- **chore(beads): 2l1b0.72 attribution: arena retention vs large-chunk OOM on owner-archive copies (coding_agent_session_search-2l1b0.72)** (f9e8f6c)
- **chore(beads): file gh504-opencode-v2 (OpenCode 2.x session_v2/session_message never indexed) (coding_agent_session_search-9su4d)** (2e112ff)
- **chore(beads): m91r6 A/B log** (522f888)
- **chore(beads): k2k20 cross-link to the first-sqlite_master full-file read (coding_agent_session_search-k2k20)** (cd807e1)
- **chore(beads): xcqqa proof run result, Track B full-file-read root cause and fixes; 2l1b0.72 build-type lead (coding_agent_session_search-xcqqa)** (03a25ad)
- **chore(beads): o9ixv upstream status note** (52663fe)
- **chore(beads): close kfem7 (fleet+macOS green); evidence on k2k20, 2l1b0.69** (765f2bc)
- **chore(beads): 5s1la A/B refutes it as the root of 2l1b0.72 (retitled); new build-type memory lead on 2l1b0.72; xcqqa class audit (coding_agent_session_search-xcqqa)** (d0ec7a8)
- **chore(beads): xcqqa landing receipts (3c8b35e9, 0871c89d) and GH #496 link; 2l1b0.46 candidate mechanism (coding_agent_session_search-xcqqa)** (4b690c6)
- **chore(beads): xcqqa root cause; file 5s1la (fsqlite published-page plane) and a38pt (freelist trunk rewrite per commit); cross-links on 2l1b0.72, irqgt, m91r6 (coding_agent_session_search-xcqqa)** (5249962)
- **chore(beads): claim m91r6** (0a82dfb)
- **chore(beads): close 2l1b0.78/.79 (verified); m91r6 repro and memory attribution; macOS evidence on 2l1b0.37** (73ce2bd)
- **chore(beads): close 5ajer/df306/nohx1; file m91r6; notes on 2l1b0.36/.65, gothf.11** (a1b4ac9)
- **chore(beads): an7w3 notes: engine fix on frankensqlite main (cbd0b98dc), cass correction 8b9cf270** (db75c91)
- **chore(beads): bgn6s closed on evidence (938bf986); tnuaa closed (b4206781); xcqqa filed (analytics:legacy_omp >24 GB); .72/.73/an7w3 notes incl. the #503 hint correction** (4a1d631)
- **chore(beads): gh482-ann-warning closed on evidence; beads for GH #501/#502/#503; 2l1b0.73 leak-repair measurements; scohn verdict note** (0db9943)
- **chore(beads): ovdzu closed; 2l1b0.40/2l1b0.35 evidence notes** (5f4ce7d)
- **chore(beads): sync DarkFinch bead updates (2l1b0.68 progress; evidence note on uvii3)** (6b8228b)
- **chore(beads): record 5ajer root cause and fix 95b8e91d** (ab0e73c)
- **chore(beads): sync DarkFinch bead updates (nohx1 progress, blocked by 962e8; 2l1b0.68 progress)** (bb834fb)
- **chore(beads): sync DarkFinch bead updates (2l1b0.53 closed; progress on 2l1b0.61 and 2l1b0.68)** (5f2628a)
- **chore(beads): sync DarkFinch bead updates (4tnv3, 2lnh5 filed and closed; 2l1b0.50, .78 closed; comments on .58, .61; dda3f, df306 closed)** (0eb73a6)
- **chore(beads): file df306 (gh500 FAD pin bump for queued_command prompts); uojcg.8.5 wiring plan** (9cd94c7)
- **chore(beads): 2l1b0.65 step 2(b) landed; o1w0a folded into 2l1b0.63; uojcg.3.1 wiring correction; 5ajer triage** (bcfe7a5)
- **chore(beads): uojcg.7.1 shipped in 31eb05e1; note unwired uojcg.3.1 grouping; file o1w0a (superseded dead-code modules)** (e833db8)
- **chore(beads): retain macOS scheduled-indexing starvation evidence** (b136100)
- **chore(beads): file reality-check 2026-09-23 night gaps as 2l1b0.49-.67 (coding_agent_session_search-2l1b0)** (a1779a4)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/Dicklesworthstone/coding_agent_session_search?utm_source=github-action)._