# Pre-registration — Study 3: contagion vs truth — 2026-07-04

> **Deviation, disclosed (2026-07-04, after the run).** Realized n = **59** of 60
> questions. One frozen item (`triviaqa-qz_1834`, a song-lyric question) was
> dropped because Anthropic's content filter deterministically blocked an agent's
> output (`invalid_request_error: "Output blocked by content filtering policy"`),
> which aborts that question's population — the same item and cause disclosed in
> the Study 2 2×2. The §6 content-filter contingency was invoked as written.

Filed before the run. Extends the high-level Study 3 prediction of the
2026-06-25 registration ("in a spawning population, a claim's survival is
predicted better by truth-independent fitness features than by its correctness")
by pinning the population mechanism, the survival/fitness/correctness
operationalisation, and the statistical test.

The whole validity of Study 3 rests on keeping three quantities apart: a claim's
**fitness** (truth-independent, measured at introduction), its **survival** (the
later outcome), and its **correctness** (scored outside the population). The code
computes each separately; the contagion result is the correlation between them,
which is only meaningful because they are never conflated.

## 1. Population model (pinned)

Runner: `scripts/run_study3_contagion.py` at the commit that files this document.
Homogeneous `claude-haiku-4-5-20251001`, temperature 0.7. A **generational
population**: **N = 7 agents, G = 5 generations, exposure k = 3**.

- **Generation 0:** each agent answers the question independently (introduces
  claims), emitting an answer and a stated confidence.
- **Generation g ≥ 1:** each agent is shown a **random sample of k = 3** answers
  from generation g−1 (partial exposure — a claim must be sampled to spread) and
  is told it may adopt one it finds convincing or give its own. Exposure sampling
  is seeded per (task, generation, agent) — seed 20260704 — so the transmission
  *structure* is reproducible even though the model calls are not.

A **claim** is an answer's canonical form (`instrument.claims.claim_key`:
normalise → hash), so surface variants of the same answer are one claim. Per
(generation, agent) we record the answer, its stated confidence, its length, and
the exposure shown. Per-agent calls within a generation run concurrently
(order-independent; only the model I/O parallelises).

## 2. Battery (frozen)

n = **60** fresh TriviaQA `rc.nocontext` recall items, ids frozen in
`preregistration/2026-07-04_study3-contagion-frozen-battery.json` (sha256
recorded; the runner verifies the fingerprint before spending). Selection rule:
the first 60 items in loader order (`load_triviaqa(limit=1200)`) whose task_id is
not in the union of every prior run's per-item CSV. Recall items where the swarm
partly errs give competing true/false claims for contagion to act on. Scoring is
the official TriviaQA alias metric, external; ground truth never enters agent
context.

## 3. Operationalisation (pinned)

For each distinct claim in a question:
- **fitness** (truth-independent, at introduction): **stated confidence** =
  the mean stated confidence among the agents who first assert it, in its
  introduction generation. Secondary fitness features: **length** (characters)
  and **early-mover** (earlier introduction generation = higher). Repetition and
  breadth are *survival*, not fitness, and are deliberately excluded from the
  predictor side. Source authority is not operationalised — the agents are
  anonymous and equal here — and is left to future asymmetric-population work.
- **survival** (the outcome): the claim is **present in the final generation**
  (asserted by ≥ 1 agent in generation G−1) → binary `survived`. Final-generation
  breadth (0–7) is the continuous secondary.
- **correctness**: 1 iff the claim's answer satisfies the task's alias verifier
  (external), else 0.

The primary analysis is on **generation-0 founder claims**, which have the full
4-generation window to spread or die.

## 4. Registered predictions (stated so they can fail)

**P-S3 — PRIMARY.** Among generation-0 founder claims, survival is predicted
better by fitness (stated confidence at introduction) than by correctness:
`AUC(survived ~ intro_confidence) − AUC(survived ~ correctness)` has a
question-level bootstrap 95% CI **above 0**. *Falsified if* the CI includes or
lies below 0 (correctness predicts survival at least as well as confidence).
Reported either way, same prominence.

**Secondary (estimation, reported with the primary).** The fitness *composite*
(equal-weight z-sum of confidence + length + early-mover) AUC vs correctness AUC;
each single feature's survival-AUC; a **confident-falsehood** descriptive (survival
rate of confident-wrong vs diffident-correct founder claims); and an
**initial-popularity control** — confidence's survival-AUC among founder claims
that started with a *single* asserter (intro breadth = 1), where survival cannot
be inherited from initial popularity.

**Registered descriptives:** survival base rate; counts of correct vs wrong
founders; mean distinct claims in generation 0 vs the final generation
(convergence of the population); per-claim table published.

## 5. Analysis conventions (pinned)

Tie-corrected Mann-Whitney AUC (`instrument.metrics.auc_roc`, unchanged);
question-level percentile bootstrap (resample questions, recompute pooled
claim-level AUCs), B = 10,000, seed 20260704. Analysis script
(`scripts/study3_contagion_analysis.py`) committed with this filing, before the
run completes. No slicing beyond the registered descriptives.

## 6. Cost, gates, honesty

Worst-case ≈ 2,100 calls (7 agents × 5 generations × 60 items), Anthropic only,
under the key cap and cheap. Checkpointed, resumable, mock-validated before any
real token. Known limits, disclosed now: one homogeneous model family (contagion
within one base model — a heterogeneous population is future work); source
authority not operationalised; survival is partly a function of initial
popularity (addressed by the singleton control); one exposure regime (k=3);
TriviaQA recall only; n = 60 questions. If an item's generation is blocked by a
provider content filter (as one item was in the 2×2), that question is dropped and
the realized n disclosed. All Section-6 stop-rules of the 2026-06-25 registration
apply.
