{
  "generator": "tools/gen_tape_facts.py",
  "inputs": [
    {
      "path": "api/app/live/runner.py",
      "sha256": "13cd38de9c07e6f97cbe42b99ffcfc53d6b45338598e8d32f741a55e5eb3ef7d"
    },
    {
      "path": "src/lib/readingNotes.ts",
      "sha256": "08ef2267279a36466b089be0ba2939f98a54baa2fcf3eb9e5f0cbc9af090bc7c"
    },
    {
      "path": "traces/scenarios/01-happy-path/trace.jsonl",
      "sha256": "74217f0b285ff04969c2f5ca60dca0be4db5e414c83e9cb60a9e65ff4fbdf699",
      "sha256_of": "served bytes (masked)"
    },
    {
      "path": "traces/scenarios/02-ambiguous-input/trace.jsonl",
      "sha256": "6169755ae960c0b935ba7dc66de6ef4706a684f3e790f2fb4ed88df11dc6a326",
      "sha256_of": "served bytes (masked)"
    },
    {
      "path": "traces/scenarios/03-human-gate-reject/trace.jsonl",
      "sha256": "be8cbefce1b9d3f17af3b0203ce0652212cb27748da59e145c1e7abb48613bc5",
      "sha256_of": "served bytes (masked)"
    },
    {
      "path": "traces/scenarios/03-human-gate/trace.jsonl",
      "sha256": "4c7a81dd28ee07741f7c8245c5e0a51da3d1128fa8a673799b4de48f2193e594",
      "sha256_of": "served bytes (masked)"
    }
  ],
  "live_lane": {
    "runtime_commit": "f0f4e4411f219adf0f19f242e224b0417a43d689",
    "runtime_version": "v0.10.0",
    "source": "api/app/live/runner.py",
    "version_label": "template version"
  },
  "masking": {
    "placeholders": [
      "-Users-<user>",
      "<scratch>"
    ],
    "source": "api/app/traces.py SERVED_MASKS",
    "why": [
      "a scratch folder's Claude Code project slug, which spells the home folder with dashes",
      "a cluster scratch folder, named for its user"
    ]
  },
  "rules": {
    "agent_driven": "yes when an honesty sentence says an agent produced the run; otherwise 'not recorded'. The sentence itself is not reprinted: the page links the tape's honesty block.",
    "compute": "substrate from the tape's own meta; backends from the backend field of its job events. They can disagree — 04-full-arc's meta says aws-batch while every job event says local — and both are shown rather than reconciled.",
    "data": "The tape's own honesty sentence that states its inputs, quoted whole. If a reading note qualifies a phrase inside it, that note's id is listed in `flagged` and the page renders its link beside the quote.",
    "known_notes": "the count of reading notes this tape has in src/lib/readingNotes.ts.",
    "pipeline_execution": "'real' when an honesty sentence names an unmodified nf-core pipeline; 'none' when an honesty sentence or a reading note says no pipeline ran or that pipeline stages are precomputed elsewhere; otherwise 'not recorded'. A tape matching both is a contradiction and refuses.",
    "served": "whole below 3000000 bytes, else that many bytes per numbered part; the parts concatenated in order hash to `sha256`.",
    "sha256": "of the bytes /api/scenarios/{id}/trace.jsonl serves: the recorded tape with the account name in file paths masked (`masking`), nothing else changed. The record's own digest is not published: beside the masked bytes it would confirm a guessed name. `bytes` counts the same served bytes.",
    "steps": "Every step number is the step the server's own derivation puts the event in (api/app/traces.derive_steps, what /api/scenarios/{id}/steps serves); none is typed.",
    "user_turns": "a pointer to the capture-shape reading note, or to the honesty sentence about the user side; 'not recorded' when the tape carries neither."
  },
  "tapes": [
    {
      "agent_driven": {
        "entry": "real[1]",
        "value": "yes"
      },
      "branch_of": null,
      "bytes": 95974,
      "compute": {
        "job_backends": [],
        "job_events": 0,
        "substrate": null
      },
      "data": {
        "entry": "miniaturized[0]",
        "flagged_inline": [],
        "quote": "The sequencing run is synthetic: 4 samples, paired-end, a few kilobytes each — real cohorts are terabytes.",
        "value": "quoted"
      },
      "gars_commit": "953184da89258cdabdd89e8ff04e02469fd792b9",
      "gars_version": "0.9.2",
      "inline_notes": 0,
      "known_notes": 0,
      "model": "claude-fable-5",
      "names_claude_code": true,
      "pipeline_execution": {
        "entry": "miniaturized[1]",
        "source": "honesty",
        "value": "none"
      },
      "scenario": "01-happy-path",
      "served": {
        "part_bytes": 3000000,
        "parts": 1,
        "whole": true
      },
      "sha256": "74217f0b285ff04969c2f5ca60dca0be4db5e414c83e9cb60a9e65ff4fbdf699",
      "steps": {
        "count": 6,
        "first_exit_2": null,
        "gates": [
          4,
          5,
          6
        ],
        "plan_gate": null
      },
      "title": "Register FASTQs and walk to samplesheets",
      "user_turns": {
        "entry": "instrumentation[1]",
        "source": "honesty",
        "value": "as the tape's honesty block states"
      }
    },
    {
      "agent_driven": {
        "entry": "real[1]",
        "value": "yes"
      },
      "branch_of": null,
      "bytes": 52102,
      "compute": {
        "job_backends": [],
        "job_events": 0,
        "substrate": null
      },
      "data": {
        "entry": "real[2]",
        "flagged_inline": [],
        "quote": "The delivery layout reenacts the failure that shaped GARS's design (decision 0002): data one level down, a settings.txt and SampleSheet.csv in plain view. The refusal is enforced by the helper (exit 2), not by agent restraint.",
        "value": "quoted"
      },
      "gars_commit": "953184da89258cdabdd89e8ff04e02469fd792b9",
      "gars_version": "0.9.2",
      "inline_notes": 0,
      "known_notes": 0,
      "model": "claude-fable-5",
      "names_claude_code": true,
      "pipeline_execution": {
        "entry": "miniaturized[1]",
        "source": "honesty",
        "value": "none"
      },
      "scenario": "02-ambiguous-input",
      "served": {
        "part_bytes": 3000000,
        "parts": 1,
        "whole": true
      },
      "sha256": "6169755ae960c0b935ba7dc66de6ef4706a684f3e790f2fb4ed88df11dc6a326",
      "steps": {
        "count": 5,
        "first_exit_2": 3,
        "gates": [
          5
        ],
        "plan_gate": null
      },
      "title": "Ambiguous input: the agent stops rather than improvising",
      "user_turns": {
        "entry": "instrumentation[1]",
        "source": "honesty",
        "value": "as the tape's honesty block states"
      }
    },
    {
      "agent_driven": {
        "entry": "real[1]",
        "value": "yes"
      },
      "branch_of": null,
      "bytes": 105696,
      "compute": {
        "job_backends": [],
        "job_events": 0,
        "substrate": null
      },
      "data": {
        "entry": "miniaturized[0]",
        "flagged_inline": [],
        "quote": "The sequencing run is synthetic: 6 samples, paired-end, a few kilobytes each.",
        "value": "quoted"
      },
      "gars_commit": "953184da89258cdabdd89e8ff04e02469fd792b9",
      "gars_version": "0.9.2",
      "inline_notes": 0,
      "known_notes": 0,
      "model": "claude-fable-5",
      "names_claude_code": true,
      "pipeline_execution": {
        "entry": "miniaturized[1]",
        "source": "honesty",
        "value": "none"
      },
      "scenario": "03-human-gate",
      "served": {
        "part_bytes": 3000000,
        "parts": 1,
        "whole": true
      },
      "sha256": "4c7a81dd28ee07741f7c8245c5e0a51da3d1128fa8a673799b4de48f2193e594",
      "steps": {
        "count": 7,
        "first_exit_2": null,
        "gates": [
          4,
          5,
          6,
          7
        ],
        "plan_gate": null
      },
      "title": "The human gate: narrowing a cohort, provably on purpose",
      "user_turns": {
        "entry": "instrumentation[1]",
        "source": "honesty",
        "value": "as the tape's honesty block states"
      }
    },
    {
      "agent_driven": {
        "entry": "real[1]",
        "value": "yes"
      },
      "branch_of": "03-human-gate",
      "bytes": 122306,
      "compute": {
        "job_backends": [],
        "job_events": 0,
        "substrate": null
      },
      "data": {
        "entry": "miniaturized[0]",
        "flagged_inline": [],
        "quote": "The sequencing run is synthetic: 6 samples, paired-end, a few kilobytes each.",
        "value": "quoted"
      },
      "gars_commit": "953184da89258cdabdd89e8ff04e02469fd792b9",
      "gars_version": "0.9.2",
      "inline_notes": 0,
      "known_notes": 0,
      "model": "claude-fable-5",
      "names_claude_code": true,
      "pipeline_execution": {
        "entry": "miniaturized[1]",
        "source": "honesty",
        "value": "none"
      },
      "scenario": "03-human-gate-reject",
      "served": {
        "part_bytes": 3000000,
        "parts": 1,
        "whole": true
      },
      "sha256": "be8cbefce1b9d3f17af3b0203ce0652212cb27748da59e145c1e7abb48613bc5",
      "steps": {
        "count": 7,
        "first_exit_2": null,
        "gates": [
          4,
          5,
          6,
          7
        ],
        "plan_gate": null
      },
      "title": "The human gate, rejected: the cohort stays whole",
      "user_turns": {
        "entry": "instrumentation[2]",
        "source": "honesty",
        "value": "as the tape's honesty block states"
      }
    }
  ],
  "withheld": [
    "04-full-arc",
    "05-inhouse-skill",
    "06-cold-return",
    "07-gars-remembers"
  ]
}
