# The operator's workspace and a customer's

There is no operator edition and no customer edition. Every capability runs on one implementation for both, and the difference is commercial: a customer's use is bounded by their plan's allowances, while the operator has no plan and no allowance gates. Two screens are correctly operator-only, and both are about running the platform rather than using Connect.

- **Status:** Available
- **Audience:** both
- **In the app:** #/account, #/billing
- **Last verified:** 2026-09-10
- **Canonical:** https://connectbyjbrh.com/docs/account/owner-vs-tenant/

## The same product, reached by two paths

A customer's browser asks for a different set of URLs from the operator's. A small adapter in the front end rewrites each operator path into its customer equivalent, and the back end keeps an allowlist of what a customer session may call at all. Behind both, the code that answers is the same code.

|  | Operator | Customer |
|---|---|---|
| Workspace | The operator's own | One customer workspace |
| API paths | The operator surface | The customer surface, rewritten by the adapter |
| Plan | None | One, with allowances |
| Allowance gates | None | Enforced against the plan |
| Feature set | All of it | All of it |
| Implementation | Shared modules | The same shared modules |

> **Note** Anything the adapter does not recognise is rewritten to a path that refuses. The facade fails closed, so a capability that has not been given a customer route is unreachable rather than accidentally exposed — and that is why a new feature that works for the operator and returns a refusal for a customer is almost always a missing route rather than a broken feature.

## What is genuinely operator-only

**Verifying a customer's payment** — Confirming that money arrived is the operator's business, not a capability of the product a customer uses.
**JBRH's own pricing** — What Connect costs is the operator's commercial data. A workspace's own plan and usage are visible to that workspace; the pricing behind them is not.
**Enquiries sent to JBRH through the public website** — These are addressed to the operator and sit outside every workspace by design, which is why they are not a customer feature that happens to be hidden.

That is the complete list, and the shortness of it is the point. Everything else — phone, email, messaging, prospecting, relationships, knowledge, memory, autonomy, files, the data grid, the Assistant — is one implementation serving both audiences.

## How the claim is kept honest

Parity here is enumerated rather than asserted. A test reads the route table out of the running application and compares every operator capability against every customer one. Where the customer surface renames something, the rename is recorded explicitly — a customer's *people* are the operator's *relationships*, and *knowledge sources* are the *knowledge bank* — so a different name never reads as a missing feature.

Capabilities a customer genuinely cannot reach yet are listed with a reason, and the list is allowed to shrink and never to grow. A new capability that arrives for one audience only fails the check, which means the asymmetry has to be argued for at the time rather than discovered by a customer months later.

- A feature that works for the operator and refuses for a customer is a routing gap, not a product decision, until somebody writes down that it is one.
- A screen that renders a smaller version of itself for a customer is the same failure wearing different clothes.
- The check runs against the live route table rather than a document, so it cannot pass by describing an intention.

## What this means for you

1. Read any page in this documentation as applying to you, whichever audience you are, unless it says otherwise in its own words.
2. Where a page names an allowance or a limit, that is the commercial difference showing: the same capability, bounded differently.
3. If something works for somebody at JBRH and not for you, report it as a defect rather than assuming it is a tier you are not on. There are no tiers of capability.
4. If a page describes a screen you cannot reach at all, check the short list above before anything else — those three are the deliberate cases.

## Questions

### Is there a feature a customer cannot get at any price?

Not in the product itself. The three operator-only surfaces are about running the platform — taking payments, pricing, and enquiries addressed to JBRH — rather than about using Connect, and none of them is a capability a customer would otherwise want.

### Does the operator get better performance or newer code?

It is the same deployment and the same code. There is no separate instance, no early-access branch for the operator, and no configuration that makes the operator's requests take a different path through the application.

### Why does my screen show fewer things than a screenshot from JBRH?

Most often because the workspace has less in it. If a control is genuinely absent rather than empty, that is worth reporting: the parity check exists precisely because a one-audience capability is a defect here, not a plan.

## Related

- [Account and access](https://connectbyjbrh.com/docs/account/)
- [Which workspace you are in](https://connectbyjbrh.com/docs/account/workspace-resolution/)
- [Your plan](https://connectbyjbrh.com/docs/account/plan/)
- [The customer facade](https://connectbyjbrh.com/docs/security/customer-facade/)
- [Routing a request for the Owner or a customer](https://connectbyjbrh.com/docs/workflows/owner-tenant-routing/)
- [Autonomy for the Owner and for a customer](https://connectbyjbrh.com/docs/autonomy/autonomy-owner-tenant/)
- [One implementation, two audiences](https://connectbyjbrh.com/research/two-audiences-one-implementation/)

## What this page is based on

- Connect source pack §1 — one codebase, two audiences, and the enumerated parity rule (`docs-source/sources/GENERAL.md`)
- Connect capability registry (`docs-source/facts.py`) — `payment_verification`, `commercial_pricing`, `website_enquiries` as operator-only
- `tools/test_audience_parity_v1.py` — the aliases and the gap list that may shrink and never grow
