Six lanes, one system.
Where systems meet,
we test hardest.
Every past failure lived between components, not inside them. So the checks that gate this architecture run against the live, composed stack — boxes agreeing on tenant and bucket, walls holding in both directions, queues surviving restarts.
Isolation is enforced, not promised
One bucket per workspace; the department wall re-checked on every read surface; adversarial tests try to cross the wall and must fail.
Every model call passes one gate
A single counting client meters all model usage with a declared purpose — classification, summaries, extraction, answers, compiles — into the usage ledger.
Failures don't cascade
A workflow firing never fails the upload that triggered it; a webhook retry never blocks ingest; a dead worker is reclaimed by lease, not by luck.
Small, typed, deliberate.
For your apps
A versioned REST API: upload slots, retrieval, shares, sync deltas. Desktop JWTs with rotating refresh tokens; the console uses signed sessions.
For your AI tools
An MCP server over streamable HTTP with read + ingest tools only. Personal access tokens, hashed at rest, capped per user — tenant identity comes from the token, never the request.
For your systems
Timestamped HMAC webhooks with bounded retries and a delivery log — private-network targets refused by default, with explicit opt-in.
Trust, but verify.
The trust model explains what the architecture enforces — and what humans always decide.