unsloth/studio
Daniel Han e4edd34e3c
studio/frontend: reconcile stale must_change_password localStorage flag (#5576)
* studio/frontend: reconcile stale must_change_password localStorage flag

The client OR's a localStorage flag against /api/auth/status everywhere it
gates change-password routing, but never clears the flag when the server
flips requires_password_change back to false. A user whose default admin
password was already rotated (change-password from another browser, the
CLI reset-password command, or a recreated auth DB) keeps that flag, so:

1. requirePasswordChangeFlow lets them sit on the change-password route.
2. Back to login bounces via requireGuest, hasActiveSession (which only
   checks key presence, not validity), then getPostAuthRoute, which sends
   the user back because the flag is still set.

End result: the user is pinned on change-password and cannot escape without
clearing localStorage by hand.

Fix the three places that compare server status to the flag:

- auth-guards.ts fetchAuthStatus: clear the local flag whenever the server
  reports requires_password_change = false.
- auth-guards.ts requireGuest: call fetchAuthStatus before routing so a stale
  flag cannot decide getPostAuthRoute.
- auth-form.tsx initializeAuthForm: same reconcile inside the page so the
  change-password page redirects to login as soon as it loads when the
  server no longer requires a change.
- api.ts redirectToAuth: same reconcile in the fetch wrapper's auth redirect.

After the reconcile the redundant mustChangePassword() OR clauses are no
longer load bearing for the change-password gates; the server's
fetchAuthStatus is now the single source of truth.

* shorter comments around auth-status reconcile

* studio/auth: make localStorage reconcile bidirectional
2026-05-19 05:48:46 -07:00
..
backend studio: extract tool-call XML parser into a reusable helper module (#5583) 2026-05-19 05:06:17 -07:00
frontend studio/frontend: reconcile stale must_change_password localStorage flag (#5576) 2026-05-19 05:48:46 -07:00
src-tauri studio: expose launcher capability bits on unauth /api/health (#5486) 2026-05-17 21:29:24 -07:00
__init__.py Final cleanup 2026-03-12 18:28:04 +00:00
install_llama_prebuilt.py tests/studio: lock in Windows GPU detection fix (#5106) with a synthetic CI test (#5376) 2026-05-18 00:06:01 -07:00
install_python_stack.py studio: skip flash-attn install on Blackwell GPUs (sm_100+) (#5420) 2026-05-14 18:13:50 +04:00
LICENSE.AGPL-3.0 Add AGPL-3.0 license to studio folder 2026-03-09 19:36:25 +00:00
setup.bat Final cleanup 2026-03-12 18:28:04 +00:00
setup.ps1 CI: scope GITHUB_TOKEN permissions, add MLX CI, unblock ~60 skipped tests (#5312) 2026-05-11 03:19:13 -07:00
setup.sh Route CPU-only Linux x86_64 to ggml-org/llama.cpp prebuilts (#5302) 2026-05-05 23:22:22 -07:00
Unsloth_Studio_Colab.ipynb studio: add --local to setup.sh + overlay unsloth-zoo from git main (#5252) 2026-05-02 08:51:56 +04:00