The Order Matters
Two of Oriel's cameras are on motorized gimbals. When Pippa looks around, she may turn one toward something. Then the look ends and the gate closes. Which happens first: the camera turns back to rest, or the gate closes? It sounds like a detail. It is the difference between a camera that ends every session looking at the floor and one that sits there pointed at the room, with its lens open, until someone notices.
The first version closed the gate and then tried to park. But once the gate is closed, nothing may move the camera, including a park. Dad saw the consequence and stated the order in one sentence on 2026-11-03: "카메라를 다 조작을 한 다음에 게이트를 닫아야 되는데", finish operating every camera, then close the gate. Since then every close (Dad's, an expiry, the end of a session) runs one at a time and in his order.
The Close Order
- Refuse new work. The closing inputs enter a "closing" state at once: every new look, move and read on them is refused with "being parked away from the room before the gate closes".
- Stop what is no longer covered. A recording that only the closing approval was covering stops. A recording the eyes mode still covers keeps going.
- Park while the approval is still open. Each connected look-around camera that is not known to be at rest turns to its rest pose: its saved
restbookmark if it has one, otherwise its own front with its head all the way down. One camera after another, each tried once more if it does not check out. - Only then close the approvals.
"Not known to be at rest" is a precise set: a camera opened through the gate, moved, or whose last park failed, since its last checked park. A camera already head-down and closed is left alone, a rule Dad added the next day ("어떤 카메라든 고개 숙이고 닫혀 있으면 된 거야", any camera that is head-down and closed is fine). It matters more than it looks: opening one webcam's stream just to park it again lifts its head as the stream starts.
A Park Is Checked, Not Assumed
A gimbal has a read-back: you can ask it what pose it is in. Oriel does not trust it alone, for a measured reason. On the pocket camera, a pan sent while no video stream was open read back as set, and the next frame showed the camera had not moved at all. The gimbal only answers while the camera streams. So a move runs inside a stream (the input's recording if one is running, else a stream opened just for the move with a short warm-up), and it is confirmed two ways:
- By the pose it reads back, within six degrees (one camera reads −85 at its −90 rest), read again if the first read lags.
- By frames. The recorder keeps a frame before the move and one after it settles. The engine lines them up on a small grey copy (bars cut first) and measures the shift: a larger pan slides the picture left, a larger tilt slides it down, both measured on the real cameras. When the move is wider than the frames' overlap, the whole picture changing counts. A move that should have happened and shows no shift fails the park.
The park's frames are deleted once measured. Nothing about the room is kept from a park, and a park returns numbers only, never a picture.
Never Say "Parked" for a Camera That Was Only Asked
The answer to close_eyes, the page's gate bar and the activity log (park_failed) name every camera that did not park. The word "parked" is never used for a camera that was only asked to park. And because a camera can still end up facing the room (a failed park, a power cut mid-move), the park is the one move allowed while the gate is closed: park_cameras and the page's "Turn cameras away" turn cameras away with the gate shut, open nothing and return no picture. Recovery must not require loosening the very gate whose failure you are recovering from.