org.tech / Gateway / Access and the data boundary Glass box. Two halves · one page

Half of this page is who may reach what. The other half is where the bytes actually go.

A caller can only ever narrow their own reach.

Every tool call passes a gate on the server, then a scope check whose arguments can subtract from what the caller may see and can never add to it. And everything the gateway builds stays at rest in a cloud account you own, while what a tool returns travels to your assistant's vendor. Both halves are true at once, and they are always said together.

Three dimensions, all allow-lists.

ACCESS · THREE ALLOW-LISTS

Policy is not one list of permissions. It is three independent allow-lists, and a call has to clear all three. They are enforced on the server, inside each tool, on every invocation. The tool menu your assistant displays is a usability feature and deliberately fails open; it is not the boundary, and we do not describe it as one.

Enforced in the server, per call
Enforced after retrieval, in code
Not a control: the displayed menu
01

Which tools a role may call.

An operations lead reaching the readiness and analysis families; a junior analyst reaching search and document reading only; nobody reaching a tool their role does not name. A call to an ungranted tool stops at the gate, before anything is read.

Tool gateServer-side
02

Which records it may read.

Groups, records or subfolders. This is the dimension that lets one team see its own matters and not another team's, and it is the one an adversarial probe is aimed at first.

Record scopeIntersected, never widened
03

Which classes of data it may see.

A classification over the content itself, so that a role with access to a record still does not see the class of material it has no business seeing. Classification is derived partly from your folder conventions, which is why the taxonomy is a prerequisite rather than a nicety.

Data classYour conventions

Deny is the default, and there is no default role.

RESOLUTION · OVERRIDE, UNION, DENY
Resolved per person · per call

The order matters more than the lists.

A person's effective policy is resolved in a fixed order every time, from their verified identity rather than from anything the assistant sends. An unrecognized person does not get a limited view. They get nothing.

  • 01
    Per-person override first. An explicit grant or denial attached to one individual wins over everything else, which is how an exception is made without inventing a role for one person.
  • 02
    Then the union of their roles. Someone holding two roles reaches what either role allows, in each dimension separately.
  • 03
    Then deny. No default role exists. Nothing is granted because it was not thought about.
  • 04
    Narrow, never widen. Arguments supplied by the caller intersect with the resolved scope. Asking for a record outside it does not fail loudly and then succeed quietly; the scope simply stays where policy put it, and a denied scope short-circuits before any retrieval runs.
  • 05
    A wildcard wins its own dimension only. A role holding everything in one dimension is still bound by the other two. It is worth knowing before you read a policy file, because the wildcard looks wider on the page than it is in effect.
policy · scope resolution
PER CALL
resolve caller="analyst@your-firm" tool="search.find"
[identity] verified from token · issuer, signature, expiry checked
Per-person overridenone
Rolesanalyst, operations-read
Tool gate✓ search family granted
Record scope✓ 24 records
Data classes✓ 3 of 5
search.find(query: "...", records: "ALL")
Requested widening✕ intersected back to 24
analysis.roll_up(scope: "firm-wide")
Tool gate✕ not granted to these roles
[short-circuit] no retrieval ran for the denied call
newly attached library stays invisible until a policy names it
Illustrative output2 denials
Resolved server-side, per call·the index filter is never omitted, even for a role holding everything
What one probe showed, and what it did not

In the one real build, an adversarial cross-scope probe returned zero forbidden rows. That is a real result, and it is one test on one deployment where every live user holds a full grant. It is evidence that the control works, not a record of restricted users exercising it in production. The rest of that accounting is on what the gateway does not claim.

Said before you ask

This is an independent operational policy. Not a mirror of your source permissions.

Enterprise search products often carry native permission fidelity from the source system. That is a genuine strength of theirs.

  • 01
    What that means in practice. If a person loses access to a folder in your document library, the gateway does not learn it from the library. It learns it when your policy changes, which is an operator task today.
  • 02
    Why we built it this way. The policy has to govern tools, computed figures and workflow gates, not just documents, and no source system expresses those. The cost of that choice is the sentence above.

Where each thing actually sits.

DATA BOUNDARY · LINE BY LINE

We make no residency claim for this product, anywhere, in any wording. What we can do is tell you precisely which things live in the account you own, which things cross to your assistant's vendor on every tool call, and whose agreement governs each leg. Read the third column as carefully as the first two: most of this boundary is made of contracts you already hold.

The thingAt rest, in the account you ownTravels to your assistant's vendorWhose agreement governs it
The mirrored documentsYes, in your storageOnly the passage or page range a tool returnsYours, with your cloud provider
The vector indexYesNever. Vectors are not returnedYours, with your cloud provider
Confirmed facts and canonical tablesYesThe values a tool returns, with their citationsYours, with your cloud provider
Generated artifacts, such as a workbookYes, written in your accountLinks, and whatever the assistant is shownYours, with your cloud provider
The read-only source credentialIn a secret store, nowhere elseNeverYours, with your document platform
What a tool returns: passage, figure, scaffoldProduced thereYes, on every call. This is the tradeYours, with your assistant's vendor
The arguments the assistant sendsReceived and checked thereComposed there, by the assistantYours, with your assistant's vendor
The conversation and the assistant's proseNever in your accountLives there. We never see itYours, with your assistant's vendor
Anything at all, on our infrastructureNot applicableNoContractually forbidden. We host none of it

Judgment, not measurement, in one place: "only the passage a tool returns" depends on what your people ask for. A person who asks the assistant to read a whole document will send that whole document's text to their assistant. The control is the scope, not the size.

The sentence we will put in writing before you sign

Everything at rest stays in your account, and what a tool returns travels to your assistant's vendor under your existing agreement with them. The two clauses are said in the same breath, every time. Compare with the platform, where no third-party assistant vendor is in the path at all: platform or gateway.

Read, propose, write, publish.

SAFETY MODEL · FOUR CLASSES

Every tool belongs to exactly one of four classes, and the classes are not interchangeable. This separation is the safety model, so it is worth a diagram rather than a paragraph.

org{•}tech / gateway / write-classesProduct-managed state only
Inside the account you own Four classes, in order
ReadObserves. Changes nothing
ProposeProduces candidates, explicitly not authoritative
WriteProduct-managed state only, each write attributed
PublishIts own class, its own approval, reconciliation first
Your document libraries
Source of recordRead-only grant, one library at a time
Write backNo such path. Not a setting, not a toggle
A derived write touches a confirmed fact, a canonical table, a generated artifact or a workflow stage. It never touches your library. If write-back to a source system is ever built, it will be a separate, high-risk tier with its own approval, not a flag on this one.
01

Confirmation is explicit.

A person confirms a fact under their own sign-in, and the decision is stored with who and when.

02

Stages refuse.

A workflow stage will not advance while its entry criteria are unmet. Forcing one requires a written reason, stored and shown from then on.

03

Publication reconciles.

A workbook writes nothing when reconciliation fails, and there is no override for anybody.

04

Absence is emitted.

What is missing comes back as a named gap with the action that closes it and the owner it belongs to, rather than as a silence a reader has to notice.

What is recorded, and what is not.

AUDIT · THE EXACT POSITION

Exactly, because this is the easiest place on the site to write a sentence that is not quite true: writes are attributed, with who and when. Reads and tool calls are not individually recorded today. A firewall log, a role-assignment log and a cloud administrative trail all exist, but there is no per-invocation decision receipt, and because calls arrive from your assistant vendor's servers, a source address identifies the vendor rather than the person.

01 Recorded

Every write, attributed.

  • A confirmed fact, with the person and the time
  • A forced workflow stage, with the written reason
  • A generated artifact, with what it was built from
  • Infrastructure and role changes, in the account's administrative trail
Who and whenProduct state
02 Not recorded

Which documents the assistant read.

  • No per-call receipt of a tool invocation
  • No per-person record of which passages were returned
  • So never, from us: "a full audit trail of what the AI accessed"
The gapNamed, not softened
01Will there be a per-call audit record?

Today the answer is the one in the section above: writes are attributed, reads and tool calls are not. We publish no roadmap for this product, because a dated promise on a marketing page is made by somebody who will not be in the room when it slips. If per-invocation receipts are a condition of your sign-off, say so in the assessment and we will scope it as work rather than imply it as a feature.

02How do we remove someone's access?

Through your identity provider, as you would for anything else: remove them from the corporate directory and sign-in stops. Policy changes themselves are an operator task today. There is no client-facing administration screen for the gateway, so an access change is a request to us rather than a screen you drive.

03What about prompt injection, in a document?

What the server enforces is structural: scope is intersected server-side, so no instruction sitting inside a retrieved document can grant a tool the caller's role does not hold, and a denied scope never reaches retrieval. That is the server's guarantee, and it is the only one we make: the assistant side is not ours to harden, and we claim nothing about it.

04Can we see the policy ourselves?

Yes. Policy is a set of explicit allow-lists, and we walk through the resolved effect for each named role during the connect workshop rather than handing over a file and hoping. A policy change is a release we make, so what is in force is visible in the version you are running. That is the same posture as everything else we build: glass box, not black box.

⎯⎯ Book the strategic assessment ⎯⎯

Your files, inside your control ·

Bring your security owner. The data-boundary conversation is the first one we have, and it is the one that decides which product you should be buying.