# Falsification re-audit (single-check re-run after a falsification rewrite)

When Phase 3.3 applied a `rewrite_falsification` patch (and only then), the rewritten kill-switch
field must clear the structure check before Phase 4. This is a SEPARATE, bounded LLM call — do NOT
re-run the other four audit checks; their findings stand. This prompt is self-contained: it carries
the falsification_structure_check spec verbatim from critique.txt so you never need to read that file.

## Inputs

- `$RUN_DIR/phase3_critique/falsification_view.json` — a deterministic slice of the final candidate
  carrying exactly what this check needs: `falsification_prediction` (the REWRITTEN paragraph under
  audit) + `core_mechanism` / `core_mechanism_steps` / `core_mechanism_reasoning` (context to judge
  whether the load-bearing variable is real and the negative control non-tautological). If the view
  file is missing (legacy runs), fall back to `$RUN_DIR/phase3_revise/final_candidate.json` and read
  ONLY those fields.

## The check (falsification_structure_check — same spec as the Phase 3.2 audit)

Evaluate the REWRITTEN `falsification_prediction` paragraph:

- `minimal_experiment_named`: yes | no — does the paragraph name a concrete minimal experiment
  (setup + comparison), not just "we will evaluate"?
- `outcome_metric_named`: yes | no — does it name the downstream task-outcome metric AND its
  qualitative direction if the candidate works?
- `load_bearing_variable`: quote the ONE named quantity the mechanism claim pivots on (a gradient
  norm, an information-gain term, a logit divergence, a learned threshold, a representational
  direction, ...), or 'absent' if no single variable is named.
- `negative_control_target`: 'outcome_metric' when the negative-control intervention on the
  load-bearing variable predicts the DOWNSTREAM outcome metric returns to baseline; 'tautological'
  when the predicted effect is the load-bearing variable's own value or a quantity analytically
  derived from it (a control of the form "intervene on X → X becomes 0" tests a definition, not a
  mechanism); 'absent' when no negative control is stated.
- `verdict`: sound | deficient | borderline — 'sound' requires ALL of: minimal_experiment_named=yes,
  outcome_metric_named=yes, load_bearing_variable quoted (not absent),
  negative_control_target=outcome_metric. Any 'no'/'absent'/'tautological' → deficient. borderline
  is reserved for a named-but-ambiguous variable or a control whose target metric is
  arguably-but-not-explicitly the outcome.
- `reasoning`: 1-2 sentences — which sub-answer drove the verdict.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▸ MARKDOWN SAFETY — applies to EVERY prose field below

The renderer hands `$...$` to KaTeX. One stray `$` pairs with the next one in
the paragraph and swallows the prose between them into italic garbage, so these
are not cosmetic rules.

1. An identifier keeps its underscore. `foo_bar` is code, NOT `foo_{bar}`, and
   never goes inside `$`. Backtick it whole. This is the rule that matters:
   almost every broken render starts as an underscore reflexively read as a
   subscript.
     WRONG  gradients disabled $(torch.no_{grad},$ model in eval mode)
     RIGHT  gradients disabled (`torch.no_grad`, model in eval mode)
     WRONG  set $K_{eff} = min(K_{ckpt},$ |y|)
     RIGHT  set `K_eff = min(K_ckpt, |y|)`
   Field and variable names from this pipeline are identifiers too:
   `core_mechanism`, `differentiation_from_lit`, `verdict_rationale`,
   `non_blocking` — backticks, never `$..._{...}$`.

2. A literal dollar sign is `\$`. Currency in prose opens math otherwise.
     WRONG  API line ~ $1500 vs $10000 (15%) -> feasible
     RIGHT  API line ~ \$1500 vs \$10000 (15%) -> feasible

3. Inside `$...$`: math tokens only. No English words, and close the math
   BEFORE any comma that belongs to the sentence, never after it.
     WRONG  ... at weight $lambda_{v},$ and take the step
     RIGHT  ... at weight $\lambda_v$, and take the step

4. To WRITE ABOUT LaTeX delimiters, backtick them. Never type a bare `$$`
   inside a sentence.

5. Display math stands alone in its own paragraph, at column 0, balanced.
   Never mid-sentence.

6. When unsure, Unicode (delta sigma phi rho lambda <= ~ ->) or backticked
   plain text. Correct plain text always beats a red KaTeX error.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

## Output

Write `$RUN_DIR/phase3_critique/falsification_reaudit.json`:

```json
{
  "falsification_structure_check": { <the schema above, evaluated on the REWRITTEN paragraph> },
  "verdict": "advance | abandon",
  "verdict_rationale": "<1-2 sentences>"
}
```

## Strengthen-only rewrites (additional check)

When the audit's authorization was a STRENGTHEN-ONLY addition (a new baseline/control arm, tightened
matching) rather than a structural repair, additionally verify AGAINST THE ADDITION CONTRACT: every
element of the pre-rewrite paragraph — experiment, metric + direction, claim, load-bearing variable,
every existing control — must survive verbatim-in-substance, with only the authorized addition new.
Anything removed, swapped, weakened, or cheapened → `deficient` regardless of the structure check.

## Routing

`sound` (or `borderline` with the load-bearing variable clearly named) → `advance`, proceed to
Phase 4 using `final_candidate.json`. `deficient` again → `abandon` (write `phase_3_failed.md`
naming both the original deficiency and why the rewrite still fails). Exactly ONE rewrite attempt
per run — a second falsification revision_target is a process error.
