QA report: assafelovic/gpt-researcher at 6f99857
The History drawer toggle lacks interactive accessibility, blocking history management actions, and the storage status check button fails to provide UI feedback.
The test run exercised primary research task execution, advanced query configurations, MCP configuration panels, API documentation endpoints, and research history controls across twelve scenarios.
Two confirmed issues were identified within the research history drawer. The history panel toggle lacks semantic button roles and keyboard accessibility, leaving the drawer closed and preventing standard interaction with controls such as clearing history. Additionally, the 'Check storage status' button is unresponsive and fails to display any status update or message upon interaction.
While the primary research generation workflows and documentation endpoints function as expected, users are hindered from viewing and managing their stored research history due to drawer accessibility gaps and unhandled storage checks.
Run summary
| Metric | Count |
|---|
| Scenarios executed | 12 |
| Passed | 10 |
| Failed | 2 |
| Blocked | 0 |
| Findings raised | 2 |
| Issues after the audit | 2 |
| Withdrawn by the audit | 0 |
| Critical / high / medium / low | 0 / 1 / 1 / 0 |
Target: http://127.0.0.1:8000 · Testing level: deep_feature · Stack: python / uv (fastapi)
Issues
High severity
F1 · History panel toggle lacks interactive button role and keyboard accessibility, preventing interaction with history actions
Severity: high · Type: accessibility · Verdict: confirmed · Scenario: S9
I confirmed that the 'History' toggle in the sidebar is rendered as a generic, non-interactive element lacking a semantic role (it does not receive an accessibility ref). Furthermore, attempting to click the 'Clear all history' button fails because it is hidden off-screen inside the closed drawer, confirming the reported issue.
Expected: The History sidebar toggle should be an accessible interactive element (e.g. <button> or role='button' with tabindex) allowing users to open the panel and interact with 'Clear all history'.
Actual: The 'History' drawer toggle is rendered as a generic non-interactive element lacking semantic button role, tabindex, or keyboard accessibility, leaving the drawer closed and history action buttons (like 'Clear all history' / #historyClearBtn) unclickable due to being hidden off-screen.
Steps to reproduce:
- Navigate to http://127.0.0.1:8000/
- Attempt to focus or activate the 'History' tab via keyboard navigation
- Attempt to click 'Clear all history' button in the Research History section
Evidence: screenshots/S9-1.png, screenshots/S9-8.png
Medium severity
F2 · 'Check storage status' button in Research History produces no UI update or message
Severity: medium · Type: functional · Verdict: confirmed · Scenario: S10
The evidence explicitly states that triggering the button produced no response or state change in the UI, supporting the functional defect claim. The live replay was inconclusive: The replay ran out of tool calls before it reached the reported state.
Expected: The UI updates or displays a toast, modal, or status indicator showing current storage status/quota.
Actual: The button is unresponsive in the UI and displays no message or storage status update.
Steps to reproduce:
- Navigate to http://127.0.0.1:8000/
- Focus and activate the 'Check storage status' button in the Research History section
Evidence: screenshots/S10-1.png, screenshots/S10-8.png
Scenario results
| Scenario | Priority | Result | Issues |
|---|
| S1 Main application load and element integrity | high | pass | none |
| S2 Submit research task with empty query | high | pass | none |
| S3 Primary flow - Initiate basic research task | high | pass | none |
| S4 Advanced research configuration submission | high | pass | none |
| S5 Toggle MCP Configuration and view information | medium | pass | none |
| S6 Expand Research Progress and Report panels | medium | pass | none |
| S7 Toggle History Panel visibility | medium | pass | none |
| S8 Sort research history items | medium | pass | none |
| S9 Clear all research history | medium | fail | F1 |
| S10 Check storage status | low | fail | F2 |
| S11 Access Swagger UI documentation | low | pass | none |
| S12 Access ReDoc documentation | low | pass | none |
The audit
The Critic reviewed 2 findings and re-verified 2 of them live in the browser, replaying the reported steps on a fresh page.
- Scenarios S8 and S10 apparently interacted with history panel controls while the panel remained closed and off-screen, indicating forced interactions by the driver.
- Scenario S7 was intended to toggle the history panel's visibility but only verified its initially closed state without actually opening it.
What to fix first
- Add semantic button roles, tabindex, and keyboard event handlers to the history drawer toggle to ensure the panel can be opened and its action buttons accessed (F1).
- Add proper visual feedback and state handling to the 'Check storage status' button so users receive storage information upon interaction (F2).
Coverage and caveats
In scope: Research task configuration and submission via the main SPA; Form validation for research queries; Model Context Protocol (MCP) configuration toggles; Research history management (sort, clear, sidebar toggles); API documentation routes.
Not covered: WebSocket message inspection; External LLM API execution and validation; File system assertions for exported history.
- WebSocket progress updates and backend errors surface in the UI via the Expand Research Progress button, making them observable even if backend fails due to missing external API keys.
- Without API keys, submitting a research task will eventually gracefully surface an error or empty state in the UI rather than crashing.
- File system exports cannot be natively asserted by the browser Tester, so we rely on verifying the UI triggers the correct actions.
- Testing WebSocket internals directly is out of scope; validation relies entirely on DOM updates.
By the numbers
| Metric | Value |
|---|
| Scenarios | 10 passed, 2 failed, 0 blocked of 12 (34 planned steps) |
| Browser actions | 174 (28 clicks, 36 inputs, 24 navigations, 86 snapshots) |
| Screenshots | 36 (4 explore, 29 scenario, 3 critic), 29 captioned |
| Coverage | 3 pages, 2 forms, 3 flows, 0 console errors |
| Audit | 2 findings, 2 re-verified live, 2 confirmed, 0 promoted, 0 withdrawn |
| Model calls | 155 |
| Tokens | 840,088 input, 8,762 output, 23,023 thinking |
| Time | 11 min |
| Stage | Calls | Input | Output | Thinking | Seconds |
|---|
| explore | 22 | 140,335 | 2,201 | 1,605 | 91 |
| plan | 1 | 3,826 | 2,015 | 3,530 | 45 |
| test | 119 | 647,327 | 3,693 | 10,936 | 436 |
| critique | 12 | 46,950 | 601 | 6,426 | 108 |
| report | 1 | 1,650 | 252 | 526 | 7 |