arborist/aborist
russell@unturf.com 8fb5148e8e
qa: positive-form prompts + source-role rank boost + smell-line floor
Three fixes that meaningfully improve claim_lattice_pointer behavior
on real queries.

1. Prompts in positive form. Hermes-3-8B (and instruction-tuned 8Bs
   in general) follow positive directives ("do X") much more
   reliably than negations ("don't do Y"). Rewrote the
   claim_lattice_system_prompt and claim_lattice_grounding_reminder
   in DEFAULT_POLICY and DEFAULT_QUERY_POLICY so every rule says
   what TO do — "Reference evidence by pointer ID", "Use only
   pointer IDs that appear in the EVIDENCE blocks", "Cite 1 or 2
   pointers per claim", "Stop when the evidence runs out — a short
   answer is the right answer when only short evidence exists",
   etc. The cite-count constraint (1-2 per claim) directly
   addresses the spray-anchor failure where Hermes attached every
   available pointer to one claim line ("where is florida"
   produced 1 claim with 33 cites pre-fix).

2. Source-role rank boost. _rerank() now ends with a new
   _rerank_by_source_role stage that classifies each hit's role
   (mutating h.source_role for downstream reuse) and rescales the
   score by SOURCE_ROLE_RANK_WEIGHTS — primary 2.0, secondary 0.7,
   noisy/sequel 0.3. The Florida defect: list-pages
   (List_of_State_Roads_in_Florida, List_of_places_in_Florida:S/C/B,
   Florida_locations_by_per_capita_income) all match
   _SECONDARY_TITLE_MARKERS for "list of" and now sort below the
   actual Florida article instead of dominating the top-8 by body
   density. Affects ranking for both quote and pointer modes; the
   earlier per-source budget weights stay (still primary gets 2x
   the cap), they just don't have to fight a sort order that put
   list-pages first.

3. Lazy-anchor smell line gates on n_verified >= 3. With one
   verified pair the ratio is trivially 1.00 ("1 of 1 verified
   pairs cite [E11]") which is vacuous. Below 3 pairs the metric
   has no comparison surface; suppress the warning in those cases.

Live results on the 'where is florida' query went 33/33 with
cite-spray to 1/1 with a single targeted citation; spotlight
now hits "...largest metropolitan area in the state as well as
the entire southeastern United States is the South Florida..."
instead of state-road-number tables. The JP-dinosaurs benchmark
went from 11/11 with all cites at [E1] (ratio 1.00) to 13/14
with cites distributed across [E8], [E9], [E13] (ratio 0.77),
spotlight finding film-specific spans like "the film's
Dilophosaurus stands about 1.2 meters (4 ft) tall."

442 tests still passing. All 7 production shards report 0 chain
breaks.
2026-04-29 21:42:35 -04:00
..
distill storage cheats + TF-IDF retrieval fix 2026-04-27 17:24:51 -04:00
mesh mesh: per-peer audit chain-of-claims tracking on the wire 2026-04-28 19:41:25 -04:00
qa qa: positive-form prompts + source-role rank boost + smell-line floor 2026-04-29 21:42:35 -04:00
search verify: layered strategies + entity policies, rename VISUAL → UNGROUNDED 2026-04-28 16:58:31 -04:00
sources crawler: skip feeds + sitemaps at ingest (they're discovery, not knowledge) 2026-04-29 05:55:28 -04:00
__init__.py phase 0 explore: aborist core + sources + distill + evict 2026-04-27 07:53:18 -04:00
cli.py qa: positive-form prompts + source-role rank boost + smell-line floor 2026-04-29 21:42:35 -04:00
compress.py storage cheats + TF-IDF retrieval fix 2026-04-27 17:24:51 -04:00
document.py phase 0 explore: aborist core + sources + distill + evict 2026-04-27 07:53:18 -04:00
evict.py storage cheats + TF-IDF retrieval fix 2026-04-27 17:24:51 -04:00
ingest.py storage cheats + TF-IDF retrieval fix 2026-04-27 17:24:51 -04:00
merkle.py phase 0 explore: aborist core + sources + distill + evict 2026-04-27 07:53:18 -04:00
progress.py progress reporter + structured benchmark 2026-04-27 11:37:20 -04:00
snapshot.py add corpus-level snapshots: single-hash identity for the forest 2026-04-27 21:29:10 -04:00
source.py phase 0 explore: aborist core + sources + distill + evict 2026-04-27 07:53:18 -04:00
store.py qa: G0 claim-lattice-pointer answer mode — CTI quote-by-pointer 2026-04-29 21:19:19 -04:00
wikitext.py verify: strip wikitext from context before substring matching 2026-04-28 15:48:07 -04:00