Hornroot now has a working local Wagtail admin with custom OIDC, Discord, and ATProto sign-in in place of local passwords. Provider settings and administrator identities come from an ignored TOML config; email addresses do not link accounts, and provider tokens are not stored.
The foundation uses a uv workspace with separate web, authentication, and ATProto packages, an ASGI development server, mise tasks, strict basedpyright checks, pytest, and Zed configuration. ATProto sign-in verifies the DID/PDS relationship and uses PKCE, PAR, and DPoP. Existing sessions recheck configured access, and authentication errors and logs omit private OAuth state.
Validation:
- 49 pytest tests passed, including access-policy, callback, session, and failure-boundary tests.
- Ruff, basedpyright, Django checks, and migration consistency passed.
- Live ATProto sign-in completed in a regular browser; OIDC and Discord flows are covered with simulated provider responses.
- Local configuration, credentials, databases, media, and research source checkouts are excluded from Git.