"Turning off what a session can do is not the same as turning down how sure you are who it is."
The Launcher Credential Is Scoped Down, Not Trusted Less
After the family PIN is approved, the Native Launcher receives a device-scoped, read-only catalog credential. It can read the launch catalog and it can write exactly one thing: its own device-local recents and favorite flags. It cannot call any mutation endpoint, and its writes never touch repositories, services, or another principal's preferences. This is capability reduction done cleanly — the launcher is fully authenticated (it went through the PIN), it's just scoped to a tiny, harmless surface. Strong identity, small power.
A Read-Only Lock Is Orthogonal to Auth
The same idea gives travel a safe browsing mode. A revocable Web read-only lock disables all mutations for a session — useful when you just want to look around from a hotel, or hand someone a sightseeing view — without weakening authentication at all. The lock lowers what the session can do; it doesn't lower how sure the system is about who the session is. Those are two independent dials, and conflating them is a common mistake: 'read-only' should never be implemented as 'less authenticated.' You can be fully verified and deliberately powerless at the same time.
Secrets and Static Files Stay in Their Lanes
Two hygiene rules finish the contract. First, secrets — credentials, command output that contains secrets, session tokens — never enter API responses, audit detail, logs, or the launcher cache. A secret that never travels can't leak in transit or at rest on a device. Second, static files are served only from the declared build root, and the single-page-app fallback returns the application shell, not an arbitrary filesystem candidate — so a crafted path can't walk out of the build directory and read something it shouldn't. Both are the same instinct: keep dangerous things confined to exactly where they belong.