The Caps Nobody Asked For
Code written by careful engineers, human or model, fills with small limits: 200 characters a line, 500 for a reason, a max_tokens on every call, a maxLength in every schema. Each one looks like hygiene. On Oriel's play path, they turned out to be bugs waiting for a long enough sentence. A notebook line cut at 200 characters lost its last words in every turn (seven of the 55 live lines did). A course's 220-character brief lost its ending on the way to the screen. A keep_ms past its limit was shortened without a word. And a schema's maxLength on her own words told the model what to write, because a brain reads a schema's number as the rule.
Dad's words on 2026-11-11 are the rule itself: please stop putting in unnecessary limits; caps like max_tokens have only ever made latent bugs and never helped. And earlier that evening: why do you keep putting in limits like 200 characters?
The Rule
Nothing Pippa writes or reads on the play path is held to a length Oriel guessed. A bound exists only in two cases:
- A door that is not Oriel's sets it. cwkPippa's play door takes 60 notebook lines and refuses a 61st whole, its helper door takes 60,000 characters, the family app door answers 2,000 characters, the native client's buffer holds 64 steps.
- A recorded failure put it there. A look's token budget exists because a small task once replayed 395k tokens a turn, and a play turn takes a look every few seconds. The reflector writes three lessons and two strikes a run because the notebook once grew to 123 lines arguing with each other.
And whatever the bound, it never cuts in silence. What does not fit is refused with the number, left out whole and counted, named by its id, or sent in parts. A list too long for the 2,000-character door is read in pages; a single line longer than a page is read in parts and joined again, never trimmed.
What Was Removed, What Was Kept
| Removed (a guess, nothing behind it) | Kept (and what holds it) |
|---|---|
| 200 characters a notebook line | 60 lines a turn: cwkPippa's play door. Dad's lines first, the note says how many were left out and whose |
| 60 a map name, 160 a mark | a look's token share: a long name rides by its id |
| 500 characters of Dad's approving words | 600 characters of Pippa Home's entry: Home's door. Dad's words stay whole in Oriel's record |
| 300 and 600 of her spoken line | 60,000 characters a helper prompt: the oldest notes are left out and counted, never the tail cut |
maxLength on tool schemas | 64 steps, 30 s a step, 60 s in all: the native client's wire shape and dead man's grip, refused with the number |
One detail in the helper prompt shows why "never cut the tail" matters. The old cut took the end off the prompt, and the end was her notebook: the most important part was the part that silently went missing.
A Test That Keeps the Next Cap From Arriving Unnamed
Rules in prose fade. This one is a test. backend/tests/test_play_limits.py walks every play-path module, finds every upper-case constant whose name looks like a bound (MAX, LIMIT, CHARS, SHOWN, KEPT, CAP, LINES), and fails unless each one is named in a KEPT table with its door or its failure. It also fails if the table names a bound that no longer exists, so the table cannot rot. A second test fails if max_tokens appears anywhere on the play path. Other tests write lines of hundreds of characters, Korean included, and check they read back whole through every door.
The next engineer who reaches for LINE_MAX = 200 does not need to remember any of this. The suite turns red and the message tells them what to do: name the door or the failure, or remove the cap.