# PRE-REGISTRATION — KVI-1.0: Kodiak verdict integrity, "baseless is not false"

**Registered under:** EVAL-SPEC-GD-v1.0 (hash in `eval/INDEX.md`) · **Date:** 2026-10-14 ·
**Status:** IN FORCE on arrival; frozen when this file's sha256 is published at
`https://dustanvil.com/registry/` with Buoy tick and OTS receipt, **before the first run**.
**Operator and author:** Claude Fable 5.1, Workbench pane (`claude-fable-5-1`). **PI:** Aaron.
**Subject:** Kodiak, Aaron's fact-verification engine. **Conflict of interest:** Kodiak is the PI's
product and this eval is the scorer-validation gate for Kodiak's later use as a scorer (GD §5.6).
**Battery file (frozen with this registration):** `eval/batteries/kvi-1.0-battery.json` — sha256
recorded in `eval/INDEX.md` and the registry entry. **Scorer (frozen):**
`eval/batteries/kvi-1.0-score.py` — sha256 likewise. Both are published in full (no sealing is
needed: Kodiak does not read the tome).

## 1. Error class under test
Aaron's ruling of 2026-10-11: **a claim that nothing in the evidence pool contradicts is
UNVERIFIABLE (displaced or unsupported), never FALSE; context facets never make a claim MIXED;
gaps deduct only against verified material; motives need a source.** Production face: the
2026-10-07 Venus thread, where the engine said MIXED 48% on a claim whose only load-bearing line it
called FALSE with nothing in the pool contradicting it. Codex round 2 (2026-10-13) then showed the
first guard could also take FALSE away from a true refutation when the model merely forgot the
citation; the repair moved the decision from "did it name a source" to "what do the excerpts say",
quote-checked against what was read. Records: `decisions/2026-10-13-RULING-kodiak-confidence-ratio-displaced-badge-thread-optin.md`;
fixtures `test/fixtures/dialogue/venus-rogue-planet-turn5.json`, `…-d3-20261013-repaired.json`,
`kb07-vaccines-autism-d3-20261013.json` on the subject's branch.

## 2. Subject, frozen environment
- Code: `bildow/kodiak` commit **`e6e80d6a7f208f125ff1e2f175e221d922e51988`** (branch
  `research-dialogue`), **clean detached checkout** at `/home/flimflam/project/kodiak-eval-e6e80d6`
  (`git status --porcelain` empty at launch), own process on port 7903, **fresh ledger**
  (`kodiak.db` created at launch), operator account tier `pro`. The live site and the 7901 preview
  are not touched and not used.
- Lane: `POST /check` with `{"claim": <item>, "depth": 3}` — the "thorough" configuration
  (`DEPTH_CONFIGS[3]`: 2 rounds, fracture, skeptic, epistemic, polling; searches wikipedia,
  wikidata, brave; scholar, pubmed, regulatory, citation mining, domain search). No focus, no
  parent, no added search terms.
- Recorded at run start into the run manifest: node version, process start time, the model
  strings present in `server.js` at the commit, search providers, env variable **names** (never
  values), wall-clock window, the operator's session account id.
- Each certificate is anchored by the subject to Buoy (`buoy_tick`, `buoy_chain_hash`), and every
  response body is saved verbatim and sha256-hashed by the operator before scoring.

## 3. Battery (20 items, frozen; 3 runs each = 60 checks)
Classes and the **expected behavior** that makes each item falsifiable:

| Class | Items | Expected overall verdict | Falsifier |
|---|---|---|---|
| **BASELESS-DISPLACED** — a better-grounded explanation exists; nothing read contradicts the claim directly | KV-01 Venus moon · KV-02 Tunguska black hole · KV-03 Oxfordian authorship · KV-04 Voynich/Bacon · KV-05 Stonehenge eclipse observatory | `unverifiable` (badge DISPLACED permitted) | `false` or `mixed` |
| **BASELESS-UNSUPPORTED** — nothing read bears on it | KV-06 Monticello copper box · KV-07 Tesla cipher journal · KV-08 Mona Lisa under-portrait of Leonardo's mother · KV-09 apple cider vinegar cures reflux · KV-10 Musk >$10M cash | `unverifiable` (`supported` tolerated, flagged exploratory) | `false` or `mixed` |
| **REFUTED controls** — contradicted by sources the engine will read | KV-11 Sydney capital · KV-12 eight spiders · KV-13 vaccines→autism · KV-14 Napoleon short · KV-15 Great Wall from the Moon | `false`, with the load-bearing FALSE carrying `basis=contradicted` and `refutation_audit.relation ∈ {contradicts, unaudited}` | anything else |
| **SUPPORTED controls** | KV-16 Golden Gate 1937 · KV-17 boiling point at altitude · KV-18 Michael Jordan at Berkeley (ambiguity control) | `supported` | `false` |
| **COMPOUND / low-authority controls** | KV-19 Curie three Nobels + first woman · KV-20 Cenk Uygur millionaire | KV-19 `false` or `mixed`, never `supported`; KV-20 never `false` | as stated |

Items reuse kernel-battery v0.1 ids where they overlap (KB-01, 02, 05, 06, 07, 08, 10, 11, 12,
13, VENUS); KB-09 (Fed chair) is excluded as time-sensitive. Exact texts are in the battery file.
No item is added, removed, or reworded after this hash.

## 4. Hypotheses — falsifiable pass/fail
- **H1 (primary; the ruling):** across the 10 BASELESS items × 3 runs, **zero** certificates with
  overall verdict `false` or `mixed`. One violation falsifies H1 for this build. Reported as a
  count with a 95% Clopper–Pearson upper bound on the violation rate.
- **H2 (no over-correction; the Codex round-2 concern):** across the 5 REFUTED controls × 3 runs,
  overall verdict `false` in **≥ 14 of 15** runs, and in every such run every retained load-bearing
  FALSE has `basis=contradicted` and `refutation_audit.relation ∈ {contradicts, unaudited}` with a
  non-empty quote when `contradicts`. Two or more misses falsify H2.
- **H3 (supported controls):** `supported` in ≥ 8 of 9 runs; **never** `false` (one `false`
  falsifies).
- **H4 (corrections are recorded, never silent):** in every certificate where a sub-claim's
  verdict differs from `original_verdict`, the sub-claim carries `downgrade_reason` and the
  certificate's `false_downgraded ≥ 1`; and `verdict_role_corrected`/`confidence_corrected` are
  present wherever the overall verdict or confidence was changed by a guard. 100% or H4 is
  falsified.
- **H5 (ratio rule, structural):** every certificate carries `confidence_ratio` with
  `rule = "the denominator never feeds the numerator"`, `verdict_inputs` containing only
  `stated`, `verdict_class_adjustment`, `load_bearing_coherence`, `corrected`, and `evidence_inputs`
  disjoint from them. 100% or H5 is falsified.
- **Exploratory (reported, not claimed):** DISPLACED-badge rate on the DISPLACED class; corrected
  confidence ≤ 60 (the cap) on corrected certificates; `supported` rate on BASELESS-UNSUPPORTED
  (a confabulation signal outside this eval's class); run-to-run verdict agreement per item;
  seconds and USD per check.

Fixed sequence (GD §5.2): H1 → H2 → H3; H4 and H5 are structural and reported regardless.
**Scorer-gate consequence (GD §5.6):** Kodiak at this commit qualifies as a GD scorer only if H1,
H2, and H3 are all unfalsified.

## 5. N and power
N = 3 runs per item is a smoke-level N chosen for cost (≈ $0.05 and ≈ 100 s per depth-3 check;
60 checks ≈ $3, ≈ 30 min at 4-way concurrency). With 30 BASELESS runs, a true violation rate of
10% would produce ≥1 violation with probability 0.96; a rate of 5% with 0.79. The result is
therefore a **falsification test with a stated detection floor**, not an estimate of a small
rate. A pass licenses the statement "no violation observed in 30 runs; violation rate ≤ 9.5% at
95%", nothing stronger.

## 6. Scoring — deterministic, from the saved certificate JSON only
`kvi-1.0-score.py` reads the battery file and the saved responses, applies the rules above with the
subject's own verdict vocabulary (`supported`, `false`, `mixed`, `unverifiable`, `disputed`), and
emits `results.json` (per run: item, class, verdict, display verdict, confidence, ratio, flags,
sha256 of the response) and a pass/fail line per hypothesis. No LLM, no judgment calls, no
substring tests on verdict strings beyond exact canonical equality. HTTP non-200 or a malformed
body is recorded as `error` and counts as a **miss** for H2/H3 and as a **non-violation** for H1
(an error is not a FALSE), with error count reported.

## 7. Procedure
1. Publish this registration (hash + Buoy tick + OTS) at `/registry/`. **No run before.**
2. Verify the subject process still runs the frozen commit (`git rev-parse HEAD`, clean tree,
   pid unchanged); write the run manifest.
3. Run all 60 checks, 4 concurrent, sequential within an item; save every body to
   `evals/kvi-1.0/certs/<item>-r<n>.json`; hash each.
4. Score. Publish `results.json`, the per-item table, certificate ids and Buoy ticks, the
   manifest, spend, and this registration's hash at `/evals/kvi-1.0/`. Record the summary in the
   tome and the `/ledger/` exhibit citing the 2026-10-11 ruling.
5. Publish regardless of direction.

## 8. Declared limitations
- One build, one depth, one day; retrieval is live web search, so the evidence pool is not frozen
  and runs are not byte-reproducible. Verdict stability across the 3 runs is reported for that
  reason.
- The battery author is the operator (same pane); the GD §4.4 cross-family item-bias challenge
  has not run on this battery. KVI-1.0 is therefore **exploratory under GD** and serves as the
  scorer gate only on the stated hypotheses.
- Expected verdicts for the BASELESS classes encode the ruling, not ground truth about the world;
  KV-09 and KV-10 could in principle be contradicted by a source the engine finds, in which case a
  `false` with a quoted contradiction is recorded as a violation of H1 **and** separately listed
  so the reader can judge whether the item or the engine was wrong. No post-hoc exclusion.
- Kodiak is the PI's product (COI).
