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. |