Only assistant records carry usage, but the parser ran JSON.parse on every line
first and checked the type after. Claude transcripts interleave user and
tool-result lines that routinely embed whole files or captured command output,
so the scanner built and discarded a full object graph for each of them.
A substring gate on the line rejects them first: median 50.5ms to 8.4ms over
20000 realistic lines.