Four objections. Four files to grep.

None of it is on my honor.

Objection Defense
"You moved the goalposts." posot/tests/no_goalpost_moving.py is a CI gate that diffs run.yaml and weights.yaml against the Day-1 lock commit SHA. Any change to pass_criteria, wP/wD/wC/wA, or calibration_method post-lock = build red.
"You cherry-picked cases." The 20-case subset is rendered for Sarah BEFORE the encoder locks it. She approves or amends. Lock SHA recorded in run.yaml.signoff.
"The metric is circular." Three parallel DET gates compose the surfacing decision: L(n) ∈ {valid} (§4.2) checks the extracted syllogism's internal entailment; J(n) ∈ {justified, partial} (§4.3) checks graph position; A(n) ∈ {attested, partial} (§4.1.5) checks each premise text anchors to source excerpt at cos ≥ θ. The score (F,T,A,C) is a sort key over the J ∧ L ∧ A-surfaceable set, not the truth-decider. Weights + θ calibrated on Procedural Due Process (held-out), frozen chmod 444, applied to DCC blind. Independence |ρ(A,L)| < 0.9 enforced by test_an_independence.py — A(n) is not a relabeled L(n).
"It hallucinated and you hid it." Extraction is probabilistic (§4.1). Three DET gates catch invalid mints: L(n) rejects syllogisms whose premises don't entail their conclusion (posot/justify/ln_checker.py); J(n) rejects nodes overruled/obsoleted in the graph (posot/justify/jn.py); A(n) rejects premises whose text does not anchor to source excerpt at cos ≥ θ (posot/justify/an.py) — the only gate catching whole-cloth fabrications where extraction invents both syllogism and source link. Composite is_surfaceable_v2(j, l, a) requires all three. Units failing any gate route to needs_human.html; Decode is the only step pinned to Opus.