18 Commits

Author SHA1 Message Date
Jesse_Chen 6d192ad175 feat: add consultation and product domain registries 2026-08-15 06:04:23 +08:00
Jesse_Chen 5012ff7212 feat: add persistent personal report document v2 2026-08-15 05:10:37 +08:00
Jesse_Chen 8696eca022 fix: keep one active email OTP per account
Staging Backend Quality Gate / validate (push) Successful in 12m39s
Staging Backend Quality Gate / publish (push) Successful in 12m9s
2026-08-10 10:49:25 +08:00
Jesse d63f10dcc2 fix(db): isolate redemption migration from identity schema
Staging Backend Quality Gate / validate (push) Successful in 15m31s
Staging Backend Quality Gate / publish (push) Successful in 23m10s
2026-08-07 19:05:01 +08:00
Jesse 280d3e7a35 feat(membership): replace purchase modal with membership page 2026-08-07 18:24:16 +08:00
Jesse_Chen 28147b40d0 Merge origin/main into admin release candidate
Staging Backend Quality Gate / validate (push) Successful in 12m49s
Staging Backend Quality Gate / publish (push) Has been cancelled
2026-08-07 12:27:47 +08:00
Jesse_Chen 66a6c96a5c fix(admin): fail safe across migration and auth boundaries
The recovery migration crossed the identity and RBAC ledgers without guarding schema prerequisites, while unknown configuration, provider, and database failures escaped the admin authorization boundary as 500s. Keep recovery in the DB ledger with explicit prerequisite no-ops, and sanitize unknown authorization failures to the existing 503 path.
2026-08-07 12:08:58 +08:00
Jesse 49f6edd7fb feat(web): add persistent beam avatars
Staging Backend Quality Gate / validate (push) Successful in 13m34s
Staging Backend Quality Gate / publish (push) Has been cancelled
2026-08-07 12:07:57 +08:00
Jesse_Chen 754505d40a fix(admin): preserve revoked owners and 503 status
Owner recovery lived in the identity-only migration path and could clear historical revocations on conflict. Admin layout also rethrew authorization 503s, turning service-unavailable failures into 500 responses.\n\nMove recovery behind the RBAC migration sequence, exclude revoked candidates without mutating their history, and terminate layout redirects at a no-store 503 route.
2026-08-07 11:33:48 +08:00
Jesse_Chen 0d7e5a26d5 fix(admin): break denied-session redirect loop
Preserve 403/503 responses instead of redirecting them through the Caddy root, and recover Owner only for the sole loginable synced identity admin.
2026-08-07 11:06:13 +08:00
Jesse_Chen 6457c836fa feat(admin): add RBAC identity and MFA controls 2026-08-06 20:15:08 +08:00
Jesse 82dab96b07 feat(report): add personal report contract and persistence 2026-08-06 12:43:10 +08:00
Jesse 02ec5db361 feat(admin): add audited Refine staging console 2026-07-28 09:47:13 +08:00
Jesse_Chen a1b8eaec36 feat(staging): switch to local postgres 2026-07-22 11:04:36 +08:00
Jesse_Chen 5da3dd38ff feat(identity): add local postgres identity schema 2026-07-21 17:52:25 +08:00
Jesse_Chen 9e119df977 fix: keep staging control plane on main 2026-07-21 07:45:14 +08:00
Jesse_Chen 53d9aaf846 fix: enforce postgres least privilege 2026-07-21 07:45:14 +08:00
Jesse_Chen 69b38ee6ed feat: add reviewed postgres migration foundation 2026-07-21 07:45:14 +08:00