Skip to main content

Control Plane

The Control Plane records who participates, what resources exist, what policies and commercial entitlements apply, and how an access decision is made. It governs data without serving the resource payload itself.

Status: Partially implemented. Core APIs exist across the service fleet. Composite OPA/OpenFGA decisions, complete policy projection/reconciliation, organization hierarchy/group production, route coverage, and several production hardening gates remain open.

control_plane · identity, discovery, policy, commerce, governance
Gateway and Keycloak establish the caller. User, Catalogue, Policy, Authorization, Marketplace, Community, Registry, Credits, Subscriptions, Audit, and Notifications own separate records and collaborate through authenticated APIs and RabbitMQ. Cards show implementation status.identity & public enforcementdomain authorities · service-owned dataevents & operational servicesoutbox eventsKeycloakuser · workload · agent identitydx-gateway-go · public PEPvalidate · authorize · destination identity · routeUser & Orgprofile · membership · appPARTIALCatalogueresource metadata · searchPARTIALPolicy · PAPgrant · revoke · outboxIMPLEMENTEDAuthorization · PDPOpenFGA + planned OPAPARTIALMarketplaceproduct · order · paymentPARTIALCommunitydiscussion · challengePARTIALRegistryserver · capabilityIMPLEMENTEDCreditsledger · atomic debitIMPLEMENTEDSubscriptionsdefinition · delivery stateIMPLEMENTEDAuditappend · query · exportIMPLEMENTEDNotificationstemplate · dispatchIMPLEMENTEDRabbitMQ · versioned eventsPostgreSQL / SearchMetrics / Traces / Logs
administrators, providers, consumerscontrol requestdurable event / projectionentitlement outcomerevocation / governance

Service boundaries and status

ServicePurpose and owned dataKey integrationsStatus
KeycloakIdentity realm, users, clients, credentials, token issuance, JWKSGateway, User Service, Agent Registry/Runtime, workload clientsImplemented
dx-user-goProfiles, organizations, membership, roles, delegations, application credentialsKeycloak; publishes organization membership factsPartially implemented
dx-catalogue-goResource metadata, ownership, organization, access modes, discovery indexElasticsearch; ownership/resource lookup for policy and marketplacePartially implemented
dx-acl-goGrants, access requests, validity, status, constraints, grant/delegation outboxCatalogue validation; RabbitMQ; notifications; authorization projectionPartially implemented
dx-authz-goRequest-time authorization API, decision orchestration, projection/reconciliation stateOpenFGA; planned OPA; RabbitMQ; gateway/application PEPsPartially implemented
OpenFGARelationship model, stores, tuples for owners, organizations, groups, users, applications, agents, and resourcesWritten only by authorization projectors; queried only through PDPImplemented with model alignment gaps
OPAVersioned contextual/attribute policies and typed obligation selectionCalled through composite PDP; policy bundle pipelinePlanned
dx-marketplace-goMerchants, products, orders, payments, invoices, purchase idempotencyPayment provider; Catalogue; Authz; ACL entitlement creationPartially implemented
dx-registry-goResource-server and policy-server endpoint/capability recordsGateway, Catalogue, data clientsImplemented
dx-credits-goUser/organization balances, requests, atomic debit/credit ledgerMarketplace and metered servicesImplemented
dx-audit-goAppend-only activity projection, filtered reads, CSV exportsConsumes audit events from all planesImplemented
dx-notification-goTemplate rendering, recipient resolution, outbound email retry/dead letterConsumes notification events; Keycloak email lookup; SMTPImplemented
dx-subscription-goSubscription registrations and optional broker provisioningData ingestion/events; authorization and user scopingImplemented with end-to-end validation gaps

Identity and organization management

Keycloak owns authentication credentials. dx-user-go owns exchange-domain facts about profiles, organizations, memberships, applications, and user-to-user delegation. Role claims provide coarse identity context; organization and resource authority is resolved from domain relationships rather than inferred from a token role alone.

When membership changes, the User Service commits the domain update and publishes org.member.added or org.member.removed. The authorization projector applies the relationship tuple idempotently. A missed or malformed event goes to quarantine/dead letter, and reconciliation must compare the source record with the projection.

Organization isolation: administrative operations require an organization relationship and every organization-scoped repository query includes the organization ID. The current platform does not implement unrelated exchange tenants in one control plane; that is an explicit architecture gap.

Catalogue and resource governance

The Catalogue is the metadata authority. An item records stable resource identity, type, provider/owner, organization, descriptive JSON-LD, data-access modes, endpoints, geography, temporal coverage, schema references, and lifecycle state.

Public discovery may expose approved metadata. Authenticated views can add resources visible through ownership or entitlement. Provider and administrator mutations validate identity, organization, and ownership at the service. Search uses Elasticsearch with allowlisted filters; the source metadata lifecycle remains a Catalogue responsibility.

Policy administration and authorization

The Policy Service is the Policy Administration Point (PAP). It validates that the resource exists, the author may grant it, requested access types are supported, constraints are typed and bounded, and the validity window is acceptable. It stores the grant and outbox event atomically.

The Authorization Service is the Policy Decision Point (PDP). It never authors grants. At target state it combines OpenFGA relationships, OPA contextual policy, delegation and agent state, trust policy, and grant validity into one explainable decision. See Security Architecture.

The Gateway and application/data services are Policy Enforcement Points (PEPs). The Gateway enforces edge-known results; services enforce domain and datastore obligations. A data service validates a carried decision rather than querying the PDP again.

Marketplace and entitlement

A provider creates a product only for a resource they are authorized to monetize. A consumer creates an idempotent order with the configured payment provider. A signed webhook records payment/invoice state transactionally and requests a grant from dx-acl-go; the Marketplace never writes authorization relationships directly. Access begins only after the grant becomes active in the authorization projection.

Failed payment, invalid callback signature, product/version mismatch, duplicate callback, ACL failure, or projection delay cannot create partial entitlement. Recovery uses payment-provider reconciliation, idempotency keys, durable local state, and grant projection monitoring.

Registry, credits, audit, and notifications

  • Registry: resolves server capabilities and endpoints. Writes are platform-governed; reads may be public where declared.
  • Credits: owns balances and the immutable debit/credit history. The side-effect owner enforces idempotency and atomic balance checks.
  • Audit: consumes activity facts asynchronously so logging cannot block the primary operation. The producer still records local request/decision telemetry; audit is a durable projection, not the only signal.
  • Notifications: consumes user-facing notification events, resolves recipients, renders templates, retries boundedly, and dead-letters persistent failures. Email failure does not roll back a committed grant or payment.

Control-plane events

Event familySource of truthConsumers and effectCurrent state
policy.*Policy ServiceAuthorization projection writes/removes grant relationshipsPartially implemented
org.member.*User ServiceAuthorization projection updates organization membershipImplemented
group.member.*Group-management ownerAuthorization projection updates group membershipPlanned producer ownership
delegation.*Policy ServiceAuthorization projection updates agent delegated relationshipsImplemented locally
agent.suspended/resumed/retiredAgent RegistryGateway denylist and agent lifecycle projectionImplemented locally
Audit eventsEvery mutating service/PEPAudit Service append-only projectionPartially implemented fleet-wide
Notification eventsDomain servicesNotification Service email dispatchImplemented for selected workflows
Subscription/data eventsData ingestion/subscription ownersDelivery queues or streaming integrationsPartially implemented

Failure, retry, and recovery

  • Control writes use transactions; externally visible facts publish through outboxes after commit.
  • Consumers reconnect with bounded backoff, handle events idempotently, and quarantine unsupported versions.
  • New grants remain denied until projected. Revocation denial must become authoritative without waiting for asynchronous tuple cleanup.
  • Outbox backlog, projection lag, reconciliation mismatch, DLQ depth, OPA bundle revision, OpenFGA model/store revision, and notification failure are operational signals.
  • Repeated delivery is expected. Side-effect owners—payments, credits, approvals, subscriptions—store idempotency keys and original results.

Configuration and governance

Service operation policy is versioned with OpenAPI. At target state, platform authorization policy is promoted as versioned, integrity-verified OPA bundles; that pipeline is Planned. Relationship schema and permission/resource registries are centrally governed. Environment configuration selects routes, feature gates, dependencies, one migration actor, and workload call graph. Secrets are injected through the deployment secret manager.

Known limitations and planned evolution

  • The composite authorization target and OPA bundle pipeline are Planned.
  • The current relationship projection has type/relation alignment and reconciliation work.
  • Group membership lacks a complete production owner and producer.
  • Organization hierarchy semantics need a canonical domain decision.
  • Several gateway routes and public-operation mappings require completion and conformance tests.
  • Multi-tenant exchange-operator isolation is not designed; organization isolation is the supported boundary.

Workflows: Authentication, Policy Lifecycle, Dataset Onboarding, Marketplace Entitlement, and Audit Events.