{
  "taskSetVersion": "v1",
  "subject": "tvu-ds",
  "frozenAgainstSha": "4a68e02d3d695cee3c39d255ea5d20f7f2bf9b8c",
  "verifiedAgainstPinSha": "c1db57b8759faaf3bf89ef89d1eb21caec369680",
  "frozenAt": "2026-08-26",
  "promptTemplateVersion": "pt-v1",
  "note": "⛔ 手改本文件不算冻结。改了 task 内容必须重跑 --freeze，否则校验模式会当场报 sha 不符。",
  "shaCaliper": {
    "frozenAgainstSha": "**引文取证口径** = 各 task 的 provenance.pinnedSha —— 这段 prompt/引文当初是在哪个 DS sha 上取的。⚠️ 它是一个历史事实，re-pin **不改**它（改了就是伪造 provenance）",
    "verifiedAgainstPinSha": "**校验口径** = 本次 --pin worktree 的真 HEAD —— 引文是在哪个 sha 上被逐字定位到的。⚠️ 与上一个字段是**两件事**，re-pin 后它变而上一个不变（`lab:E46`）",
    "sha256": "整文件口径 —— 任何一个字节变了都变",
    "subjectSha256": "被测对象口径 = canonical({prompt, outputContract}) —— 它变了才是 §7.5 的真 set 升级",
    "graderSha256": "判定口径 = canonical(graders[].{id,kind,judgeSource,script,caliper}) —— ⛔ 逐字排除 expectedDiscrimination（那是预测不是判定口径）"
  },
  "tasks": [
    {
      "taskId": "GT-001",
      "file": "gt-001-live-source-console.json",
      "sha256": "fdbaf08cc4155e7983d5ba60a1cef1ba73d440ccfa1a9ca79bbbe5fc6f35bff9",
      "subjectSha256": "600cd7b8bc32e46f705417203083f1fe847dd381a9d50cdc8e9131e5df480b75",
      "graderSha256": "1c13bb98d382035c82b518d7646c300fdf213c4dcb5d3b23320b071cb62201de"
    },
    {
      "taskId": "GT-002",
      "file": "gt-002-ndi-source-type-form.json",
      "sha256": "1ab86eeb866b361b6efcf91c0b3696a10e057cb5d3b94197b9be46ea3b527ae1",
      "subjectSha256": "cab73765b7fd607045e2fd8e2dc50d27eafdc38f427761a59f0b6883b1041cc0",
      "graderSha256": "6a7a3799751f5ea948dcc5ec29d6afea07fd3953085cdf7078cb0caa7f3a6c3a"
    },
    {
      "taskId": "GT-003",
      "file": "gt-003-cost-per-token-trend.json",
      "sha256": "44c698dcd6acfe5e0fcc612f3cd2e2ad0d582168cf0223ec92062236a284f185",
      "subjectSha256": "5a59c5bb9b881a8e5a270e8006a12f06d5b615c1f347b0412b96367d850e4bde",
      "graderSha256": "6a7a3799751f5ea948dcc5ec29d6afea07fd3953085cdf7078cb0caa7f3a6c3a"
    }
  ]
}
