Security

How SPEC-019 protects this deployment (static overview — no live data below).

Access control

Every request to this application and to workers/api is gated by Cloudflare Access. There is no development bypass in any deployed environment — the same identity-aware proxy that authenticates a person in a browser also authenticates server-to-server calls, via a Cloudflare Access Service Token rather than a client-supplied header (which the edge strips on every hop). An unauthenticated request never reaches application code.

Signed asset access

No client ever receives a raw, long-lived storage URL. Every download or preview link is minted on demand through the asset-access-url mechanism, which scopes the signed URL to a single declared purpose (PREVIEW, DOWNLOAD, etc.) and a short time-to-live. A URL issued for one purpose cannot be silently reused for another, and every issuance passes through an authorization decision scoped to the owning Project.

Provider egress

Calls to external AI providers are restricted to an explicit allowlist of providers and endpoints. Source and transcript content sent to those providers is treated as untrusted data on the way back — provider output is structured and validated, never treated as instructions the system should follow.

No live audit viewer in this pass

Live audit trail data (data_flow_audits, security_audit_events) is recorded on the backend for every provider call and access decision, but no API endpoint exposes it for reading today — building a live audit viewer here would require adding a new backend route, which is out of scope for this frontend-only pass.