Skip to content

fix: stop choppy screen resize when switching modes#1248

Merged
cursor[bot] merged 43 commits into
mainfrom
cursor/fix-mode-switch-lag-22f6
Jul 26, 2026
Merged

fix: stop choppy screen resize when switching modes#1248
cursor[bot] merged 43 commits into
mainfrom
cursor/fix-mode-switch-lag-22f6

Conversation

@BigSimmo

@BigSimmo BigSimmo commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Summary

Stops the choppy phone “screen resize” when switching modes, and closes related mode-home loading/layout thrash:

  • Detect standalone mode homes from pathname only (no optimistic searchMode gate)
  • Navigate out of the dashboard without rewriting chrome first
  • Animate phone reserve padding only while scroll-hidden; mode/route flips snap
  • Reset shared shell scroll + hide state on pathname (resetKey + scrollTop)
  • Keep the default hero/page composer mounted until the portal host attaches
  • Avoid blanking RSC mode-home HTML with ClientHydrationBoundary
  • Gate portal adoption until page-owned composer slots hydrate (data-composer-slot-ready) so hard-loads do not trip React Fix differential badge design for mobile search results #418
  • Keep always-standalone route {children} outside the shell useSearchParams() Suspense so Next streaming cannot leave a hidden duplicate page-root data-testid
  • Dynamic-import ClinicalDashboard so namespaced modes do not parse it eagerly
  • Align mode-home loading.tsx skeletons and related remount/transition gates

Merged latest main including #1252 desktop page-slot search and #1246/#1256 phone chrome work.

Conflict resolutions vs main (judgment)

  1. master-search-header: took main’s page/hero portal rename + desktop page slots; kept this branch’s host-attached keep-alive (did not suppress the default composer on slotId/fallback while waiting).
  2. global-search-shell: took main’s desktop-page-search-composer-slot; kept this branch’s no ClientHydrationBoundary around mode children (LCP/blanking), with ready-gated portal attach + standalone Suspense bypass instead.

Supersedes closed PR #1187.

RAG impact: no retrieval behaviour change — UI chrome, routing ownership, composer portal attach timing, and shell Suspense boundaries only.

Verification

  • npm run verify:cheap — green earlier on tip; focused contracts re-run after portal/Suspense/budget extractions
  • Focused Playwright: phone-scroll sample, DSM/tools route-coverage, and the three previously failing ui-tools specs
  • npm run verify:pr-local
  • UI verification not run: no full ensure/verify:ui in this pass; Production UI CI covers the full Playwright gate

Risk and rollout

  • Risk: low UI chrome/scroll-hide/portal/Suspense wiring on shared shell; no retrieval, answer, or document-access behavior change
  • Rollback: revert this branch / PR
  • Provider or production effects: None

Clinical Governance Preflight

  • Source-backed claims still require linked source verification before clinical use
  • No patient-identifiable document workflow was introduced or expanded without explicit governance approval
  • Supabase target remains Clinical KB Database (sjrfecxgysukkwxsowpy)
  • Service-role keys and private document access remain server-only
  • Demo/synthetic content remains clearly separated from real clinical sources
  • Source metadata, review status, and outdated/unknown-source behavior remain conservative
  • Deployment classification/TGA SaMD impact was checked when clinical decision-support behavior changed

Notes

  • Residual (non-blocking): dashboard ↔ standalone shell remount
  • Optional stash: wip-after-main-merge-registry-cache
Open in Web Open in Cursor 

Summary by CodeRabbit

  • New Features

    • Added consistent loading screens across standalone search modes.
    • Improved navigation between search modes, including services and forms.
    • Preserved document viewer state when changing pages or chunks.
    • Added support for removing private search scope information from the URL.
  • Bug Fixes

    • Reduced layout shifting, loading blank states, and mobile scroll-header glitches.
    • Improved composer rendering during desktop transitions.
    • Prevented unnecessary dashboard and search-result reloads.
  • Tests

    • Expanded coverage for routing, loading states, mobile behavior, and client boundaries.

cursoragent and others added 18 commits July 24, 2026 19:47
Mode switches animated phone composer reserve because searchMode updated
before the pathname landed, briefly leaving isStandaloneModeHome false and
running the 200ms padding transition. Detect mode homes from pathname only,
navigate without optimistic mode state, and limit padding transitions to
scroll-hide.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
After the reserve-flip fix, related choppiness remained from eager
crossModeSearch chrome updates, inherited phone scroll/hide across mode
homes, a hero-portal null gap while slots rebound, a taller mode-home
loading skeleton, and services/forms contentAlign jumping after registry
load. Navigate out of the dashboard without rewriting chrome, reset
scroll-hide on pathname change, keep the default composer until the
portal attaches, align the skeleton to the shell header token, and keep
loading homes top-aligned on phone.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Reset bottom-composer hidden state during render on pathname change
instead of setState-in-effect, and drop the unused hero-portal fallback
flag now that the default composer stays mounted until the host attaches.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Append review of mode/page loading and navigation architecture at HEAD
0ef62ff: P1 shell bundle + hydration blanking; residual remount/tools dual.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Parallel loading review found hard-load blanking from ClientHydrationBoundary,
mismatched/missing mode-home loading skeletons, forms catalog in the client
chunk, ClinicalDashboard static weight on namespaced routes, sidebar column
animation on remount, forms query remounts, and document viewer remounts on
page flips. Paint RSC children immediately, align ModeHomeRouteLoading, wire
mode-home loading.tsx files, server-pass the default form slug, dynamic-import
ClinicalDashboard, gate sidebar transitions after mount, and stop unnecessary
remount keys.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Keeps ClinicalDashboard inside the maintainability budget after the
loading-performance pass, and shares the remount-safe sidebar transition
gate with GlobalSearchShell.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Resolve chrome/scroll conflicts by keeping branch mode-switch lag fixes
(gated padding transitions, dynamic ClinicalDashboard, portal keep-alive,
pathname scroll/hide reset) while adopting main's cross-breakpoint scroll-hide
architecture, lazy sidebar dialogs, and settings-guide flow.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
…h-lag-22f6

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
After merging main's cross-breakpoint scroll-hide wiring, update static
contracts for resetKey=pathname, and keep phone padding transitions gated
to scroll-hide only so mode switches still snap.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@cursor[bot], you've reached your PR review limit, so we couldn't start this review.

Next review available in: 3 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: CHILL

Plan: Pro Plus

Run ID: 38806eb3-5318-4018-aa0b-171624ff03da

📥 Commits

Reviewing files that changed from the base of the PR and between 61013b5 and 83419c9.

📒 Files selected for processing (32)
  • docs/branch-review-ledger.md
  • docs/process-hardening.md
  • docs/search-chrome-behaviour.md
  • src/app/globals.css
  • src/components/ClinicalDashboard.tsx
  • src/components/DocumentViewer.tsx
  • src/components/applications-launcher-page.tsx
  • src/components/clinical-dashboard/dashboard-desktop-result-composer-slot.tsx
  • src/components/clinical-dashboard/favourites-command-library-page.tsx
  • src/components/clinical-dashboard/favourites-hub.tsx
  • src/components/clinical-dashboard/global-search-shell.tsx
  • src/components/clinical-dashboard/master-search-header.tsx
  • src/components/clinical-dashboard/use-document-viewer-chrome-scroll.ts
  • src/components/clinical-dashboard/use-hide-on-scroll.ts
  • src/components/desktop-composer-portal-slot.tsx
  • src/components/document-viewer/pdf-preview-loading.tsx
  • src/components/document-viewer/pdf-viewer-mode.ts
  • src/components/factsheets/factsheets-home-page.tsx
  • src/components/forms/forms-home-page.tsx
  • src/components/mode-home-template.tsx
  • src/components/services/services-navigator-page.tsx
  • src/lib/mode-home-composer.ts
  • src/lib/private-search-scope.ts
  • src/lib/search-route-ownership.ts
  • tests/clinical-dashboard-merge-artifacts.test.ts
  • tests/document-viewer-pdf-reader-lazy.test.ts
  • tests/header-scroll-hide-contract.test.ts
  • tests/mode-home-loading-contract.test.ts
  • tests/search-route-ownership.test.ts
  • tests/therapy-compass-mode-wiring.test.ts
  • tests/ui-phone-scroll.spec.ts
  • tests/ui-tools.spec.ts
📝 Walkthrough

Walkthrough

The changes stabilize mode switching by centralizing route ownership, resetting scroll and shell state on pathname changes, standardizing mode-home loading UI, delaying composer portal handoff, gating layout transitions, and preventing unnecessary component remounts. Tests and documentation record these contracts.

Changes

Mode-switch stabilization

Layer / File(s) Summary
Route ownership and navigation resets
src/lib/search-route-ownership.ts, src/components/clinical-dashboard/..., src/app/(search-app)/page.tsx, tests/search-route-ownership.test.ts
Standalone paths and dashboard-owned hrefs are classified centrally; navigation preserves query state, avoids dashboard-shell resets for external modes, and resets scroll/chrome state on pathname changes.
Loading boundaries and transition gating
src/components/clinical-dashboard/global-search-shell.tsx, src/components/mode-home-page-skeleton.tsx, src/app/(search-app)/*/loading.tsx, src/app/globals.css, tests/mode-home-loading-contract.test.ts
ClinicalDashboard is dynamically loaded, standalone routes use ModeHomeRouteLoading, hydration boundary blanking is removed, sidebar transitions are mount-gated, and mobile padding transitions are limited to hidden states.
Desktop composer portal handoff
src/components/clinical-dashboard/master-search-header.tsx
The inline composer remains mounted until the desktop portal host attaches, replacing retry-budget fallback behavior.
Mode-home data and remount behavior
src/components/forms/..., src/components/services/services-home-page.tsx, src/app/(search-app)/documents/[id]/page.tsx
Form defaults are passed into the home page, loading alignment starts at the top on phones, and query/page changes no longer force unnecessary remounts.
Runtime import boundary validation
tests/forms-client-boundary.test.ts
A source-level dependency graph verifies that client entrypoints do not reach the forms catalog through runtime imports.

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

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant GlobalSearchShell
  participant Router
  participant ModeHomeRouteLoading
  participant ClinicalDashboard
  User->>GlobalSearchShell: Select a search mode
  GlobalSearchShell->>Router: Push mode-specific href
  Router->>ModeHomeRouteLoading: Render route loading fallback
  Router->>ClinicalDashboard: Dynamically render dashboard-owned content
  GlobalSearchShell->>GlobalSearchShell: Reset pathname-bound scroll and chrome state
Loading

Possibly related PRs

Suggested labels: codex

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 16.67% 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
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.
Title check ✅ Passed The title clearly matches the main change: reducing choppy mode-switch resize behavior.
Description check ✅ Passed The description follows the required template and includes summary, verification, risk, governance, and notes sections.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch cursor/fix-mode-switch-lag-22f6

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@supabase

supabase Bot commented Jul 26, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project sjrfecxgysukkwxsowpy because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@BigSimmo
BigSimmo marked this pull request as ready for review July 26, 2026 01:48

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cff2d314a9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/components/ClinicalDashboard.tsx
Comment thread src/app/globals.css Outdated
@BigSimmo

Copy link
Copy Markdown
Owner Author

@codex resolve actionable Codex review findings for this pull request and current head using the repository instructions. This is the pull request's single automatic repair pass: do not perform a fresh review, create new standalone findings, or request another review. Work only the existing unresolved Codex threads on the current head. Always fix P0 and P1 findings. For P2 and lower findings, fix only clear, scoped, low-risk issues; otherwise disposition them with a concise reason. After fixing or dispositioning a thread, reply in that thread with as the first line, followed by a concise summary; that marker authorizes the workflow to close that exact thread. If human input or new authorization is required, do not use the marker and leave the thread open with the blocker. Finish only after every actionable thread is fixed or dispositioned and closed, or explicitly left open for a human decision. Do not update the branch from main, address unrelated reviews, broaden scope, or create more than one scoped fix commit. Do not use external APIs, paid services, credentials, dependency changes, or broad refactors unless explicitly authorized. Add targeted tests where behavior changes and run the narrowest relevant validation.

@chatgpt-codex-connector

Copy link
Copy Markdown

Summary

Testing

  • npx prettier --write src/lib/search-route-ownership.ts tests/search-route-ownership.test.ts src/components/clinical-dashboard/use-hide-on-scroll.ts src/components/ClinicalDashboard.tsx src/components/clinical-dashboard/global-search-shell.tsx src/components/DocumentViewer.tsx src/app/globals.css tests/clinical-dashboard-merge-artifacts.test.ts
  • git diff --check
  • ⚠️ npm run test:focused -- tests/search-route-ownership.test.ts tests/clinical-dashboard-merge-artifacts.test.ts (repository safety guard requires the full unit suite whenever test/configuration files change)
  • ⚠️ node scripts/run-vitest.mjs run tests/search-route-ownership.test.ts tests/clinical-dashboard-merge-artifacts.test.ts --reporter=dot && npm run typecheck (environment uses Node 20 instead of the required Node 24 and lacks node_modules/vitest/vitest.mjs)

View task →

github-actions Bot and others added 4 commits July 26, 2026 02:02
…n blanking

Resolve conflicts from desktop page-slot search (#1252) and phone chrome work
by taking main's page composer slot + portal rename, while keeping this
branch's host-attached keep-alive (no suppress-on-slotId) and omitting
ClientHydrationBoundary around mode-home children.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
…BigSimmo/Database into cursor/fix-mode-switch-lag-22f6

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/components/clinical-dashboard/master-search-header.tsx`:
- Around line 2002-2005: The default hero composer in
renderSearchComposer("default") must remain visible on desktop until both
desktopComposerPortalActive and desktopComposerPortalHost are present; adjust
the sm:hidden behavior accordingly while preserving mobile behavior. Update
tests/search-route-ownership.test.ts lines 111-121 to cover the pre-host desktop
state and verify the fallback is not hidden before portal attachment.

In `@src/components/forms/forms-home-page.tsx`:
- Around line 31-55: Update buildTaskCards so the “Readiness checks” action is
omitted when defaultFormSlug is null, rather than generating the /forms/
fallback URL; preserve the existing card and href when a default slug is
available.

In `@src/lib/private-search-scope.ts`:
- Around line 75-80: Update removePrivateScopeRefFromUrl to include hash in the
Location pick and preserve location.hash when constructing the URL passed to
history.replaceState, while keeping the existing pathname and query-parameter
removal behavior unchanged.

In `@src/lib/search-route-ownership.ts`:
- Around line 42-45: Classify document-search URLs as dashboard-owned by
updating isDashboardModeHref to recognize /documents/search with or without
query parameters. In src/lib/search-route-ownership.ts lines 42-45, make the
predicate change; the ClinicalDashboard.tsx paths at lines 2321-2334 and
2629-2637 require no direct changes because the corrected predicate preserves
their internal transitions. Add positive /documents/search coverage in
tests/search-route-ownership.test.ts lines 73-79.

In `@tests/forms-client-boundary.test.ts`:
- Around line 9-11: Update collectSourceFiles() to scan all supported source
extensions, including .js and .jsx alongside .ts and .tsx. Extend module
resolution for both relative imports and `@/` aliases so matching candidates
across every supported extension are included, ensuring JavaScript entrypoints
and transitive intermediates are captured.
🪄 Autofix (Beta)

❌ Autofix failed (check again to retry)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 1d4e2b0d-16c8-4e25-ac60-649dc78ab4ff

📥 Commits

Reviewing files that changed from the base of the PR and between 2a96c1e and 61013b5.

📒 Files selected for processing (36)
  • docs/branch-review-ledger.md
  • docs/search-chrome-behaviour.md
  • scripts/check-maintainability-budgets.mjs
  • src/app/(search-app)/differentials/loading.tsx
  • src/app/(search-app)/documents/[id]/page.tsx
  • src/app/(search-app)/dsm/loading.tsx
  • src/app/(search-app)/factsheets/loading.tsx
  • src/app/(search-app)/favourites/loading.tsx
  • src/app/(search-app)/forms/loading.tsx
  • src/app/(search-app)/forms/page.tsx
  • src/app/(search-app)/formulation/loading.tsx
  • src/app/(search-app)/page.tsx
  • src/app/(search-app)/specifiers/loading.tsx
  • src/app/(search-app)/therapy-compass/loading.tsx
  • src/app/globals.css
  • src/components/ClinicalDashboard.tsx
  • src/components/clinical-dashboard/global-search-shell.tsx
  • src/components/clinical-dashboard/master-search-header.tsx
  • src/components/clinical-dashboard/shared-search-app-shell.tsx
  • src/components/clinical-dashboard/use-hide-on-scroll.ts
  • src/components/clinical-dashboard/use-sidebar-column-transition.ts
  • src/components/forms/forms-home-page.tsx
  • src/components/forms/forms-search-results-page.tsx
  • src/components/mode-home-page-skeleton.tsx
  • src/components/services/services-home-page.tsx
  • src/lib/private-search-scope.ts
  • src/lib/search-route-ownership.ts
  • tests/clinical-dashboard-merge-artifacts.test.ts
  • tests/document-detail-performance.test.ts
  • tests/forms-client-boundary.test.ts
  • tests/header-scroll-hide-contract.test.ts
  • tests/mode-home-loading-contract.test.ts
  • tests/mode-home-main-align.test.ts
  • tests/search-route-ownership.test.ts
  • tests/therapy-compass-mode-wiring.test.ts
  • tests/ui-phone-scroll.spec.ts

Comment thread src/components/clinical-dashboard/master-search-header.tsx
Comment thread src/components/forms/forms-home-page.tsx Outdated
Comment thread src/lib/private-search-scope.ts Outdated
Comment thread src/lib/search-route-ownership.ts Outdated
Comment thread tests/forms-client-boundary.test.ts
@github-actions

github-actions Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

CI triage

CI failed on this PR. Automated classification of the 2 failed job(s):

  • Production UIneeds investigation: inspect the failing step and uploaded diagnostics; rerun only after classifying the cause.
  • PR requiredneeds investigation: inspect the failing step and uploaded diagnostics; rerun only after classifying the cause.

Compared with main CI run #5867 (success).

Classification is evidence routing, not permission to ignore a failure. Exact quarantined Playwright identities remain governed by the flake ledger.

@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Note

Autofix is a beta feature. Expect some limitations and changes as we gather feedback and continue to improve it.

⚠️ Branch updated during autofix.

The branch was updated while autofix was in progress. Please try again.

cursoragent and others added 11 commits July 26, 2026 03:20
Gate desktop composer portal adoption until page-owned slots mark
themselves ready after hydration, so hard-loads no longer inject a
display:contents host into still-unhydrated RSC HTML (React #418).
Update phone-scroll expectations for scroll-hide-only reserve transitions.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Treat /documents/search as in-shell for cross-mode sync, keep a short-lived reserve-transition marker through hide and reveal, omit readiness cards without a default slug, and preserve URL hashes when clearing private scope refs.
Nesting route children inside the shell's useSearchParams Suspense left a
hidden Next streaming S: clone of forms/favourites/presentation roots under
CI load. Gate always-standalone paths off that boundary and bridge params
beside the shell body so mode-home RSC paint stays.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e963e489c3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/components/clinical-dashboard/global-search-shell.tsx
cursoragent and others added 3 commits July 26, 2026 03:56
Pull PDF viewer mode helpers and document chrome scroll wiring into
focused modules, and isolate the dashboard desktop result composer slot,
so maintainability no-growth budgets pass after the reserve-transition
and portal ready-gate work.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Use useSyncExternalStore for the client-only gate and call the param
callback from layout effect deps instead of updating a ref during render.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Note

Autofix is a beta feature. Expect some limitations and changes as we gather feedback and continue to improve it.

Autofix skipped. No unresolved CodeRabbit review comments with fix instructions found.

cursoragent and others added 5 commits July 26, 2026 04:15
…h-lag-22f6

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Drop the settled-bottom 0.24s reserve check (transition is short-lived on
data-reserve-transitioning), and scope differential presentation lookups to
the live shell scrollport so hidden Next streaming clones cannot fail strict
mode under CI load.

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
… into cursor/fix-mode-switch-lag-22f6

# Conflicts:
#	tests/ui-phone-scroll.spec.ts

Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
@cursor
cursor Bot merged commit dbcd4ce into main Jul 26, 2026
23 checks passed
@cursor
cursor Bot deleted the cursor/fix-mode-switch-lag-22f6 branch July 26, 2026 04:56
cursor Bot pushed a commit that referenced this pull request Jul 26, 2026
Append final land/close rows for the authorized open-PR triage:
closed unsafe audit tips #1255/#1253, and prlanded #1257/#1212/#1241/#1248/#1254/#1259.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
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