Changes for decisions/0048-platform-roles.md: 1 added line, 1 removed line.
Original line number
Diff line number
Diff line
@@ -9,7 +9,7 @@ status: "proposed"
# ADR-0048: Three platform roles, API product grants, and tenancy
**Status:** proposed
**Status:** proposed — decision 6's "`app_provider_id` is the token's `sub`" is amended by [ADR-0066](/decisions/0066-api-clients-through-keycloak-client-registration.md): the `app_provider_id` claim when present, else `sub`
Changes for decisions/index.md: 3 added lines, 0 removed lines.
Original line number
Diff line number
Diff line
@@ -59,3 +59,6 @@ the reasoning lives here. Never renumber; supersede instead (see the record-deci
*[ADR-0061](0061-use-short-execution-action-vocabulary.md) - proposed five-action vocabulary shared by the public SDK methods and supported_actions, with an explicit SRM intent mapping
*[ADR-0062](0062-zone-state-uses-camara-inactive.md) - `zone.state` uses CAMARA's `active`/`inactive`/`unknown` (was `offline`), so OEG passes the zone status filter and value through unmapped; domain, capability and control-path-binding states keep `offline`
*[ADR-0063](0063-callback-tokens-encrypted-in-oeg-db.md) - client callback tokens (EAM sinkCredential, QoD notificationAuthToken) are stored AES-GCM encrypted in oeg_db under one app-wide key; no key → 501; expired/revoked tokens are tombstoned and their deliveries skipped, never sent unauthenticated (amends ADR-0006's sink_credential_ref)
*[ADR-0064](0064-portal-is-one-container-with-a-thin-backend.md) - the portal is one image: a FastAPI backend serves the built React app at `/` and its API at `/api/*`, and forwards calls without merging data; no Next.js server
*[ADR-0065](0065-portal-sessions-keyed-by-the-cookie.md) - portal login sessions live in PostgreSQL, tokens encrypted with a per-session key only the cookie holds; login attempts are single-use rows; a session lasts as long as Keycloak accepts its refresh token
*[ADR-0066](0066-api-clients-through-keycloak-client-registration.md) - developers' API clients are Keycloak clients registered by a narrow provisioner, products fixed at creation within the creator's grants, secret shown once, registration token encrypted under one app-wide key; a refused token on delete is reported; no reconciliation with Keycloak in Release 2