Moving Only When Spoken To
The first broadcast where Pippa played on her own exposed a shape problem. She moved only inside her answers to Dad. He would say something, her turn would run, she would look and press a few buttons, answer, and then stand still until he spoke again. Dad's verdict afterwards was that she should have played on to the end, dying or not, without stopping, even when he gave her no turn.
The fix is a loop, backend/play_loop.py, and its central design choice is where the seam goes. One very long turn was ruled out at once: every look would pile into one context, and Dad's own turn would queue behind it. Instead the seam is a turn. Oriel holds the loop (one thread, no brain while it waits); cwkPippa holds the turn (her vault, her tools, the room's record, the phone's voice). While a play session is open, the loop setting is on and On Air is on, Oriel starts one play turn the moment the last one ends. In a turn she looks at the stream, decides, acts for about a set number of seconds, then closes with one short line for Dad's earphones, or stays quiet.
Dad's Turn Comes First, and Never Stops Her Hands
No play turn starts while a turn is running in the room or one of Dad's is waiting; cwkPippa refuses it too. Every look during a loop turn carries a small loop line: which turn this is, how many seconds of its target have run, what Dad said, and what comes next. When his turn is waiting, the line tells her to end this turn now, so she can answer him in his own turn, where she can keep playing. And, as in the previous lesson, nothing he says closes the session.
His Words Are Never Cut and Never Lost
The loop's most instructive repair came from editing a Solo broadcast. Dad found that his coaching had sometimes got no reaction at all, and he had ended up saying things twice. His ruling: being late is acceptable; being cut, or never answered, is not. The investigation found three faults stacked on top of each other: a line rode one look and was gone from the next; it was cut three times on its way (120 characters a line, 200 for all of them, then a trim to 20); and a line he said while a turn was closing reached no look at all.
The rebuilt path (Coop 1111-3) has four rules:
- Kept from the read that shows it. Every read of the room hands his lines to the session's own record, known by when each was heard and what it says, so nothing depends on a later look happening to see it.
- Whole on the look.
dad_saidis a list of whole lines, oldest first, each with how long ago he said it. No trim may touch it; other parts of the look (her notebook's newest line, the map) give way instead. One look holds up to 1,300 characters of his words. When more wait than fit, the rest ride the next looks, whole, and the look says how many are waiting. A line too long for the room a look has left rides in parts, in order, each part saying where it starts, never as a prefix alone. - In Solo, it waits for her answer. A line rides every look until it is answered, and "answered" is defined by evidence the loop has, not by a model judging her words: a turn that carried the line on one of its looks ended with a spoken closing line. A quiet, failed or superseded turn answers nothing.
- His words never stop her hands. Nothing in this path ends, pauses or shortens a turn. Lateness is bounded by the turn's own length.
Every Gap Is Measured
A loop that "keeps playing" is a claim, so Oriel measures it. Every input's time, every turn and every wait or yield goes into the play session's loop file. When a session closes, its report gives inputs per minute, the longest gap between inputs, and every stall over ten seconds with the spans that covered it, and the page shows it on the play strip. The lines of Dad's words are measured the same way: when each was heard, which look first carried it and how late, which turn answered it and how long it waited. When someone says "she ignored me", there is a file that says whether she did.