"The phone can carry a question anywhere. It cannot author the answer. Those are two different authorities, and the client only holds one."
Who Is Allowed to Speak as Pippa
An answer isn't just text on a screen — it's Pippa saying something. And there is exactly one place with the authority to make Pippa say something: a successful canonical call to the backend, where her real identity, memory, judgment, and model routing live. The phone has no such authority. It can capture a question, display an answer that came back, and store it — but it can never author one. "Materialize" is the precise word: a real answer only comes into existence when the canonical call succeeds, and never a moment before.
Two Tempting Impostors
Two shortcuts constantly offer to speak for Pippa, and both must be refused:
- A local model on the phone. Even a genuinely good on-device model is not Pippa — it lacks her memory, her routing, her context. An answer from it would be a different entity wearing her name. Convenient, and a lie about who spoke.
- Cache-as-answer. Showing a previous answer to a similar question as if it were the reply to this one. It looks instant and helpful; it silently answers a question the user didn't ask.
Both are appealing precisely because they remove the wait. But the wait is honest and the shortcut is not. A client you can trust holds the line: no canonical success, no answer — full stop.
The Materialization Gate
Make the rule structural, not a matter of discipline. There should be exactly one code path that can write an answer onto a turn, and it should be reachable only from a verified successful canonical response. If it's physically impossible for any other path — cache, local model, optimistic placeholder — to set answer, then the honesty guarantee holds even when a future contributor forgets the rule. The gate isn't a comment saying "don't fake answers"; it's an architecture where faking one has nowhere to write.