generated from coulomb/repo-seed
50 lines
1.8 KiB
Markdown
50 lines
1.8 KiB
Markdown
# Public Contracts
|
|
|
|
## Headless Service Surface
|
|
|
|
`UserEngineService` is the stable in-process API for the current MVP. Future
|
|
HTTP or RPC adapters should preserve these operation names:
|
|
|
|
- `health`, `readiness`, `operability_snapshot`, `outbox_diagnostics`
|
|
- `me`, `create_user`, `set_account_status`, `link_identity`
|
|
- `resolve_tenant_context`, `set_tenant_account_status`, `add_membership`,
|
|
`tenant_diagnostics`
|
|
- `register_application`, `publish_catalog`
|
|
- `set_profile_value`, `effective_profile`, `projection`
|
|
- `audit_records`, `outbox_events`
|
|
|
|
## Error Taxonomy
|
|
|
|
- `ValidationError`: caller supplied an invalid shape, state transition, or
|
|
catalog/profile value.
|
|
- `AuthorizationDenied`: the authorization port or tenant boundary denied the
|
|
operation.
|
|
- `NotFoundError`: a requested user, account, or active attribute is missing.
|
|
- `ConflictError`: uniqueness or ownership would be violated.
|
|
|
|
## Catalog Contract
|
|
|
|
Catalogs are active by namespace and owning application. Attribute keys must
|
|
use the namespace prefix. Active namespace ownership cannot move to another
|
|
application. Catalog updates cannot move versions backwards or downgrade
|
|
attribute sensitivity.
|
|
|
|
## Projection Contract
|
|
|
|
Application runtime, agent-context, and claims-enrichment projections require
|
|
an `application_id` and are filtered to that application's active catalogs.
|
|
Sensitive and secret values are redacted outside admin, audit, and
|
|
self-service projections.
|
|
|
|
## Audit And Event Contract
|
|
|
|
Every mutating service operation appends an audit record and outbox event with
|
|
the same correlation id and resolved tenant. Authorization denials are audited
|
|
without emitting outbox events.
|
|
|
|
## Migration Contract
|
|
|
|
The isolated store exposes `SCHEMA_VERSION = 0001_initial` and a `migrate`
|
|
hook. Database-backed stores must expose equivalent readiness semantics before
|
|
they are accepted by platform adapters.
|