"A demo is a play with fake money. The one unforgivable bug is letting the fake money touch the real books."
What Demo mode is for
Keep has a Demo mode — a fixed synthetic projection you can show off or explore without touching the family's real data. Fake portfolio, fake numbers, safe to poke at. The entire value of a demo is that it's not real, which means the single most important property is isolation: synthetic demo state must never cross into canonical family mutations or into Pippa's context. If a demo number can leak into the real books, or into what Pippa believes about the actual portfolio, the demo has become a liability instead of a safe sandbox.
How the gate works
Keep enforces isolation by pausing every mutating and context-bearing surface while Demo is on. Specifically, Demo pauses the Sidekick, Manage (holdings/cash edits), Simulation, refresh/export, and observation writes. Notice what that list is: it's every path by which synthetic state could either become a durable canonical mutation or enter Pippa's reasoning. By gating all of them behind Demo-off, Keep guarantees that flipping into Demo can't accidentally write fake data to the real database, and can't feed Pippa a fake portfolio it might reason about as real.
The rule that keeps it correct over time: join the gate
Here's the invariant that matters for the future: any new mutating surface must join the Demo gate. The danger isn't today's code — it's the feature someone adds next year. If a new write path or a new context feed is built and forgets to check the Demo gate, it punches a hole in the isolation, and synthetic state starts leaking through the one door nobody remembered to lock. So the rule is stated as a standing obligation on all future work, not a one-time setup: if you add a surface that mutates or feeds context, it joins the gate, no exceptions.