Skip to content

Conversation

@ErwanDecoster
Copy link
Member

@ErwanDecoster ErwanDecoster commented Jan 7, 2026

Note

Introduces Playwright-based end-to-end testing and runs it in CI.

  • Add @playwright/test, playwright.config.ts, and npm test script; ignore Playwright artifacts in .gitignore
  • Update GitHub Actions workflow to codegen, lint, build, install browsers, run Playwright tests, and upload HTML report
  • Add unlogged E2E tests covering homepage tables, search flows (valid/invalid, enter/mobile), navigation to deal/task details, and tab visibility

Improves accessibility/selectors to stabilize tests and UX.

  • Add aria-labels/roles/ids/button types across CopyButton, Footer, ModeToggle, SmartLinkGroup, AddressChip, Navbar, Tabs, SchemaSearch, and SearcherBar
  • Minor UI refinements (e.g., alt text updates, tablist/tab roles, error alert semantics)

Written by Cursor Bugbot for commit ff4e3a5. This will update automatically on new commits. Configure here.

ErwanDecoster and others added 30 commits October 15, 2025 11:24
…al count for apps, datasets, and workerpools
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…k Explorer link in SmartLinkGroup; add role to Tabs component
@ErwanDecoster ErwanDecoster self-assigned this Jan 7, 2026
@vercel
Copy link

vercel bot commented Jan 7, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
explorer-v2 Ready Ready Preview, Comment Jan 7, 2026 2:10pm

@socket-security
Copy link

socket-security bot commented Jan 7, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​playwright/​test@​1.57.010010010099100

View full report

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the final PR Bugbot will review for you during this billing cycle

Your free Bugbot reviews will reset on January 10

Details

Your team is on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle for each member of your team.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

left: `${indicatorStyle.left}px`,
width: `${indicatorStyle.width}px`,
}}
role="tablist"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tablist role placed on wrong element

Medium Severity

The role="tablist" attribute is added to a decorative indicator <div> that visually shows the active tab selection. This div has no children and is purely for visual styling. The actual <Button> elements with role="tab" are rendered as siblings, not children of this tablist. According to ARIA specifications, tab elements must be owned by or contained within the tablist. The role="tablist" belongs on the outer container div (the one with ref={containerRef}) that actually holds the tab buttons.

Fix in Cursor Fix in Web

type="button"
className="inline-flex items-center gap-2"
id="logout-button"
aria-label="Logout"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Duplicate HTML id attribute for logout buttons

Medium Severity

Two elements are assigned id="logout-button" - one in the desktop dropdown menu (line 83) and another in the mobile navigation menu (line 137). HTML IDs must be unique within a document. Duplicate IDs can cause unpredictable behavior with document.getElementById(), CSS ID selectors, accessibility tools, and test automation frameworks that rely on unique element identification.

Additional Locations (1)

Fix in Cursor Fix in Web

key={label}
data-tab-index={index}
variant="link"
role="tab"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tab role added without required aria-selected attribute

Medium Severity

The role="tab" attribute was added to buttons but without the required aria-selected attribute. The component tracks selection state (currentTab === index) for visual styling, but screen readers cannot determine which tab is currently selected. When using ARIA tab roles, aria-selected="true" must be set on the active tab and aria-selected="false" on inactive tabs for the widget to function correctly with assistive technology.

Fix in Cursor Fix in Web

onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
className="hover:before:bg-muted active:before:bg-secondary relative z-0 -mx-1 -my-1 flex items-center gap-1 px-1 py-1 transition-colors before:absolute before:inset-0 before:-z-10 before:rounded-lg before:duration-200 active:before:scale-x-[0.98] active:before:scale-y-[0.94]"
id="copy-button"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Static ID on reusable component causes duplicates

Medium Severity

The CopyButton component has a hardcoded id="copy-button", but this component is reusable and rendered multiple times on the same page (e.g., via SmartLinkGroup in tables showing deals, tasks, addresses). This creates multiple elements with the same ID in the DOM, which is invalid HTML and can cause issues with getElementById(), accessibility tools, and test selectors targeting this ID.

Fix in Cursor Fix in Web


// Verify that the TASKS tab is visible
await expect(page.getByRole('tab', { name: 'TASKS' })).toBeVisible();
await expect(page.getByRole('tab', { name: 'TASKS' })).toBeVisible();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Duplicate test assertion for TASKS tab visibility

Low Severity

Both test files contain identical duplicate assertions checking for TASKS tab visibility on consecutive lines. The same expect(page.getByRole('tab', { name: 'TASKS' })).toBeVisible() appears twice in a row, which appears to be a copy-paste error that doesn't add any test value.

Additional Locations (1)

Fix in Cursor Fix in Web

: 'Search for the entered value'
}
tabIndex={0}
>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Layout spacing on desktop from visibility change

Low Severity

The outer div previously had sm:hidden which completely removed it from layout on desktop. This class was removed, and sm:sr-only was added only to the inner div. Since sr-only uses position: absolute, the inner content is taken out of document flow, but the outer div still renders with its mt-4 margin (or mt-10 when error). This creates unintended vertical spacing of 16-40px below the search bar on desktop screens that wasn't there before.

Fix in Cursor Fix in Web

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants