feat: expose typed deployment capability receipts
This commit is contained in:
@@ -159,7 +159,36 @@ The initial implementation includes provider-neutral orchestration helpers:
|
||||
|
||||
The first concrete provider is `govoplan_access.backend.configuration_provider`.
|
||||
It supports access-owned `roles`, `groups`, and `group_role_assignments`
|
||||
fragments and applies them idempotently.
|
||||
fragments and applies them idempotently. Mail and Files also register providers
|
||||
for deployment configuration: Mail owns receipt-bound SMTP profiles and Files
|
||||
validates the deployment-owned managed-storage binding.
|
||||
|
||||
### Deployment capability receipt
|
||||
|
||||
The installer mounts a bounded, non-secret infrastructure receipt at the path
|
||||
named by `GOVOPLAN_DEPLOYMENT_CAPABILITIES_PATH`. Core validates that document
|
||||
once for configuration-package context and exposes typed capability and
|
||||
post-install-task records to providers. Invalid receipts fail closed. Endpoint
|
||||
metadata is sanitized, and secret fields may cross this boundary only as
|
||||
`env:VARIABLE_NAME` references.
|
||||
|
||||
Feature providers remain responsible for their own semantics:
|
||||
|
||||
- Mail can derive host and port from `mail.smtp`, collect missing non-secret
|
||||
transport fields, and bind an existing credential-envelope id. It never
|
||||
accepts or exports a username, password, token, or decrypted credential.
|
||||
- Files compares `files.storage` with the effective runtime backend, endpoint,
|
||||
trust marker, bucket, and presence of referenced environment secrets. Storage
|
||||
remains deployment-owned, so the provider reports `skip` when they agree and
|
||||
blocks drift instead of rewriting process environment or storage credentials.
|
||||
- A system-scoped Mail profile requires system configuration authority. Tenant
|
||||
scope is the conservative default.
|
||||
- Existing Mail configuration is preserved unless a reviewed fragment
|
||||
explicitly selects `on_conflict: update`. Reapplying an unchanged fragment is
|
||||
a no-op.
|
||||
|
||||
Ops projects the same Core-validated receipt. It must not maintain a second
|
||||
parser with different validation or secret-handling rules.
|
||||
|
||||
The admin wizard backend starts with these routes:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user