Many Ways In, One Way Out
Oriel has many ways to look: looks, replays, crops, frames, the play stream, the watchers. It has exactly one way for anything to leave: a class called Exports. It is the only code that writes into Oriel's exports folder, and a test holds that: it scans every backend module and fails if any file other than the marks module (and the settings that define the path) mentions the exports location. Today the door exports a single frame, through the export_frame action or Dad's page. Every later outward path (an edit timeline, a clip, a thumbnail, a handoff to the family's video workshop) is required to call the same door's check_range first.
One door is not a tidiness preference. It is what makes the next sentence true: if the door refuses, nothing leaves. With two doors, that sentence needs "and the other one checks the same things", forever.
What the Door Checks
Exports.check_range(input, t0, t1) refuses in three cases, and the order of the first two is the design:
- Nothing was recorded there. Refused; there is nothing to export.
- Any segment in the range has not been checked for people yet. Refused: "nothing leaves before they are". This is the fail-closed choice. The background pass checks segments some time after they are recorded; a range that has not been reached yet is not "clear", it is unknown, and unknown does not leave.
- Any segment in the range is marked and Dad has not cleared it. Refused, with the reason and the times of the marked stretches, and the rule: it leaves Oriel only when Dad clears it.
And before any of that, an export passes the eyes gate, like any read. A frame Pippa may not look at right now is a frame she may not export right now either.
Clearing Is Dad's
A mark is lifted in only two ways: Dad's "Clear for use" on Oriel's page (with his PIN session), or the clear_mark action carrying his own words, which, like open_eyes, refuses outright without publish and his instruction. Pippa cannot clear a mark on her own judgment that the person in it would not mind. The clearing is recorded with the words that cleared it.
The Same Answer for Pictures Already Seen
There is one more outward-looking question, and it is subtle. cwkPippa keeps every picture a look returns, so Dad can see what Pippa saw. That kept picture is inside the family's own app, not an export, but it is a copy, and the family wants to know whether it shows someone. So cwkPippa asks Oriel, by the look's id, about the person marks over exactly the frames that look showed. Each input gets one of five answers: marked, cleared, clear, not_watched, or not_checked.
The last one carries the whole philosophy. A live look or a one-shot peek shows a frame that no indexed segment holds yet, because the background pass reads a segment only after it is recorded. The answer is not_checked, with that reason, and it is never read as clear. A cached frame with no capture timestamp gets the same answer: checking the segments at the time of a later request could clear a different picture. Unknown is never clear.