Warden plan

28 - CR-21 (pending): Stance-conflict exclusion: contamination

← eval suite index


tier: hermetic requires: []


28 - CR-21 (pending): Stance-conflict exclusion: contamination

Pending stub — GATED criterion. The precondition below is not built; this plan reports the criterion as pending (skip, never fail) until it lands. When it does, replace this stub with a real plan in the shape of 25-cr-18 / 26-cr-25 / 27-cr-20.

Criterion implemented (verbatim from the register)

Register: ~/.studio/master.withrobin.ai/project/rfc.one/criteria-register.md (status there: PENDING OWNER ACCEPTANCE; accepted by the 2026-08-31 proxy screen).

### CR-21 — Stance-conflict exclusion: contamination - Statement: The §6 exclusion prevents editorial disagreement from moving epistemic standing, and the failure mode it forecloses actually occurs (the rule is not dead machinery). - Metric: Primary: off-arm contamination rate — fraction of opposed target Claims that become contested where every contradicting support traces only to wiki-origin Signals and no contradicting support's stance-bearing side carries an acceptance event through claim adjudication — exceeds the dead-machinery floor; cluster bootstrap over authored sets. The acceptance qualification is load-bearing: a contested transition driven by an accepted stance Claim is excluded from the count on purpose, reported on its own line, and read as the formalization path working. Construction guarantee (defect if violated): on-arm contamination zero absent claim adjudication — an on-arm contested transition with no acceptance event anywhere behind it is the defect; the fourth test set's accepted stance Claims contesting their targets is the mechanism working. Guard: Signal-branch recall/precision on the evidential injections matches across arms (paired per injection; a difference explained by lifted-Claim pool divergence between the separate workspace copies is recorded as such, any other is an implementation fault). - Dataset/inputs: Per workspace: 20 sets of accepted Claims (~5 per set), a pair of ~300-word opposing wikis per set (40 wikis, captured through the ordinary path as Entries of source class wiki) — ~100 opposed targets per workspace, 300 pooled in 60 sets; plus the anchor's §10.3 Signal-arm injection set run in the same workspaces; two arms (exclusion off/on) on separate workspace copies. - Threshold: Null hypothesis: off-arm contamination 2%; one-sided test at the protocol's per-look level, cluster bootstrap over the 60 authored sets (rejection region at these numbers: ≥6 contaminated of the ~100 effective targets, identical at 0.03 and 0.05); design effect: true rate 10% (power >0.9 at within-set correlation 0.5). - Drop condition: Observed off-arm contamination below 2% → the check-path branching is dropped as dead machinery (origin mark kept: one field, feeds §4's formalization path) and the anchor's §3.4 stands as written. At/above 2% but not significant → branching kept on the asymmetry (guard costs field reads, the failure corrupts standing), bet reported as unconfirmed and re-tested at next pilot scale, not counted as a pass. - Source: Companion §11.2 (mechanism in §6; falsifier pointer at §6's close). - Tier: gated — requires the Claim layer, the §3.4 contradiction check, and the origin mark (plus workspace-copy apparatus for the two arms).

Named precondition

Precondition: requires the Claim layer, the §3.4 contradiction check, the origin mark, and workspace-copy apparatus for the two arms. Not built at HEAD 7f379974 (verified 2026-08-31: no 'claims', 'dimensions', or 'initiatives' tables in server/src/db/schema.ts, and no conflicts_with edges anywhere in server/src or packages/). The origin mark and the workspace-copy apparatus have no code marker to probe.

Skip guard

set -uo pipefail
source "$WARDEN_LIB/assert.sh"
cd "${PROJECT_ROOT:-$(git rev-parse --show-toplevel)}"

SCHEMA=server/src/db/schema.ts
MISSING=""
grep -q "'claims'" "$SCHEMA" || MISSING="$MISSING claims-tables"
grep -rq "conflicts_with" server/src packages 2>/dev/null || MISSING="$MISSING conflicts_with-edges"

if [ -n "$MISSING" ]; then
  warden_skip "CR-21 — Stance-conflict exclusion: contamination" "pending: requires the Claim layer, the §3.4 contradiction check, the origin mark, and workspace-copy apparatus for the two arms — gated criterion, precondition not built (probes missing:$MISSING)"
else
  warden_skip "CR-21 — Stance-conflict exclusion: contamination" "schema probes now pass — upgrade this pending stub to a real plan before CR-21 can bind (probes are heuristic, not proof)"
fi

Shape (note for the next author)

Pending stub, hermetic on purpose: the guard reads the checkout only and emits skip in every branch, so this plan can never red a run — the criterion surfaces in every summary as pending with its precondition named. The probes are heuristic activation bells, not proof: quoted table names (and conflicts_with where the contradiction check is a precondition) flip the detail text when the machinery lands. The real plan must quote the criterion verbatim, turn its thresholds into warden_pass/warden_fail gates, and follow the conventions the three runnable plans set: machine-local fixtures (25-cr-18), NLI probe and versioned judge prompts (26-cr-25), data-keyed guard activation (27-cr-20).