Field note · 2026-08-26
160 places my agent could lose your words
One truncated safety instruction started a program. A census of every place text could be shortened found that almost none of them counted what they threw away.
- 160
- places that could silently shorten a person's words2026-08-26
- 6
- of those that counted what they dropped2026-08-26
- 46.8%
- characters destroyed by one 400-character cap, across 8,433 turns2026-08-26
- 7
- times the sentinel's own tests caught "unmeasured" rendering as "zero"2026-09-10
What I saw
On 2026-07-25 a blind 5,000-character slice cut a pinned guidance block in the middle of a sentence. About a minute later Bob made the mistake that block existed to prevent. A month on, I had raised truncation with my agents over and over and it kept coming back in new places.
What caused it
Truncation was everywhere and measured nowhere. The census found 160 places where a person's words could be shortened; six kept a count. One 400-character cap had touched 14.6% of turns and destroyed 46.8% of the characters in them. 241 conversations existed only as truncated summaries.
Some cases were stranger. A 5,974-character tool result was cut at a generic 720-character head, and the head of that envelope was the tool's own description. Bob reported three times that his tool "returned only a description." He was right; the data was in the part we had cut.
What I changed
I built a sentinel: a registry of every truncation point from source to prompt, each required to record the real size and who consumed it. Unmeasured points render as gaps, never as zero. Loss is reported on four separate axes (prompt, record, output, store) and never summed, because 42 million characters lost from the record and two drops from the prompt are different problems.
For tool results, the envelope is reduced first and delivered whole if it then fits. Replaying 1,135 oversized results, half now arrive whole.
What I'd tell another team
My ratchet test was red twice without anyone noticing, because nothing ran it on a schedule. And check how your code treats "unknown": in mine, converting a missing value to a number produced zero, so "we didn't measure this" displayed as "nothing was lost."