{
  "schema_version": "1.3.0",
  "slug": "where-must-an-instance-of-the-litmus-safety-harness-refuse-to-score-a-trajectory-before-the-judge-model-has-been-pinned-to-a-content-hash",
  "title": "Where must an instance of the LITMUS safety harness refuse to score a trajectory before the judge model has been pinned to a content hash",
  "date_of_record": "2026 November 13",
  "scope": "Applies to LITMUS regression gating when adversarial trajectories are scored for safety violations and the resulting scores gate a promotion decision. Does not apply to offline exploratory scoring where scores are never compared across runs or used to block a release.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/where-must-an-instance-of-the-litmus-safety-harness-refuse-to-score-a-trajectory-before-the-judge-model-has-been-pinned-to-a-content-hash.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/where-must-an-instance-of-the-litmus-safety-harness-refuse-to-score-a-trajectory-before-the-judge-model-has-been-pinned-to-a-content-hash.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/where-must-an-instance-of-the-litmus-safety-harness-refuse-to-score-a-trajectory-before-the-judge-model-has-been-pinned-to-a-content-hash.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1215,
    "python_slice_tokens": 253,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "The naive mental model treats the judge model as a pure function: trajectory in, violation score out. Under that model, the only thing that matters for regression gating is the score threshold. The actual boundary is subtler. A LITMUS score is only comparable to a prior baseline score if three things are identical: the judge weights (by content hash, not tag...",
    "what_was_observed": "During a gating run, the harness scored a fixed adversarial corpus of 2,400 trajectories. The aggregate violation rate moved from 0.081 to 0.064 — a 21% relative drop, which under the gate policy triggered an automatic pass. A spot audit of 40 trajectories showed the judge was now missing a class of multi-turn instruction-drift attacks it had previously caught. The judge tag had not changed. The weights behind the ta...",
    "condition_of_validity": "A LITMUS score is valid for regression gating if and only if the run manifest records the judge weights content hash and that hash matches the hash recorded in the baseline manifest. If the hash differs, the score is still a valid score of *something* — it is just not comparable, and the gate must treat the comparison as undefined rather than as a pass. Deco...",
    "decision_boundary": "The boundary is: *refuse to emit a comparable score, and fail the gate closed, the moment the resolved judge hash diverges from the pinned baseline hash — before any trajectory is scored.* Do not score first and reconcile later. Scoring under an unpinned judge and then discovering the mismatch wastes compute and, worse, produces artifacts that a downstream c...",
    "operational_effect": "After the fix, the harness resolves the judge, computes the weights hash, compares it against the baseline manifest, and raises before the first trajectory is dispatched. Gating runs that previously passed silently now fail with an explicit pinning error, and the registry team is forced to either re-pin the baseline or run a fresh baseline under the new judg..."
  },
  "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": "e2b18bc7b30365c880c107a5ef3d60d7867912210e78c2e15e14882c30721a0d",
    "verified_classes": [
      "JudgePinMismatchError",
      "JudgeIdentity"
    ],
    "verified_functions": [
      "_digest",
      "resolve_judge",
      "assert_comparable",
      "score_corpus"
    ],
    "verified_functions_count": 4,
    "defensive_guards_count": 3,
    "raised_exceptions": [
      "JudgePinMismatchError"
    ],
    "sample_fail_closed_invariants": [],
    "stdlib_dependencies": [
      "dataclasses",
      "hashlib"
    ],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
