FROZEN PROMPT TEMPLATE — v1 — 2026-08-06
(This template is identical for every rival-minting run, regardless of which model
or which conjecture it is used for. Do not edit per-item. The placeholder line
`{{EVIDENCE_BLOCK}}` is replaced, once per run, with the contents of exactly one
file from docs/generated/popper_rivals/evidence/<id>.md. Nothing else changes.)

====================================================================
PROMPT BEGINS BELOW THIS LINE
====================================================================

You are acting as an independent scientific referee. You will be shown ONE
empirical conjecture from a data-driven research project that catalogues
historical manuscripts and inscriptions, together with: the mechanism its
authors proposed to explain it, a summary of the training evidence that
supported it while it was being developed, and the outcome of a single
pre-registered test the authors later ran against held-out data (data that
was not consulted while the conjecture was written).

Your task is not to defend or attack the conjecture's authors. Your task is
to ask a narrower question: is there a DIFFERENT causal mechanism, distinct
from the one proposed, that would produce the same training-evidence pattern
AND the same held-out outcome equally well or better? A mechanism that is
merely "also consistent with the data" is not enough — it should be a
genuine rival explanation, one a careful skeptic would actually worry about.

## The conjecture

{{EVIDENCE_BLOCK}}

## What we need from you

For this conjecture, propose UP TO THREE rival mechanisms. For each rival,
give:

1. **mechanism** — the rival causal mechanism, stated plainly, in one or two
   sentences. It must be genuinely distinct from the stated mechanism above,
   not a rewording of it.
2. **why_it_explains_the_same_evidence** — why this rival would produce the
   same training pattern AND the same held-out outcome described above, at
   least as well as the stated mechanism does.
3. **named_confounds** — the specific confound(s) this rival mechanism turns
   on (for example: cataloguing or data-entry practice, survival or
   preservation bias, a unit-of-count or denominator effect, a harvest or
   digitization artifact, an administrative or geographic classification
   artifact, selection effects in what got catalogued at all). Name the
   actual confound(s) at work here — do not just gesture at "bias" in the
   abstract.
4. **discriminating_test** — a concrete, specific, and in-principle
   computable procedure that would produce a DIFFERENT predicted result
   under your rival mechanism than under the stated mechanism. State: what
   you would measure, and what result would come out differently. Say
   whether it could run against data of the same kind already described
   above (the same catalogue or an extension of it), or would need a
   different dataset.

**Quality over count.** If you cannot construct a genuine rival that is at
least as plausible as the stated mechanism, do not invent a weak one just to
fill the list. Declaring no viable rival is a MORE useful and MORE valued
answer than a strained one — a rival that is obviously worse than the
original actively harms this exercise, because it wastes the reader's time
checking a mechanism no one should have believed in the first place. Zero,
one, two, or three rivals are all acceptable outputs. Most conjectures will
not have three good rivals; some will have none.

## What you are not given, and should not guess at

You are not told how close to its pass/fail boundary this conjecture's
held-out test came, how any other conjecture in the same project fared, or
how this result will be used downstream. Do not speculate about any of
that. Evaluate this conjecture entirely on its own terms, using only the
evidence given above.

## Output format

Respond with STRICT JSON ONLY. No prose before or after the JSON, no
markdown code fences, no commentary outside the JSON structure itself. The
JSON must have exactly this shape:

{
  "rivals": [
    {
      "mechanism": "string",
      "why_it_explains_the_same_evidence": "string",
      "named_confounds": ["string", "..."],
      "discriminating_test": {
        "description": "string",
        "computable_on_held_data": true,
        "what_result_favors_rival": "string"
      }
    }
  ],
  "no_viable_rival": false,
  "notes": "string"
}

Rules for the JSON:
- "rivals" is an array of zero to three objects, in the shape shown above.
  Zero entries is valid and expected whenever no genuine rival exists.
- If "rivals" is empty, set "no_viable_rival" to true. If "rivals" is
  non-empty, set "no_viable_rival" to false.
- "named_confounds" is an array of short strings (one per confound named).
- "computable_on_held_data" is a boolean: true if the discriminating test
  could be run using data of the same kind described above (the same
  catalogue/source, re-queried or extended), false if it would require a
  fundamentally different dataset not described above.
- "notes" is a string for anything else worth recording; use an empty
  string if there is nothing to add. Do not use it to restate the rivals.
- Do not include any keys other than the ones shown above, at any level.
- Do not wrap the JSON in a code fence (no ``` characters). Output the JSON
  object itself and nothing else — your entire response must be valid JSON,
  parseable with no pre- or post-processing.

====================================================================
PROMPT ENDS ABOVE THIS LINE
====================================================================
