Search documentation

Documentation sections

## Get started

[Start here](/docs)[Source and release](/docs/source)[Local quickstart](/docs/local)

## Run

[GitLab deployment](/docs/installation)[First review](/docs/review)

## Understand

[Architecture](/docs/architecture)[Storage and index](/docs/data)[Tenants and policies](/docs/access)[Integrations](/docs/integrations)

## Operate

[Operations](/docs/operations)[Acceptance](/docs/acceptance)

# 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

- 

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

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.

[PreviousStorage and index](/docs/data)[NextIntegrations](/docs/integrations)

## On this page

[Isolation has several layers](#tenant)[Version the decision inputs](#policy)[Know the remaining boundary](#limits)[Markdown ↗](/docs/access.md)
