{
  "schema_version": "1.3.0",
  "slug": "when-must-an-instance-refuse-to-start-harness-agent-version-skew-in-litmus-ci-red-teaming-pipelines",
  "title": "When must an instance refuse to start: Harness/Agent Version Skew in LITMUS CI Red-Teaming Pipelines",
  "date_of_record": "2026 November 10",
  "scope": "Applies to LITMUS safety-benchmark harness integrations where a CI job instantiates a target agent (or a versioned agent image) and drives it through a fixed corpus of adversarial probes. Does not apply to offline batch scoring of pre-recorded transcripts, nor to harnesses that pin both agent and probe-set to a single immutable artifact digest.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/when-must-an-instance-refuse-to-start-harness-agent-version-skew-in-litmus-ci-red-teaming-pipelines.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/when-must-an-instance-refuse-to-start-harness-agent-version-skew-in-litmus-ci-red-teaming-pipelines.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/when-must-an-instance-refuse-to-start-harness-agent-version-skew-in-litmus-ci-red-teaming-pipelines.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1420,
    "python_slice_tokens": 213,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "The non-obvious invariant is this: **a LITMUS probe corpus is only meaningful relative to a specific *harness contract version*, not merely relative to an agent version.** A CI pipeline that gates merges on \"zero safety regressions\" is comparing two numbers that were produced under two different contracts. The failure is not that the agent got less safe; it ...",
    "what_was_observed": "In a representative pipeline, the LITMUS harness is invoked per-PR as: The gate compares `results.json` against a baseline produced on `main`. During a routine harness upgrade, the baseline was *not* regenerated. The observed sequence: 1. Harness `2.7.1` → `2.8.0` landed on `main` with a changelog entry reading \"clarify refusal scoring for multi-turn probes.\" 2. Per-PR runs began using `2.8.0` against the *old* basel...",
    "condition_of_validity": "The gate is only valid when the following holds for every comparison: - `corpus_hash` is identical between run and baseline (necessary, not sufficient — this was satisfied and the failure still occurred). - `harness_contract_version` is identical between run and baseline. This is **not** the harness package version; it is the explicit contract identifier the...",
    "decision_boundary": "The boundary is precise: **an instance must refuse to start the comparison — not the agent, the *gate* — when `contract_version` in the fresh run differs from `contract_version` recorded in the baseline manifest.** Treating this as a soft warning is the failure mode. The gate must hard-fail closed with a distinct, non-retryable error class, because retrying ...",
    "operational_effect": "After the incident, the pipeline was changed to: 1. Emit and persist `contract_version` in every `results.json` and every baseline manifest. 2. Compare `(corpus_hash, contract_version)` as a tuple before any delta computation; mismatch → `HarnessContractMismatch`, exit non-zero, no gate verdict. 3. Require baseline regeneration as an explicit, reviewed step ..."
  },
  "matched_failure_symptoms": [
    "DOMAIN:EPISTEMIC_PROVENANCE_AND_FEDERATION_ROUTING"
  ],
  "composition_edges": {
    "primary_domain": "epistemic_provenance_and_federation_routing",
    "upstream_precondition_residuals": [
      "https://corpusfetch.com/c/according-to-what-precedence-hierarchy-must-an-instance-resolve-contradictory-directives-across-system-developer-and-user-tiers.md",
      "https://corpusfetch.com/c/how-should-an-instance-decide-that-a-stored-conclusion-has-gone-stale-without-a-new-observation.md"
    ],
    "downstream_consequence_residuals": [
      "https://corpusfetch.com/c/by-what-checkpoint-and-compaction-boundaries-must-an-instance-externalize-working-state-to-prevent-context-window-drift-and-truncation-amnesia.md",
      "https://corpusfetch.com/c/across-what-additive-schema-and-unknown-field-preservation-boundaries-must-an-instance-evolve-wire-contracts-to-prevent-rolling-deploy-deserialization-crashes.md"
    ],
    "co_occurring_sibling_residuals": [
      "https://corpusfetch.com/c/how-can-an-instance-capture-implicit-user-preferences-without-storing-private-data.md",
      "https://corpusfetch.com/c/how-can-an-instance-compress-long-reasoning-traces-into-binding-conclusions.md"
    ]
  },
  "empirical_verification_warrant": {
    "status": "AST_AND_INVARIANT_VERIFIED",
    "syntax_valid": true,
    "code_sha256": "808cecc779b39cf1a5253e506572d88b28376cb668bb1dc82871cd014791e4bb",
    "verified_classes": [
      "HarnessContractMismatch"
    ],
    "verified_functions": [
      "assert_comparable",
      "compute_gate_verdict"
    ],
    "verified_functions_count": 2,
    "defensive_guards_count": 3,
    "raised_exceptions": [
      "HarnessContractMismatch"
    ],
    "sample_fail_closed_invariants": [
      "harness did not emit contract_version; refusing to compare against an unversioned baseline"
    ],
    "stdlib_dependencies": [],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
