# Security — ``` Status: Current Owner: Last reviewed: Governs: authentication, secret handling, data at rest and in transit Review trigger: Any new secret, any new external service, any change to auth or storage ``` ## What this protects, and from whom | Asset | Where it lives | What would it cost to lose | | --- | --- | --- | | <> | <> | <> | ## Secrets - **Nothing secret is committed.** Not in source, not in config, not in a test fixture, not in a screenshot. - Secrets arrive from the environment or a secret store, and are read at the boundary rather than passed around. - A key stored beside the data it protects protects nothing. If data is encrypted at rest, say here where the key lives and how it is rotated. **Check before every release:** no private keys, keystores, `.env` files, service-account JSON, or real credentials in the tracked tree — including in the history, which a `git log -p` search covers and a directory listing does not. ## Authentication and authorisation ## Data in transit ## Third parties | Service | What it receives | Why that is acceptable | | --- | --- | --- | | <> | <> | <> | Every row is a decision to send someone else's data somewhere. An empty table is a good table. ## Deliberately out of scope ## Logging Logs are read by people and shipped to places. Nothing sensitive goes into one — not a token, not a credential in a URL, not the contents of a user's record. An error's *name* is almost always enough; its message, from a failed HTTP request, is often the request URL.