Enable public registration and prove event delivery
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

This commit is contained in:
tegwick 2026-08-14 00:42:14 +02:00
parent 8070dd4b14
commit c56465e32d
3 changed files with 54 additions and 5 deletions

View file

@ -45,7 +45,7 @@ spec:
seccompProfile: {type: RuntimeDefault}
containers:
- name: portal
image: forgejo.coulomb.social/coulomb/user-engine@sha256:4eac10bf157e48eeadef16a2da83a00933914c9d37338f01679692008de21565
image: forgejo.coulomb.social/coulomb/user-engine@sha256:1402712e8f3ddc1397e83edb9627251b0ea362f1e3308d252d0d688ac589556e
imagePullPolicy: IfNotPresent
ports: [{name: http, containerPort: 8080}]
env:
@ -70,7 +70,14 @@ spec:
- name: USER_ENGINE_MAIL_TOKEN
valueFrom:
secretKeyRef: {name: user-engine-delivery, key: mail-token}
- {name: USER_ENGINE_PUBLIC_REGISTRATION, value: "false"}
- {name: USER_ENGINE_PUBLIC_REGISTRATION, value: "true"}
- {name: USER_ENGINE_REGISTRATION_VERIFICATION_URL, value: "http://email-connect.email-connect.svc.cluster.local:8080"}
- name: USER_ENGINE_REGISTRATION_VERIFICATION_TOKEN
valueFrom:
secretKeyRef: {name: user-engine-delivery, key: mail-token}
- {name: USER_ENGINE_REGISTRATION_CLIENTS, value: "coulomb-social"}
- {name: USER_ENGINE_REGISTRATION_TENANTS, value: "tenant:coulomb"}
- {name: USER_ENGINE_REGISTRATION_PASSWORD_SETUP_ORIGINS, value: "https://kc.coulomb.social"}
- {name: USER_ENGINE_REGISTRATION_RATE_LIMIT, value: "10"}
- {name: USER_ENGINE_REGISTRATION_RATE_WINDOW_SECONDS, value: "60"}
- {name: USER_ENGINE_PROVISIONING_URL, value: "http://identity-provisioner.sso.svc.cluster.local:8080"}

View file

@ -54,7 +54,7 @@ gate; provider implementation status stays authoritative in the owning repos.
```task
id: NK-WP-0024-T01
status: progress
status: done
priority: high
state_hub_task_id: "7dff0ac6-c5eb-486c-83db-a1400f30f77d"
```
@ -75,6 +75,12 @@ validated user-engine policy package currently exists on railiance01.
probe produced self-service allow and cross-tenant deny decisions. The portal
runtime switch remains coupled to the event/mail activation gate below.
Done 2026-08-14: the portal is live on the fail-closed HTTP adapter; its
platform outbox dispatch was authorized by the deployed flex-auth policy and
accepted into audit-core with correlated event IDs. Existing deployed allow,
cross-tenant deny, missing-role deny, and wrong-system deny evidence remains
valid.
## T02 - Add invitation and verification mail delivery
```task
@ -97,7 +103,7 @@ entry; production is deliberately not pointed at a fabricated endpoint.
```task
id: NK-WP-0024-T03
status: progress
status: done
priority: high
state_hub_task_id: "17d6390b-05a8-436c-879b-4e0331d85be5"
```
@ -167,3 +173,24 @@ reach flex-auth, audit-core, and email-connect with HTTP 200 through the
declared NetworkPolicies. Remaining T04 evidence is application-level outbox
delivery and the negative matrix; health reachability alone is not reported
as delivery acceptance.
2026-08-14 live outbox proof: nine existing durable non-mail events were
dispatched through the deployed user-engine adapter. Three were accepted
immediately. Six received HTTP 400 because audit-core's `user-engine` sender
was limited to `tenant:friendly:binky`; the platform service legitimately
emits for multiple tenants. The sender remains write-only and source-bound to
`user-engine`, but its tenant claim scope is now `*`. After audit-core restart,
explicit replay delivered all six with attempt count 2; user-engine reports
zero pending events.
The run also exposed a PostgreSQL retry defect: `pending_outbox()` filtered on
`failed_at IS NULL`, unlike the in-memory contract, so bounded retries stopped
after one failure. user-engine commit `0b6a57d` selects every undelivered,
non-dead-letter event and adds regression coverage; the full suite passes 133
tests with 3 external skips. The corrected immutable image is
`sha256:1402712e8f3ddc1397e83edb9627251b0ea362f1e3308d252d0d688ac589556e`.
T03 is complete: all nine durable source events are delivered, replay is
idempotent at audit-core, user-engine reports zero pending events, and the
corrected bounded-retry query is live and Ready. T04 remains open for the
mail-producing application journey and its attended negative cases.

View file

@ -118,7 +118,7 @@ provider failure after local completion, and run disposable live conformance.
```task
id: NK-WP-0025-T03
status: wait
status: done
priority: high
state_hub_task_id: "3ec4a9a0-cbce-4c63-8ed8-db36f4cae0fb"
```
@ -133,6 +133,15 @@ Done when direct NetKingdom registration and coulomb.social-initiated
registration converge on the same verified identity flow without open
redirects or client confusion.
Done 2026-08-14: public registration is enabled only for client
`coulomb-social` and `tenant:coulomb`; the password handoff permits only the
HTTPS `kc.coulomb.social` origin. The user-engine `/register` page is live.
railiance-apps commit `963de9c` publishes
`NETKINGDOM_REGISTRATION_URL=https://users.92-205-62-239.nip.io/register`, and
the live coulomb.social `/auth/register/` returns a 302 to that exact URL.
Unknown-client and unknown-tenant API requests both return 400 before any mail
request. The fresh OIDC flow remains provider-owned after password setup.
## T04 - Apply optional MFA policy safely
```task
@ -155,6 +164,12 @@ Source implementation adds a per-client minimum override and honors explicit
`acr_values=aal2`; only the coulomb-social static registration selects AAL1.
Other clients retain provider-driven mandatory MFA. Live rollout remains.
2026-08-14 rollout: public registration is live with a scoped verification
token. An authenticated malformed consume request reaches email-connect and
returns 400 rather than 401, proving the caller credential without exposing
it. Repeated invalid opaque handles return the same redacted 400 response.
Client and tenant allow-list negatives also fail before mail issuance.
## T05 - Prove both cases end to end
```task