Sloth-ninja tackles the login spinner dead end

JessicaOSS now handles a failed profile load as an error users can see, rather than an endless wait.

securityworkflow

A production login incident exposed a familiar legal-tech frustration: someone signs in, the screen keeps spinning, and there is no useful explanation or clear next step.

Sloth-ninja has tightened the app's handling of background failures during sign-in and profile loading. When that early account information cannot be retrieved, the product is designed to surface a proper error state instead of silently leaving the user stranded. The work also hardens related background actions against unhandled failures.

It is a small change with a practical point: access problems should be visible and diagnosable, not mistaken for a slow system.

So what Teams evaluating JessicaOSS for real users should care because reliable sign-in failure handling is basic operational trust.

View this fork on GitHub →

Spotted something wrong? Or know the PR text has fresher detail than the writeup above?

Commits in this thread

2 commits from Sloth-ninja/JessicaOSS, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
23ed39e3 Harden async handlers + profile-load error state (login spinner incident) sloth-ninja 2026-07-21 ↗ GitHub
commit body
Production Supabase lost the service_role grant on user_api_keys; the unwrapped
GET /user/profile handler threw, and after the #22 unhandledRejection guard the
request simply never responded - the frontend gate spun on loading forever
(infinite login spinner). This is the code-level defence.

Backend: audited every async route handler; wrapped 56 unwrapped/partial ones
via a new self-contained lib/asyncHandler.ts (fixed generic 500 detail +
console.error via safeErrorLog; mirrors workflows.ts asyncRoute). Handlers with
whole-body try/catch left untouched. Added user.test.ts covering the GET
/user/profile reject path.

Frontend: 15s AbortController timeout on the profile load + an honest error+retry
state in MfaLoginGate, replacing the silent misleading fallback profile.

Docs: DURABLE_LESSONS 2026-07-21 entry + BUILD_LOG entry.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
0646edf2 Merge pull request #33 from Sloth-ninja/harden-async-handlers Ezana.H 2026-07-21 ↗ GitHub
Harden async handlers + profile-load error state (login spinner incident)

Capture this thread into my fork

Download a single Markdown prompt that tells Claude how to port every commit above into your working tree — adapting paths and structure to match your repo. Run it via claude -p < capture-thread-864.md from inside the repo you want the changes in.

⬇ Download capture-thread-864.md