Skip to content

fix(gui): clear remaining react-doctor code findings#480

Merged
Wibias merged 4 commits into
lidge-jun:devfrom
Wibias:fix/react-doctor-followup
Jul 26, 2026
Merged

fix(gui): clear remaining react-doctor code findings#480
Wibias merged 4 commits into
lidge-jun:devfrom
Wibias:fix/react-doctor-followup

Conversation

@Wibias

@Wibias Wibias commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Rewritten from the original combined follow-up: code fixes only (correctness/a11y + mechanical react-doctor findings).
  • Fixes effect cleanup, barrel→shared i18n imports, button types, dialog/menu roles, fetch status checks, loading finally resets, unused exports, toSorted/structuredClone, provider catalog polish, and related GUI issues.
  • Doctor policy/config (gui/doctor.config.json, gui/.react-doctor-ignores.md) moved to chore(gui): document intentional react-doctor policy disables #481 so this lands independently of intentional rule disables.

Note on doctor score

Full npx react-doctor@0.9.1 --scope full 100/100 still needs #481 (rule disables for SPA fetch-in-effect, giant components / useReducer, parent sync effects, draft JSON editor derived state, etc.). This PR alone may leave policy-gated diagnostics.

Test plan

Split

Companion policy/config: #481

Summary by CodeRabbit

  • Accessibility
    • Improved keyboard and focus behavior for expandable model/usage rows and tooltips (now button-based).
    • Updated multiple modals to use explicit backdrop-dismiss controls; added/adjusted ARIA labels and semantic list markup.
    • Enhanced “edit notes” UX by focusing the notes field when entering edit mode.
  • Provider Management
    • Refreshed provider workspace catalog tiering/sorting/status and reauth overlay behavior; improved provider name branding/display.
  • Bug Fixes
    • More reliable polling cancellation/timeouts and improved locale-aware number formatting performance (cached formatters).
    • Strengthened request/save error handling and state cleanup across configuration and key workflows.
  • Tests
    • Updated tests for models header behavior and provider workspace catalog/preset logic.

@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@Wibias, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 36 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 4fbcc9c0-3a02-4426-b97d-ffd6ddfad285

📥 Commits

Reviewing files that changed from the base of the PR and between 9f9bdd0 and a404a45.

📒 Files selected for processing (3)
  • gui/src/pages/use-providers-crud.ts
  • gui/tests/provider-overview-notes-save.test.tsx
  • gui/tests/use-providers-crud-update.test.tsx
📝 Walkthrough

Walkthrough

The GUI now uses shared i18n modules, explicit dialog backdrop controls, semantic interactive markup, safer async cleanup and HTTP handling, immutable sorting, cached number formatting, provider workspace tiering, and stable identifiers for Claude model mappings.

Changes

GUI cleanup and reliability

Layer / File(s) Summary
Shared i18n module migration
gui/src/i18n/*, gui/src/App.tsx, gui/src/components/*, gui/src/pages/*, gui/src/provider-workspace/*
Translation hooks, types, locale utilities, and LanguageProvider now use shared i18n module paths.
Dialog dismissal and interactive semantics
gui/src/components/*Modal*, gui/src/components/*dialogs*, gui/src/pages/dashboard-dialogs.tsx, gui/src/ui.tsx, gui/src/styles.css
Backdrop dismissal uses explicit controls; buttons, tooltips, lists, filters, and expandable rows receive updated semantic markup and keyboard behavior.
Provider workspace and catalog behavior
gui/src/provider-workspace/catalog.ts, gui/src/components/provider-catalog/*, gui/src/components/provider-workspace/*, gui/src/provider-payload.ts
Provider tiers, workspace sections, reauthentication status, display names, defaults, and provider payload cloning are updated.
Async handling and stable rendering
gui/src/components/MemoryObservabilityCard.tsx, gui/src/hooks/*, gui/src/pages/ClaudeCode*, gui/src/pages/Models.tsx, gui/src/pages/Logs.tsx
Request cleanup, response validation, save-state resets, cached formatting, immutable sorting, reset-credit parsing, and stable model-map keys are updated.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

Suggested labels: chore

Suggested reviewers: ingwannu, lidge-jun

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 4.65% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the PR’s main goal: fixing remaining GUI react-doctor findings.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

Fix effect cleanup, mechanical a11y/perf warnings, barrel imports, button types, dialog roles, fetch status checks, loading finally resets, unused exports, and related GUI correctness issues. Doctor policy/config changes land in a separate PR.
@Wibias
Wibias force-pushed the fix/react-doctor-followup branch from c8d5df1 to 3089791 Compare July 26, 2026 04:48
@Wibias Wibias changed the title Clear remaining GUI react-doctor findings (50 → 100) fix(gui): clear remaining react-doctor code findings Jul 26, 2026
@github-actions github-actions Bot added the bug Something isn't working label Jul 26, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

Wibias added 2 commits July 26, 2026 06:56
React-doctor cleanup removed isPaidProvider, pickCanonicalForwardProvider, providerBrandColor, and sortPresets. Sync provider-workspace-data tests so bun test no longer fails on missing named exports.
Restore insecure-context UUIDs, poll timeouts, modal stacking/a11y, notes save/focus, list semantics, and related GUI test expectations from PR lidge-jun#480 review threads.
coderabbitai[bot]

This comment was marked as resolved.

CodeRabbit on lidge-jun#480: updateProvider now awaits fetchConfig before returning success, and ProviderOverview notes save has regression coverage for rejected and deferred successful updates.
@Wibias

Wibias commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator Author

Addressed the two CodeRabbit notes-save threads:

  • updateProvider now awaits fetchConfig() before returning { ok: true }, so the notes editor only closes after provider state has refreshed.
  • Added regression coverage in gui/tests/provider-overview-notes-save.test.tsx (rejected save keeps editor/draft/error; success closes only after ack) and gui/tests/use-providers-crud-update.test.tsx (success waits on refresh).

Pushed in a404a45.

@Wibias
Wibias merged commit 6d8f05f into lidge-jun:dev Jul 26, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant