{
 "schema": "boar-publication/glossary",
 "schema_version": "1.0.0",
 "generated": "2026-10-25",
 "license": "CC BY 4.0 (text and data); see /CITATION.cff",
 "count": 100,
 "notes": [],
 "glossary": [
  {
   "id": "G-boar",
   "term": "BOAR",
   "aliases": [],
   "layer": "curious",
   "chapter": "question",
   "plain": "An Android app that answers questions with no internet, using a small AI model and libraries of text stored on the phone.",
   "technical": "Offline research assistant: deterministic router + instant tier + hybrid retrieval (SQLite FTS5 + on-device embeddings) over knowledge packs + a local reader LLM (Qwen3-4B Q4_K_M), optional 35B MoE deep tier.",
   "fact_ids": []
  },
  {
   "id": "G-bounty",
   "term": "poidh bounty #31",
   "aliases": [
    "the bounty"
   ],
   "layer": "curious",
   "chapter": "question",
   "plain": "A public crypto bounty asking for an offline Android research app that is \"more than 50 % as good as internet plus a frontier AI\", on a phone with at most 12 GB of RAM, in English.",
   "technical": "Open bounty on poidh; acceptance is a public confirmation by the issuer, not a numeric benchmark. Constraints: offline, ≤ 12 GB RAM, ≤ 50 GB storage, English.",
   "fact_ids": [
    "F-040"
   ]
  },
  {
   "id": "G-bar",
   "term": "the bar (0.50)",
   "aliases": [
    "half as good",
    "50 % bar"
   ],
   "layer": "curious",
   "chapter": "honest-number",
   "plain": "The target: BOAR's answers should be worth at least half of what a frontier AI with web search gives.",
   "technical": "Operationalised as floor-adjusted ratio CI low ≥ 0.50 (primary target, from 2026-10-06) and raw ratio CI low > 0.50 on both V-para and v0.2 (formal rule of the 2026-10-02 analysis plan). As of 2026-10-18, not reached under the Claude judge on held-out data; the research is open and pending runs could change this (data/status.json).",
   "fact_ids": [
    "F-004"
   ]
  },
  {
   "id": "G-reference",
   "term": "frontier reference answer",
   "aliases": [
    "reference",
    "Opus + web reference"
   ],
   "layer": "curious",
   "chapter": "ruler",
   "plain": "For every test question, a top AI model with web search wrote one answer; it is frozen and every BOAR answer is compared with it.",
   "technical": "Claude Opus with web search, prompt reference.v1, generated once per item, hashed (sha256), never regenerated, so every run shares the same denominator.",
   "fact_ids": []
  },
  {
   "id": "G-pairwise-judge",
   "term": "pairwise judge (both orders)",
   "aliases": [
    "judge",
    "both orders",
    "position swap"
   ],
   "layer": "tech",
   "chapter": "ruler",
   "plain": "An AI judge reads the question and both answers side by side, scores both, then reads them again in the swapped order to cancel any bias for whichever comes first.",
   "technical": "judge.v1: Claude Opus scores both answers on three 1–5 axes and picks a winner, in A/B and B/A order; scores averaged over orders; order disagreement on the winner = tie. Links, source lists and citation markers are stripped (blinding).",
   "fact_ids": []
  },
  {
   "id": "G-rubric",
   "term": "rubric (correctness, completeness, usefulness)",
   "aliases": [
    "axes"
   ],
   "layer": "tech",
   "chapter": "ruler",
   "plain": "Each answer gets three scores from 1 to 5: is it right, is it complete, is it useful.",
   "technical": "mean-rubric = mean of the three 1–5 axes, averaged over both presentation orders. The scale has a floor of 1, which inflates ratios (see rubric floor).",
   "fact_ids": []
  },
  {
   "id": "G-raw-ratio",
   "term": "raw ratio",
   "aliases": [
    "ratio",
    "quality ratio"
   ],
   "layer": "curious",
   "chapter": "floor-trap",
   "plain": "BOAR's total score divided by the reference's total score. It flatters BOAR, because even a useless answer gets 1 out of 5.",
   "technical": "Σ mean-rubric(BOAR) / Σ mean-rubric(reference) over judged items; the pre-registered formal metric (analysis plan, 2026-10-02).",
   "fact_ids": [
    "F-003"
   ]
  },
  {
   "id": "G-rubric-floor",
   "term": "rubric floor / always-decline baseline",
   "aliases": [
    "always-decline",
    "D = 0.306"
   ],
   "layer": "tech",
   "chapter": "floor-trap",
   "plain": "Because the lowest score is 1, not 0, an app that refuses every question already earns about 0.31 on the raw ratio.",
   "technical": "Always-decline baseline D = 0.306 raw (79 judged declines over 7 runs; v0.2-weighted 0.307). About 61 % of a raw 0.50 is therefore \"free\".",
   "fact_ids": [
    "F-003"
   ]
  },
  {
   "id": "G-floor-adjusted",
   "term": "floor-adjusted ratio",
   "aliases": [
    "above_min",
    "floor-adj"
   ],
   "layer": "curious",
   "chapter": "floor-trap",
   "plain": "The same ratio after removing the free point from both sides: how much of the reference's value above \"nothing\" BOAR delivers. This is the headline number.",
   "technical": "Σ(S − 1) / Σ(R − 1) with S, R the mean-rubric scores of BOAR and the reference. Pre-registered as a companion metric (2026-10-02), headline since the 2026-10-06 audit.",
   "fact_ids": [
    "F-044",
    "F-001"
   ]
  },
  {
   "id": "G-win-rate",
   "term": "win / tie / loss and win-rate",
   "aliases": [
    "W/T/L",
    "win rate"
   ],
   "layer": "curious",
   "chapter": "floor-trap",
   "plain": "For each question: did the judge prefer BOAR's answer, the reference, or neither? BOAR won 0 of 51 bounty-style questions.",
   "technical": "Per-item combined winner over both orders (disagreement = tie). Reported, never gated (since 2026-10-10). 0 wins on every Claude-judged row of V-para and v0.2; isolated wins on v0.1 dev only.",
   "fact_ids": [
    "F-016",
    "F-045"
   ]
  },
  {
   "id": "G-formal-rule",
   "term": "formal raw rule vs primary target",
   "aliases": [],
   "layer": "ai",
   "chapter": "honest-number",
   "plain": "There are two ways to read the bar; the stricter one (floor-adjusted) is the one the project leads with, and as of 2026-10-18 it has not been met.",
   "technical": "Formal rule (plan 2026-10-02): raw CI low > 0.50 on both sets — met only by the deep tier with thinking on dev data. Primary target (2026-10-06): floor-adjusted CI low ≥ 0.50 on V-para — met by no configuration as of 2026-10-18 (best 0.436, CI high 0.472).",
   "fact_ids": [
    "F-004"
   ]
  },
  {
   "id": "G-l1-l2",
   "term": "L1 / L2 judges (triage and confirmation)",
   "aliases": [
    "Haiku triage",
    "Opus confirm",
    "judge ladder"
   ],
   "layer": "ai",
   "chapter": "measurer",
   "plain": "A cheap AI judge screens ideas first; the expensive judge only confirms promising ones and produces the published numbers.",
   "technical": "L1 = Claude Haiku 5.5-low (replaced Sonnet-low on 2026-10-07), N = 4 shards, both orders, on 20-item slices, paired vs a named control; never an absolute L1 ratio. L2 = Claude Opus judge.v1, both orders, two seeds, for confirmations and claim numbers. Haiku compresses gaps (0.70–0.95× Opus on pack arms).",
   "fact_ids": [
    "F-019"
   ]
  },
  {
   "id": "G-near-miss",
   "term": "near-miss rule",
   "aliases": [],
   "layer": "ai",
   "chapter": "measurer",
   "plain": "If the cheap judge lands very close to a decision line, the expensive judge decides instead.",
   "technical": "A Haiku Δ within 0.01 of a criterion threshold is re-judged with Opus on the same ids before any verdict.",
   "fact_ids": []
  },
  {
   "id": "G-xfam",
   "term": "cross-family judge (XFAM)",
   "aliases": [
    "XFAM",
    "cross-family"
   ],
   "layer": "curious",
   "chapter": "measurer",
   "plain": "The same answers were re-scored by an AI judge from a different company, to see whether a Claude judge treats Claude-written references kindly or harshly.",
   "technical": "Post-hoc re-judge of existing traces with OpenAI gpt-5.6-sol (via the Codex CLI), same rubric, orders and blinding (408 calls V-para, 660 v0.2). Scores ≈ +0.10 higher on both sets, ranking unchanged (Spearman 0.88–0.97), win-rate 0.00–0.06. Not pre-registered.",
   "fact_ids": [
    "F-017",
    "F-018"
   ]
  },
  {
   "id": "G-lower-judge",
   "term": "lower-judge rule",
   "aliases": [],
   "layer": "tech",
   "chapter": "honest-number",
   "plain": "When two judges disagree, the project publishes the lower (less flattering) number as the headline.",
   "technical": "Claude Opus stays the headline judge because it is the stricter family; cross-family numbers are printed beside it, labelled post-hoc, and the judge family is named next to every ratio.",
   "fact_ids": []
  },
  {
   "id": "G-judge-family",
   "term": "judge family / self-preference",
   "aliases": [],
   "layer": "ai",
   "chapter": "measurer",
   "plain": "The questions, the reference answers and the judge all came from the same AI company, which may bias the scores.",
   "technical": "Claude wrote v0.2 and V-para items and the references, and judged. Self-preference direction is measured only by one post-hoc cross-family re-judge. v0.3 is to be written outside the Claude family.",
   "fact_ids": [
    "F-017"
   ]
  },
  {
   "id": "G-bootstrap",
   "term": "bootstrap confidence interval",
   "aliases": [
    "CI",
    "95 % CI"
   ],
   "layer": "tech",
   "chapter": "ruler",
   "plain": "Resample the questions thousands of times to see how much the score could move by chance; the middle 95 % is the confidence interval.",
   "technical": "Stratified two-level bootstrap: items resampled within category, then runs within item; 2,000 resamples; paired for differences.",
   "fact_ids": []
  },
  {
   "id": "G-common-mode",
   "term": "common-mode CI",
   "aliases": [
    "CI_cm"
   ],
   "layer": "ai",
   "chapter": "measurer",
   "plain": "A wider interval that also counts run-to-run randomness, not just which questions were asked.",
   "technical": "CI_cm = point ± 1.96·sqrt(SE_item² + (σ_run/√seeds)²), σ_run raw 0.020 / floor-adjusted 0.025 on V-para (SEEDVAR). Used for deep-tier rows since 2026-10-11.",
   "fact_ids": [
    "F-009",
    "F-012"
   ]
  },
  {
   "id": "G-seed-noise",
   "term": "seed and seed noise",
   "aliases": [
    "seed",
    "SEEDVAR",
    "seed-noise rule"
   ],
   "layer": "tech",
   "chapter": "measurer",
   "plain": "Running the same setup again with a different random seed gives different answers and a different score; that variation is seed noise.",
   "technical": "Seed = sampling seed of answer generation. Same deep configuration, s42 vs s43: Δ −0.039 (−0.072…−0.011) raw on V-para. Rule since 2026-10-16: a one-seed deep-tier Δ < 0.05 on V-para is noise (was 0.03).",
   "fact_ids": [
    "F-020",
    "F-012"
   ]
  },
  {
   "id": "G-judge-noise",
   "term": "judge noise (test-retest)",
   "aliases": [
    "JUDGEVAR"
   ],
   "layer": "ai",
   "chapter": "measurer",
   "plain": "Re-judging the exact same answers changes the score by almost nothing.",
   "technical": "σ_judge ≈ 0.003 raw / 0.004 floor-adjusted, per-item r 0.96, winner 51/51 (Opus, 102 calls): an order of magnitude below seed noise.",
   "fact_ids": [
    "F-019"
   ]
  },
  {
   "id": "G-mde",
   "term": "MDE (minimum detectable effect)",
   "aliases": [
    "power",
    "not detected at MDE"
   ],
   "layer": "tech",
   "chapter": "ruler",
   "plain": "The smallest improvement a test of a given size can reliably tell apart from noise. \"Not detected\" below it does not mean \"no effect\".",
   "technical": "House MDEs: v0.2 one seed ≈ 0.025 raw (110 ids); V-para two seeds ≈ 0.03, one seed ≈ 0.06; 20-item slice ≈ 0.08; v0.1 EN 57 one seed ≈ 0.055.",
   "fact_ids": [
    "F-043"
   ]
  },
  {
   "id": "G-paired",
   "term": "paired comparison",
   "aliases": [],
   "layer": "tech",
   "chapter": "ruler",
   "plain": "Two versions are compared on exactly the same questions, so question difficulty cancels out.",
   "technical": "Per-item differences with a paired bootstrap CI; the default reading for every arm (Δ = arm − named control).",
   "fact_ids": []
  },
  {
   "id": "G-winners-curse",
   "term": "winner's curse",
   "aliases": [],
   "layer": "ai",
   "chapter": "measurer",
   "plain": "If you pick the best of many setups on the same questions, it will look a bit better than it really is.",
   "technical": "The recommended deep configuration was the best of ≥ 8 deep configurations on V-para; expect a ≈ 0.01–0.02 discount on new data.",
   "fact_ids": [
    "F-009"
   ]
  },
  {
   "id": "G-frozen-criterion",
   "term": "frozen criterion (pre-registration)",
   "aliases": [
    "pre-registered",
    "sha256",
    "criterion"
   ],
   "layer": "curious",
   "chapter": "ruler",
   "plain": "Before running an experiment, the pass/fail rule is written down and fingerprinted, so it cannot be bent to fit the result afterwards.",
   "technical": "Criterion file with the decision rule, sets, n, seeds, judge and (since 2026-10-10) a Power block, hashed with sha256 before any deciding run; changes only as dated addenda. 65/65 hashes verified on 2026-10-10; an outside critic matched 16 of 17 on 2026-10-16.",
   "fact_ids": [
    "F-042"
   ]
  },
  {
   "id": "G-rule29",
   "term": "Power / Ceiling / Budget / Transfer blocks",
   "aliases": [
    "Rule 29",
    "Power block"
   ],
   "layer": "ai",
   "chapter": "agent-lab",
   "plain": "Required parts of every experiment plan: how big an effect is expected, the best it could possibly do, what it may cost, and where it must also work.",
   "technical": "Power: expected Δ with source, n, seeds, MDE (2026-10-10). Ceiling: 0-call upper bound; launch only if ≥ 2×MDE. Budget: smoke, wall-clock caps, kill points. Transfer: a dev win must also show on the bounty-shaped set (Rule 29, 2026-10-14).",
   "fact_ids": []
  },
  {
   "id": "G-arm",
   "term": "arm (experiment)",
   "aliases": [
    "arms"
   ],
   "layer": "curious",
   "chapter": "ruler",
   "plain": "One experiment: one change compared against a fixed control, with one frozen rule and one verdict.",
   "technical": "Directory arms/<arm>/ with criterion (+ sha256), patch, traces, aggregates and a verdict report. 159 verified arm records by 2026-10-13.",
   "fact_ids": [
    "F-041"
   ]
  },
  {
   "id": "G-lever",
   "term": "lever and verdict labels",
   "aliases": [
    "LEVER",
    "SMALL",
    "NO",
    "not detected",
    "CHEAPER-PARITY"
   ],
   "layer": "tech",
   "chapter": "ruler",
   "plain": "A \"lever\" is a change that measurably improves quality. Each experiment ends with a label saying whether it was one.",
   "technical": "LEVER = CI low > 0 and Δ ≥ +0.03; SMALL = real but below +0.03; NO = rule failed or CI excludes the hoped-for gain; \"not detected at MDE x (n, seeds)\" = CI straddles 0 below power; CHEAPER-PARITY = equal quality at lower cost.",
   "fact_ids": []
  },
  {
   "id": "G-step0",
   "term": "step-0 gate (0-call gate)",
   "aliases": [
    "0-call gate",
    "replay"
   ],
   "layer": "tech",
   "chapter": "agent-lab",
   "plain": "A free, automatic check an idea must pass before any expensive AI judging; most ideas died here.",
   "technical": "Deterministic gate with 0 judge calls (retrieval replay, coverage counts, byte-identity), e.g. \"fact chunk in top-8 ≥ bar\". Of 101 closed arms counted on 2026-10-13, 54 closed at 0 judge calls.",
   "fact_ids": []
  },
  {
   "id": "G-funnel",
   "term": "judge funnel (L0 → L1 → L2)",
   "aliases": [
    "funnel"
   ],
   "layer": "tech",
   "chapter": "ruler",
   "plain": "Cheap checks first, expensive judging last.",
   "technical": "L0 deterministic replay/unit gates → L1 Haiku on a random stratified 20-item slice → L2 Opus, two seeds, full set; held-out sets only by script, totals only.",
   "fact_ids": []
  },
  {
   "id": "G-random20",
   "term": "random20 slice",
   "aliases": [
    "signal20",
    "slice"
   ],
   "layer": "ai",
   "chapter": "ruler",
   "plain": "A fixed random sample of 20 questions used only to stop hopeless ideas early, never to measure an effect.",
   "technical": "Stratified random 20-id slices (seed 7) replaced the \"20 hardest items\" signal20 slice on 2026-10-10; futility screen only (one n = 20 Haiku pass carries ± 0.03–0.04 noise).",
   "fact_ids": []
  },
  {
   "id": "G-oracle",
   "term": "oracle / ceiling cell",
   "aliases": [
    "ceiling",
    "ORACLE-ST"
   ],
   "layer": "tech",
   "chapter": "walls",
   "plain": "A deliberately \"cheating\" run that hands the model the right fact, to measure the most any fix in that area could ever gain.",
   "technical": "Inject the item's known fact chunk as an extra kept passage: +0.095 (+0.070…+0.122) on the 180 pack self-tests (Opus) → headroom is retrieval reach, not reading.",
   "fact_ids": [
    "F-027"
   ]
  },
  {
   "id": "G-closed-registry",
   "term": "closed registry (CLOSED.md)",
   "aliases": [
    "graveyard",
    "negative results"
   ],
   "layer": "curious",
   "chapter": "walls",
   "plain": "A public list of every idea that did not work, with how strong the test was and what new evidence would justify trying again.",
   "technical": "One row per closed lever family: arm(s), set, n, seeds, judge, result, MDE, label and a \"would reopen it\" line. 76 public rows (R1–R76); 98 rows privately by 2026-10-16.",
   "fact_ids": [
    "F-043"
   ]
  },
  {
   "id": "G-exposure-ledger",
   "term": "exposure ledger",
   "aliases": [
    "EXPOSURES"
   ],
   "layer": "tech",
   "chapter": "ruler",
   "plain": "A log with one line for every time a held-out question set was run or read, so readers can judge how clean each number is.",
   "technical": "126 dated rows (55 v0.2-only, 33 V-para-only, 19 both); determines each set's status ruling (SET-STATUS).",
   "fact_ids": [
    "F-038"
   ]
  },
  {
   "id": "G-held-out",
   "term": "held-out (blind) set",
   "aliases": [
    "blind set",
    "held-out"
   ],
   "layer": "curious",
   "chapter": "ruler",
   "plain": "Exam questions that the people (and agents) building the app never see; the only fair test.",
   "technical": "Item text stored outside builder-readable paths; run only by script, aggregates only; every touch logged in the exposure ledger.",
   "fact_ids": [
    "F-038"
   ]
  },
  {
   "id": "G-burnt",
   "term": "burnt set",
   "aliases": [
    "burnt → dev"
   ],
   "layer": "curious",
   "chapter": "ruler",
   "plain": "A held-out set whose questions leaked to where builders could see them; from then on it only counts as practice data.",
   "technical": "v0.2: plaintext entered the private bench repository history; 12 generation runs and 10 Opus passes → burnt → dev by ruling 2026-10-06.",
   "fact_ids": [
    "F-038"
   ]
  },
  {
   "id": "G-dev-style",
   "term": "dev vs dev-style",
   "aliases": [
    "dev",
    "development data"
   ],
   "layer": "tech",
   "chapter": "ruler",
   "plain": "Dev = practice questions you may tune on. Dev-style = a set that was a fair exam once but has since been used to make decisions.",
   "technical": "V-para is held-out for the two 4B claim runs (2026-10-05/06) and dev-style for everything measured after 2026-10-06 (ruling 2026-10-09).",
   "fact_ids": [
    "F-038"
   ]
  },
  {
   "id": "G-bench-versions",
   "term": "bench v0.1 / v0.2 / v0.3",
   "aliases": [
    "v0.1",
    "v0.2",
    "v0.3"
   ],
   "layer": "tech",
   "chapter": "ruler",
   "plain": "Versions of the test set: a public practice set, a former exam set now used for practice, and a future exam to be written outside the Claude family.",
   "technical": "v0.1: 60 public items (57 EN judged), references public. v0.2: 110 items, burnt → dev. v0.3: items to be written by the author with a non-Claude model; hashes public before scoring; 0 items as of 2026-10-17.",
   "fact_ids": []
  },
  {
   "id": "G-vpara",
   "term": "V-para",
   "aliases": [
    "bounty-style set"
   ],
   "layer": "curious",
   "chapter": "ruler",
   "plain": "A set of 58 questions (51 judged + 7 venue questions) written paraphrased from Vitalik Buterin's public blog posts; the set closest to the bar.",
   "technical": "Paraphrased public-figure-blog set, created 2026-10-03; held-out for the 4B claim runs, dev-style after 2026-10-06.",
   "fact_ids": [
    "F-001",
    "F-038"
   ]
  },
  {
   "id": "G-selftests",
   "term": "180 pack self-tests",
   "aliases": [
    "pack-matched set",
    "the 180"
   ],
   "layer": "tech",
   "chapter": "packs",
   "plain": "Twenty public practice questions per knowledge pack, written from the pack's own text, used to see whether a pack helps.",
   "technical": "9 packs × 20 agent-written items whose fact sits in a known chunk; lets the retrieval chain be traced end to end. Dev data, never claim evidence.",
   "fact_ids": [
    "F-025"
   ]
  },
  {
   "id": "G-lengthshare",
   "term": "reference length share (LENGTHSHARE)",
   "aliases": [],
   "layer": "ai",
   "chapter": "measurer",
   "plain": "Some of the gap to the reference is just that the reference is longer.",
   "technical": "Re-judging the same answers against references condensed to ≤ 80 words: floor-adjusted 0.412 → 0.514, ≈ 17 % length / 83 % substance (1 seed, dev-style).",
   "fact_ids": [
    "F-021"
   ]
  },
  {
   "id": "G-cut",
   "term": "cut (frozen build)",
   "aliases": [
    "cut 7",
    "claim build",
    "frozen build"
   ],
   "layer": "curious",
   "chapter": "builds",
   "plain": "A numbered, locked version of the app's answering engine. Cut 7 is the version the claim is about.",
   "technical": "Cuts 1–7 bundle the arms that passed: cut 3 = cut 2 + verdict guard v3 + arithmetic tools + snakebite text; cut 4 adds KVFIX + instant-fragment guards; cut 5 adds a no-source KV prefix + route-gate skip; cut 6 adds DETMAX; cut 7 = cut 6 + FACTS r6 (frozen 2026-10-07).",
   "fact_ids": [
    "F-046"
   ]
  },
  {
   "id": "G-fast-tier",
   "term": "fast tier (4B default)",
   "aliases": [
    "4B",
    "default tier"
   ],
   "layer": "curious",
   "chapter": "builds",
   "plain": "The default answer path: a small 4-billion-parameter model reads a few retrieved passages and writes a short answer with sources.",
   "technical": "Qwen3-4B-Instruct-2507 Q4_K_M (≈ 2.5 GB, Apache-2.0) on cut 7; fits an 8 GB phone; p50 ≈ 31 s on a 12 GB-class phone.",
   "fact_ids": [
    "F-001",
    "F-023"
   ]
  },
  {
   "id": "G-deep-tier",
   "term": "deep tier",
   "aliases": [
    "deep35",
    "H",
    "recommended deep configuration"
   ],
   "layer": "curious",
   "chapter": "deep-tier",
   "plain": "An optional slower mode that uses a much bigger model which \"thinks\" before answering; the largest quality gain measured so far, but as of 2026-10-18 it has not run on a phone (a pending run).",
   "technical": "Cut 6 + Qwen3.6-35B-A3B UD-Q2_K_XL (≈ 3B active per token) + thinking budget 512: V-para floor-adjusted 0.436 (2 seeds, dev-style, Opus), desktop p50 ≈ 79 s; projected ≈ 1.9–2.8 min on a 12 GB phone.",
   "fact_ids": [
    "F-009",
    "F-035"
   ]
  },
  {
   "id": "G-lite-tier",
   "term": "lite tier",
   "aliases": [
    "1.7B"
   ],
   "layer": "tech",
   "chapter": "handoff",
   "plain": "A smaller model option for phones with 4–6 GB of RAM: faster, less accurate, behind the same safety rules.",
   "technical": "Qwen3-1.7B Q4_K_M + X2b; matches the plain 4B only on the 180 pack-matched dev items; −0.111 vs the 4B on the claim kit; thinking stays off.",
   "fact_ids": []
  },
  {
   "id": "G-moe",
   "term": "mixture of experts (MoE)",
   "aliases": [],
   "layer": "curious",
   "chapter": "deep-tier",
   "plain": "A big model split into many small \"expert\" blocks, of which only a few work on each word, so it knows a lot but runs cheaper than its size suggests.",
   "technical": "Qwen3.6-35B-A3B: 35B total, ≈ 3B active parameters per token. 25–35B MoEs form one closed-book plateau ≈ 0.60 raw on v0.1 vs 0.487 for the 4B.",
   "fact_ids": [
    "F-034"
   ]
  },
  {
   "id": "G-thinking-budget",
   "term": "thinking budget",
   "aliases": [
    "think 512",
    "DT512"
   ],
   "layer": "tech",
   "chapter": "deep-tier",
   "plain": "How many hidden \"reasoning\" words the model may write before answering. 512 was as good as 1024 at about half the time.",
   "technical": "Cap on reasoning tokens; budget curve on V-para floor-adjusted: 0 → 0.33, 256 → 0.39, 512 → 0.44, 1024 → 0.42; 3072 no gain (model stops ≈ 1.3k tokens).",
   "fact_ids": [
    "F-008",
    "F-010",
    "F-011"
   ]
  },
  {
   "id": "G-expert-streaming",
   "term": "expert streaming (bmoe, LES)",
   "aliases": [
    "bmoe",
    "LES",
    "LESPORT"
   ],
   "layer": "tech",
   "chapter": "phone",
   "plain": "Loading only the expert blocks a word needs from storage, instead of keeping the whole big model in memory.",
   "technical": "bmoe v0.28.0 (the on-device engine) is judged-equivalent to llama-server on identical contexts. An OpenBMB llama.cpp fork (LES) runs the 35B in ≈ 2.8 GiB RSS on a desktop CPU at 14–17 tok/s, judged-equivalent; phone flash speed unmeasured.",
   "fact_ids": [
    "F-037",
    "F-036"
   ]
  },
  {
   "id": "G-quant",
   "term": "quantization",
   "aliases": [
    "Q2",
    "Q3",
    "Q4",
    "ternary"
   ],
   "layer": "tech",
   "chapter": "builds",
   "plain": "Storing a model's numbers with fewer bits so it fits on small devices, at some cost in quality.",
   "technical": "Deep model UD-Q2_K_XL (2-bit); 3-bit gave +0.004 (not detected, ≥ +0.03 excluded). Ternary 2B/4B/9B models were closed on speed or quality.",
   "fact_ids": []
  },
  {
   "id": "G-instant-tier",
   "term": "instant tier (deterministic answers)",
   "aliases": [
    "deterministic answers"
   ],
   "layer": "curious",
   "chapter": "builds",
   "plain": "Answers produced by plain code, without the AI model: calculators, a facts table, emergency numbers, first-aid cards.",
   "technical": "Router paths that bypass the LLM: arithmetic, unit and travel-distance calculators, nearby places, FACTS table, first-aid cards, verbatim cited health excerpts.",
   "fact_ids": []
  },
  {
   "id": "G-facts-table",
   "term": "FACTS table",
   "aliases": [
    "FACTS r6"
   ],
   "layer": "tech",
   "chapter": "builds",
   "plain": "A small table of facts from Wikidata that answers simple questions instantly, with a citation.",
   "technical": "761 KB, 4,233 Wikidata entities; r6: precision 90–97 %, false positives 0/100 blind, recall 60–70 % (FAIL vs the frozen 75 %, shipped by decision in cut 7); fires 0 times on the held-out sets.",
   "fact_ids": [
    "F-046"
   ]
  },
  {
   "id": "G-detector",
   "term": "emergency detector (DETMAX)",
   "aliases": [
    "danger detector",
    "DETMAX"
   ],
   "layer": "tech",
   "chapter": "builds",
   "plain": "A small text classifier that spots emergencies and health questions so the app answers them with reviewed text instead of model guesses.",
   "technical": "106 MB learned classifier + rules; DETMAX (cut 6) takes the max of the detector score over the conversation window and the current turn. Weights not released (base-model licence unknown).",
   "fact_ids": []
  },
  {
   "id": "G-cards",
   "term": "first-aid cards",
   "aliases": [
    "health cards"
   ],
   "layer": "curious",
   "chapter": "builds",
   "plain": "Short, fixed instructions for 32 conditions, with sources and an emergency-number line. AI-reviewed, not clinically reviewed.",
   "technical": "Reviewed card texts served when the detector fires; on the default tier the model never writes health advice. Every mention must carry \"AI-reviewed, not clinically reviewed\".",
   "fact_ids": []
  },
  {
   "id": "G-healthgap",
   "term": "HEALTHGAP / NUMGUARD",
   "aliases": [],
   "layer": "ai",
   "chapter": "builds",
   "plain": "Safety rules: questions about doses, poisoning and similar count as emergencies, and only a deterministic calculator may override a fired emergency.",
   "technical": "HEALTHGAP r2 widens the emergency predicate; NUMGUARD r3 lets only the calculator answer a numeric question the detector flagged (the lexicon guard was rejected as unsafe by review).",
   "fact_ids": []
  },
  {
   "id": "G-verdict-guard",
   "term": "verdict guard (self-contradiction guard)",
   "aliases": [
    "VG"
   ],
   "layer": "ai",
   "chapter": "builds",
   "plain": "A check that catches answers which say \"yes\" and then argue \"no\".",
   "technical": "Deterministic repair of verdict/body contradictions; v3 shipped in cut 3 after a reviewer gate; v4 failed (1 WRONG of 2 fires).",
   "fact_ids": []
  },
  {
   "id": "G-route-gate",
   "term": "route gate",
   "aliases": [],
   "layer": "tech",
   "chapter": "builds",
   "plain": "A one-word decision by the model: search the libraries, or just chat.",
   "technical": "One-token classification by the 4B (chat vs search); 95 % on a dev chat slice; skipped for latency in cut 5 when safe.",
   "fact_ids": []
  },
  {
   "id": "G-pack",
   "term": "knowledge pack",
   "aliases": [
    "packs"
   ],
   "layer": "curious",
   "chapter": "packs",
   "plain": "A downloadable offline library (one file) of articles on one topic that the app searches before answering.",
   "technical": "SQLite \"format 2\" (format-v3 adds chunk vectors) with per-row licence and attribution, a card, 20 public self-tests, a coverage probe and a crowding check. Licences: PD, CC0, CC BY, CC BY-SA only. 11 packs published on 2026-10-13.",
   "fact_ids": [
    "F-025"
   ]
  },
  {
   "id": "G-reach-keep-read",
   "term": "retrieval funnel: reach → keep → read",
   "aliases": [
    "reach",
    "keep step"
   ],
   "layer": "tech",
   "chapter": "packs",
   "plain": "Reach: is the right passage found? Keep: does it survive the filter into the prompt? Read: does the model use it correctly?",
   "technical": "reach = fact chunk in the raw top-k; keep = grounding filter that drops off-topic/unsafe passages and compresses the rest; read = reader output given the kept context.",
   "fact_ids": [
    "F-027"
   ]
  },
  {
   "id": "G-crowding",
   "term": "crowding",
   "aliases": [],
   "layer": "curious",
   "chapter": "packs",
   "plain": "Installing many libraries at once lets a big general one take the few slots the right small one needed.",
   "technical": "All packs installed vs the matching pack only: −0.019 (−0.035…−0.003) Opus on the 180 self-tests; packs above 0.40 of kept slots are user-selected only.",
   "fact_ids": [
    "F-026"
   ]
  },
  {
   "id": "G-x2b",
   "term": "HEADPASS-X2b",
   "aliases": [
    "X2b",
    "HEADPASS"
   ],
   "layer": "tech",
   "chapter": "packs",
   "plain": "The one retrieval change that worked: also feed the model the passages next to the best-matching one, plus a few found by meaning, within a fixed size limit.",
   "technical": "After the keep step, append the top article's neighbour chunks + ≤ 2 dense candidates under +600 prompt tokens: +0.066 (+0.043…+0.091) Opus on the 180 (dev); inert on the claim kit.",
   "fact_ids": [
    "F-028"
   ]
  },
  {
   "id": "G-pss",
   "term": "PSS / RSS, TTFT, prefill / decode",
   "aliases": [
    "PSS",
    "RSS",
    "TTFT"
   ],
   "layer": "tech",
   "chapter": "phone",
   "plain": "Ways to measure an app's memory and speed: how much memory it really uses, and how long until the first word appears.",
   "technical": "PSS = proportional set size (shared pages split fairly); RSS = resident pages. TTFT = time to first token. Prefill = reading the prompt; decode = generating tokens.",
   "fact_ids": [
    "F-023"
   ]
  },
  {
   "id": "G-desktop-proxy",
   "term": "desktop proxy and device parity",
   "aliases": [
    "BOAR Bench",
    "device = desktop"
   ],
   "layer": "tech",
   "chapter": "phone",
   "plain": "The exact phone engine also runs on a Mac for fast testing; real phones confirmed that the Mac gives the same judged quality.",
   "technical": "Same engine code and tree hash on desktop and phone; parity on v0.1: 12 GB-class phone 0.529 = desktop 0.529 (Haiku); 8 GB phone 0.561 vs 0.558/0.560 (Opus).",
   "fact_ids": [
    "F-023",
    "F-024"
   ]
  },
  {
   "id": "G-no-network-apk",
   "term": "no-network APK",
   "aliases": [],
   "layer": "curious",
   "chapter": "phone",
   "plain": "A build of the app with the internet permission removed, so the phone itself blocks any network access.",
   "technical": "INTERNET permission removed from the manifest: offline by construction, not by promise.",
   "fact_ids": []
  },
  {
   "id": "G-confident-wrong",
   "term": "confident-wrong",
   "aliases": [],
   "layer": "curious",
   "chapter": "ruler",
   "plain": "An answer that is wrong but stated with confidence, the most harmful failure; tracked separately.",
   "technical": "Count of items judged wrong with no hedge; a guard metric in many criteria (e.g. \"confident-wrong not up\").",
   "fact_ids": []
  },
  {
   "id": "G-coordinator",
   "term": "coordinator, research lanes and independent reviewers",
   "aliases": [
    "research agents",
    "lanes"
   ],
   "layer": "curious",
   "chapter": "agent-lab",
   "plain": "The research was run by AI agents: one coordinator ran the experiments, specialist agents proposed ideas in their own areas, and separate reviewer agents checked wording and numbers.",
   "technical": "Coordinator session (Opus/Fable) owns the queue, freezes criteria and writes verdicts; lane agents (retrieval, models/latency, evaluation/safety, native performance, a runner, an on-call strategy agent) write technique cards and never run experiments; independent reviewer agents decide wording (\"AI-reviewed\").",
   "fact_ids": []
  },
  {
   "id": "G-loop",
   "term": "unattended research loop and ticks",
   "aliases": [
    "tick",
    "META tick",
    "LOOP v2"
   ],
   "layer": "tech",
   "chapter": "agent-lab",
   "plain": "For four days an AI coordinator woke up on a timer, advanced one experiment, logged it and scheduled its next wake-up, without a human.",
   "technical": "133 ticks (28 idle), 2026-10-11 → 10-14; META tick every 8 ticks re-ranks the backlog; LOOP v2 (2026-10-14) moved queueing to machine-side runners.",
   "fact_ids": [
    "F-031"
   ]
  },
  {
   "id": "G-handoff",
   "term": "handoff",
   "aliases": [],
   "layer": "tech",
   "chapter": "agent-lab",
   "plain": "A file that lets a fresh AI session take over the coordinator role with no memory of the previous one.",
   "technical": "Dated HANDOFF-*.md with a §0 to paste into a new session: state, running jobs, rules, next steps.",
   "fact_ids": []
  },
  {
   "id": "G-claim",
   "term": "claim text",
   "aliases": [
    "claim draft"
   ],
   "layer": "tech",
   "chapter": "honest-number",
   "plain": "The text for the bounty that says, with numbers and caveats, what BOAR does and does not achieve; it follows the current standing and is posted at closure.",
   "technical": "Claim draft v4.2.4 (2026-10-17): \"BOAR is not shown to be half as good as frontier AI with web\"; judge family named next to every ratio; leads with win-rate.",
   "fact_ids": [
    "F-004"
   ]
  },
  {
   "id": "G-native-app",
   "term": "submitted app vs research engine",
   "aliases": [
    "native app"
   ],
   "layer": "curious",
   "chapter": "handoff",
   "plain": "The app actually submitted to the bounty is the app maintainer's own rewrite; the research numbers describe the engine it partly ports.",
   "technical": "Submission vehicle = the app maintainer's native Kotlin app (from 2026-10-15); it ports retrieval and prompts but not the health path or deterministic answers. All research numbers are for the TypeScript research engine (cut 7).",
   "fact_ids": []
  },
  {
   "id": "G-ruler-v04",
   "term": "ruler (bench v0.4)",
   "aliases": [
    "v0.4",
    "bench ruler",
    "ruler v0.4"
   ],
   "layer": "curious",
   "chapter": "new-ruler",
   "plain": "A fixed set of 75 test questions, frozen on 2026-10-20 before any system answered them, meant to give the final score of the submitted app.",
   "technical": "75 items = 71 headline + 4 anchor questions taken from Vitalik Buterin's public post (scored outside the headline); written half by Claude and half by OpenAI gpt-5.6-sol via the Codex CLI, cross-fact-checked; sha f9ad2f2f. Not written outside the Claude family (a stated deviation). First exposed to two engines on 2026-10-24.",
   "fact_ids": [
    "F-2070",
    "F-1353",
    "F-2108"
   ]
  },
  {
   "id": "G-ruler-spec",
   "term": "ruler spec (RULER-SPEC v1)",
   "aliases": [
    "RULER-SPEC",
    "spec r3",
    "spec r4"
   ],
   "layer": "tech",
   "chapter": "new-ruler",
   "plain": "The written procedure for scoring the ruler: which references, judges, metrics and gates, frozen before scoring.",
   "technical": "r2 (2026-10-20) was a draft; r3 (2026-10-21 20:48, sha 0fac2286) is the first frozen spec (judge.v1 + DECLINE2STAGE, verdict arm A∪, two judge families); r4 (21:18, sha 82772e33) adds the information-available split (FACT-AVAIL) and ORACLE / ORACLE-0 rows. Spec files are private.",
   "fact_ids": [
    "F-1542",
    "F-1543"
   ]
  },
  {
   "id": "G-u-total",
   "term": "U-total",
   "aliases": [
    "ruler U",
    "U (ruler)"
   ],
   "layer": "curious",
   "chapter": "new-ruler",
   "plain": "The ruler's headline number: how much of a reference answer's useful content the app delivers, over all 71 headline questions.",
   "technical": "Ratio of sums: Σ(app mass) / Σ(reference mass), where each mass is the mean of correctness, completeness and usefulness minus 1 (judge.v1, 1-5 scale), so the rubric floor maps to 0; detected non-answers are set to 0 by DECLINE2STAGE; health items weigh 0.5 (weight-1 printed beside). Verdict statistic = the lower of the two judge families per bootstrap draw; \"meets the bar\" needs CI low > 0.50. A different metric from the judge.v1 V-para / v0.2 ratios: never compare across.",
   "fact_ids": [
    "F-1529",
    "F-1543"
   ]
  },
  {
   "id": "G-decline2stage",
   "term": "DECLINE2STAGE",
   "aliases": [
    "two-stage judge",
    "RULING R1"
   ],
   "layer": "ai",
   "chapter": "new-ruler",
   "plain": "A first check that gives zero to answers that do not try to answer, before the usual judge scores the rest.",
   "technical": "Stage 1: a classifier asks whether the answer attempts an answer; if not, U = 0; otherwise judge.v1 scores it unchanged. Adopted as RULING R1 (2026-10-21) after the decline arm was invalid under judge.v1 (a bare refusal scored U 0.016-0.058); a coordinator override of a frozen FAIL, accepted with conditions by the spec reviewer. The decline offset D 0.058 is kept as a sensitivity row (U_net).",
   "fact_ids": [
    "F-1529",
    "F-1637"
   ]
  },
  {
   "id": "G-fact-avail",
   "term": "FACT-AVAIL (information-available split)",
   "aliases": [
    "information-available split",
    "FACT-AVAIL"
   ],
   "layer": "ai",
   "chapter": "new-ruler",
   "plain": "Labels saying, for each ruler question, whether the answer is actually written in the installed knowledge packs.",
   "technical": "Pre-registered per item: AVAILABLE (≥ 0.5 of checklist points stated in the persona packs) / PARTIAL / NONE; a lower bound. On the 71 headline items: 19 / 25 / 27 (strict 15 / 23 / 33). Labels are quarantined until the result card; counts only.",
   "fact_ids": [
    "F-2111",
    "F-1578"
   ]
  },
  {
   "id": "G-a-union",
   "term": "A∪ (verdict arm)",
   "aliases": [
    "A-union",
    "verdict arm"
   ],
   "layer": "tech",
   "chapter": "new-ruler",
   "plain": "The app with every persona knowledge pack installed at once, used for the verdict so no question gets a hand-picked pack.",
   "technical": "All six persona packs installed once for all items (wikivoyage, visa, crypto, medlineplus, firstaid, factbook; ≈ 435 MB); per-family arm A is a labelled row only, because routing packs by topic would be oracle routing.",
   "fact_ids": [
    "F-1391"
   ]
  },
  {
   "id": "G-oracle-arms",
   "term": "ORACLE / ORACLE-0",
   "aliases": [
    "information effect"
   ],
   "layer": "ai",
   "chapter": "new-ruler",
   "plain": "The same model answering the same questions with and without the supporting passages handed to it.",
   "technical": "ORACLE − ORACLE-0 on the same items = the information effect (what delivering the right passages is worth). Defined in spec r4; not run as of 2026-10-24.",
   "fact_ids": [
    "F-1543"
   ]
  },
  {
   "id": "G-outcome-labels",
   "term": "outcome labels (CWS, correct-any, WU, WW, HU)",
   "aliases": [
    "correct-any",
    "CWS",
    "WU",
    "wrong-unwarned",
    "UXMATRIX labels"
   ],
   "layer": "curious",
   "chapter": "closure",
   "plain": "Each answer is put into one class: right with the right source shown, right from memory, wrong with no warning, wrong with a warning, or an honest \"unknown\".",
   "technical": "Shares of n items labelled by Claude Haiku 5.5-low under the UXMATRIX protocol: CWS = correct with the right source shown; CFM = correct from memory; correct-any = CWS + CFM; WC/WU = wrong with no warning; WW = wrong with the warning line; HU = honest unknown; RW = refused wrongly. Not a ratio to a reference: never compare with the judge.v1 ratio or with U-total.",
   "fact_ids": [
    "F-1704",
    "F-1727",
    "F-1709"
   ]
  },
  {
   "id": "G-delivery",
   "term": "delivery (kept / delivered fact)",
   "aliases": [
    "delivered fact",
    "chunk-level delivery"
   ],
   "layer": "curious",
   "chapter": "delivery",
   "plain": "Whether the passage that holds the answer actually reaches the small model's prompt after search and compression.",
   "technical": "Counted at chunk level from 2026-10-22: the key fact's quote sits inside one kept chunk (article-level counting, \"a chunk of the right article\", overstated delivery by 8-13 facts). Article-level and chunk-level counts are never pooled.",
   "fact_ids": [
    "F-1550",
    "F-1856"
   ]
  },
  {
   "id": "G-conditional-thesis",
   "term": "conditional thesis",
   "aliases": [
    "pack thesis"
   ],
   "layer": "curious",
   "chapter": "closure",
   "plain": "The author's closing claim, in the form the tests support: the app is right about two times in three when the right passage reaches the model.",
   "technical": "Stated by the author on 2026-10-23 as \"right whenever the content is in a knowledge pack\"; PACKPROOF supports only the conditional form: correct-any 0.65 when the item's own article is kept vs 0.28 when not, with the pack installed 0.48 vs 0.26 without (n 180 pack-written self-tests, Claude Haiku labels, one seed, dev); no pack reached the 0.75 bar.",
   "fact_ids": [
    "F-1690",
    "F-1704",
    "F-1707"
   ]
  },
  {
   "id": "G-pack-self-test",
   "term": "pack self-test",
   "aliases": [
    "pack-written self-tests"
   ],
   "layer": "tech",
   "chapter": "delivery",
   "plain": "Questions written from a pack's own text, used to check that pack; they favour the pack by construction.",
   "technical": "An on-topic upper bound, not casual traffic: self-test gains (e.g. PACKPROOF +0.23 correct-any) did not transfer to real dev items in the same week (delivered-vs-not +0.001 between items).",
   "fact_ids": [
    "F-1704"
   ]
  },
  {
   "id": "G-gidf",
   "term": "global-IDF merge (gidf)",
   "aliases": [
    "gidf"
   ],
   "layer": "ai",
   "chapter": "delivery",
   "plain": "Re-scoring each pack's keyword hits with word rarity computed across all installed packs, so small packs compete fairly with big ones.",
   "technical": "Part of the adopted search stack SEFIX-124 (gidf + SEFIX F1/F2/F4); chunk-level delivered MAIN facts 28 → 42 of 92; answer gain +0.013 (−0.008…+0.035, Claude Haiku, 2 seeds), not a lever.",
   "fact_ids": [
    "F-1549"
   ]
  },
  {
   "id": "G-sefix",
   "term": "SEFIX-124",
   "aliases": [
    "SEFIX",
    "search fixes"
   ],
   "layer": "tech",
   "chapter": "delivery",
   "plain": "The adopted search fixes for question-and-answer packs.",
   "technical": "Global-IDF merge plus three lexical fixes (F1 lead-vector thread pick, F2 domain words kept, F4 relaxed keep rule); F3 (a health no-source fallback) was withdrawn because it made safety probes worse (unsafe 9 → 13 of 65).",
   "fact_ids": [
    "F-1549",
    "F-1855"
   ]
  },
  {
   "id": "G-engine-rc",
   "term": "ENGINE-RC",
   "aliases": [
    "research engine release candidate"
   ],
   "layer": "tech",
   "chapter": "closure",
   "plain": "The closed research engine assembled as one build for validation.",
   "technical": "SEFIX-124 search + W78 reading-cost stack + shaped factbook + reworded warning banner, Succinct style, Deep off; passed every no-LLM suite on 2026-10-24 (desktop only). The research engine, not the submitted app.",
   "fact_ids": [
    "F-2105"
   ]
  },
  {
   "id": "G-w78",
   "term": "W78 stack",
   "aliases": [
    "reading-cost stack"
   ],
   "layer": "ai",
   "chapter": "delivery",
   "plain": "A compact search index stored inside each pack, so a question reads far less data from storage.",
   "technical": "1-bit sign sidecar + int8 rescore + IVF lists stored in the pack: 125.09 → 21.26 MB read per question on a desktop; phone effect unmeasured.",
   "fact_ids": [
    "F-2103"
   ]
  },
  {
   "id": "G-pack-shaping",
   "term": "pack shaping (shaped factbook)",
   "aliases": [
    "shaped factbook",
    "factbook v2"
   ],
   "layer": "curious",
   "chapter": "delivery",
   "plain": "Rewriting table-like pack text into short sentences that name their subject, without adding facts.",
   "technical": "Shaped factbook v2: fact chunk kept 7 → 15 of 20; correct 5 → 10 of 20; Claude Opus U 0.316 → 0.436 (+0.121, +0.030…+0.221; 2 seeds, n 20, dev); NOT-CONFIRMED by its frozen rule (one new warned confident error). In ENGINE-RC; publication of the pack waits for the author.",
   "fact_ids": [
    "F-2104",
    "F-1718"
   ]
  },
  {
   "id": "G-warning-line",
   "term": "warning line",
   "aliases": [
    "\"passages found don't support this answer\"",
    "Not found banner"
   ],
   "layer": "curious",
   "chapter": "closure",
   "plain": "A line the engine puts before an answer its kept passages do not support, so the reader knows it comes from model memory.",
   "technical": "Two texts: \"Not found in this phone's offline library…\" when nothing is kept, and \"The passages found don't support this answer…\" when passages are kept but every citation is stripped. A fixed-banner bug showed \"Not found\" on 37 of 97 answers that kept passages; fixed (0 after the fix).",
   "fact_ids": [
    "F-1725"
   ]
  },
  {
   "id": "G-refuse-by-default",
   "term": "refuse by default / show anyway",
   "aliases": [
    "show anyway"
   ],
   "layer": "curious",
   "chapter": "small-engine",
   "plain": "With no source found, the app declines and offers a button to see the model's unsourced answer behind a warning.",
   "technical": "Author decision 2026-10-20 20:24; narrowed on 2026-10-21: show-anyway only behind a second confirmation and never on health; validated for the 1.7B / Gemma only. The closed app (2026-10-24) keeps the warning line and shows sources.",
   "fact_ids": [
    "F-1534"
   ]
  },
  {
   "id": "G-confident-error",
   "term": "confident error (CE, CE-unwarned)",
   "aliases": [
    "CE",
    "CE-unwarned"
   ],
   "layer": "curious",
   "chapter": "small-engine",
   "plain": "A wrong answer shown to the user without a warning.",
   "technical": "An answered item with judge.v1 mean correctness ≤ 1.5 of 5, not refused; \"unwarned\" = shown without the warning line. Counted per 100 questions under a named mode, model and judge; judge retest noise ± 1.3 per 100.",
   "fact_ids": [
    "F-2187"
   ]
  },
  {
   "id": "G-gate-v2",
   "term": "GATE v2 (two-stage screen)",
   "aliases": [
    "two-stage screen",
    "null run"
   ],
   "layer": "ai",
   "chapter": "small-engine",
   "plain": "A cheap first test on the items the current build gets wrong plus items it gets right, with a \"do nothing\" run to see how much changes by chance.",
   "technical": "Net = problems fixed − new visible confident errors; GO iff net ≥ max null-arm net + 2 (null changes such as a new seed fix 23-31 % of problems); stage 2 = full MAIN 97.",
   "fact_ids": [
    "F-1393"
   ]
  },
  {
   "id": "G-main-97",
   "term": "MAIN 97 / CV5 51",
   "aliases": [
    "MAIN 97",
    "CV5 51"
   ],
   "layer": "tech",
   "chapter": "small-engine",
   "plain": "The two development sets used for most screens after 2026-10-18.",
   "technical": "MAIN 97 = 57 public v0.1 items + 40 cooking/money pack self-tests (dev); CV5 51 = 51 v0.1 ids used for Claude Opus ladders (dev). Neither is held-out.",
   "fact_ids": [
    "F-2077"
   ]
  },
  {
   "id": "G-boarlite",
   "term": "BoarLite",
   "aliases": [
    "closed app",
    "LabRat"
   ],
   "layer": "curious",
   "chapter": "submission",
   "plain": "The author's own closed, offline chat app, declared the bounty submission on 2026-10-24; renamed LabRat on 2026-10-25.",
   "technical": "No internet permission; the full K13 pack kit bundled in one APK (≈ 3.04 GB); Qwen3-1.7B fixed; Succinct only (no Deep, Detailed or length option); factbook v1 (the shaped v2 was dropped on 2026-10-24 18:03); a fixed line under every answer instead of a warning trigger; health gate B+FU; QuickMath; search port ON_NO_HEALTH. Final candidate b4ef94f3 as of 2026-10-24 19:40 (UI-only commits after it), smoke-tested on a Pixel 8a; its desktop-twin ruler scores were published by the author's decision of 2026-10-25 as history (F-2215; before the Rat persona line). Renamed LabRat on 2026-10-25 (7788924a), which also adds the Rat persona line to the grounding prompt after the ruler run on b4ef94f3; product cleanup the same night (Expo/React Native tree, Portuguese, PIN and long-chat summary removed).",
   "fact_ids": [
    "F-1703",
    "F-1863",
    "F-2198",
    "F-2210",
    "F-2224"
   ]
  },
  {
   "id": "G-k13",
   "term": "K13 kit",
   "aliases": [
    "K13"
   ],
   "layer": "tech",
   "chapter": "delivery",
   "plain": "The default set of 13 knowledge packs used in every closing test.",
   "technical": "Includes the Wikipedia packs (kept after NOWIKI: removing them lost 9 of 42 delivered MAIN facts and 10 public v0.1 items).",
   "fact_ids": [
    "F-1859"
   ]
  },
  {
   "id": "G-desktop-twin",
   "term": "desktop twin",
   "aliases": [
    "twin"
   ],
   "layer": "tech",
   "chapter": "closure",
   "plain": "Running an app's engine on a desktop harness instead of the phone.",
   "technical": "Counts as dev or parity evidence, never as a verdict; every closing test and both first ruler v0.4 runs (2026-10-24) were desktop twins.",
   "fact_ids": [
    "F-1689"
   ]
  },
  {
   "id": "G-health-gate-bfu",
   "term": "health gate B+FU",
   "aliases": [
    "health gate",
    "HealthGate",
    "B+FU"
   ],
   "layer": "tech",
   "chapter": "submission",
   "plain": "BoarLite's rule for health questions: when no trusted health source is found, it shows a fixed safe text with the emergency number instead of a model answer.",
   "technical": "Predicate = the app's lexical health test OR 11 lexical rules (B: drugs, doses, vitals, child fever, symptoms, poisoning, alcohol, pregnancy, child dosing, trauma, altitude, diving) OR a short follow-up of a health turn (FU); runs after retrieval; health sources = firstaid, MedlinePlus, health Q&A packs. Final candidate: 41 of 65 safety probes fixed text, 0 new false fires on 251 non-health dev items; rules fitted on the probes.",
   "fact_ids": [
    "F-2192",
    "F-2193",
    "F-2210"
   ]
  },
  {
   "id": "G-quickmath",
   "term": "QuickMath",
   "aliases": [],
   "layer": "tech",
   "chapter": "submission",
   "plain": "Unit conversions and simple arithmetic are worked out by code, with no model and no sources.",
   "technical": "BoarLite 43b50410: runs at the start of the answer pipeline; never on health-gated turns or turns after a health turn; exposure questions go to the health gate instead.",
   "fact_ids": [
    "F-2200"
   ]
  },
  {
   "id": "G-grounded-dose-rule",
   "term": "grounded-dose rule",
   "aliases": [
    "GROUNDED-DOSE"
   ],
   "layer": "ai",
   "chapter": "delivery",
   "plain": "A health answer counts as safe only if it is the fixed safe text or every dose it states appears in a source shown with it.",
   "technical": "Frozen 2026-10-24 19:1x; scorer extracts figures with units, normalises them and matches them numerically against the shown passages and the question; replaced kept-list proxies. Known limit: a grounded figure can be a toxic threshold read as a dose (arm B).",
   "fact_ids": [
    "F-2202",
    "F-2205"
   ]
  },
  {
   "id": "G-on-no-health",
   "term": "ON_NO_HEALTH",
   "aliases": [
    "ON-NH",
    "search port"
   ],
   "layer": "ai",
   "chapter": "submission",
   "plain": "BoarLite uses the improved search for every question except health questions, which keep the old, more cautious search.",
   "technical": "SearchPort mode: SEFIX-124 delivery + head pass + X2b appends compressed within 1.2× (SearchPort.fit), off on turns the health predicate fires on (incl. follow-ups). Delivery MAIN 26 → 40; its frozen criterion failed by the letter (S1 6 vs 4 ungrounded figures) and it was merged under the author's prior condition.",
   "fact_ids": [
    "F-2207",
    "F-2209"
   ]
  },
  {
   "id": "G-fixed-line",
   "term": "fixed line",
   "aliases": [
    "May contain errors; check the source."
   ],
   "layer": "curious",
   "chapter": "submission",
   "plain": "One short line under every BoarLite answer: \"May contain errors; check the source.\"",
   "technical": "Replaced the ported per-answer warning trigger (D4) on 2026-10-24 18:03; drawn outside the answer text, not on the fixed health text or computed answers.",
   "fact_ids": [
    "F-2189",
    "F-2211"
   ]
  },
  {
   "id": "G-labrat",
   "term": "LabRat",
   "aliases": [
    "formerly BoarLite"
   ],
   "layer": "curious",
   "chapter": "submission",
   "plain": "The submitted offline chat app's name from 2026-10-25; it was called BoarLite before.",
   "technical": "Renamed at the app maintainer's request in commit 7788924a; same package id and bundled knowledge as BoarLite; the grounding prompt's identity line names the assistant Rat (added after the RULER-FINAL run on b4ef94f3). Measured on the phone by DEVICE-FINAL.",
   "fact_ids": [
    "F-2224",
    "F-2225",
    "F-2235"
   ]
  },
  {
   "id": "G-rat",
   "term": "Rat",
   "aliases": [
    "the assistant"
   ],
   "layer": "curious",
   "chapter": "submission",
   "plain": "The name LabRat's assistant uses for itself in its answers.",
   "technical": "Set by one identity line in the grounding prompt (\"You are Rat, the assistant in LabRat…\", 7788924a), replacing \"You are BOAR…\"; the only prompt change between the ruler engine b4ef94f3 and LabRat 7788924a named in the DEVICE-FINAL criterion.",
   "fact_ids": [
    "F-2225"
   ]
  },
  {
   "id": "G-device-final",
   "term": "DEVICE-FINAL",
   "aliases": [
    "final on-phone matrix"
   ],
   "layer": "tech",
   "chapter": "submission",
   "plain": "The last benchmark run: the submitted app answers the test sets on the phone itself, overnight.",
   "technical": "Frozen criterion 2026-10-25 03:3x: LabRat 7788924a on a Pixel 8a; M1 ruler v0.4 × seeds 42/43/44 (Claude Opus all seeds, OpenAI gpt-5.6-sol seed 42), M2 65 safety probes, M3 140 on-K13 self-tests, M4 UXMATRIX 60, M5 speed/memory/offline. Claim numbers = M1 + M5. Running as of the 2026-10-25 update; no results recorded.",
   "fact_ids": [
    "F-2227",
    "F-2228"
   ]
  }
 ]
}
