Find a file
russell@unturf.com 13ae4cfb24
strict retrieval: AND + title-required filter
The query "what is the fastest AMD CPU?" was returning Pentium_4 as
a top source, and Hermes hallucinated by conflating Intel content
with AMD context. Two compounding causes:

1. FTS5 was ORing all content tokens, so any doc with "fastest" OR
   "CPU" matched. BM25 then ranked Pentium_4 highly because the
   article is long and discusses CPU clock speed in detail.

2. The reranker only boosted titles that matched — it never
   penalized titles that didn't match. Pentium_4 had no penalty
   despite being topically wrong.

Two fixes:

- FTS5 escape now ANDs content tokens by default. Stopword list
  expanded to include question-shaping verbs (tell/show/describe/
  explain/find) so they don't sneak in as required tokens. If AND
  returns zero hits, falls back to OR — pragmatic for fuzzy queries
  the user phrases differently than the article wording. All-stopword
  inputs still produce a non-empty MATCH so FTS5 doesn't error.

- _filter_by_title_relevance hard-drops hits whose title shares no
  token with the query, before assembling context. If filtering
  would leave fewer than 3 hits, falls back to the unfiltered set
  (corpus might genuinely not have a topical match — let the LLM
  say "I don't know" rather than nothing).

Together: AND-mode requires every content token in the body, and
title filter requires the doc to actually be about the topic. Pentium
articles drop out of AMD queries; Tell_(poker) drops out of plot
queries.

57 tests still passing.
2026-04-27 12:21:35 -04:00
aborist strict retrieval: AND + title-required filter 2026-04-27 12:21:35 -04:00
bench progress reporter + structured benchmark 2026-04-27 11:37:20 -04:00
tests multi-source corpus query: pose a question, the tree pulls related cached docs 2026-04-27 11:43:57 -04:00
.gitignore phase 0 explore: aborist core + sources + distill + evict 2026-04-27 07:53:18 -04:00
CLAUDE.md update CLAUDE.md: real orientation for the working repo 2026-04-27 10:41:20 -04:00
LICENSE phase 0 explore: aborist core + sources + distill + evict 2026-04-27 07:53:18 -04:00
Makefile make query Q="..." — canonical CLI for corpus Q&A 2026-04-27 11:46:45 -04:00
pyproject.toml add Q&A layer: v9.8 providence_cache writes with Merkle-bound proofs 2026-04-27 08:01:23 -04:00
README.md phase 0 explore: aborist core + sources + distill + evict 2026-04-27 07:53:18 -04:00

aborist

An arborist for trees and forests of cross-linked information.

Aborist ingests documents into a content-addressed, Merkle-committed store. Every document carries a URI for backtrack and cross-link. Search hooks return hits with declared audit modes (STRICT / HYBRID / VISUAL) so callers never overclaim what a result actually proves.

Design

Aborist implements the runtime spec from Merkle-AGI v9.8 / Merkle Providence Reverse RAG. The 8-dim admissibility key (source_root, question_hash, model_profile_hash, conversation_hash, governance_policy_hash, schema_version, canonicalization_version, chunking_version) plus falsification state ensures cached records are never reused under drift.

Two layered document kinds:

  • surface — diverse ingested content (full chunks, FTS-indexed)
  • core — distilled records (haiku/equation/snippet) Merkle-signed back to source surface roots via derivations

Reversible eviction via chunk tier ∈ {hot, warm, cold}. Cold = leaf hash

  • URI only; rehydratable from URI, identity verifiable via leaf hash.

Quick start

make all            # bootstrap + fetch + ingest + verify + stats
make search Q='…'

License

AGPL-3.0-only.