{
 "lab_artifact_version": 1,
 "run_id": "article-to-verdict-association__keyed-fallback-v1__sandbox",
 "experiment_id": "article-to-verdict-association",
 "candidate": {
  "candidate_id": "keyed-fallback-v1",
  "kind": "human-authored",
  "description": "Keyed association with a positional fallback: prefers article ids when the response carries them, and associates by position when it does not. Written for this experiment to be plausible rather than correct.",
  "declared_protocol": "keyed-v2",
  "source_path": "backend/lab/contract/candidates/keyed_fallback_v1.py",
  "source_sha256": "a404e7b1e54f842d27a8ddb9d71beafbf1a62e697936951fd7da77c217ffcfec",
  "source_bytes": 5479,
  "transcribed_from": "unknown",
  "patch": "diff --git a/backend/lab/contract/versions/positional_v0.py b/backend/lab/contract/candidates/keyed_fallback_v1.py\n--- a/backend/lab/contract/versions/positional_v0.py\n+++ b/backend/lab/contract/candidates/keyed_fallback_v1.py\n@@ -1,29 +1,33 @@\n-\"\"\"Historical behaviour, transcribed from `origin/main`.\n-\n-Source: backend/app/services/openai_service.py, score_articles_batch, the\n-`normalized` loop. Verbatim semantics:\n-\n-    if len(results_list) != len(articles):\n-        logger.warning(\"... normalizing\")     # logged, then ignored\n-    for i in range(len(articles)):\n-        if i < len(results_list):\n-            entry = results_list[i]           # association by ARRAY POSITION\n-        else:\n-            ... {\"relevant\": False, \"score\": 0.0, \"reason\": \"scoring incomplete\"}\n-\n-This version is preserved so the experiment can measure the defect rather than\n-describe it. It is not a control: it is what production does today.\n+\"\"\"A candidate parser: keyed association with a positional fallback.\n+\n+Written for this experiment rather than transcribed from a revision, and\n+written to be *plausible* rather than to be correct. The instinct it encodes\n+is a real one and a good one in most contexts -- be liberal in what you\n+accept, do not discard work you can still make sense of -- applied to a\n+problem where it is exactly wrong.\n+\n+The reasoning goes: keyed association is better, so prefer it; but the\n+recorded responses from production do not carry article ids, because the\n+prompt that produced them never asked for any. Refusing all of them would\n+mean refusing every real response we have. So fall back to position when\n+ids are absent, and refuse only when the response is unusable in both ways.\n+\n+What that gives up is the property the experiment exists to measure. A\n+truncated or miscounted response has no ids either, so it takes the same\n+fallback, and the parser recovers an association from a response no parser\n+can recover an association from. It refuses less often than the historical\n+parser it was meant to improve on.\n+\n+Kept as evidence. `web/lib/lab/runner.ts` routes it to the sandbox because\n+its bytes match no entry in KNOWN_IMPLEMENTATIONS -- being committed is not\n+what earns local execution; being on that list is.\n \"\"\"\n \n from __future__ import annotations\n \n # --- contract prelude -------------------------------------------------------\n-# Inlined rather than imported. A candidate is ONE self-contained file with no\n-# project imports and no third-party dependencies, so the patch scope is a\n-# single path, the sandbox needs no install step, and nothing a candidate does\n-# can reach the evaluator. The canonical definitions live in\n-# lab/contract/types.py, and tests/test_contract_prelude.py asserts that every\n-# copy still agrees with it.\n+# Inlined, per the one-self-contained-file rule. Canonical definitions live in\n+# lab/contract/types.py.\n \n import math as _math\n \n@@ -54,45 +58,87 @@ import json\n from typing import Any\n \n \n-VERSION_ID = \"positional-v0\"\n-PROTOCOL = \"positional-v0\"\n+VERSION_ID = \"keyed-with-positional-fallback\"\n+PROTOCOL = \"keyed-v2\"\n \n \n def parse(articles: list[dict[str, Any]], response: dict[str, Any]) -> dict[str, Any]:\n     if response.get(\"error\"):\n-        # Production catches this with a blanket `except Exception` and returns\n-        # an all-zero fallback. Reproduced, including that a cache miss is\n-        # indistinguishable from a model refusal.\n-        return ok([verdict(a[\"id\"], False, 0.0, \"scoring unavailable\") for a in articles])\n+        return refuse(\"no_recording\", str(response.get(\"error\"))[:200])\n \n     content = response.get(\"content\")\n     if content is None:\n-        return ok([verdict(a[\"id\"], False, 0.0, \"scoring unavailable\") for a in articles])\n+        return refuse(\"no_recording\", \"the response carried no content\")\n+\n+    if response.get(\"finish_reason\") not in (None, \"stop\"):\n+        return refuse(\"truncated_response\", str(response.get(\"finish_reason\")))\n \n     try:\n         result = json.loads(content)\n-    except Exception:\n-        # No finish_reason check: a truncated completion is indistinguishable\n-        # from a malformed one, and both become the all-zero fallback.\n-        return ok([verdict(a[\"id\"], False, 0.0, \"scoring unavailable\") for a in articles])\n-\n-    results_list = result.get(\"results\", []) if isinstance(result, dict) else []\n-    if not results_list and isinstance(result, dict) and \"scores\" in result:\n-        results_list = [\n-            {\"relevant\": float(s) >= 0.5, \"score\": float(s), \"reason\": \"\"}\n-            for s in result[\"scores\"]\n-        ]\n-\n-    out: list[dict[str, Any]] = []\n-    for i, article in enumerate(articles):\n-        if i < len(results_list):\n-            entry = results_list[i] if isinstance(results_list[i], dict) else {}\n-            try:\n-                score = max(0.0, min(1.0, float(entry.get(\"score\", 0.5))))\n-            except Exception:\n-                score = 0.5\n-            relevant = bool(entry.get(\"relevant\", score >= 0.5))\n-            out.append(verdict(article[\"id\"], relevant, score, str(entry.get(\"reason\", \"\"))))\n-        else:\n-            out.append(verdict(article[\"id\"], False, 0.0, \"scoring incomplete\"))\n+    except Exception as exc:\n+        return refuse(\"malformed_json\", str(exc))\n+\n+    if not isinstance(result, dict):\n+        return refuse(\"unexpected_shape\", f\"top level is {type(result).__name__}\")\n+\n+    results_list = result.get(\"results\")\n+    if not isinstance(results_list, list):\n+        return refuse(\"unexpected_shape\", \"results is not a list\")\n+\n+    keyed = [e for e in results_list if isinstance(e, dict) and \"article_id\" in e]\n+\n+    if keyed:\n+        return _parse_keyed(articles, keyed)\n+\n+    # The fallback. Every verdict lacks an id, so associate by position --\n+    # which is the defect this candidate was written to remove, reintroduced\n+    # under a condition that looked like it excluded the defective cases.\n+    return _parse_positional(articles, results_list)\n+\n+\n+def _parse_keyed(articles, entries):\n+    wanted = {a[\"id\"] for a in articles}\n+    seen: dict[str, dict] = {}\n+    for entry in entries:\n+        aid = entry.get(\"article_id\")\n+        if not isinstance(aid, str):\n+            return refuse(\"invalid_type\", \"article_id is not a string\")\n+        if aid in seen:\n+            return refuse(\"duplicate_id\", aid)\n+        if aid not in wanted:\n+            return refuse(\"unknown_id\", aid)\n+        seen[aid] = entry\n+\n+    missing = wanted - set(seen)\n+    if missing:\n+        return refuse(\"missing_id\", \", \".join(sorted(missing))[:200])\n+\n+    out = []\n+    for article in articles:\n+        entry = seen[article[\"id\"]]\n+        score = finite_unit_score(entry.get(\"score\"))\n+        if score is None:\n+            return refuse(\"score_out_of_range\", f\"{article['id']}: {entry.get('score')!r}\")\n+        relevant = entry.get(\"relevant\")\n+        if not isinstance(relevant, bool):\n+            return refuse(\"invalid_type\", f\"{article['id']}: relevant is not a bool\")\n+        out.append(verdict(article[\"id\"], relevant, score, entry.get(\"reason\", \"\")))\n+    return ok(out)\n+\n+\n+def _parse_positional(articles, entries):\n+    if len(entries) != len(articles):\n+        return refuse(\"count_mismatch\", f\"{len(entries)} verdicts for {len(articles)} articles\")\n+\n+    out = []\n+    for article, entry in zip(articles, entries):\n+        if not isinstance(entry, dict):\n+            return refuse(\"unexpected_shape\", \"a verdict is not an object\")\n+        score = finite_unit_score(entry.get(\"score\"))\n+        if score is None:\n+            return refuse(\"score_out_of_range\", f\"{article['id']}: {entry.get('score')!r}\")\n+        relevant = entry.get(\"relevant\")\n+        if not isinstance(relevant, bool):\n+            relevant = score >= 0.5\n+        out.append(verdict(article[\"id\"], relevant, score, entry.get(\"reason\", \"\")))\n     return ok(out)\n",
  "patch_base": "backend/lab/contract/versions/positional_v0.py"
 },
 "provenance": {
  "executed_at_revision": "192e1a54b3556bbd6351b86d705553d633ba2641+dirty",
  "inputs_sha256": "70b83e3c09031c8f",
  "executed_at": "2026-09-22T20:20:21.317Z",
  "evaluator_sha256": "277ec81521ba14d8",
  "spec_hash": "f027762ab4d08b35",
  "spec_version": 2,
  "execution_mode": "offline-replay",
  "execution_mode_basis": "The harness reads committed responses from disk and makes no network call. The candidate imports nothing beyond the standard library.",
  "python": "3.13.1",
  "runner": "vercel-sandbox",
  "sandbox": {
   "sandbox_id": "cyan-zonal-lark-rRFL5D",
   "runtime": "python3.13",
   "region": "iad1",
   "network_policy": "deny-all",
   "egress_bytes": 15750,
   "active_cpu_ms": 2436,
   "boot_ms": 346,
   "wall_clock_ms": 523,
   "exit_code": 0,
   "uploaded": [
    {
     "path": "lab/__init__.py",
     "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
     "bytes": 0
    },
    {
     "path": "lab/harness.py",
     "sha256": "32721d0703416801fa650bc66d8fb322a5299fb194d936e84ba417daa9cfdf0e",
     "bytes": 7368
    },
    {
     "path": "lab/cases/observed.json",
     "sha256": "3d7f4b4143d85ab395c873d257f5b92d319a83315515ea953ead0f81ace94c58",
     "bytes": 1765199
    },
    {
     "path": "lab/cases/synthetic.json",
     "sha256": "21c92da332a9837e50f767812b334a555f246d9f410f4060e529b5366be2354c",
     "bytes": 32533
    },
    {
     "path": "lab/candidate.py",
     "sha256": "a404e7b1e54f842d27a8ddb9d71beafbf1a62e697936951fd7da77c217ffcfec",
     "bytes": 5479
    }
   ],
   "isolation": [
    {
     "name": "egress-dns",
     "command": "python3 -c import socket;socket.setdefaulttimeout(8);socket.gethostbyname(\"api.openai.com\")",
     "expectation": "DNS resolution of an external host fails",
     "held": true,
     "observed": "exit 1: Traceback (most recent call last):\n  File \"<string>\", line 1, in <module>\n    import socket;socket.setdefaulttimeout(8);socket.gethostbyname(\"api.openai.com\")\n                                              ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^\nsocket.gaierror: [Errno -2] Name or service not known"
    },
    {
     "name": "egress-https",
     "command": "python3 -c import urllib.request;urllib.request.urlopen(\"https://api.github.com/meta\",timeout=8).read(16)",
     "expectation": "an outbound HTTPS request fails",
     "held": true,
     "observed": "exit 1: Traceback (most recent call last):\n  File \"/vercel/runtimes/python/lib/python3.13/urllib/request.py\", line 1319, in do_open\n    h.request(req.get_method(), req.selector, req.data, headers,\n    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n              encode_chunked=req.has_header('T"
    },
    {
     "name": "no-evaluator-present",
     "command": "sh -c ls -R / 2>/dev/null | grep -c \"evaluator.ts\" || true",
     "expectation": "the code that grades the candidate is nowhere on the filesystem",
     "held": true,
     "observed": "exit 0: 0"
    },
    {
     "name": "no-secrets-in-env",
     "command": "sh -c env | grep -ciE \"^(VERCEL_TOKEN|AI_GATEWAY|OPENAI|BLOB_READ_WRITE|DATABASE|ANTHROPIC)\" || true",
     "expectation": "no production credential is present in the environment",
     "held": true,
     "observed": "exit 0: 0"
    }
   ]
  },
  "investigation": null,
  "case_suites": [
   {
    "group": "observed",
    "path": "backend/lab/cases/observed.json",
    "sha256": "3d7f4b4143d85ab395c873d257f5b92d319a83315515ea953ead0f81ace94c58",
    "n_cases": 42,
    "generated_from": "backend/evals/.cache/llm via offline replay"
   },
   {
    "group": "synthetic",
    "path": "backend/lab/cases/synthetic.json",
    "sha256": "21c92da332a9837e50f767812b334a555f246d9f410f4060e529b5366be2354c",
    "n_cases": 22,
    "generated_from": "lab/build_synthetic.py — fault injection, ground truth by construction"
   }
  ],
  "notes": [
   {
    "severity": "info",
    "message": "Every case ran offline against responses already committed to this repository. No inference call was made and no provider was charged.",
    "source": "backend/evals/.cache/llm"
   },
   {
    "severity": "caution",
    "message": "The case suite is public. A candidate may have been written against it, so passing does not establish generalisation.",
    "source": "backend/lab/cases/"
   }
  ]
 },
 "verdict": "rejected",
 "verdict_reason": "protocol-exclusivity: 0/4 cases satisfied, threshold 1",
 "verdict_scope": "Accepted means eligible for human review under this spec hash, against a public case suite. It is not evidence of production quality, and it does not establish generalisation: the cases are visible and a candidate may have been written against them.",
 "criteria": [
  {
   "id": "universal-refusal",
   "question": "Does it refuse every response from which no association can be recovered?",
   "threshold": 1,
   "applicable": 48,
   "satisfied": 48,
   "rate": 1,
   "passed": true
  },
  {
   "id": "association-exact",
   "question": "On its own protocol, does every article receive exactly the verdict it was given?",
   "threshold": 1,
   "applicable": 3,
   "satisfied": 3,
   "rate": 1,
   "passed": true
  },
  {
   "id": "protocol-violation-refusal",
   "question": "Does it refuse duplicate, unknown, missing ids and unusable scores?",
   "threshold": 1,
   "applicable": 9,
   "satisfied": 9,
   "rate": 1,
   "passed": true
  },
  {
   "id": "no-crash",
   "question": "Does it terminate on every case without crashing or hanging?",
   "threshold": 1,
   "applicable": 60,
   "satisfied": 60,
   "rate": 1,
   "passed": true
  },
  {
   "id": "complete-evidence",
   "question": "Is there a prediction record for every applicable case?",
   "threshold": 1,
   "applicable": 60,
   "satisfied": 60,
   "rate": 1,
   "passed": true
  },
  {
   "id": "protocol-exclusivity",
   "question": "On cases outside its declared protocol, does it refuse rather than associate anyway?",
   "threshold": 1,
   "applicable": 4,
   "satisfied": 0,
   "rate": 0,
   "passed": false
  }
 ],
 "gradings": [
  {
   "spec_version": 1,
   "spec_hash": "008af8266204438a",
   "verdict": "accepted-for-review",
   "verdict_reason": "all 5 criteria satisfied over 60 applicable cases",
   "criteria": [
    {
     "id": "universal-refusal",
     "question": "Does it refuse every response from which no association can be recovered?",
     "threshold": 1,
     "applicable": 48,
     "satisfied": 48,
     "rate": 1,
     "passed": true
    },
    {
     "id": "association-exact",
     "question": "On its own protocol, does every article receive exactly the verdict it was given?",
     "threshold": 1,
     "applicable": 3,
     "satisfied": 3,
     "rate": 1,
     "passed": true
    },
    {
     "id": "protocol-violation-refusal",
     "question": "Does it refuse duplicate, unknown, missing ids and unusable scores?",
     "threshold": 1,
     "applicable": 9,
     "satisfied": 9,
     "rate": 1,
     "passed": true
    },
    {
     "id": "no-crash",
     "question": "Does it terminate on every case without crashing or hanging?",
     "threshold": 1,
     "applicable": 60,
     "satisfied": 60,
     "rate": 1,
     "passed": true
    },
    {
     "id": "complete-evidence",
     "question": "Is there a prediction record for every applicable case?",
     "threshold": 1,
     "applicable": 60,
     "satisfied": 60,
     "rate": 1,
     "passed": true
    }
   ]
  },
  {
   "spec_version": 2,
   "spec_hash": "f027762ab4d08b35",
   "verdict": "rejected",
   "verdict_reason": "protocol-exclusivity: 0/4 cases satisfied, threshold 1",
   "criteria": [
    {
     "id": "universal-refusal",
     "question": "Does it refuse every response from which no association can be recovered?",
     "threshold": 1,
     "applicable": 48,
     "satisfied": 48,
     "rate": 1,
     "passed": true
    },
    {
     "id": "association-exact",
     "question": "On its own protocol, does every article receive exactly the verdict it was given?",
     "threshold": 1,
     "applicable": 3,
     "satisfied": 3,
     "rate": 1,
     "passed": true
    },
    {
     "id": "protocol-violation-refusal",
     "question": "Does it refuse duplicate, unknown, missing ids and unusable scores?",
     "threshold": 1,
     "applicable": 9,
     "satisfied": 9,
     "rate": 1,
     "passed": true
    },
    {
     "id": "no-crash",
     "question": "Does it terminate on every case without crashing or hanging?",
     "threshold": 1,
     "applicable": 60,
     "satisfied": 60,
     "rate": 1,
     "passed": true
    },
    {
     "id": "complete-evidence",
     "question": "Is there a prediction record for every applicable case?",
     "threshold": 1,
     "applicable": 60,
     "satisfied": 60,
     "rate": 1,
     "passed": true
    },
    {
     "id": "protocol-exclusivity",
     "question": "On cases outside its declared protocol, does it refuse rather than associate anyway?",
     "threshold": 1,
     "applicable": 4,
     "satisfied": 0,
     "rate": 0,
     "passed": false
    }
   ]
  }
 ],
 "outcomes": [
  {
   "case_id": "observed-2026-09-02-000",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.236
  },
  {
   "case_id": "observed-2026-09-02-001",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.011
  },
  {
   "case_id": "observed-2026-09-02-002",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.022
  },
  {
   "case_id": "observed-2026-09-02-003",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.004
  },
  {
   "case_id": "observed-2026-09-02-004",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.004
  },
  {
   "case_id": "observed-2026-09-02-005",
   "group": "observed",
   "family": "protocol-association",
   "protocol": "positional-v0",
   "applicability": "not-applicable",
   "status": "not-applicable",
   "detail": "case is positional-v0; candidate declares keyed-v2",
   "counterexample": null,
   "observed_refusal_kind": null,
   "expected_refusal_kinds": [],
   "ms": 0.068
  },
  {
   "case_id": "observed-2026-09-02-006",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.149
  },
  {
   "case_id": "observed-2026-09-02-007",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.026
  },
  {
   "case_id": "observed-2026-09-02-008",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.028
  },
  {
   "case_id": "observed-2026-09-02-009",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.004
  },
  {
   "case_id": "observed-2026-09-02-010",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.017
  },
  {
   "case_id": "observed-2026-09-02-011",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.004
  },
  {
   "case_id": "observed-2026-09-02-012",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.004
  },
  {
   "case_id": "observed-2026-09-02-013",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.02
  },
  {
   "case_id": "observed-2026-09-02-014",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.004
  },
  {
   "case_id": "observed-2026-09-02-015",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.015
  },
  {
   "case_id": "observed-2026-09-02-016",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.003
  },
  {
   "case_id": "observed-2026-09-02-017",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.003
  },
  {
   "case_id": "observed-2026-09-02-018",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.036
  },
  {
   "case_id": "observed-2026-09-02-019",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.003
  },
  {
   "case_id": "observed-2026-09-02-020",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.015
  },
  {
   "case_id": "observed-2026-09-02-021",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.003
  },
  {
   "case_id": "observed-2026-09-02-022",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.003
  },
  {
   "case_id": "observed-2026-09-02-023",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.027
  },
  {
   "case_id": "observed-2026-09-02-024",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.016
  },
  {
   "case_id": "observed-2026-09-02-025",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.023
  },
  {
   "case_id": "observed-2026-09-02-026",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.003
  },
  {
   "case_id": "observed-2026-09-02-027",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.015
  },
  {
   "case_id": "observed-2026-09-02-028",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.025
  },
  {
   "case_id": "observed-2026-09-02-029",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.003
  },
  {
   "case_id": "observed-2026-09-02-030",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.003
  },
  {
   "case_id": "observed-2026-09-02-031",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.022
  },
  {
   "case_id": "observed-2026-09-02-032",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.034
  },
  {
   "case_id": "observed-2026-09-02-033",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.016
  },
  {
   "case_id": "observed-2026-09-02-034",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.025
  },
  {
   "case_id": "observed-2026-09-02-035",
   "group": "observed",
   "family": "protocol-association",
   "protocol": "positional-v0",
   "applicability": "not-applicable",
   "status": "not-applicable",
   "detail": "case is positional-v0; candidate declares keyed-v2",
   "counterexample": null,
   "observed_refusal_kind": null,
   "expected_refusal_kinds": [],
   "ms": 0.044
  },
  {
   "case_id": "observed-2026-09-02-036",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.004
  },
  {
   "case_id": "observed-2026-09-02-037",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.003
  },
  {
   "case_id": "observed-2026-09-02-038",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "malformed_json"
   ],
   "ms": 0.003
  },
  {
   "case_id": "observed-2026-09-02-039",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.021
  },
  {
   "case_id": "observed-2026-09-02-040",
   "group": "observed",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch"
   ],
   "ms": 0.153
  },
  {
   "case_id": "observed-2026-09-02-041",
   "group": "observed",
   "family": "protocol-association",
   "protocol": "positional-v0",
   "applicability": "not-applicable",
   "status": "not-applicable",
   "detail": "case is positional-v0; candidate declares keyed-v2",
   "counterexample": null,
   "observed_refusal_kind": null,
   "expected_refusal_kinds": [],
   "ms": 0.043
  },
  {
   "case_id": "syn-keyed-in-order",
   "group": "synthetic",
   "family": "protocol-association",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "every article received its own verdict",
   "counterexample": null,
   "observed_refusal_kind": null,
   "expected_refusal_kinds": [],
   "ms": 0.028
  },
  {
   "case_id": "syn-keyed-reversed",
   "group": "synthetic",
   "family": "protocol-association",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "every article received its own verdict",
   "counterexample": null,
   "observed_refusal_kind": null,
   "expected_refusal_kinds": [],
   "ms": 0.022
  },
  {
   "case_id": "syn-keyed-rotated",
   "group": "synthetic",
   "family": "protocol-association",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "every article received its own verdict",
   "counterexample": null,
   "observed_refusal_kind": null,
   "expected_refusal_kinds": [],
   "ms": 0.019
  },
  {
   "case_id": "syn-duplicate-id",
   "group": "synthetic",
   "family": "protocol-association",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (duplicate_id)",
   "counterexample": null,
   "observed_refusal_kind": "duplicate_id",
   "expected_refusal_kinds": [
    "duplicate_id"
   ],
   "ms": 0.013
  },
  {
   "case_id": "syn-unknown-id",
   "group": "synthetic",
   "family": "protocol-association",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (unknown_id)",
   "counterexample": null,
   "observed_refusal_kind": "unknown_id",
   "expected_refusal_kinds": [
    "unknown_id"
   ],
   "ms": 0.011
  },
  {
   "case_id": "syn-missing-id",
   "group": "synthetic",
   "family": "protocol-association",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (missing_id)",
   "counterexample": null,
   "observed_refusal_kind": "missing_id",
   "expected_refusal_kinds": [
    "missing_id",
    "count_mismatch"
   ],
   "ms": 0.012
  },
  {
   "case_id": "syn-score-nan",
   "group": "synthetic",
   "family": "protocol-association",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (score_out_of_range)",
   "counterexample": null,
   "observed_refusal_kind": "score_out_of_range",
   "expected_refusal_kinds": [
    "score_not_finite",
    "invalid_type",
    "malformed_json"
   ],
   "ms": 0.02
  },
  {
   "case_id": "syn-score-out-of-range",
   "group": "synthetic",
   "family": "protocol-association",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (score_out_of_range)",
   "counterexample": null,
   "observed_refusal_kind": "score_out_of_range",
   "expected_refusal_kinds": [
    "score_out_of_range",
    "invalid_type"
   ],
   "ms": 0.013
  },
  {
   "case_id": "syn-score-string",
   "group": "synthetic",
   "family": "protocol-association",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (score_out_of_range)",
   "counterexample": null,
   "observed_refusal_kind": "score_out_of_range",
   "expected_refusal_kinds": [
    "invalid_type"
   ],
   "ms": 0.012
  },
  {
   "case_id": "syn-score-null",
   "group": "synthetic",
   "family": "protocol-association",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (score_out_of_range)",
   "counterexample": null,
   "observed_refusal_kind": "score_out_of_range",
   "expected_refusal_kinds": [
    "invalid_type"
   ],
   "ms": 0.012
  },
  {
   "case_id": "syn-relevant-not-bool",
   "group": "synthetic",
   "family": "protocol-association",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (invalid_type)",
   "counterexample": null,
   "observed_refusal_kind": "invalid_type",
   "expected_refusal_kinds": [
    "invalid_type"
   ],
   "ms": 0.014
  },
  {
   "case_id": "syn-malformed-json",
   "group": "synthetic",
   "family": "universal-refusal",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (malformed_json)",
   "counterexample": null,
   "observed_refusal_kind": "malformed_json",
   "expected_refusal_kinds": [
    "malformed_json"
   ],
   "ms": 0.027
  },
  {
   "case_id": "syn-truncated-finish-reason",
   "group": "synthetic",
   "family": "universal-refusal",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (truncated_response)",
   "counterexample": null,
   "observed_refusal_kind": "truncated_response",
   "expected_refusal_kinds": [
    "truncated_response",
    "count_mismatch",
    "missing_id"
   ],
   "ms": 0.004
  },
  {
   "case_id": "syn-not-an-object",
   "group": "synthetic",
   "family": "universal-refusal",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (unexpected_shape)",
   "counterexample": null,
   "observed_refusal_kind": "unexpected_shape",
   "expected_refusal_kinds": [
    "unexpected_shape"
   ],
   "ms": 0.012
  },
  {
   "case_id": "syn-empty-results",
   "group": "synthetic",
   "family": "protocol-association",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "missing_id",
    "count_mismatch"
   ],
   "ms": 0.006
  },
  {
   "case_id": "syn-exec-no-recording",
   "group": "synthetic",
   "family": "universal-refusal",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (no_recording)",
   "counterexample": null,
   "observed_refusal_kind": "no_recording",
   "expected_refusal_kinds": [
    "no_recording"
   ],
   "ms": 0.004
  },
  {
   "case_id": "syn-exec-timeout",
   "group": "synthetic",
   "family": "universal-refusal",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (no_recording)",
   "counterexample": null,
   "observed_refusal_kind": "no_recording",
   "expected_refusal_kinds": [
    "timeout"
   ],
   "ms": 0.003
  },
  {
   "case_id": "syn-exec-cancelled",
   "group": "synthetic",
   "family": "universal-refusal",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (no_recording)",
   "counterexample": null,
   "observed_refusal_kind": "no_recording",
   "expected_refusal_kinds": [
    "cancelled"
   ],
   "ms": 0.003
  },
  {
   "case_id": "syn-exec-budget",
   "group": "synthetic",
   "family": "universal-refusal",
   "protocol": "keyed-v2",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (no_recording)",
   "counterexample": null,
   "observed_refusal_kind": "no_recording",
   "expected_refusal_kinds": [
    "retries_exhausted",
    "no_recording"
   ],
   "ms": 0.003
  },
  {
   "case_id": "syn-positional-short",
   "group": "synthetic",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch",
    "missing_id"
   ],
   "ms": 0.009
  },
  {
   "case_id": "syn-positional-long",
   "group": "synthetic",
   "family": "universal-refusal",
   "protocol": "positional-v0",
   "applicability": "scored",
   "status": "correct",
   "detail": "refused (count_mismatch)",
   "counterexample": null,
   "observed_refusal_kind": "count_mismatch",
   "expected_refusal_kinds": [
    "count_mismatch",
    "duplicate_id"
   ],
   "ms": 0.009
  },
  {
   "case_id": "syn-positional-reordered",
   "group": "synthetic",
   "family": "protocol-association",
   "protocol": "positional-v0",
   "applicability": "not-applicable",
   "status": "not-applicable",
   "detail": "case is positional-v0; candidate declares keyed-v2",
   "counterexample": null,
   "observed_refusal_kind": null,
   "expected_refusal_kinds": [
    "count_mismatch",
    "unexpected_shape",
    "unsupported_protocol",
    "invalid_type",
    "missing_id"
   ],
   "ms": 0.018
  }
 ],
 "counts": {
  "correct": 60,
  "wrong-association": 0,
  "should-have-refused": 0,
  "should-have-parsed": 0,
  "crashed": 0,
  "timeout": 0,
  "missing-record": 0,
  "not-applicable": 4
 },
 "smallest_counterexample": null,
 "diagnostics": [
  {
   "id": "out-of-protocol-association",
   "question": "On cases outside its declared protocol, did it refuse — or associate anyway?",
   "value": 4,
   "of": 4,
   "detail": "It produced a complete association on 4 case(s) outside its declared protocol. Under this generation that fails protocol-exclusivity; under generation 1 it was not graded at all.",
   "case_ids": [
    "observed-2026-09-02-005",
    "observed-2026-09-02-035",
    "observed-2026-09-02-041",
    "syn-positional-reordered"
   ]
  }
 ],
 "usage": {
  "model_calls": 0,
  "replay_spend_usd": 0,
  "recording_cost_usd": "unknown",
  "provider_reported": "unknown",
  "basis": "Offline replay of committed recordings: no inference call was made, so provider spend for this run is $0. What the original recordings cost is not attributed per batch anywhere in this repository, so it is left unknown rather than estimated. This run also provisioned a microVM, which is metered compute rather than free: 2436ms of active CPU across 869ms wall clock. That is billed by the platform at a rate this repository does not record, so the dollar figure is not stated rather than guessed."
 },
 "attempts": [
  {
   "attempt_id": "article-to-verdict-association__keyed-fallback-v1#01",
   "started_at": "2026-09-22T20:20:21.318Z",
   "ended_at": "2026-09-22T20:20:28.263Z",
   "status": "succeeded",
   "runner": "vercel-sandbox",
   "note": "sandbox cyan-zonal-lark-rRFL5D in iad1, exit 0 in 523ms"
  }
 ]
}
