arborist/arborist
russell@unturf.com 18db3c2caf
qa/corpus: wire fts_title (documents_fts) + fts_phrase (FTS5 phrase MATCH)
Completes the Corpus protocol surface. Both routes already worked at the
storage layer (every shard has chunks_fts AND documents_fts virtual
tables; FTS5 supports MATCH '"phrase"' natively); they just weren't
plumbed through. Now SqliteShardCorpus, MultiShardSqliteCorpus,
BucketClient, FtsSidecarShardClient, MultiShardSidecarCorpus, and
SidecarBucketCorpus all expose fts_title + fts_phrase end-to-end.

Bonus fix in arborist/ingest.py: every shard's INSERT INTO documents
now also INSERTs into documents_fts in the same transaction. Without
this, fts_title returned empty on freshly-ingested shards — only
migrated genesis shards had documents_fts populated. The cost is one
FTS5 row per new doc, negligible vs the chunk inserts.

Also includes operational cleanup (E):
  - Deleted s3://arborist/clones/manifest-sidecar.json
  - Deleted s3://arborist/clones/full-bench-64k/00[0-3].sidecar.bin
    (~3.1 GB reclaimed; the slim FTS5 manifest is now the only cloud
    surface)
  - Fixed MultiShardSidecarCorpus.stats() — was calling .bucket on
    FtsSidecarShardClient (attribute went away when SidecarShardClient
    was deleted); now calls .stats() directly on whichever client.

Validation
----------
- Local fts_title("dinosaur"): "Dinosaur" main article ranks #1
- Local fts_phrase(["always been at war"]): "Nineteen Eighty-Four" ranks
  #1 (the canonical phrase-route test from CLAUDE.md)
- Cloud (slim FTS5 sidecar) fts_title / fts_phrase: IDENTICAL ranking to
  local on the same query (bit-for-bit FTS5 parity preserved)
- Full pytest suite: 2737 passed, 28 skipped, 1 xfailed (the same two
  pre-existing failures from main HEAD)
2026-05-31 11:21:57 -04:00
..
capital capital: land ticket #000020 (8-capital-form cost ledger) 2026-05-07 16:41:48 -04:00
concepts #000054 Phase 2: synonym_expand cap-aware + strict view + retrieval-route surfacing 2026-05-13 10:23:36 -04:00
distill capital: land ticket #000020 (8-capital-form cost ledger) 2026-05-07 16:41:48 -04:00
memory memory: land ticket #000017 (memory-root lifelong learning summary) 2026-05-07 16:46:41 -04:00
mesh modified: CLAUDE.md 2026-05-07 09:24:46 -04:00
pi_star ticket #000032: combinatorics@v1 π* (pure-integer counting kernel) 2026-05-09 13:20:29 -04:00
qa qa/corpus: wire fts_title (documents_fts) + fts_phrase (FTS5 phrase MATCH) 2026-05-31 11:21:57 -04:00
search ticket #000039: --quant {float32,int8} + int8 head-to-head 2026-05-11 13:16:51 -04:00
selfmodel selfmodel: land ticket #000014 (identity record + falsification) 2026-05-07 16:36:34 -04:00
sources fix+perf: fast-mode ignores crawl-delay; shared session; drop HEAD 2026-05-22 06:55:32 -04:00
substrate #000047 — close: delta_aggregator knob on ForkScore (Option D) 2026-05-11 08:27:38 -04:00
wallet qa/corpus: wire fts_title (documents_fts) + fts_phrase (FTS5 phrase MATCH) 2026-05-31 11:21:57 -04:00
world #000013 closed: v7-W spatial-temporal substrate paper + namespace 2026-05-09 15:00:05 -04:00
__init__.py modified: CLAUDE.md 2026-05-07 09:24:46 -04:00
cli.py wallet/fts-sidecar: real FTS5 in the cloud sidecar; delete custom BM25 2026-05-31 10:43:03 -04:00
cold_clone.py cold pack: --jit-blobs mode for online JIT consumer flow 2026-05-30 07:19:01 -04:00
cold_object.py cold-clone tier: live snapshot via SQLite Backup API + raw .db on Spaces 2026-05-29 17:51:23 -04:00
cold_pack_metadata.py cold-recovery: fix pathological restore speed + dead FTS-pack rebuild 2026-05-29 13:45:33 -04:00
compress.py modified: CLAUDE.md 2026-05-07 09:24:46 -04:00
document.py #000065 step 1: routing helper + meta field + pre-migration snapshot 2026-05-26 13:13:44 -04:00
embed.py feat: arborist.embed — supported library-embedding surface 2026-05-22 13:03:15 -04:00
evict.py cold pack: --jit-blobs mode for online JIT consumer flow 2026-05-30 07:19:01 -04:00
ingest.py qa/corpus: wire fts_title (documents_fts) + fts_phrase (FTS5 phrase MATCH) 2026-05-31 11:21:57 -04:00
journal.py modified: CLAUDE.md 2026-05-07 09:24:46 -04:00
merkle.py modified: CLAUDE.md 2026-05-07 09:24:46 -04:00
migrate.py cold-recovery: fix pathological restore speed + dead FTS-pack rebuild 2026-05-29 13:45:33 -04:00
progress.py modified: CLAUDE.md 2026-05-07 09:24:46 -04:00
read.py crawl central-db + query auto-include + read-seam provenance 2026-05-29 13:45:47 -04:00
snapshot.py modified: CLAUDE.md 2026-05-07 09:24:46 -04:00
source.py modified: CLAUDE.md 2026-05-07 09:24:46 -04:00
store.py #000067 phase 2: 3rd "fts" pack kind for skip-rebuild hydrate 2026-05-26 19:13:01 -04:00
wikitext.py loss_report: land ticket #000022 (adapter LossReport sidecar) 2026-05-07 17:58:50 -04:00