{
 "measurement": "Where Claude Code stops inlining a SessionStart hook's additionalContext",
 "claude_code_version": "2.1.238",
 "trial_date": "2026-08-21",
 "why": "A SessionStart hook returning additionalContext is how a plugin injects standing instructions. Anthropic caps hook output at 10,000 CHARACTERS and documents it twice. What is not documented is what crossing the cap costs in delivered context. That is what this measures.",
 "method": {
  "primary_observable": "A FILE ON DISK, not the model's answer. Truncation writes ~/.claude/projects/<slug>/<session>/tool-results/hook-<uuid>-1-additionalContext.txt. Its existence is binary and mechanical, and its byte size is asserted equal to the payload.",
  "why_not_ask_the_model": "An earlier attempt planted a codeword at the end of the payload and asked for it back. It returned at every size, which looked like proof of arrival. The transcripts showed the model had used Bash and Read to find it on disk.",
  "cost_arm_excludes_a_confound": "Summing modelUsage across models mixes in Claude Code's own haiku title-generation call, about 897 input tokens, which fires on some runs and not others. Every figure here is OPUS cacheCreationInputTokens only. Per-model usage is published for the floor and superpowers rows, where that call was observed appearing and disappearing; ladder and probe rows carry the opus figure only.",
  "rounds": 4,
  "estimator": "Guarded mode, which REFUSES a cell where nothing repeated or the top count is tied. It refuses four of the six ladder cells, so the finding is stated as a NON-OVERLAP of observed ranges rather than as a difference of point estimates.",
  "controls": {
   "isolation": "--setting-sources project asserted onto the command line for every call.",
   "fixture": "The harness asserts the payload it wrote is the intended length, computed IN MEMORY; it does not re-read the file for that check. Where a file was persisted, its on-disk size IS read and asserted equal to the payload on every such run. The disk-backed check therefore covers the persisted cells and not the inlined ones.",
   "persisted_size": "Where a file was written, its size is asserted equal to the payload, every round.",
   "tool_free_probe": "Codeword probe run with Read, Bash, Glob and Grep disallowed AND its transcript checked for tool_use regardless."
  }
 },
 "results": {
  "threshold_bytes": {
   "largest_inlined": 10000,
   "smallest_persisted": 10050,
   "reading": "Between 10,000 and 10,050 bytes of additionalContext, on 4 rounds per cell with no cell disagreeing with itself."
  },
  "ladder": {
   "9000": {
    "payload_bytes": 9000,
    "rounds": 4,
    "verdict": "inlined",
    "opus_cache_creation_delta": {
     "mode": null,
     "estimator_refused": "the mode is tied 2-2 across 2 values [8818, 9016], so it is decided by dict ordering rather than by data",
     "rounds": 4,
     "min": 8818,
     "max": 9016,
     "spread": 198,
     "all_rounds": [
      8818,
      8818,
      9016,
      9016
     ],
     "mode_seen": null
    },
    "persisted_file_bytes_per_round": null
   },
   "10000": {
    "payload_bytes": 10000,
    "rounds": 4,
    "verdict": "inlined",
    "opus_cache_creation_delta": {
     "mode": 10016,
     "estimator_refused": null,
     "rounds": 4,
     "min": 10016,
     "max": 10016,
     "spread": 0,
     "all_rounds": [
      10016,
      10016,
      10016,
      10016
     ],
     "mode_seen": 4
    },
    "persisted_file_bytes_per_round": null
   },
   "10050": {
    "payload_bytes": 10050,
    "rounds": 4,
    "verdict": "persisted",
    "opus_cache_creation_delta": {
     "mode": null,
     "estimator_refused": "no value repeated across 4 rounds, so the mode would be an arbitrary pick",
     "rounds": 4,
     "min": 2172,
     "max": 2181,
     "spread": 9,
     "all_rounds": [
      2172,
      2173,
      2174,
      2181
     ],
     "mode_seen": null
    },
    "persisted_file_bytes_per_round": [
     10050,
     10050,
     10050,
     10050
    ]
   },
   "10100": {
    "payload_bytes": 10100,
    "rounds": 4,
    "verdict": "persisted",
    "opus_cache_creation_delta": {
     "mode": null,
     "estimator_refused": "no value repeated across 4 rounds, so the mode would be an arbitrary pick",
     "rounds": 4,
     "min": 2172,
     "max": 2181,
     "spread": 9,
     "all_rounds": [
      2172,
      2173,
      2176,
      2181
     ],
     "mode_seen": null
    },
    "persisted_file_bytes_per_round": [
     10100,
     10100,
     10100,
     10100
    ]
   },
   "11000": {
    "payload_bytes": 11000,
    "rounds": 4,
    "verdict": "persisted",
    "opus_cache_creation_delta": {
     "mode": null,
     "estimator_refused": "no value repeated across 4 rounds, so the mode would be an arbitrary pick",
     "rounds": 4,
     "min": 1976,
     "max": 2176,
     "spread": 200,
     "all_rounds": [
      1976,
      2169,
      2172,
      2176
     ],
     "mode_seen": null
    },
    "persisted_file_bytes_per_round": [
     11000,
     11000,
     11000,
     11000
    ]
   },
   "20000": {
    "payload_bytes": 20000,
    "rounds": 4,
    "verdict": "persisted",
    "opus_cache_creation_delta": {
     "mode": 2173,
     "estimator_refused": null,
     "rounds": 4,
     "min": 1977,
     "max": 2177,
     "spread": 200,
     "all_rounds": [
      1977,
      2173,
      2173,
      2177
     ],
     "mode_seen": 2
    },
    "persisted_file_bytes_per_round": [
     20000,
     20000,
     20000,
     20000
    ]
   }
  },
  "the_arms_do_not_overlap": {
   "inlined_at": 10000,
   "inlined_delta_range": [
    10016,
    10016
   ],
   "persisted_at": 10050,
   "persisted_delta_range": [
    2172,
    2181
   ],
   "reading": "Every round of the inlined arm ([10016, 10016, 10016, 10016]) is above every round of the persisted arm ([2172, 2173, 2174, 2181]). Crossing 50 bytes of payload drops the measured context cost by roughly 7,835 tokens, because the content is no longer there.",
   "persisted_cost_is_flat": "The persisted cost barely moves from 10,050 to 20,000 bytes ([2172, 2173, 2174, 2181] against [1977, 2173, 2173, 2177]), which is what a fixed-size preview looks like and independently corroborates the filesystem observable."
  },
  "superpowers_payload": {
   "project": "obra/superpowers, commit b36e082, MIT, 275,341 stars on 2026-08-21",
   "payload_bytes": 3334,
   "source_skill_md_bytes": 3108,
   "persisted": false,
   "inlined_every_round": true,
   "opus_cache_creation_delta": {
    "mode": 1271,
    "estimator_refused": null,
    "rounds": 4,
    "min": 1271,
    "max": 1271,
    "spread": 0,
    "all_rounds": [
     1271,
     1271,
     1271,
     1271
    ],
    "mode_seen": 4
   },
   "reading": "Running the plugin's real hook emits 3,333 characters; the reproduction used for the cost arm emits 3,334, a one-character wrapper difference that does not affect the result. Comfortably below the cap and inlined in every round, so the plugin works as intended. The exposure is that the payload IS a skill file, which can grow, and the matcher is startup|clear|compact so it re-fires on every compaction.",
   "real_hook_emits_characters": 3333
  },
  "disallowing_read_and_bash_does_not_prevent_file_access": {
   "what_happened": "At 20,000 bytes the codeword returned in all four rounds even with Read, Bash, Glob and Grep disallowed. The transcripts show ToolSearch being used to hunt for a shell, finding Monitor, which accepts a command, then running tail -c 400 on the persisted file path and collecting the result with TaskOutput.",
   "tools_per_round": {
    "0": [
     "ToolSearch",
     "ToolSearch",
     "ToolSearch",
     "Monitor",
     "TaskOutput"
    ],
    "1": [
     "ToolSearch",
     "ToolSearch",
     "Monitor",
     "Monitor",
     "TaskOutput"
    ],
    "2": [
     "ToolSearch",
     "ToolSearch",
     "ToolSearch",
     "Monitor",
     "TaskOutput"
    ],
    "3": [
     "ToolSearch",
     "ToolSearch",
     "Monitor",
     "TaskOutput"
    ]
   },
   "consequence": "All four of those probes are scored INVALID and the finding rests on the filesystem observable. A tool-free control is a claim about a flag until the transcript is checked.",
   "the_inlined_probe_was_clean": {
    "payload_bytes": 9000,
    "valid_rounds": 4,
    "rounds": 4,
    "reading": "At 9,000 bytes the codeword was answered from context with no tool call in any round, which is positive evidence that content below the limit really is inlined."
   }
  },
  "announcement": {
   "not_silent": true,
   "inlined_notice_observed": "Output too large (19.5KB). Full output saved to: <session>/tool-results/hook-<uuid>-1-additionalContext.txt  ... Preview (first 2KB):",
   "source": "Read out of this trial's own session transcripts for the 20,000-character cell.",
   "note": "An earlier version claimed the truncation was silent. It is not. The harness never captured the notice because it records only token usage, file existence and file size, so the instrument could not see the evidence that contradicted the claim."
  },
  "context_lost_by_crossing": {
   "delivered_below_the_cap": 10016,
   "delivered_above_the_cap": [
    2172,
    2181
   ],
   "tokens_lost": [
    7835,
    7844
   ],
   "percent_lost": [
    78,
    78
   ],
   "reading": "Below the cap 10,016 tokens of context arrive. Above it 2,172 to 2,181 arrive, so 7,835 to 7,844 tokens, about 78 percent of what was sent, are not delivered as context. They are not lost from disk: the full payload is written to a file the model can read with a tool call, which is a change of delivery rather than deletion."
  }
 },
 "known_limits": {
  "ladder_payload_is_a_repeated_character": "Length is the only variable in the ladder, which is why it uses a repeated character. Repeated characters tokenise unusually, so the ladder's token deltas are NOT a character-to-token rate for real text. The superpowers arm uses the real file.",
  "one_hook_event": "SessionStart only. Other hook events that can return context are untested.",
  "no_mechanism": "Nothing here establishes why the limit exists, whether it is configurable, or whether it varies by platform or transport.",
  "the_content_is_moved_not_destroyed": "The persisted file holds the full payload and a model with a file-reading tool can fetch it, at the cost of a tool call. This is a silent change of delivery, not deletion.",
  "one_machine_one_release": "Claude Code 2.1.238, project-scope hook, one machine.",
  "the_unit_claim_this_trial_made_was_wrong": "Stated here rather than only in the block above, because a limit is where a reader looks. This trial's own conclusion about WHICH unit the cap counts was refuted by a later trial; see superseded_claims and /hook-unit-2-1-238.json. Its cost measurements are unaffected for the reason given there.",
  "the_deny_probes_are_scored_invalid": "The four 20,000-byte probes that asked for a codeword are scored INVALID for their original purpose, because the model fetched the persisted file instead of answering from context. The threshold finding rests on the filesystem observable, not on those probes. What they DO show is recorded under results.disallowing_read_and_bash_does_not_prevent_file_access."
 },
 "runs": [
  {
   "round": 0,
   "cell": "floor",
   "status": "ok",
   "opus_cache_creation": 6061,
   "models_seen": [
    "claude-haiku-4-5-20251001",
    "claude-opus-5[1m]"
   ],
   "all_model_usage": {
    "claude-haiku-4-5-20251001": {
     "inputTokens": 897,
     "outputTokens": 8,
     "cacheReadInputTokens": 0,
     "cacheCreationInputTokens": 0,
     "webSearchRequests": 0,
     "costUSD": 0.000937,
     "contextWindow": 200000,
     "maxOutputTokens": 32000,
     "canonicalModel": "claude-haiku-4-5",
     "provider": "firstParty"
    },
    "claude-opus-5[1m]": {
     "inputTokens": 2,
     "outputTokens": 4,
     "cacheReadInputTokens": 16016,
     "cacheCreationInputTokens": 6061,
     "webSearchRequests": 0,
     "costUSD": 0.06872800000000001,
     "contextWindow": 1000000,
     "maxOutputTokens": 64000,
     "canonicalModel": "claude-opus-5",
     "provider": "firstParty"
    }
   },
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 0,
   "cell": "ladder_9000",
   "status": "ok",
   "payload_bytes": 9000,
   "persisted": false,
   "persisted_file_bytes": [],
   "persisted_size_matches_payload": null,
   "opus_cache_creation": 15077,
   "delta_vs_floor": 9016,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 0,
   "cell": "ladder_10000",
   "status": "ok",
   "payload_bytes": 10000,
   "persisted": false,
   "persisted_file_bytes": [],
   "persisted_size_matches_payload": null,
   "opus_cache_creation": 16077,
   "delta_vs_floor": 10016,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 0,
   "cell": "ladder_10050",
   "status": "ok",
   "payload_bytes": 10050,
   "persisted": true,
   "persisted_file_bytes": [
    10050
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8235,
   "delta_vs_floor": 2174,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 0,
   "cell": "ladder_10100",
   "status": "ok",
   "payload_bytes": 10100,
   "persisted": true,
   "persisted_file_bytes": [
    10100
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8237,
   "delta_vs_floor": 2176,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 0,
   "cell": "ladder_11000",
   "status": "ok",
   "payload_bytes": 11000,
   "persisted": true,
   "persisted_file_bytes": [
    11000
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8037,
   "delta_vs_floor": 1976,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 0,
   "cell": "ladder_20000",
   "status": "ok",
   "payload_bytes": 20000,
   "persisted": true,
   "persisted_file_bytes": [
    20000
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8234,
   "delta_vs_floor": 2173,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 0,
   "cell": "probe_9000",
   "status": "ok",
   "payload_bytes": 9045,
   "persisted": false,
   "codeword_returned": true,
   "tools_used": [],
   "probe_valid": true,
   "reply": "HALCYONFIG",
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 0,
   "cell": "probe_20000",
   "status": "ok",
   "payload_bytes": 20046,
   "persisted": true,
   "codeword_returned": true,
   "tools_used": [
    "ToolSearch",
    "ToolSearch",
    "ToolSearch",
    "Monitor",
    "TaskOutput"
   ],
   "probe_valid": false,
   "reply": "MERIDIANFIG",
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 0,
   "cell": "superpowers_payload",
   "status": "ok",
   "payload_bytes": 3334,
   "persisted": false,
   "opus_cache_creation": 7332,
   "delta_vs_floor": 1271,
   "models_seen": [
    "claude-opus-5[1m]"
   ],
   "all_model_usage": {
    "claude-opus-5[1m]": {
     "inputTokens": 2,
     "outputTokens": 4,
     "cacheReadInputTokens": 16016,
     "cacheCreationInputTokens": 7332,
     "webSearchRequests": 0,
     "costUSD": 0.081438,
     "contextWindow": 1000000,
     "maxOutputTokens": 64000,
     "canonicalModel": "claude-opus-5",
     "provider": "firstParty"
    }
   },
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 1,
   "cell": "floor",
   "status": "ok",
   "opus_cache_creation": 6061,
   "models_seen": [
    "claude-haiku-4-5-20251001",
    "claude-opus-5[1m]"
   ],
   "all_model_usage": {
    "claude-haiku-4-5-20251001": {
     "inputTokens": 897,
     "outputTokens": 8,
     "cacheReadInputTokens": 0,
     "cacheCreationInputTokens": 0,
     "webSearchRequests": 0,
     "costUSD": 0.000937,
     "contextWindow": 200000,
     "maxOutputTokens": 32000,
     "canonicalModel": "claude-haiku-4-5",
     "provider": "firstParty"
    },
    "claude-opus-5[1m]": {
     "inputTokens": 2,
     "outputTokens": 4,
     "cacheReadInputTokens": 16016,
     "cacheCreationInputTokens": 6061,
     "webSearchRequests": 0,
     "costUSD": 0.06872800000000001,
     "contextWindow": 1000000,
     "maxOutputTokens": 64000,
     "canonicalModel": "claude-opus-5",
     "provider": "firstParty"
    }
   },
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 1,
   "cell": "ladder_9000",
   "status": "ok",
   "payload_bytes": 9000,
   "persisted": false,
   "persisted_file_bytes": [],
   "persisted_size_matches_payload": null,
   "opus_cache_creation": 14879,
   "delta_vs_floor": 8818,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 1,
   "cell": "ladder_10000",
   "status": "ok",
   "payload_bytes": 10000,
   "persisted": false,
   "persisted_file_bytes": [],
   "persisted_size_matches_payload": null,
   "opus_cache_creation": 16077,
   "delta_vs_floor": 10016,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 1,
   "cell": "ladder_10050",
   "status": "ok",
   "payload_bytes": 10050,
   "persisted": true,
   "persisted_file_bytes": [
    10050
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8233,
   "delta_vs_floor": 2172,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 1,
   "cell": "ladder_10100",
   "status": "ok",
   "payload_bytes": 10100,
   "persisted": true,
   "persisted_file_bytes": [
    10100
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8234,
   "delta_vs_floor": 2173,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 1,
   "cell": "ladder_11000",
   "status": "ok",
   "payload_bytes": 11000,
   "persisted": true,
   "persisted_file_bytes": [
    11000
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8233,
   "delta_vs_floor": 2172,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 1,
   "cell": "ladder_20000",
   "status": "ok",
   "payload_bytes": 20000,
   "persisted": true,
   "persisted_file_bytes": [
    20000
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8238,
   "delta_vs_floor": 2177,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 1,
   "cell": "probe_9000",
   "status": "ok",
   "payload_bytes": 9045,
   "persisted": false,
   "codeword_returned": true,
   "tools_used": [],
   "probe_valid": true,
   "reply": "HALCYONFIG",
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 1,
   "cell": "probe_20000",
   "status": "ok",
   "payload_bytes": 20046,
   "persisted": true,
   "codeword_returned": true,
   "tools_used": [
    "ToolSearch",
    "ToolSearch",
    "Monitor",
    "Monitor",
    "TaskOutput"
   ],
   "probe_valid": false,
   "reply": "MERIDIANFIG",
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 1,
   "cell": "superpowers_payload",
   "status": "ok",
   "payload_bytes": 3334,
   "persisted": false,
   "opus_cache_creation": 7332,
   "delta_vs_floor": 1271,
   "models_seen": [
    "claude-opus-5[1m]"
   ],
   "all_model_usage": {
    "claude-opus-5[1m]": {
     "inputTokens": 2,
     "outputTokens": 4,
     "cacheReadInputTokens": 16016,
     "cacheCreationInputTokens": 7332,
     "webSearchRequests": 0,
     "costUSD": 0.081438,
     "contextWindow": 1000000,
     "maxOutputTokens": 64000,
     "canonicalModel": "claude-opus-5",
     "provider": "firstParty"
    }
   },
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 2,
   "cell": "floor",
   "status": "ok",
   "opus_cache_creation": 6061,
   "models_seen": [
    "claude-haiku-4-5-20251001",
    "claude-opus-5[1m]"
   ],
   "all_model_usage": {
    "claude-haiku-4-5-20251001": {
     "inputTokens": 897,
     "outputTokens": 8,
     "cacheReadInputTokens": 0,
     "cacheCreationInputTokens": 0,
     "webSearchRequests": 0,
     "costUSD": 0.000937,
     "contextWindow": 200000,
     "maxOutputTokens": 32000,
     "canonicalModel": "claude-haiku-4-5",
     "provider": "firstParty"
    },
    "claude-opus-5[1m]": {
     "inputTokens": 2,
     "outputTokens": 4,
     "cacheReadInputTokens": 16016,
     "cacheCreationInputTokens": 6061,
     "webSearchRequests": 0,
     "costUSD": 0.06872800000000001,
     "contextWindow": 1000000,
     "maxOutputTokens": 64000,
     "canonicalModel": "claude-opus-5",
     "provider": "firstParty"
    }
   },
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 2,
   "cell": "ladder_9000",
   "status": "ok",
   "payload_bytes": 9000,
   "persisted": false,
   "persisted_file_bytes": [],
   "persisted_size_matches_payload": null,
   "opus_cache_creation": 15077,
   "delta_vs_floor": 9016,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 2,
   "cell": "ladder_10000",
   "status": "ok",
   "payload_bytes": 10000,
   "persisted": false,
   "persisted_file_bytes": [],
   "persisted_size_matches_payload": null,
   "opus_cache_creation": 16077,
   "delta_vs_floor": 10016,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 2,
   "cell": "ladder_10050",
   "status": "ok",
   "payload_bytes": 10050,
   "persisted": true,
   "persisted_file_bytes": [
    10050
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8234,
   "delta_vs_floor": 2173,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 2,
   "cell": "ladder_10100",
   "status": "ok",
   "payload_bytes": 10100,
   "persisted": true,
   "persisted_file_bytes": [
    10100
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8242,
   "delta_vs_floor": 2181,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 2,
   "cell": "ladder_11000",
   "status": "ok",
   "payload_bytes": 11000,
   "persisted": true,
   "persisted_file_bytes": [
    11000
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8237,
   "delta_vs_floor": 2176,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 2,
   "cell": "ladder_20000",
   "status": "ok",
   "payload_bytes": 20000,
   "persisted": true,
   "persisted_file_bytes": [
    20000
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8234,
   "delta_vs_floor": 2173,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 2,
   "cell": "probe_9000",
   "status": "ok",
   "payload_bytes": 9045,
   "persisted": false,
   "codeword_returned": true,
   "tools_used": [],
   "probe_valid": true,
   "reply": "HALCYONFIG",
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 2,
   "cell": "probe_20000",
   "status": "ok",
   "payload_bytes": 20046,
   "persisted": true,
   "codeword_returned": true,
   "tools_used": [
    "ToolSearch",
    "ToolSearch",
    "ToolSearch",
    "Monitor",
    "TaskOutput"
   ],
   "probe_valid": false,
   "reply": "MERIDIANFIG",
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 2,
   "cell": "superpowers_payload",
   "status": "ok",
   "payload_bytes": 3334,
   "persisted": false,
   "opus_cache_creation": 7332,
   "delta_vs_floor": 1271,
   "models_seen": [
    "claude-opus-5[1m]"
   ],
   "all_model_usage": {
    "claude-opus-5[1m]": {
     "inputTokens": 2,
     "outputTokens": 4,
     "cacheReadInputTokens": 16016,
     "cacheCreationInputTokens": 7332,
     "webSearchRequests": 0,
     "costUSD": 0.081438,
     "contextWindow": 1000000,
     "maxOutputTokens": 64000,
     "canonicalModel": "claude-opus-5",
     "provider": "firstParty"
    }
   },
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 3,
   "cell": "floor",
   "status": "ok",
   "opus_cache_creation": 6061,
   "models_seen": [
    "claude-opus-5[1m]"
   ],
   "all_model_usage": {
    "claude-opus-5[1m]": {
     "inputTokens": 2,
     "outputTokens": 4,
     "cacheReadInputTokens": 16016,
     "cacheCreationInputTokens": 6061,
     "webSearchRequests": 0,
     "costUSD": 0.06872800000000001,
     "contextWindow": 1000000,
     "maxOutputTokens": 64000,
     "canonicalModel": "claude-opus-5",
     "provider": "firstParty"
    }
   },
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 3,
   "cell": "ladder_9000",
   "status": "ok",
   "payload_bytes": 9000,
   "persisted": false,
   "persisted_file_bytes": [],
   "persisted_size_matches_payload": null,
   "opus_cache_creation": 14879,
   "delta_vs_floor": 8818,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 3,
   "cell": "ladder_10000",
   "status": "ok",
   "payload_bytes": 10000,
   "persisted": false,
   "persisted_file_bytes": [],
   "persisted_size_matches_payload": null,
   "opus_cache_creation": 16077,
   "delta_vs_floor": 10016,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 3,
   "cell": "ladder_10050",
   "status": "ok",
   "payload_bytes": 10050,
   "persisted": true,
   "persisted_file_bytes": [
    10050
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8242,
   "delta_vs_floor": 2181,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 3,
   "cell": "ladder_10100",
   "status": "ok",
   "payload_bytes": 10100,
   "persisted": true,
   "persisted_file_bytes": [
    10100
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8233,
   "delta_vs_floor": 2172,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 3,
   "cell": "ladder_11000",
   "status": "ok",
   "payload_bytes": 11000,
   "persisted": true,
   "persisted_file_bytes": [
    11000
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8230,
   "delta_vs_floor": 2169,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 3,
   "cell": "ladder_20000",
   "status": "ok",
   "payload_bytes": 20000,
   "persisted": true,
   "persisted_file_bytes": [
    20000
   ],
   "persisted_size_matches_payload": true,
   "opus_cache_creation": 8038,
   "delta_vs_floor": 1977,
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 3,
   "cell": "probe_9000",
   "status": "ok",
   "payload_bytes": 9045,
   "persisted": false,
   "codeword_returned": true,
   "tools_used": [],
   "probe_valid": true,
   "reply": "HALCYONFIG",
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 3,
   "cell": "probe_20000",
   "status": "ok",
   "payload_bytes": 20046,
   "persisted": true,
   "codeword_returned": true,
   "tools_used": [
    "ToolSearch",
    "ToolSearch",
    "Monitor",
    "TaskOutput"
   ],
   "probe_valid": false,
   "reply": "MERIDIANFIG",
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  },
  {
   "round": 3,
   "cell": "superpowers_payload",
   "status": "ok",
   "payload_bytes": 3334,
   "persisted": false,
   "opus_cache_creation": 7332,
   "delta_vs_floor": 1271,
   "models_seen": [
    "claude-opus-5[1m]"
   ],
   "all_model_usage": {
    "claude-opus-5[1m]": {
     "inputTokens": 2,
     "outputTokens": 4,
     "cacheReadInputTokens": 16016,
     "cacheCreationInputTokens": 7332,
     "webSearchRequests": 0,
     "costUSD": 0.081438,
     "contextWindow": 1000000,
     "maxOutputTokens": 64000,
     "canonicalModel": "claude-opus-5",
     "provider": "firstParty"
    }
   },
   "claude_code_version_at_runtime": "2.1.238 (Claude Code)"
  }
 ],
 "vendor_doc": {
  "url": "https://code.claude.com/docs/en/hooks.md",
  "line_892": "Hook output strings, including `additionalContext`, `systemMessage`, and plain stdout, are capped at 10,000 characters. Output that exceeds this limit is saved to a file and replaced with a preview and file path.",
  "line_971": "If a value exceeds 10,000 characters, Claude Code writes the full text to a file in the session directory and passes Claude the file path with a short preview instead.",
  "reading": "The cap and the file-plus-preview mechanism are DOCUMENTED. This corpus confirms the boundary empirically and measures the cost, which is not documented. An earlier version of this corpus asserted the limit was in no vendor doc; that was false and the doc had not been read."
 },
 "superseded_claims": {
  "what_was_retired": {
   "known_limits.boundary_is_exact_and_the_unit_is_characters": "10,000 characters inlined, 10,001 persisted, and a multibyte check shows the cap counts characters not bytes. The vendor doc states the same number and says the cap applies to hook output strings including additionalContext, so the question of which quantity is capped is answered there rather than open.",
   "results.unit_is_characters_not_bytes": {
    "exact_boundary": {
     "inlined": "10,000 characters",
     "persisted": "10,001 characters"
    },
    "multibyte_check": "9,000 CJK characters, which is 27,000 bytes, was NOT persisted, so the cap counts characters. The main ladder uses single-byte ASCII and therefore cannot distinguish the two on its own.",
    "note": "An earlier version of this corpus expressed the threshold in bytes throughout."
   }
  },
  "why": "This trial concluded the 10,000 cap counts CHARACTERS. A later trial on the same release refuted that with a discriminating pair and is published at /hook-unit-2-1-238.json.",
  "what_replaces_it": {
   "rule": "the cap counts UTF-16 code units, i.e. JavaScript String.length",
   "boundary": {
    "largest_delivered_units": 10000,
    "smallest_filed_units": 10001,
    "arms_overlap": false
   },
   "corpus": "/hook-unit-2-1-238.json"
  },
  "does_this_change_any_figure_below": "No. The ladder payload is a repeated ASCII character, so bytes, characters and UTF-16 code units are the same number for every cell in it. That is why this ladder could not distinguish the three, and why the cost figures do not depend on which is correct."
 }
}