Replace Auth.js with Better Auth 1.7.14 using the existing YAML credentials or OIDC configuration. Native handler/client, CSRF protection and in-memory rate limiting; no auth database or direct Zod dependency.
Keep the sign-in/admin UI, OIDC callback and local-only logout. Use provider-specific hooks, safe return paths, canonical-URL reload handling, and a button busy state that lasts through redirect handoff.
Fixed seven-day encrypted sessions; existing Auth.js cookies require signing in again. Trust Nginx's X-Real-IP through the library option, without custom request headers or rewriting.
Include focused handler/config/redirect regressions and update existing browser checks without adding an IdP harness. SvelteKit 3 and operator-doc changes are outside this PR.
Validation
Final independent code/security and readability reviews clear; trailing-slash public URL regression fixed and covered before publication.
2,315 workspace tests passed with coverage, including 1,072 web tests; all 67 browser tests passed on a fresh isolated production web build.
Shared-package, worker and CLI builds, web type checking/lint, changeset formatting and diff checks passed.
Owner manually confirmed successful sign-in and the corrected busy transition. No independent agent-run live Authelia/provider compatibility exercise; remote CI is separate.
Deployment notes
Nginx must overwrite X-Real-IP and the app must not be publicly reachable around it. Limiter counters are per-process memory, not distributed protection.
No YAML/schema/database migration. Operator docs are deliberately unchanged as requested; existing Auth.js/no-password-limiting wording is stale.
## Summary
- Replace Auth.js with Better Auth 1.7.14 using the existing YAML credentials or OIDC configuration. Native handler/client, CSRF protection and in-memory rate limiting; no auth database or direct Zod dependency.
- Keep the sign-in/admin UI, OIDC callback and local-only logout. Use provider-specific hooks, safe return paths, canonical-URL reload handling, and a button busy state that lasts through redirect handoff.
- Fixed seven-day encrypted sessions; existing Auth.js cookies require signing in again. Trust Nginx's X-Real-IP through the library option, without custom request headers or rewriting.
- Include focused handler/config/redirect regressions and update existing browser checks without adding an IdP harness. SvelteKit 3 and operator-doc changes are outside this PR.
## Validation
- Final independent code/security and readability reviews clear; trailing-slash public URL regression fixed and covered before publication.
- 2,315 workspace tests passed with coverage, including 1,072 web tests; all 67 browser tests passed on a fresh isolated production web build.
- Shared-package, worker and CLI builds, web type checking/lint, changeset formatting and diff checks passed.
- Owner manually confirmed successful sign-in and the corrected busy transition. No independent agent-run live Authelia/provider compatibility exercise; remote CI is separate.
## Deployment notes
- Nginx must overwrite X-Real-IP and the app must not be publicly reachable around it. Limiter counters are per-process memory, not distributed protection.
- No YAML/schema/database migration. Operator docs are deliberately unchanged as requested; existing Auth.js/no-password-limiting wording is stale.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Validation
Deployment notes