A context layer over chat, tickets, wiki, CRM, mailboxes and meeting notes has to answer as the person asking. The usual build gets this wrong in a way that passes every demo: one service account reads everything, an index is built from it, and a filter at query time trims the result. The filter runs after the read. It leaks in 3 places.
- Counts. "How many pages in the sales space mention Acme" answered with a number, for a caller who cannot open the sales space.
- Titles. A trimmed result that still shows the title of a meeting the caller was not in.
- Provenance chains. A fact shared with the caller whose chain links to a write-up the caller cannot open, so the chain becomes a directory of things they are not allowed to see.
- Every read runs delegated, with the caller's own token. The layer holds no permissions of its own, the sources enforce theirs, which they already do well.