Skip to content

fix(ui): bundles deferred UX/validation gaps and E2E coverage - #118

Merged
wgordon17 merged 11 commits into
gordon-code:mainfrom
wgordon17:fix/deferred-gaps-bundle
Jul 27, 2026
Merged

fix(ui): bundles deferred UX/validation gaps and E2E coverage#118
wgordon17 merged 11 commits into
gordon-code:mainfrom
wgordon17:fix/deferred-gaps-bundle

Conversation

@wgordon17

@wgordon17 wgordon17 commented Jul 27, 2026

Copy link
Copy Markdown
Member

Summary

  • Migrates IgnoreBadge and SettingsPage's 3 selects to Kobalte primitives, adds a ScopeToggle tooltip, and adds Zod-scoped validation to updateViewState() (closes BUG-002's residual item)
  • Adds E2E coverage for Dependencies Tab bot-detection/abandoned-pill rendering and NotificationDrawer animation/reduced-motion behavior, previously untestable in happy-dom
  • Fixes two real bugs found by adversarial code review: a blank Select trigger when the Dependencies tab is disabled while set as the default tab, and a stale Jira custom-scope reference surviving disconnect/scope-deletion (BUG-008)

Also includes a pnpm-workspace.yaml allowBuilds fix (esbuild/sharp/workerd) needed to unblock installs under pnpm 11 after upstream's dependency-bump commit (see pnpm/pnpm#11574).

wgordon17 added 11 commits July 27, 2026 09:40
Kobalte portals Popover.Content to document.body, escaping the
component's original stacking context. Without an explicit z-index
the popover could render behind the fixed Header, sticky group
headers, or fixed footer. Matches the z-50 convention already used
by FilterPopover.tsx and the migrated SettingsPage Select triggers.
…vior

Adds regression coverage for two previously-untested IgnoreBadge behaviors
found by quality-gate: the z-50 stacking-context fix, and the deliberate
decision that individual Unignore clicks keep the popover open (only
Unignore All closes it).
Mirrors the existing reset guards for the tracked-items and
GitHub-Actions toggles. Without this, disabling the Dependencies tab
while it was the configured default tab left the migrated Kobalte
Select trigger showing blank text (no option in the list matches the
stale defaultTab value) until the user manually reselected a tab.

Found by quality-gate adversarial review.
…able

Completes coverage for the b9dc2e2 fix — the code path resetting
viewState.lastActiveTab was correct but untested. Found by Layer 2
completeness re-review (Pass 2).
Closes BUG-008. viewState.tabFilters.jiraAssigned.scope could hold a
reference to a custom Jira scope ID that no longer exists after (1)
disconnecting Jira (clearJiraConfigFull wipes customScopes but left
the tab filter untouched), or (2) deleting the active custom scope via
JiraScopePicker. Either path let a stale scope ID survive into the
next fetchJiraAssigned() call, which fired an invalid JQL query and
surfaced a confusing 'Custom scope not supported' toast before the
existing error-handler/tab-mount guards self-healed it.

Extracts the validity check into a pure, exported staleJiraScopeReset()
helper shared by both call sites (handleJiraDisconnect and the scope
picker's onSave), matching the same built-in-scope list already used
by JiraAssignedTab's reactive guard. Adds direct unit tests for the
helper plus two integration tests covering the disconnect path.
@wgordon17
wgordon17 marked this pull request as ready for review July 27, 2026 17:53
@wgordon17
wgordon17 merged commit ab96552 into gordon-code:main Jul 27, 2026
1 check passed
@wgordon17
wgordon17 deleted the fix/deferred-gaps-bundle branch July 27, 2026 17:55
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.

1 participant