padosoft-rag-ingestion-securitylisted
Install: claude install-skill padosoft/skills
# RAG ingestion security
Ingestion looks like a data problem and is an authorisation problem. **The contract records what a document
*is* — path, title, type, tenant — and not where its authority comes from.** There is nowhere to put the
fact that it was shared with three people, so it arrives readable by everyone with access to the corpus.
That is oversharing, and it is the headline failure of enterprise assistant rollouts. The second failure
shares its cause: nothing records **who wrote** the content either.
---
## 1. Mirror the source's permissions, or say that you did not
A connector reports **what the source said**; it never decides who may read. The distinction is the design.
```text
principals (type + external id + allow/deny)
inherits_from_parent: bool folder or space inheritance
complete: bool false = the source truncated the list
```
The host maps external principals to internal subjects — by verified address, directory link, group
mapping. That resolution depends on directory state the connector does not have, which is why it is not the
connector's job.
**And it will sometimes fail**: an external collaborator, a group the directory does not know, a truncated
list.
## 2. Unmapped access fails closed. This is the load-bearing rule
**A document whose access could not be fully mapped must not fall back to corpus-wide visibility.** That
fallback is exactly the bug this whole design exists to remove, and it is the tempting shortcut every t