The Header Any Program Can Send
Many of the rules so far end with "or Dad on Oriel's page": he can open the eyes there, clear a mark, start a recording, change a setting. For nine days, "Dad on the page" meant a request carrying the browser header Sec-Fetch-Site: same-origin. Browsers set that header themselves, and a web page from another site cannot forge it, so it is a reasonable signal against cross-site requests. But it is not an identity. Any program on Pippa's home Mac can send a request with whatever headers it likes, including that one. A local script could have "been Dad".
Dad's ruling on 2026-11-10 was short: "오리엘 페이지 인증 pin으로 가" (authenticate Oriel's page with the PIN). Since then the header only says "this came from the page"; who is pressing is decided by the family's PIN session.
Signing In Is the Family's, Not Oriel's
The family already has one authority for Dad's sessions: a PIN door, with passkey unlock (Face ID or Touch ID) on top, owned by the family registry app. Oriel does not build a second one. The page asks that door from the browser itself, using the family kit's PIN client, so the authority binds the session to Dad's device. The page then hands the token to Oriel (POST /api/page/session), and Oriel keeps it in an HttpOnly, SameSite=Strict cookie, and only if the authority confirms it is this device's live session.
Oriel keeps no session logic of its own: no expiry, no revocation, no attempt count. Each check asks the authority (through a scoped door in cwkPippa, with a key Oriel already holds), and the authority applies its own blacklist and lockdown and slides the session as on any request it admits. One small cache keeps it cheap: a valid answer is reused for 30 seconds, so a burst of presses costs one ask. A refusal is never cached.
Which Device Is Asking?
A session belongs to a device, so Oriel must know which device a request came from. The engine listens on loopback only; requests from other devices arrive through Tailscale Serve, the tailnet's HTTPS front, which appends the real peer address to X-Forwarded-For. That word matters. Anything earlier in the header was written by the caller and is only a claim; the last entry is what the proxy saw. So Oriel reads the last entry. A request with no forwarded address at all came from this Mac, and the authority knows this Mac by its own tailnet address.
Refusals Say What Was Missing
A page write that fails the check gets 401 or 503 with a session field naming exactly what was missing: no_session, expired_or_unknown, blocked, deep_lockdown or authority_unavailable. Never a guess. And reads were brought behind the same check later the same day ("사진 없는 읽기도 pin 뒤로 넣어": put the picture-less reads behind the PIN too): the state, the eye, sessions, the activity log. Signed out, the page reads nothing and shows only the sign-in card.
The Stops Fail Open
On that sign-in card sit the buttons that need no session: close every eye, stop play, stop recording, park the cameras (and, on the full page, Manual and forgetting the voice grant). They are pressed "blind", and Oriel's answer is shown. With a good session, a stop is recorded as Dad's; without one, as oriel. This is the asymmetry from the first track made concrete. The check that protects loosening is never allowed to stand between Dad and a stop, because the moment he most needs a stop is not a moment to discover his session expired.