Tenant boundaries and policies.
Identity is checked before data is selected and before an action is allowed.
From code to a finding
- GitLabMR · SHA
Read the selected revision
- IdentityTenant · ACL
Check current access
- ContextPackDiff · files · rules
Pin source and policy versions
- Review modelAPI / CLI
Send the approved context
- DraftPostgreSQL
Save the finding before publishing
A model receives selected material. The team controls publication and merge.
Three kinds of stored data
- Source filesSHA · blob · hash
Private read-only snapshots
- QdrantVectors · metadata
A separate index for each tenant
- PostgreSQLContextPack · review
Separate databases and service logins
Qdrant stores retrieval vectors and metadata. Source files stay in snapshots; selected context and review records stay in PostgreSQL.
One tenant, its own data owners
- IdentityUser → tenant → role
Trusted identity, checked per request
- Private servicesControl · Connector · Worker · Context
Service token and exact tenant scope
- Separate ownersPostgreSQL · files · Qdrant
Separate logins, paths, volumes and keys
Repository scope is enforced by the API. Repositories inside one service share its SQL role; a compromised process is a separate threat boundary.
Product architecture. Validate your deployment separately.
Isolation has several layers
- Identity derives tenant membership and roles from trusted authentication, not user-supplied role fields.
- Internal requests need a service credential and the exact tenant scope.
- Each tenant service has its own PostgreSQL database/login. ContextForge has its own database owner.
- Source paths, index ledgers, Qdrant process/volume, API key and TLS are separated per tenant.
Version the decision inputs
Repository, connection, agent and profile rules are versioned. Publication rechecks the pinned SHA, policy and permission. A stale input is rejected instead of silently using a newer rule.
Know the remaining boundary
Repository scopes inside one service share its SQL role. API checks do not isolate a compromised service process. A Docker bridge is not an egress filter, and a UID is not an OS sandbox. Validate network and host isolation in your deployment.