storkit: create 450_bug_web_ui_silently_swallows_chat_errors_including_oauth_login_link
This commit is contained in:
@@ -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
|
|
||||||
+27
@@ -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
|
||||||
Reference in New Issue
Block a user