arborist/aborist
russell@unturf.com 787c243179
strict attribution rules in query system prompt
Even with rivalry exclusion, sources like 'CPU_monthly' (a roundup
discussing both AMD and Intel CPUs in the same article) sneak through
because their title matches "CPU" without naming a competitor. Hermes
then conflated facts: "the fastest AMD CPU is the 3.2 GHz Pentium 4."

Tightened the DEFAULT_QUERY_POLICY system prompt with four explicit
rules:

1. A single source may discuss multiple competitors. Attribute facts
   only to the entity the source explicitly names.
2. If the question asks about ONE entity (e.g., "fastest AMD CPU"),
   do not include competitor facts as if they were facts about the
   asked entity.
3. AMD PR-rating numbers (3200+, 2500+) are NOT clock speeds in MHz.
   Quote the source's own wording rather than interpreting model
   numbers.
4. Say "I don't know based on the provided sources" when the sources
   don't cover the answer. Don't speculate.

Demo on the same AMD query (post-distill, cores now in retrieval):
  before: "the fastest AMD CPU is the 3.2 GHz Pentium 4 from May 2003"
  after:  "the fastest AMD CPU mentioned is the Athlon XP 3200+ which
           was released in May 2003. The sources do not contain
           information about CPUs released after 2003."

Sources include AMD, AMD_5x86, AMD_Duron + their cores, CPU_design,
CPU_monthly. Hermes correctly attributes Athlon XP 3200+ to AMD and
honestly bounds the corpus's coverage at 2003.

Bumping the system prompt invalidates the governance_policy_hash and
therefore every prior cache_key — by design, per v9.8 admissibility
(prompt change = different governance = fresh inference).

66 tests still passing.
2026-04-27 13:04:31 -04:00
..
distill ETL throughput: 4x parser, 2.5x full ingest 2026-04-27 08:51:52 -04:00
qa strict attribution rules in query system prompt 2026-04-27 13:04:31 -04:00
search strict retrieval: AND + title-required filter 2026-04-27 12:21:35 -04:00
sources fix _iter_insert_statements: persist scan_pos across chunks 2026-04-27 12:15:47 -04:00
__init__.py phase 0 explore: aborist core + sources + distill + evict 2026-04-27 07:53:18 -04:00
cli.py falsification CLI: mark wrong cached answers stale/failed 2026-04-27 13:03:06 -04:00
document.py phase 0 explore: aborist core + sources + distill + evict 2026-04-27 07:53:18 -04:00
evict.py phase 0 explore: aborist core + sources + distill + evict 2026-04-27 07:53:18 -04:00
ingest.py progress reporter + structured benchmark 2026-04-27 11:37:20 -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
source.py phase 0 explore: aborist core + sources + distill + evict 2026-04-27 07:53:18 -04:00
store.py resumable ingest + per-shard audit chain integrity 2026-04-27 11:29:27 -04:00