Tenant boundaries and policies.

Identity is checked before data is selected and before an action is allowed.

What happens to your code

From code to a finding

  1. GitLabMR · SHA

    Read the selected revision

  2. IdentityTenant · ACL

    Check current access

  3. ContextPackDiff · files · rules

    Pin source and policy versions

  4. Review modelAPI / CLI

    Send the approved context

  5. DraftPostgreSQL

    Save the finding before publishing

A model receives selected material. The team controls publication and merge.

Three kinds of stored data

  1. Source filesSHA · blob · hash

    Private read-only snapshots

  2. QdrantVectors · metadata

    A separate index for each tenant

  3. 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

  1. IdentityUser → tenant → role

    Trusted identity, checked per request

  2. Private servicesControl · Connector · Worker · Context

    Service token and exact tenant scope

  3. 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

SHAACLPolicy revisionAllowed action

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.