"Now" Was Twenty Seconds Ago
Here is a failure that does not look like one. Pippa asks for a look at the game "now". The recorder answers with the newest frame of that input. The picture arrives, the model describes it, Dad hears the description. Everyone is satisfied. But the input's picture had stalled twenty seconds earlier, and the newest frame the recorder held was from before the stall. Pippa described a screen that was no longer on the screen, with confidence, because nothing in the answer said otherwise.
Until Coop 1110-12 that could really happen. The recorder stamped a peek with the time of the ask, and the newest-frame JPEG carried the time its file was written. Both times were "now", and both were true about the wrong thing.
The Rule: Capture Time, Never Ask Time
The fix is a rule about which clock a frame carries, applied everywhere a frame is kept:
- The newest-frame JPEG that the recorder refreshes for each open input has its file time set to its frame's capture time, so any reader's "how old is this?" is the frame's age, not the encoder's.
- A peek's JPEG gets a small note beside it:
captured_at(when the frame was captured),written_at(when the JPEG was written) andsource(one-shotfor a device opened just for this peek,gimbal hold, orrecording). - A gimbal move's before and after frames carry their capture times the same way.
With those two times side by side, staleness stops being a guess. A one-shot peek opened the device for this request, so its frame is fresh by construction. A peek answered from a running recording is as old as written_at - captured_at, and on a stalled input that gap is large.
What a Look Says When It Is Stale
Every deck and camera look puts the frame's capture time in its at field. The play-session look is the one exception: its at is when the answer was built, and the stream frame's age rides in its read line instead. Past five seconds (the same bound as an input's stall), the answer adds a stale line that names the input, the frame's time and its age, for example: "STALE: the game card stalled; newest frame 12:00:03, 20 s ago, not the screen now." That line lives in its own field, so no trimming of the read line can ever drop it, and it takes the place of the echo of the asker's reason, which pays for its tokens and keeps the look inside its budget (the worst-case test prices both versions).
A crop is stricter. A crop exists to read fine detail on the screen as it is, so a stale live frame is refused outright, with its time, and the refusal tells the caller exactly what to do instead: crop that moment from the recording with at= set to the frame's time. The caller is not left guessing whether the text it is reading is current.
Why This Is a Privacy Lesson Too
This track is about price, but this lesson is also about trust, and trust is what the second half of the quest is built on. A system that watches a home must never present an old picture as the present one. Pippa's own decisions (about what to say, about what is happening in the room) rest on the same picture, and so do the later checks on what may leave the house, which judge recorded moments by when they were recorded, not by when somebody asked for them. A frame that knows when it was taken is the smallest unit of honesty the whole design depends on.