Scanner isolation
Split container, split secret, authenticated callback. A scanner with remote code execution reaches the repository it was given and nothing else. The adapter refuses to start if a storage credential appears in its environment.
Tenant isolation
Every session binds app.current_org_id; single-resource reads filter on the organisation in SQL; a CI gate rejects handlers that trust a caller-supplied organisation. Platform-admin routes use a separate, never-tenant-bound session.
Governance writes
Finding status and disposition are governance fields: an ORM guard and a database trigger refuse writes without a bound human principal. AI has no principal.
Input validation
Every POST and PUT body is a strict model — unknown fields rejected, lengths capped. Path-like inputs from SARIF, Burp and Nmap imports are sanitised before use.
Cryptography
RS256 sessions, Fernet-encrypted stored credentials, Ed25519-signed control decisions, HMAC-chained audit log, HMAC-signed scanner and ticketing callbacks with replay nonces, Cosign-signed images, TLS at the edge and internal mTLS from a platform PKI.
Frontend
Strict content-security policy; Markdown rendering with HTML skipped and URL allow-lists; SSO redirects validated against an origin allow-list; rel="noopener noreferrer" enforced by a lint gate.
AI
Local-model triage and natural-language filters are advisory, one-shot and audited. Model output is validated against a strict schema and rejected on any failure; the model is never re-prompted.