storkit: create 450_bug_web_ui_silently_swallows_chat_errors_including_oauth_login_link

This commit is contained in:
dave
2026-03-31 10:55:02 +00:00
parent 9e7bd33822
commit 063e0fa76e
2 changed files with 27 additions and 27 deletions
@@ -1,27 +0,0 @@
---
name: "OAuth callback URL ignores --port CLI flag"
---
# Bug 449: OAuth callback URL ignores --port CLI flag
## Description
OAuthState is initialized with `resolve_port()` (reads STORKIT_PORT env var, defaults to 3001) instead of the actual port the server is listening on. When the server is started with `--port 4000`, the OAuth callback URL is still generated as `http://localhost:3001/callback`, so the Anthropic redirect lands on the wrong server and the state parameter lookup fails with "Unknown or expired state parameter".
## How to Reproduce
Start storkit with `--port 4000` (without setting STORKIT_PORT env var). Click the OAuth login button in the web UI. Authenticate with Anthropic. The callback redirect goes to localhost:3001 instead of localhost:4000.
## Actual Result
Callback hits port 3001 (or wrong port). If a different storkit is running there, it returns "Invalid State". If nothing is running there, the page fails to load.
## Expected Result
Callback URL should use the actual server port (from --port CLI flag), so the redirect returns to the correct server instance.
## Acceptance Criteria
- [ ] build_routes receives the actual listening port and passes it to OAuthState::new
- [ ] OAuth callback URL matches the port the server is actually listening on
- [ ] Works with --port flag, STORKIT_PORT env var, and default port
@@ -0,0 +1,27 @@
---
name: "Web UI silently swallows chat errors including OAuth login link"
---
# Bug 450: Web UI silently swallows chat errors including OAuth login link
## Description
When the WebSocket chat returns an error (e.g. OAuth authentication failed with a login URL), the `onError` handler in `Chat.tsx` only logs to `console.error` and resets loading state. The error message is never displayed to the user. This means the OAuth login link from story #448 works on Matrix/WhatsApp but is invisible in the web UI.
## How to Reproduce
Use the web UI with missing or expired OAuth credentials. Send any chat message. The server detects auth failure, attempts token refresh, fails, and returns an error containing a login URL over WebSocket.
## Actual Result
Nothing visible happens. The error is logged to browser console only. The user sees no feedback.
## Expected Result
The error message (including the clickable OAuth login link) should be displayed in the chat as an assistant message so the user can act on it.
## Acceptance Criteria
- [ ] WebSocket error messages are displayed in the chat UI as assistant messages
- [ ] OAuth login URL in the error is rendered as a clickable link
- [ ] Consistent with how Matrix and WhatsApp transports display the same error