# DISQUALIFIERS -- Per-Claim-Type and Cross-Type Veto Conditions

**Purpose:** A disqualifier is a VETO condition. If any disqualifier fires, the headline fitness is overridden to FLOOR (0) regardless of weighted score. Disqualifiers are NOT weight contributors; they are hard floors on fitness.

**Rule:** Disqualifiers are evaluated AFTER dimensions are scored (Step 5) and AFTER the composite is computed (Step 4). A disqualifier fire supersedes the composite.

---

## Disqualifier hook IDs (referenced from CLAIM_TYPE_PROFILES.md)

### AACODS_FLOOR -- Descriptive disqualifier

**Trigger:** Any of `provenance_chain_absent`, `date_absent_or_unresolvable`, `authority_signal_absent` is TRUE for a descriptive claim.

**Rationale:** AACODS (Tyndall 2010) names Coverage + Date + Authority as the floor. A descriptive claim with no traceable provenance is unfit for any descriptive-claim inference, regardless of Admiralty rating.

**Action:** `disqualified=true`; `disqualifier_hits = ["AACODS_FLOOR"]`; override fitness_headline to 0.

### CAUSAL_IDENTIFICATION_MISSING -- Causal disqualifier

**Trigger:** For a causal claim, BOTH (a) no internal-validity report (RoB 2 / ROBINS-I domains unaddressed) AND (b) no defensible identification strategy (no instrument, no natural experiment, no discontinuity, no well-specified counterfactual logic).

**Rationale:** A peer-reviewed article asserting causation without identification is unfit for causal inference. GRADE would rate this VERY LOW; the plugin codifies this as a disqualifier rather than a low score to prevent D4 Admiralty from pulling the composite up.

**Action:** `disqualified=true`; `disqualifier_hits = ["CAUSAL_IDENTIFICATION_MISSING"]`; override fitness_headline to 0.

### PREDICTIVE_CALIBRATION_MISSING -- Predictive disqualifier

**Trigger:** For a predictive claim, ALL THREE of (a) no out-of-sample track record, (b) no calibration trace (Brier score, reliability diagram, or equivalent), AND (c) no explicit reasoning about why calibration data is absent.

**Rationale:** A predictive source with no calibration is asserting a forecast without evidence of forecast quality. Tetlock & Mellers' Good Judgment Project makes this quantifiable. The plugin inherits the rule: no calibration trace and no stated reason => unfit.

**Action:** `disqualified=true`; `disqualifier_hits = ["PREDICTIVE_CALIBRATION_MISSING"]`; override fitness_headline to 0. Also emit Surprise Register write if Admiralty was high (A1/A2/B1), per fragile-rubric protocol.

### INTERPRETIVE_REFLEXIVITY_MISSING -- Interpretive disqualifier

**Trigger:** For an interpretive claim, BOTH (a) no reflexivity statement AND (b) no transparency about analytic perspective / positionality.

**Rationale:** Hammersley 1992 and CERQual frame reflexivity as load-bearing for interpretive validity. An interpretive claim that hides the analyst's perspective is unfit regardless of thickness.

**Action:** `disqualified=true`; `disqualifier_hits = ["INTERPRETIVE_REFLEXIVITY_MISSING"]`; override fitness_headline to 0.

### NORMATIVE_COHERENCE_MISSING -- Normative disqualifier

**Trigger:** For a normative claim, BOTH (a) no argumentative coherence trace (no articulated chain from premises to prescription) AND (b) no authorial accountability for the prescription (no named author, no stake).

**Rationale:** Normative claims require argumentative coherence (reflective equilibrium, SEP Normativity; Dorst on practitioner accountability). An anonymous assertion of an ought with no chain of reasoning is unfit.

**Action:** `disqualified=true`; `disqualifier_hits = ["NORMATIVE_COHERENCE_MISSING"]`; override fitness_headline to 0.

---

## Cross-type disqualifiers (ALWAYS ON, regardless of claim type)

### RETRACTED

**Trigger:** S2 integrity_flags.retracted == true AND confirmed via Retraction Watch or equivalent.

**Action:** `disqualified=true`; `disqualifier_hits += ["RETRACTED"]`; override to 0.

### AI_FABRICATION_CONFIRMED

**Trigger:** S2 integrity_flags.ai_fabrication == true AND detector ensemble agreement exceeds high-confidence threshold AND sparse-field caveat does NOT apply.

**Action:** `disqualified=true`; `disqualifier_hits += ["AI_FABRICATION_CONFIRMED"]`; override to 0. Emit Surprise Register write if the source had been weighted into a pre-admit list.

### LINEAGE_COLLAPSED

**Trigger:** D3 = 0 AND set-level re-run (Step 8) confirms amplification-class dominance (ratio > 0.70) AND ancestor-overlap shows >= 80% of admitted sources inheriting the claim from the same founder.

**Action:** `disqualified=true` for the source; set `lineage_collapsed=true` at CLAIM level; `disqualifier_hits += ["LINEAGE_COLLAPSED"]`; emit Greenberg-cascade Surprise Register write.

---

## High-Admiralty disqualification anomaly (Surprise Register trigger)

If ANY disqualifier fires AND the source had `admiralty_reliability_A_to_F in {A, B}` OR `admiralty_credibility_1_to_6 in {1, 2}`, this is an anomaly: a high-Admiralty source was unfit. Emit a Surprise Register write per SURPRISE_WRITE.md with `entry_kind=anomaly`, noting "high-Admiralty disqualification -- Admiralty input did not predict fitness for claim type X."

This trigger exists because high-Admiralty disqualification is precisely the signal that R2.3 (Admiralty as input, not judgment) is OPERATIONAL. The Surprise Register is where this information must surface -- NOT buried in the rationale.

## Evaluation order (Step 5)

1. Evaluate claim-type-specific disqualifier (one of the five above).
2. Evaluate cross-type disqualifiers (RETRACTED, AI_FABRICATION_CONFIRMED, LINEAGE_COLLAPSED).
3. If ANY fires: override fitness_headline to 0, append disqualifier_hits, evaluate high-Admiralty anomaly trigger.
4. Record the evidence that triggered each disqualifier in the fitness record.

## What a disqualifier is NOT

- NOT a low dimension score. A dimension score of 1 on a non-load-bearing dimension is NOT a disqualifier.
- NOT a heuristic preference. Disqualifiers are veto conditions grounded in the Phase 3 literature.
- NOT overridable by user preference. Anti-sycophancy NEVER rule applies.
