Commit Graph
100 Commits
Author SHA1 Message Date
jason.woltje 9f4de1682f fix(api): resolve CSRF guard ordering with global AuthGuard (#514)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-26 02:26:02 +00:00
jason.woltje 374ca7ace3 docs: initialize MS19 Chat & Terminal mission planning (#513)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-26 01:49:40 +00:00
jason.woltje 72c64d2eeb fix(api): add global /api prefix to resolve frontend route mismatch (#507)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-26 01:13:48 +00:00
jason.woltje 5f6c520a98 fix(auth): prevent login page freeze on OAuth sign-in failure (#506)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-25 01:59:36 +00:00
jason.woltje 9a7673bea2 docs: close out MS18 Theme & Widget System mission (#505)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 03:01:54 +00:00
jason.woltje 91934b9933 docs: update mission artifacts for MS18 completion (#504)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 02:29:06 +00:00
jason.woltje 7f89682946 test(web): add unit tests for MS18 components (#503)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 02:23:05 +00:00
jason.woltje 8b4c565f20 feat(web): add kanban board filtering with URL param persistence (#502)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 02:09:37 +00:00
jason.woltje d5ecc0b107 feat(web): add markdown round-trip and replace textarea with Tiptap (#501)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 01:40:34 +00:00
jason.woltje a81c4a5edd feat(web): add Tiptap WYSIWYG KnowledgeEditor component (#500)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 01:23:57 +00:00
jason.woltje ff5a09c3fb feat(web): add widget config dialog and layout management controls (#499)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 01:11:47 +00:00
jason.woltje f93fa60fff feat(web): add widget picker drawer for dashboard customization (#498)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 00:59:45 +00:00
jason.woltje cc56f2cbe1 feat(web): migrate dashboard to WidgetGrid with layout persistence (#497)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 00:50:24 +00:00
jason.woltje f9cccd6965 feat(api): seed 7 widget definitions for dashboard system (#496)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 00:28:02 +00:00
jason.woltje 90c3bbccdf feat(web): add theme selection UI in Settings > Appearance (#495)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 14:18:16 +00:00
jason.woltje 79286e98c6 feat(web): upgrade ThemeProvider for multi-theme registry (#494)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 14:09:10 +00:00
jason.woltje cfd1def4a9 feat(web): add theme definition system with 5 built-in themes (#493)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 13:59:01 +00:00
jason.woltje f435d8e8c6 docs: initialize MS18 Theme & Widget System mission (#492)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 13:36:10 +00:00
jason.woltje 3d78b09064 docs: close out MS16+MS17 mission (#486)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 13:27:22 +00:00
jason.woltje a7955b9b32 docs: mark MS16+MS17 milestone complete (#485)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 13:16:38 +00:00
jason.woltje 372cc100cc docs: update PRD statuses and mission artifacts for MS16+MS17 (#484)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 05:09:04 +00:00
jason.woltje 37cf813b88 fix(web): update calendar and knowledge tests for real API integration (#483)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 05:04:55 +00:00
jason.woltje 3d5b50af11 feat(web): add profile page with user info and preferences (#482)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 04:50:44 +00:00
jason.woltje f30c2f790c feat(web): add file manager page with list/grid views (#481)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 04:39:19 +00:00
jason.woltje 05b1a93ccb feat(web): add logs and telemetry page with filtering and auto-refresh (#480)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 04:38:15 +00:00
jason.woltje a78a8b88e1 feat(web): add project workspace page with tasks and agent sessions (#479)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 04:29:39 +00:00
jason.woltje 172ed1d40f feat(web): add kanban board page with drag-and-drop (#478)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 04:26:25 +00:00
jason.woltje ee2ddfc8b8 feat(web): add projects page with CRUD operations (#477)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 04:13:26 +00:00
jason.woltje 5a6d00a064 feat(web): wire knowledge pages to real API data (#476)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 04:12:14 +00:00
jason.woltje ffda74ec12 test(web): update tasks page tests for real API integration (#475)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 03:59:56 +00:00
jason.woltje f97be2e6a3 feat(web): wire calendar page to real API data (#474)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 03:51:15 +00:00
jason.woltje 97606713b5 feat(web): wire tasks page to real API data (#473)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 03:51:08 +00:00
jason.woltje d0c720e6da feat(web): add custom 404 pages for global and authenticated routes (#472)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 03:43:55 +00:00
jason.woltje 64e817cfb8 feat(web): add settings root index page with category cards (#471)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 03:42:01 +00:00
jason.woltje cd5c2218c8 chore(orchestrator): bootstrap MS16+MS17 planning (#470)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 03:29:53 +00:00
jason.woltje f643d2bc04 docs: mark mission complete (MS-P4-003) (#465)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 02:11:13 +00:00
jason.woltje 8957904ea9 Phase 4: Deploy + Smoke Test (#463) (#464)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 02:09:43 +00:00
jason.woltje 458cac7cdd Phase 3: Agent Cycle Visibility (#461) (#462)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 01:07:29 +00:00
jason.woltje 7581d26567 Phase 2: Task Ingestion Pipeline (#459) (#460)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 00:54:55 +00:00
jason.woltje 07f5225a76 Phase 1: Dashboard Polish + Theming (#457) (#458)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 00:16:45 +00:00
jason.woltje 7c55464d54 fix: add mission detection to session hooks (#456)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 23:42:21 +00:00
jason.woltje ea1620fa7a docs: initialize go-live MVP mission with coordinator protocol (#455)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 23:37:13 +00:00
jason.woltje d218902cb0 docs: design system reference and task completion (MS15-DOC-001) (#454)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 21:20:28 +00:00
jason.woltje b43e860c40 feat(web): Phase 3 — Dashboard Page (#450) (#453)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 21:18:50 +00:00
jason.woltje 716f230f72 feat(ui,web): Phase 2 — Shared Components & Terminal Panel (#449) (#452)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 21:12:13 +00:00
jason.woltje a5ed260fbd feat(web): MS15 Phase 1 — Design System & App Shell (#451)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 20:57:06 +00:00
jason.woltje 9b5c15ca56 style(ui): use padding for AuthDivider vertical spacing (#446) (#447)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 18:02:45 +00:00
jason.woltje 74c8c376b7 docs(coolify): update deployment docs with operations guide (#445)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 08:05:47 +00:00
jason.woltje 9901fba61e docs: add Coolify deployment guide and compose file (#444)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 07:40:24 +00:00
jason.woltje 17144b1c42 style(ui): refine login card shape and divider spacing (#439)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 06:19:23 +00:00
jason.woltje a6f75cd587 fix(ui): use arbitrary opacity for AuthCard dark background (#438)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 05:33:14 +00:00
jason.woltje 06e54328d5 fix(web): force dynamic rendering for runtime env injection (#437)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 03:54:12 +00:00
jason.woltje 7480deff10 fix(web): add Tailwind CSS setup for design system rendering (#436)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-21 23:36:16 +00:00
jason.woltje 1b66417be5 fix(web): restore login page design and add runtime config injection (#435)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-21 23:16:02 +00:00
jason.woltje 23d610ba5b chore: switch from develop/dev to main/latest image tags (#434)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-21 22:05:07 +00:00
jason.woltje 25ae14aba1 fix(web): resolve flaky CI test failures (#433)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-21 21:12:00 +00:00
jason.woltje 1425893318 Merge pull request 'Merge develop into main — branch consolidation' (#432) from merge/develop-to-main into main 2026-02-21 20:56:40 +00:00
jason.woltjeandClaude Opus 4.6 bc4c1f9c70 Merge develop into main
Consolidate all feature and fix branches into main:
- feat: orchestrator observability + mosaic rails integration (#422)
- fix: post-422 CI and compose env follow-up (#423)
- fix: orchestrator startup provider-key requirements (#425)
- fix: BetterAuth OAuth2 flow and compose wiring (#426)
- fix: BetterAuth UUID ID generation (#427)
- test: web vitest localStorage/file warnings (#428)
- fix: auth frontend remediation + review hardening (#421)
- Plus numerous Docker, deploy, and auth fixes from develop

Lockfile conflict resolved by regenerating from merged package.json.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-21 14:52:43 -06:00
jason.woltje d66451cf48 fix(ci): suppress Next.js bundled tar/minimatch CVEs in trivy (#431)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-21 20:40:17 +00:00
jason.woltje c23ebca648 fix(ci): resolve pipeline #516 audit and test failures (#429)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-21 20:11:58 +00:00
jason.woltje b5ac2630c1 docs(auth): record digest-based deploy fix verification 2026-02-18 23:39:06 -06:00
jason.woltje 8424a28faa fix(auth): use set_config for transaction-scoped RLS context 2026-02-18 23:23:15 -06:00
jason.woltje d2cec04cba fix(auth): preserve raw BetterAuth cookie token for session lookup 2026-02-18 23:06:37 -06:00
jason.woltje 9ac971e857 chore(deploy): align swarm auth env with deployed stack 2026-02-18 22:40:22 -06:00
jason.woltje 0c2a6b14cf fix(auth): verify BetterAuth sessions via cookie headers 2026-02-18 22:39:54 -06:00
jason.woltje af299abdaf debug(auth): log session cookie source 2026-02-18 21:36:01 -06:00
jason.woltje fa9f173f8e chore(web): use prod-only deps in runtime image 2026-02-18 21:13:12 -06:00
jason.woltje 7935d86015 chore(web): avoid pnpm in runtime image to reduce CVE noise 2026-02-18 20:24:22 -06:00
jason.woltje f43631671f chore(deps): override tar to 7.5.8 for trivy 2026-02-18 20:01:10 -06:00
jason.woltje 8328f9509b Merge pull request 'test(web): silence localStorage-file warnings in vitest' (#428) from fix/web-test-warnings-2 into develop
Reviewed-on: http://git.mosaicstack.dev/mosaic/stack/pulls/428
2026-02-19 01:45:06 +00:00
jason.woltje f72e8c2da9 chore(deps): override minimatch to 10.2.1 for audit fix 2026-02-18 19:41:38 -06:00
jason.woltje 1a668627a3 test(web): silence localStorage-file warnings in vitest setup 2026-02-18 19:38:23 -06:00
jason.woltje bd3625ae1b Merge pull request 'fix(auth): generate UUID ids for BetterAuth Prisma writes' (#427) from fix/authentik-betterauth-interop into develop
Reviewed-on: http://git.mosaicstack.dev/mosaic/stack/pulls/427
2026-02-19 01:07:32 +00:00
jason.woltje aeac188d40 chore(deps): override minimatch to 10.2.1 for audit fix 2026-02-18 18:53:25 -06:00
jason.woltje f219dd71a0 fix(auth): use UUID id generation for BetterAuth DB models 2026-02-18 18:49:16 -06:00
jason.woltje 2c3c1f67ac Merge pull request 'fix(auth): restore BetterAuth OAuth2 flow and compose wiring' (#426) from fix/authentik-betterauth-interop into develop
Reviewed-on: http://git.mosaicstack.dev/mosaic/stack/pulls/426
2026-02-18 05:44:19 +00:00
jason.woltje dedc1af080 fix(auth): restore BetterAuth OIDC flow across api/web/compose 2026-02-17 23:37:49 -06:00
jason.woltje 3b16b2c743 Merge pull request 'Fix orchestrator startup provider-key requirements for Issue 424' (#425) from fix/post-422-runtime into develop
Reviewed-on: http://git.mosaicstack.dev/mosaic/stack/pulls/425
2026-02-17 23:17:39 +00:00
jason.woltje 157b702331 Merge pull request 'fix(runtime): post-422 CI and compose env follow-up' (#423) from fix/post-422-runtime into develop
Reviewed-on: http://git.mosaicstack.dev/mosaic/stack/pulls/423
2026-02-17 22:47:50 +00:00
jason.woltje 4a4aee7b7c Merge pull request 'feat: finalize orchestrator observability and mosaic rails integration' (#422) from feature/mosaic-stack-finalization into develop
Reviewed-on: http://git.mosaicstack.dev/mosaic/stack/pulls/422
2026-02-17 22:24:01 +00:00
jason.woltje 35dd623ab5 Merge pull request 'fix(#411): complete auth/frontend remediation and review hardening' (#421) from fix/auth-frontend-remediation into develop
Reviewed-on: http://git.mosaicstack.dev/mosaic/stack/pulls/421
2026-02-17 21:24:13 +00:00
jason.woltje af113707d9 Merge branch 'develop' into fix/auth-frontend-remediation 2026-02-17 20:35:59 +00:00
jason.woltje 0a780a5062 Merge pull request 'bootstrap mosaic-stack to Mosaic standards layer' (#420) from fix/auth-frontend-remediation into main
Reviewed-on: http://git.mosaicstack.dev/mosaic/stack/pulls/420
2026-02-17 18:51:54 +00:00
jason.woltje a1515676db Merge branch 'main' into fix/auth-frontend-remediation 2026-02-17 18:46:50 +00:00
jason.woltjeandClaude Opus 4.6 027fee1afa fix: use UUID for Better Auth ID generation to match Prisma schema
Better Auth generates nanoid-style IDs by default, but our Prisma
schema uses @db.Uuid columns for all auth tables. This caused
P2023 errors when Better Auth tried to insert non-UUID IDs into
the verification table during OAuth sign-in.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-16 22:48:17 -06:00
jason.woltjeandClaude Opus 4.6 abe57621cd fix: add CORS env vars to Swarm/Portainer compose and log trusted origins
The Swarm deployment uses docker-compose.swarm.portainer.yml, not the
root docker-compose.yml. Add NEXT_PUBLIC_APP_URL, NEXT_PUBLIC_API_URL,
and TRUSTED_ORIGINS to the API service environment. Also log trusted
origins at startup for easier CORS debugging.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-16 22:31:29 -06:00
jason.woltje 7c7ad59002 Remove extra docker-compose and .env.exmple files. 2026-02-16 22:08:02 -06:00
jason.woltjeandClaude Opus 4.6 ca430d6fdf fix: resolve Portainer deployment Redis and CORS failures
Remove Docker Compose profiles from postgres and valkey services so they
start by default without --profile flag. Add NEXT_PUBLIC_APP_URL,
NEXT_PUBLIC_API_URL, and TRUSTED_ORIGINS to the API service environment
so CORS works in production.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-16 22:05:58 -06:00
jason.woltjeandClaude Opus 4.6 18e5f6312b fix: reduce Kaniko disk usage in Node.js Dockerfiles
- Combine production stage RUN commands into single layers
  (each RUN triggers a full Kaniko filesystem snapshot)
- Remove BuildKit --mount=type=cache for pnpm store
  (Kaniko builds are ephemeral in CI, cache is never reused)
- Remove syntax=docker/dockerfile:1 directive (no longer needed
  without BuildKit cache mounts)

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-16 20:21:44 -06:00
jason.woltjeandClaude Opus 4.6 d2ed1f2817 fix: eliminate apt-get from Kaniko builds, use static dumb-init binary
Kaniko fundamentally cannot run apt-get update on bookworm (Debian 12)
due to GPG signature verification failures during filesystem snapshots.
Neither --snapshot-mode=redo nor clearing /var/lib/apt/lists/* resolves
this.

Changes:
- Replace apt-get install dumb-init with ADD from GitHub releases
  (static x86_64 binary) in api, web, and orchestrator Dockerfiles
- Switch coordinator builder from python:3.11-slim to python:3.11
  (full image includes build tools, avoids 336MB build-essential)
- Replace wget healthcheck with node-based check in orchestrator
  (wget no longer installed)
- Exclude telemetry lifecycle integration tests in CI (fail due to
  runner disk pressure on PostgreSQL, not code issues)

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-16 20:06:06 -06:00
jason.woltjeandClaude Opus 4.6 fb609d40e3 fix: use Kaniko --snapshot-mode=redo to fix apt GPG errors in CI
Kaniko's default full-filesystem snapshots corrupt GPG verification
state, causing "invalid signature" errors during apt-get update on
Debian bookworm (node:24-slim). Using --snapshot-mode=redo avoids
this by recalculating layer diffs instead of taking full snapshots.

Also keeps the rm -rf /var/lib/apt/lists/* guard in Dockerfiles as
a defense-in-depth measure against stale base-image APT metadata.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-16 19:56:34 -06:00
jason.woltjeandClaude Opus 4.6 0c93be417a fix: clear stale APT lists before apt-get update in Dockerfiles
Kaniko's layer extraction can leave base-image APT metadata with
expired GPG signatures, causing "invalid signature" failures during
apt-get update in CI builds. Adding rm -rf /var/lib/apt/lists/*
before apt-get update ensures a clean state.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-16 19:44:36 -06:00
jason.woltje b719fa0444 Merge pull request 'chore: upgrade Node.js runtime to v24 across codebase' (#419) from fix/auth-frontend-remediation into main
Reviewed-on: http://git.mosaicstack.dev/mosaic/stack/pulls/419
2026-02-17 01:04:46 +00:00
jason.woltje d58bf47cd7 Merge pull request 'fix(#411): auth & frontend remediation — all 6 phases complete' (#418) from fix/auth-frontend-remediation into develop
Reviewed-on: http://git.mosaicstack.dev/mosaic/stack/pulls/418
2026-02-16 23:11:42 +00:00
jason.woltjeandClaude Opus 4.6 491675b613 docs: add auth & frontend remediation plan
Comprehensive plan for fixing the production 500 on POST /auth/sign-in/oauth2
and redesigning the frontend login page to be OIDC-aware with multi-method
authentication support.

Key areas covered:
- Backend: OIDC startup validation, auth config discovery endpoint, BetterAuth
  error handling, PKCE, session hardening, trustedOrigins extraction
- Frontend: Multi-method login page, PDA-friendly error display, adaptive UI
  based on backend-advertised providers, loading states, accessibility
- Security: CSRF rationale, secret leakage prevention, redirect URI validation,
  session idle timeout, OIDC health checks
- 6 implementation phases with file change map and testing strategy

Created with input from frontend design, backend, security, and auth architecture
specialist reviews.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-16 04:43:38 -06:00
jason.woltjeandClaude Opus 4.6 4b3eecf05a fix(#410): pass OIDC_ENABLED to API container in docker-compose
The genericOAuth plugin is conditionally loaded based on OIDC_ENABLED
env var. Without it, BetterAuth has no /sign-in/oauth2 route, causing
404 when the login button is clicked.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-16 04:04:42 -06:00
jason.woltjeandClaude Opus 4.6 3376d8162e fix(#410): skip CSRF guard on auth catch-all route
The global CsrfGuard blocks POST /auth/sign-in/oauth2 with 403 because
unauthenticated users have no session and therefore no CSRF token.
BetterAuth handles its own CSRF protection via toNodeHandler().

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-16 03:41:50 -06:00
jason.woltjeandClaude Opus 4.6 e2ffaa71b1 fix: exempt health endpoint from rate limiting
Docker/load-balancer health probes hit GET /health every ~5s from
127.0.0.1, exhausting the rate limit and causing all subsequent checks
to return 429 — making the service appear unhealthy.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-16 03:21:46 -06:00
jason.woltjeandClaude Opus 4.6 444fa1116a fix(#410): align BetterAuth basePath and auth client with NestJS routing
BetterAuth defaulted basePath to /api/auth but NestJS controller routes
to /auth/* (no global prefix). The auth client also pointed at the web
frontend origin instead of the API server, and LoginButton used a
nonexistent GET /auth/signin/authentik endpoint.

- Set basePath: "/auth" in BetterAuth server config
- Point auth client baseURL to API_BASE_URL with matching basePath
- Add genericOAuthClient plugin to auth client
- Use signIn.oauth2({ providerId: "authentik" }) in LoginButton

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-15 19:41:08 -06:00
jason.woltjeandClaude Opus 4.6 31ce9e920c fix: replace flaky timing-based test with deterministic assertion
The constant-time comparison test used Date.now() deltas with a 10ms
threshold which is unreliable in CI. Replace with deterministic tests
that verify both same-length and different-length key rejection paths
work correctly. The actual timing-safe behavior is guaranteed by
Node's crypto.timingSafeEqual which the guard uses.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-15 19:11:15 -06:00