2.8 KiB
user-engine platform expansion contract
This contract activates NK-WP-0024 without weakening the proven portal.
The current production image continues to use its existing integration path
until all three endpoints below are deployed and verified together.
Authorization
user-engine is the protected system and calls flex-auth POST /v1/check for
every domain mutation. Requests use the existing user-engine resource types
and action names, including user-engine:user, user-engine:membership,
user-engine:invitation, user-engine:tenant, and user-engine:outbox.
Policy roles are:
- self: actions whose authorization context has
self=trueand whose target user matches the authenticated subject's user projection; - tenant-admin: tenant-scoped membership, invitation, account lifecycle, and recovery actions within the actor's tenant only;
- platform-admin: tenant creation, platform recovery, outbox delivery, and dead-letter replay across the platform tenant;
The HTTP adapter is fail closed. Unreachable, malformed, timed-out, or non-conforming flex-auth responses become a deny decision. The flex-auth decision ID is stored on the corresponding user-engine audit record.
Required runtime setting: USER_ENGINE_FLEX_AUTH_URL.
Durable event and mail delivery
The transactional outbox remains the source of delivery state. The worker
endpoint sends a CloudEvents-like, redacted JSON envelope to the platform
event receiver and supplies the outbox event ID as Idempotency-Key.
Invitation-created and invitation-resent events are additionally delivered to
the approved mail receiver using the same idempotency key. Mailbox ownership
is evidence only and is never passed into an authorization decision as proof
of authority.
Required runtime settings:
USER_ENGINE_EVENT_URLUSER_ENGINE_MAIL_URL(optional until the approved receiver exists)USER_ENGINE_DELIVERY_TOKENfrom the OpenBao-backed runtime lane
Delivery uses bounded attempts already persisted in the user-engine outbox. Failures retain a redacted reason, dead-letter at the configured threshold, and can be replayed through the platform-operator route.
Production activation gate
Do not add these environment variables to the live Deployment until:
- flex-auth has a cluster-local Service and a validated user-engine policy;
- the event and mail receivers accept idempotent, authenticated delivery;
- their credentials are present under the approved OpenBao user-engine lane;
- NetworkPolicies allow only the named receivers;
- the deployed failure matrix proves deny/unavailability, receiver failure, dead-letter/replay, invitation expiry/replay, provider outage recovery, and cross-tenant denial.
This gate prevents a partial rollout from making the portal unavailable or silently dropping notifications.