fe344867c010d642d26693d3d38b3a367beab2ce
LoginGate's initial session check swallowed every failure into the same "unauthenticated" branch, so a genuinely unreachable backend looked identical to a normal logged-out state -- the one screen in the app where "backend not here" showed no feedback at all, since every banner-migrated component only renders after authentication. api/client.ts's request() now throws a dedicated NetworkError (a distinct type, not just a distinguishable message) for a fetch() failure specifically, so LoginGate.tsx's catch can tell that apart from a real 401 via instanceof and show a banner before falling through to "unauthenticated" either way. Verified with a real headless-browser run against the dev server with no backend: the banner renders correctly and coexists with the existing ?auth_error= banner without conflict. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Description
No description provided
Languages
Go
72.8%
TypeScript
20.3%
Python
4.7%
CSS
2.1%