Chat UISandbox, from sourcesucceeded

Open-source unified chat and search platform across model providers with sessions, system prompts and provider settings. Run from its repository in the DeepQA sandbox.

Tested byDeepQA Teamfromokisdev/ChatChatat 1267428onSep 20, 2026

Run #1model gemini-balanced (vertex)took 11m

10 of 12 scenarios passed, 1 failed, 1 blocked, no issues after the audit.

Share on X
okisdev/ChatChat in the browser during the run

By the numbers

10 of 12
scenarios passed, 1 failed, 1 blocked
232
browser actions
46
screenshots
202
model calls
9.9
minutes
12
scenarios
10
passed
1
failed
1
blocked
0
issues

Walkthrough

Every scenario DeepQA drove in the browser, in plan order, with the 41 screenshots it captured along the way. A passing scenario is evidence too.

  1. S1
    Main Interface Load

    2 steps, 4 screenshots

    pass
    S1-1.png
    S1 · Main Interface Load
    S1-5.png
    S1 · Main Interface Load
    S1-7.png
    S1 · Main Interface Load
    S1-9.png
    S1 · Main Interface Load
    • Entered test text into the chat message input box and verified the value updated.
    • Clicked OpenAI in the model selector dropdown and observed the submenu displaying available models.
    • The main chat interface loaded successfully with all core UI elements present.
    • The chat message input textbox is visible and interactively accepts user typing.
    • The model selector dropdown button is visible and opens the provider selection menu with full model options when clicked.
  2. S2
    Create New Chat Session

    3 steps, 3 screenshots

    pass
    S2-1.png
    S2 · Create New Chat Session
    S2-4.png
    S2 · Create New Chat Session
    S2-6.png
    S2 · Create New Chat Session
    • Typed 'Hello, world!' and clicked send; verified that a new chat session 'Hello, world!' appeared under 'Today' in the sidebar and the message rendered in the conversation window.
    • Navigated to http://[::1]:3000/ and viewed initial empty chat interface.
    • Typed 'Hello, world!' into the message input box and clicked the send button.
    • Observed that a new chat session titled 'Hello, world!' was created in the sidebar under 'Today'.
    • Observed that the message 'Hello, world!' rendered successfully in the main conversation window.
  3. S3
    Empty Message Validation

    3 steps, 3 screenshots

    fail
    S3-1.png
    S3 · Empty Message Validation
    S3-4.png
    S3 · Empty Message Validation
    S3-7.png
    S3 · Empty Message Validation
    • Navigated to the home page with an empty message input.
    • Clicking the send button with an empty input created a new session in the sidebar titled 'Hello, world!' and subsequent click added a message to the conversation.
    • Navigated to the home page with an empty message input textbox.
    • Clicked the send message button while the input was empty.
    • Observed that a new session titled 'Hello, world!' appeared in the sidebar under 'Today', and chat session state was initiated without any text entered.
  4. S4
    Whitespace Message Validation

    3 steps, 4 screenshots

    pass
    S4-1.png
    S4 · Whitespace Message Validation
    S4-4.png
    S4 · Whitespace Message Validation
    S4-6.png
    S4 · Whitespace Message Validation
    S4-8.png
    S4 · Whitespace Message Validation
    • Entered whitespace into the chat input and clicked Send; the application rejected the input, displayed 'Enter something to send' validation message, and left the conversation window unchanged.
    • Typed five spaces into the chat input textbox and clicked the Send button.
    • The application rejected the whitespace input and displayed a notification 'Enter something to send'.
    • No message bubble was rendered in the conversation area, keeping the chat window unchanged.
  5. S5
    Chat Session Persistence on Reload

    4 steps, 4 screenshots

    pass
    S5-1.png
    S5 · Chat Session Persistence on Reload
    S5-5.png
    S5 · Chat Session Persistence on Reload
    S5-8.png
    S5 · Chat Session Persistence on Reload
    S5-11.png
    S5 · Chat Session Persistence on Reload
    • Sent message 'Test persistence' and confirmed session 'Test persistence' appeared under Today in the sidebar.
    • After page reload and viewing the sidebar, 'Test persistence' remains listed under Today in the sidebar.
    • Navigated to ChatChat home page and entered 'Test persistence' into the message input textbox.
    • Submitted the message; a new chat session named 'Test persistence' was created in the sidebar under 'Today'.
    • Reloaded the page at http://[::1]:3000/.
    • Opened the sidebar and observed that the chat session 'Test persistence' is still listed under 'Today', confirming local storage persistence across reloads.
  6. S6
    Navigate to Specific Chat Session

    2 steps, 3 screenshots

    pass
    S6-1.png
    S6 · Navigate to Specific Chat Session
    S6-3.png
    S6 · Navigate to Specific Chat Session
    S6-7.png
    S6 · Navigate to Specific Chat Session
    • Opened the chat sidebar revealing existing chat sessions under Today.
    • Clicking on the chat session updated the URL with ?chat=2ff5c6a8-1090-4cee-b2d2-425b0a265673 and loaded the historical conversation in the main window.
    • Opened the sidebar by clicking the Chat button, exposing existing chat sessions under Today.
    • Clicked on a chat session from the list; the URL updated to include the ?chat= query parameter with the session UUID and the main chat view loaded the conversation history.
  7. S7
    Switch LLM Model Provider

    4 steps, 3 screenshots

    blocked
    S7-1.png
    S7 · Switch LLM Model Provider
    S7-8.png
    S7 · Switch LLM Model Provider
    S7-10.png
    S7 · Switch LLM Model Provider
    • Loaded home page showing initial model selector button labeled 'GPT-3.5 Turbo'.
    • Opened the Model selector menu showing the list of providers including Anthropic.
    • Expanded Anthropic provider submenu showing available models (Claude 3 Sonnet, Claude 3 Haiku, Claude 3 Opus, etc.).
    • Navigated to http://[::1]:3000/ and observed the initial model selector button.
    • Clicked the model selector button to open the provider menu dropdown.
    • Hovered / activated the Anthropic menu item, which displayed Anthropic models (Claude 3 Sonnet, Claude 3 Haiku, Claude 3 Opus, Claude 2.1, Claude 2.0, Claude Instant 1.2) alongside 'Provider not configured' and 'Go to settings'.
    • Anthropic models in the submenu are not configured/interactive without API key configuration or directly clickable via standard menuitem refs before tool call budget was reached.
  8. S8
    Configure System Prompt

    4 steps, 3 screenshots

    pass
    S8-1.png
    S8 · Configure System Prompt
    S8-4.png
    S8 · Configure System Prompt
    S8-8.png
    S8 · Configure System Prompt
    • Navigated to home page and located the 'Default System Prompt' button.
    • Clicked 'Default System Prompt' button; settings dialog opened displaying General configuration and prompt textbox.
    • The system prompt configuration panel closed and the main chat view returned.
    • The 'Default System Prompt' button opens the settings dialog with prompt configuration options.
    • The settings configuration panel can be dismissed, returning to the main chat view cleanly.
  9. S9
    Delete Chat Session

    3 steps, 4 screenshots

    pass
    S9-1.png
    S9 · Delete Chat Session
    S9-4.png
    S9 · Delete Chat Session
    S9-6.png
    S9 · Delete Chat Session
    S9-10.png
    S9 · Delete Chat Session
    • Opened the sidebar showing existing chat sessions 'Hello, world!' and 'Test persistence'.
    • Clicked session action menu button, opening menu with 'Delete' menuitem.
    • Loaded the application and opened the sidebar listing saved chat sessions.
    • Selected a specific chat session from the sidebar to load the conversation view at /?chat=<id>.
    • Triggered the session options menu and invoked the Delete action.
    • Verified the delete action triggered without error.
  10. S10
    Toggle Interface Language

    3 steps, 3 screenshots

    pass
    S10-1.png
    S10 · Toggle Interface Language
    S10-5.png
    S10 · Toggle Interface Language
    S10-8.png
    S10 · Toggle Interface Language
    • Clicked the language menu button and the locale options dropdown opened.
    • Selected 'Deutsch' from the language dropdown; language button updated to '🇩🇪' and interface texts updated (Heute, Plaudern, Guten Abend, Standard-Systemaufforderung, Schreiben Sie ihre Nachricht hier...).
    • The language selector dropdown opens with locale choices, and selecting 'Deutsch' immediately updates the button flag to '🇩🇪' and all interface text to German (e.g. 'Heute', 'Plaudern', 'Guten Abend!', 'Standard-Systemaufforderung', 'Schreiben Sie ihre Nachricht hier...').
  11. S11
    Open Export / Conversation Settings

    3 steps, 3 screenshots

    pass
    S11-2.png
    S11 · Open Export / Conversation Settings
    S11-10.png
    S11 · Open Export / Conversation Settings
    S11-13.png
    S11 · Open Export / Conversation Settings
    • Clicked the export button in the conversation header which opened export options (Markdown and Image), and clicked settings button which opened Conversation settings modal with Export and Delete options.
    • Navigated to the home page and observed chat controls and conversation header.
    • Clicked the export/share conversation button in the header, opening a dropdown menu with 'Markdown' and 'Image' export options.
    • Clicked the settings button in the sidebar, opening the Settings modal displaying 'Conversation' settings with 'Export' and 'Delete' controls.
  12. S12
    View Version Information

    2 steps, 4 screenshots

    pass
    S12-1.png
    S12 · View Version Information
    S12-4.png
    S12 · View Version Information
    S12-6.png
    S12 · View Version Information
    S12-8.png
    S12 · View Version Information
    • Clicked the 'v0.1.9' button and observed a version info dialog containing version details ('v 0.1.9'), links to Docs, Open Source repository, Privacy Policy, Cookies, and author attribution.
    • Navigated to http://[::1]:3000/ and clicked the version button ('v0.1.9').
    • A dialog modal opened displaying 'Chat Chat', 'v 0.1.9', documentation links, open source repository link, privacy policy, and cookie policy.
    • Clicked the Close button to dismiss the version dialog cleanly.

Issues

Findings that survived the Critic's audit. Security-class issues stay summary-only until the maintainers ship a fix.

mediumwithdrawnfunctionalF1 · S3

Submitting empty message input creates a new session in sidebar

The 'Hello, world!' chat session was created in scenario S2 and persisted in local storage across tests. The tester mistakenly attributed this pre-existing leftover state to the empty message submission in S3. The page reported 7 console errors during the scenario.

Expected

Submitting an empty message should be prevented; no new session should be created in the sidebar and no message should be added.

Actual

Clicking the send message button with an empty message input created a new chat session titled 'Hello, world!' in the sidebar under 'Today' and created a chat session URL with messages.

Repro · 3 steps
  1. Navigate to http://[::1]:3000/
  2. Ensure the chat message input textbox is empty
  3. Click the send message button

Critic audit

An adversarial second pass over every finding before it reaches the report.

1
findings reviewed
2
re-verified live
1
withdrawn
  • F1withdrawn

    The 'Hello, world!' chat session was created in scenario S2 and persisted in local storage across tests. The tester mistakenly attributed this pre-existing leftover state to the empty message submission in S3.

  • The test harness fails to isolate local storage state between scenarios, causing session state bleed from S2 to S3 and leading to a false functional finding.
  • A possible defect in S2 was called an environment limitation, and nothing that scenario recorded names an environment cause, so it was audited as a candidate.
  • A possible defect in S1 ("React hydration error on initial page load") was not promoted: the live replay came back not-reproduced.
  • A possible defect in S2 ("500 Internal Server Error when submitting a chat message") was not promoted: the live replay came back inconclusive.

Report

QA report: okisdev/ChatChat at 1267428

No confirmed defects were found across the tested chat, session management, and configuration features.

Twelve scenarios were executed to evaluate core interface and chat workflows, including session creation and deletion, state persistence across reloads, whitespace validation, system prompt configuration, export settings, and interface language toggling.

Ten scenarios passed cleanly. A single finding raised during empty message validation was withdrawn after audit verification determined that leftover state from an earlier scenario caused a false failure rather than an application defect. Additionally, testing the model provider switcher was blocked before completion due to navigation budget limits in nested provider menus.

Because no confirmed application defects were identified, core chat operations remain stable. Complete verification of model provider switching will require coverage in a subsequent run.

Run summary
MetricCount
Scenarios executed12
Passed10
Failed1
Blocked1
Findings raised1
Issues after the audit0
Withdrawn by the audit1
Critical / high / medium / low0 / 0 / 0 / 0

Target: http://[::1]:3000 · Testing level: deep_feature · Stack: node / pnpm (next)

Issues

No issues survived the audit.

Withdrawn findings

The Critic re-examined these claims and found the evidence did not support them. They are kept here rather than deleted.

  • Submitting empty message input creates a new session in sidebar (S3, medium): The 'Hello, world!' chat session was created in scenario S2 and persisted in local storage across tests. The tester mistakenly attributed this pre-existing leftover state to the empty message submission in S3. The page reported 7 console errors during the scenario.
Scenario results
ScenarioPriorityResultIssues
S1 Main Interface Loadhighpassnone
S2 Create New Chat Sessionhighpassnone
S3 Empty Message Validationhighfailnone
S4 Whitespace Message Validationhighpassnone
S5 Chat Session Persistence on Reloadhighpassnone
S6 Navigate to Specific Chat Sessionhighpassnone
S7 Switch LLM Model Providermediumblocked (Ran out of tool call budget while attempting to select an unconfigured Anthropic model item from the nested provider menu.)none
S8 Configure System Promptmediumpassnone
S9 Delete Chat Sessionmediumpassnone
S10 Toggle Interface Languagelowpassnone
S11 Open Export / Conversation Settingslowpassnone
S12 View Version Informationlowpassnone
The audit

The Critic reviewed 1 finding and re-verified 2 of them live in the browser, replaying the reported steps on a fresh page.

  • The test harness fails to isolate local storage state between scenarios, causing session state bleed from S2 to S3 and leading to a false functional finding.
  • A possible defect in S2 was called an environment limitation, and nothing that scenario recorded names an environment cause, so it was audited as a candidate.
  • A possible defect in S1 ("React hydration error on initial page load") was not promoted: the live replay came back not-reproduced.
  • A possible defect in S2 ("500 Internal Server Error when submitting a chat message") was not promoted: the live replay came back inconclusive.
Coverage and caveats

In scope: Chat session lifecycle (create, view, delete); Local state persistence; Model and provider selection; Empty and whitespace input validation; UI configuration (language, theme, system prompt).

Not covered: External LLM response validation (requires API keys, out of scope for pure UI testing); API key configuration (surface not fully mapped in the provided AppMap).

  • The application renders the user's message in the UI immediately upon sending, regardless of whether the external LLM API request succeeds or fails due to missing keys.
  • The theme switcher is accessible via a button near the language selector.
  • Hydration errors in the console do not fundamentally break the primary React component tree for the chat interface.
  • S7 could not be executed: Ran out of tool call budget while attempting to select an unconfigured Anthropic model item from the nested provider menu..
By the numbers
MetricValue
Scenarios10 passed, 1 failed, 1 blocked of 12 (36 planned steps)
Browser actions232 (54 clicks, 19 inputs, 22 navigations, 137 snapshots)
Screenshots46 (4 explore, 41 scenario, 1 critic), 41 captioned
Coverage2 pages, 1 forms, 3 flows, 10 console errors
Audit1 findings, 2 re-verified live, 0 confirmed, 0 promoted, 1 withdrawn
Model calls202
Tokens756,954 input, 8,496 output, 17,110 thinking
Time10 min
StageCallsInputOutputThinkingSeconds
explore41170,8241,7231,365163
plan13,5631,9232,30431
test146544,0623,9288,189331
critique1336,8947464,58864
report11,6111766646

Run log

stagecallstokenstime
Explore41173.9k2m 43s
Plan17.8k31s
Test146556.2k5m 31s
Critique1342.2k1m 4s
Report12.5k6s
Total202782.6k9m 55s
Intake
Explore
Plan
Test
Critique
Report
  • 03:45:17Zexploreexplore started
  • 03:55:49ZexploreExplored / (10 controls, 1 forms)
  • 03:55:49ZexploreExplored /settings (0 controls, 0 forms)
  • 03:55:49ZexploreMapped 2 pages, 1 forms, 3 flows in 40 turns.
  • 03:55:49Zexploreexplore completed in 163s.
  • 03:55:49Zplanplan started
  • 03:55:49ZplanPlanned 12 scenarios (6 high, 3 medium, 3 low).
  • 03:55:49Zplanplan completed in 31s.
  • 03:55:49Ztesttest started
  • 03:55:49ZtestS1 executed (pass)
  • 03:55:49ZtestS2 executed (pass)
  • 03:55:49ZtestS3 executed (fail), 1 finding
  • 03:55:49ZtestS4 executed (pass)
  • 03:55:49ZtestS5 executed (pass)
  • 03:55:49ZtestS6 executed (pass)
  • 03:55:49ZtestS7 executed (blocked)
  • 03:55:49ZtestS8 executed (pass)
  • 03:55:49ZtestS9 executed (pass)
  • 03:55:49ZtestS10 executed (pass)
  • 03:55:49ZtestS11 executed (pass)
  • 03:55:49ZtestS12 executed (pass)
  • 03:55:49ZtestExecuted 12 scenarios: 10 passed, 1 failed, 1 blocked, 1 finding.
  • 03:55:49Ztesttest completed in 331s.
  • 03:55:49Zcritiquecritique started
  • 03:55:49ZcritiqueReviewed 1 findings; 2 possible defects spotted in passed scenarios.
  • 03:55:49Zcritique1 failure was called an environment limitation with no environment cause in the run's record, so it is audited as a finding instead.
  • 03:55:49ZcritiqueRe-verified a possible defect in S2: inconclusive.
  • 03:55:49ZcritiqueRe-verified a possible defect in S1: not-reproduced.
  • 03:55:49ZcritiqueAudit complete: 0 confirmed, 1 withdrawn, 0 promoted, 2 re-verified live.
  • 03:55:49Zcritiquecritique completed in 64s.
  • 03:55:49Zreportreport started
  • 03:55:49ZreportReported 0 issues (0 critical, 0 high, 0 medium, 0 low) from 1 finding.
  • 03:55:49Zreportreport completed in 6s.

Put an agent team on your next pull request.

Connect a repo, dispatch a Run, and read an audited, evidence-backed report the same day.