Security claims, cross-linked
stratl.ai/security lists what is in place and what is not, reviewed on a date. This page is its backing: for each row, where in these docs it is explained and where in the code it is enforced. Code paths are in the backend repository unless stated.
Between the browser and the app, the app and the API, and the API and every provider. The API is served only behind the host’s TLS; the portal forwards /api server-side so the session cookie stays first-party.
deploy/, vercel.jsonServer-side encryption on every stored object, versioning on, public access blocked, in the managed bucket templates and required of customer buckets by the take-custody probe.
deploy/cloudformation/managed-custody.yamlEvery signer class checks the signature it receives from the key service against the public key before anything is written. A misconfigured key cannot produce a bad record silently.
api/app/custody/keys.pyCredentials arrive as environment variables or secret references. Production refuses to start with the default secret key. Every commit is scanned for leaked secrets in CI.
api/.env.example, .gitleaks.tomlPython, TypeScript and Go, plus the conformance check that all three hash the golden fixtures identically.
.github/workflows/ci.ymlLogs carry paths, identifiers and errors. Prompts, outputs and payloads exist only as fingerprints in the index and, if uploaded, as bytes in custody storage.
api/app/logging.pygitleaks over the history, pip-audit, pnpm audit and govulncheck on every change; a high finding fails the build. Dependabot opens upgrades weekly. A SECURITY.md in each repository says how to report a vulnerability.
.github/workflows/ci.yml, .github/dependabot.ymlEvery signature request is noted with what was signed and the provider’s request id, and sealed at each checkpoint into a signed DEC-KEY-… record in the workspace stream.
api/app/custody/keyledger.pyTake custody from the portal on AWS, Google Cloud or Azure. Stratl proves it can sign, write and not delete before anything moves; the hand-over is signed by both keys.
api/app/custody/providers.py, api/app/custody/transfer.pyPlanned. Until then, the security page and this page are the control description. Say so when asked.
Before the first enterprise contract.
Sign-in is by email and one-time code; roles are enforced on the server. Directory integration is not built.
If a row on the security page has no entry here, or an entry here disagrees with the page, that is a bug in the docs. How to fix it.