You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(comprehension): finalize Story 3-3 — manual QA + cross-cutting fixes
Bundle of Story 3-3 follow-up patches and three regressions surfaced
during the live manual QA session on 2026-04-11.
## Manual QA fixes (cross-cutting)
* Epic 1 regression — get_installations_for_user called
GET /user/installations, which 403s for OAuth-App tokens (only
GitHub-App user-auth tokens work there). Refactored to verify access
locally for User-type installs and via /user/orgs for Org-type
installs. Added read:org to OAUTH_SCOPES. Updated test_router mock.
This regression silently broke GET /api/v1/sessions/{id} (502 Bad
Gateway) and would have shipped to production if Story 3-3 hadn't
exercised the path end-to-end.
* Story 3-3 SSE auth wiring (3 compounding bugs):
- useSSE.ts doc claimed JWT lived in a cookie; it lives in the
Zustand store. EventSource cannot send custom headers.
- ChatPanel built a relative SSE URL; Vite dev does not proxy to
the API on port 8000.
- get_current_user only read the Authorization header.
Fix: backend accepts ?access_token= query-param fallback (security
trade-off documented inline). Frontend builds an absolute URL with
the JWT in the query string. API_BASE exported from
shared/api/client.ts. 2 new dependency tests for the new auth path.
* Story 3-2 dark-mode contrast — react-diff-view's default CSS uses
pale-green / pale-red backgrounds with `color: initial`, making the
diff text unreadable on the dark surface. Override the --diff-* CSS
custom properties in index.css. Cascade order fix: import the library
CSS in main.tsx BEFORE index.css.
## Story 3-3 follow-up patches
Bundled together: SSE generator polish, repository test additions,
agents test, diff_refs test, store/useSSE test additions, alembic
migration tweaks. See individual file diffs.
## QA results
20/26 checklist items checked, 6 explicitly skipped per Option 3
scoping (rationale documented in the story file's Manual QA Results
section). 4 deferred follow-ups documented (no SSE replay on resume,
StrictMode double-mount rollback, misleading Connection-lost banner
for 4xx, react-diff-view markdown tokenize warning).
Story 3-3 transitions awaiting-manual-qa → done in sprint-status.yaml.
## Verification
259 backend tests + 57 frontend tests + ruff + ruff format + eslint
all green on the bundled state.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
0 commit comments