QA report: external/omnihub.xyz at hosted
A critical crash on the bridge feature and widespread keyboard accessibility barriers in the wallet connection modal impede navigation and core flows.
Testing focused on discovering and interacting with OmniHub features on the Arc testnet, including wallet connection dialogs, collection creation, faucet claims, navigation switches, and UI controls across 12 scenarios. Out of these, 4 passed, 3 failed, and 5 were blocked. One finding concerning dark mode toggle responsiveness was withdrawn during audit after verification showed a test harness actionability issue rather than an application defect.
The primary functional failure is a high-severity crash where clicking the sidebar 'Bridge & swap' button unmounts the entire application interface, rendering a blank page. In addition, the 'Connect to OmniHub' modal contains recurring accessibility flaws: wallet provider choices are rendered as non-interactive generic div elements without button semantics or keyboard focusability, and the modal dialog is missing a required accessible title.
Primary creation, minting, network rejection, and faucet verification flows were blocked because the wallet could never be chosen: the options in the connect dialog are plain div elements, so the test driver, like keyboard and assistive-technology users, could not activate them (see F1). A test wallet was injected in the browser throughout. For release readiness, resolving the bridge crash and standardizing modal accessibility semantics should be addressed prior to full on-chain deployment validation.
Run summary
| Metric | Count |
|---|
| Scenarios executed | 12 |
| Passed | 4 |
| Failed | 3 |
| Blocked | 5 |
| Findings raised | 5 |
| Issues after the audit | 5 |
| Withdrawn by the audit | 1 |
| Critical / high / medium / low | 0 / 2 / 1 / 0 |
Target: https://omnihub.xyz/discover/arc-testnet · Testing level: deep_feature · Stack: unknown
Issues
High severity
F1 · Wallet options in Connect to OmniHub dialog lack interactive button semantics and keyboard accessibility
Severity: high · Type: accessibility · Verdict: confirmed · Scenario: S1
Clicking 'Connect Wallet' opens a modal titled 'Connect to OmniHub'. The wallet options (MetaMask, Rabby Wallet, Coinbase Wallet, OKX Wallet, Zerion) are exposed in the accessibility tree as 'generic' elements rather than buttons or links, confirming the reported lack of interactive semantics. The page reported 2 console errors during the scenario.
Expected: Wallet selection options should be rendered as interactive button elements (or have role="button" and tabindex="0") so users can select and activate wallet connection.
Actual: Wallet selection options (MetaMask, Coinbase Wallet, Rabby Wallet, OKX Wallet, Zerion) inside the 'Connect to OmniHub' dialog are rendered as generic elements without button roles or tabindex, making them inaccessible to keyboard navigation and accessibility tools.
Steps to reproduce:
- Navigate to https://omnihub.xyz/discover/arc-testnet
- Click the 'Connect Wallet' button in the top banner
- Observe that wallet options in the 'Connect to OmniHub' modal cannot be focused or triggered via keyboard or standard accessibility actions
Evidence: screenshots/S1-3.png, screenshots/S1-7.png
F5 · 'Bridge & swap' button unmounts UI and leaves a blank screen
Severity: high · Type: functional · Verdict: confirmed · Scenario: S11
I navigated to the Arc Testnet discover page and clicked the 'Bridge & swap' button in the left sidebar. The UI completely unmounted, resulting in a blank page with zero elements rendered, verifying the reported crash. The page reported 1 console error during the scenario.
Expected: Clicking 'Bridge & swap' should open a bridge interface/modal within the app or navigate to a valid bridging page.
Actual: Clicking the 'Bridge & swap' button in the sidebar crashes/unmounts the application UI, leaving a completely blank page with 0 elements rendered.
Steps to reproduce:
- Navigate to https://omnihub.xyz/discover/arc-testnet
- Click the 'Bridge & swap' button in the left sidebar under the Tools section
Evidence: screenshots/S11-5.png, screenshots/S11-8.png
Medium severity
F2 · Wallet selection options in Connect Wallet modal lack keyboard focusability and button semantics (withdrawn in review, duplicate of F1)
Review note (2026-09-16): Withdrawn in human review on 2026-09-16 as a duplicate of F1: the same wallet options in the same Connect to OmniHub dialog, reported again from another scenario.
Severity: medium · Type: accessibility · Verdict: withdrawn · Scenario: S3
The evidence supports the claim that the wallet selection options lack necessary attributes (role="button" and tabIndex) for keyboard navigation. The page reported 2 console errors during the scenario.
Expected: Each wallet provider option should be an interactive button (or have role="button" and tabIndex={0}) that can be navigated to via Tab and activated with Enter or Space.
Actual: Wallet options in the Connect to OmniHub modal are rendered as non-interactive generic elements without role="button" or tabIndex, preventing keyboard navigation and assistive technology users from focusing or selecting a wallet.
Steps to reproduce:
- Navigate to https://omnihub.xyz/collection/arc-testnet/arc-omnihub
- Click the 'Connect Wallet' button in the navigation header
- Press the Tab key to navigate through the modal options
Evidence: screenshots/S3-5.png
F3 · Wallet provider options in Connect Wallet modal are not keyboard accessible or interactive semantic elements (withdrawn in review, duplicate of F1)
Review note (2026-09-16): Withdrawn in human review on 2026-09-16 as a duplicate of F1: the same wallet options in the same Connect to OmniHub dialog, reported again from another scenario.
Severity: medium · Type: accessibility · Verdict: withdrawn · Scenario: S7
The tester verified the wallet provider options are plain div elements without roles or tabindexes, making them inaccessible to keyboard users. The page reported 2 console errors during the scenario.
Expected: Wallet provider selection items should be interactive buttons or have role="button" and tabindex="0" so keyboard users and assistive tools can focus and select them.
Actual: Wallet provider options in the Connect Wallet modal (MetaMask, Rabby Wallet, Coinbase Wallet, OKX Wallet, Zerion) are plain div elements without role="button" or tabindex="0", rendering them completely inaccessible to keyboard navigation and assistive technologies.
Steps to reproduce:
- Navigate to https://omnihub.xyz/discover/arc-testnet
- Click the 'Connect Wallet' button in the top navigation bar
- Attempt to navigate to or activate MetaMask or other wallet options using keyboard (Tab / Enter)
Evidence: screenshots/S7-4.png
F6 · Missing required DialogTitle for screen reader accessibility in wallet modal
Severity: medium · Type: accessibility · Verdict: promoted · Scenario: S8
Surfaced by the audit of S8, which the Tester passed, and reproduced live: Clicked "Connect Wallet" to open the modal. Examined the accessibility tree and observed that the resulting dialog element does not have an accessible name associated with it (it appears as just dialog without a title), confirming the DialogTitle or visually hidden equivalent is missing. The page reported 2 console errors during the scenario.
Expected: The dialog should include a DialogTitle or visually hidden equivalent to ensure accessibility for screen reader users.
Actual: A console error indicates that DialogContent is missing the required DialogTitle component.
Steps to reproduce:
- Navigate to the application.
- Trigger an action that opens a dialog, such as the Connect Wallet modal.
- Check the console and accessibility tree for the dialog implementation.
Evidence: screenshots/critic-M1-1.png
Withdrawn findings
The Critic re-examined these claims and found the evidence did not support them. They are kept here rather than deleted.
- Dark mode toggle switch in sidebar cannot be clicked or activated (S10, medium): The evidence explicitly notes the failure was due to layout interception and an actionability check timeout, which is a test driver limitation rather than a defect in the application. The page reported 1 console error during the scenario.
Scenario results
| Scenario | Priority | Result | Issues |
|---|
| S1 Connect Wallet and verify network | high | fail | F1 |
| S2 Create Collection - Primary Flow | high | blocked (Execution could not complete the deployment step because no Web3 wallet provider is connected or available to sign the deployment transaction in the headless test environment.) | none |
| S3 Mint NFT - Primary Flow | high | blocked (Wallet connection and on-chain mint execution cannot be completed in this headless environment because an interactive Web3 wallet extension is not available to sign/authorize connections and transactions.) | F2 |
| S4 Create Collection - Missing Required Fields | medium | blocked (The network mode switch redirected back to the home page, and the tool-call budget was exhausted before completing the network selection and deploy validation step.) | none |
| S5 Create Collection - Invalid Supply Limit | medium | pass | none |
| S6 Faucet Claim - Valid Request | medium | blocked (The faucet does not provide a plain text input for wallet addresses and instead requires connecting an external Web3 wallet extension and completing prerequisite verification tasks.) | none |
| S7 Network Switch - Rejection Handling | medium | blocked (Cannot authorize wallet connection because wallet provider options in the Connect Wallet modal are non-interactive divs lacking keyboard focus and interactive accessibility roles.) | F3 |
| S8 Faucet Claim - Empty Address | low | pass | F6 |
| S9 Create Collection - Ask AI Button | low | pass | none |
| S10 Dark Mode Toggle | low | fail | none |
| S11 Bridge and Swap Access | low | fail | F5 |
| S12 Verify React Hydration and Accessibility Logs | low | pass | none |
The audit
The Critic reviewed 5 findings and re-verified 4 of them live in the browser, replaying the reported steps on a fresh page.
- Findings F1, F2, and F3 report the exact same accessibility defect regarding the Connect Wallet dialog across different scenarios.
- Multiple scenarios (S2, S3, S4, S6, S7) were blocked because the wallet options in the connect dialog are not semantic controls (F1), so no wallet could be chosen. Review note (2026-09-16): Human review on 2026-09-16: the injected test wallet was present in the browser for the whole run, so the blocked scenarios (S2, S3, S4, S6, S7) were not caused by a missing wallet extension. They trace back to F1: the wallet options are plain div elements without button semantics, so the test driver, which activates only semantic controls exactly as keyboard and assistive-technology users do, could not choose a wallet and no connection happened. F2 and F3 were withdrawn as duplicates of F1.
- The tester explicitly ran a scenario to verify React hydration (S12) but subsequently ignored the React #418 hydration mismatch error present in the console logs of that very scenario.
- The tester incorrectly classified a Playwright actionability timeout (due to element positioning/interception) as a functional application defect in F4.
- A possible defect in S12 ("React hydration mismatch error on initial page load") was not promoted: the live replay came back not-reproduced.
What to fix first
- Fix the unhandled exception on the 'Bridge & swap' navigation action that unmounts the interface and leaves a blank screen (F5).
- Convert wallet provider selection elements in the Connect to OmniHub modal to interactive button elements with proper keyboard focus and accessibility roles (F1, F2, F3).
- Add the missing DialogTitle component to the wallet modal's DialogContent to satisfy screen reader accessibility requirements (F6).
Coverage and caveats
In scope: Wallet connection and network management on Arc Testnet; Creating NFT collections via the studio form; Minting NFTs from existing Arc Testnet collections; Requesting tokens from the dedicated Arc Testnet Faucet; Form validation for required and constrained fields; Auxiliary interactive elements like Dark mode, Ask AI, and Bridge access.
Not covered: Quests feature (noted as 'Soon' and disabled in the AppMap); Non-Arc testnets (the injected test wallet explicitly refuses other chains); Mainnet deployments (out of scope for a testnet-focused environment).
- The test wallet is pre-configured to connect seamlessly and holds sufficient test USDC for gas.
- The wallet's strict rejection of non-Arc chains will be surfaced to the UI, allowing verification of the application's error handling.
- AI image generation relies on a third-party or internal API that is available in the test environment.
- S2 could not be executed: Execution could not complete the deployment step because no Web3 wallet provider is connected or available to sign the deployment transaction in the headless test environment..
- S3 could not be executed: Wallet connection and on-chain mint execution cannot be completed in this headless environment because an interactive Web3 wallet extension is not available to sign/authorize connections and transactions..
- S4 could not be executed: The network mode switch redirected back to the home page, and the tool-call budget was exhausted before completing the network selection and deploy validation step..
- S6 could not be executed: The faucet does not provide a plain text input for wallet addresses and instead requires connecting an external Web3 wallet extension and completing prerequisite verification tasks..
- S7 could not be executed: Cannot authorize wallet connection because wallet provider options in the Connect Wallet modal are non-interactive divs lacking keyboard focus and interactive accessibility roles..
By the numbers
| Metric | Value |
|---|
| Scenarios | 4 passed, 3 failed, 5 blocked of 12 (41 planned steps) |
| Screenshots | 40 (8 explore, 28 scenario, 4 critic), 28 captioned |
| Coverage | 12 pages, 2 forms, 4 flows, 2 console errors |
| Audit | 5 findings, 4 re-verified live, 2 confirmed, 1 promoted, 3 withdrawn |
| Model calls | 206 |
| Tokens | 2,314,656 input, 11,533 output, 23,436 thinking |
| Time | 15 min |
| Wallet | 0 transactions, 0 signatures, 0 refusals on chain 5042002 |
| Stage | Calls | Input | Output | Thinking | Seconds |
|---|
| explore | 31 | 464,477 | 2,554 | 1,139 | 148 |
| plan | 1 | 4,359 | 2,110 | 3,879 | 49 |
| test | 156 | 1,699,573 | 5,073 | 11,863 | 549 |
| critique | 17 | 143,965 | 1,410 | 6,046 | 119 |
| report | 1 | 2,282 | 386 | 509 | 7 |