Skip to content

Improve ADE PR, lane, and TUI workflows#312

Merged
arul28 merged 3 commits into
mainfrom
ade/ship-current-main-changes-20260514
May 15, 2026
Merged

Improve ADE PR, lane, and TUI workflows#312
arul28 merged 3 commits into
mainfrom
ade/ship-current-main-changes-20260514

Conversation

@arul28
Copy link
Copy Markdown
Owner

@arul28 arul28 commented May 14, 2026

Summary\n- tighten PR snapshot routing and progressive PR detail hydration\n- add lane delete cleanup parity across desktop, sync, iOS, and runtime actions\n- improve ADE Code terminal control packaging and validation\n- update internal docs and prune obsolete notes\n\n## Validation\n- npm install in apps/desktop, apps/ade-cli, apps/web (no lockfile drift)\n- npm run typecheck in apps/desktop, apps/ade-cli, apps/web\n- npm --prefix apps/desktop run lint\n- desktop vitest shards 1/8 through 8/8; shard 8 had one flaky failure, rerun of src/main/services/chat/cursorModelsDiscovery.test.ts passed\n- npm test in apps/ade-cli\n- npm run build in apps/desktop, apps/ade-cli, apps/web\n- node scripts/validate-docs.mjs and internal docs link/source-map checks\n- xcrun swiftc -parse for changed iOS app/test Swift files

Summary by CodeRabbit

  • New Features

    • Added Claude terminal control toggle (Ctrl+T) for switching between ADE and Claude terminal control in the UI.
  • Bug Fixes

    • Improved lane deletion to properly clean up associated environments and port allocations.
    • Fixed PR detail view to prevent stale snapshot data from overwriting fresh live data.
    • Enhanced PR snapshot handling by removing legacy cross-repo external PR references.
    • Extended lane deletion timeout to 4 minutes for better handling of longer operations.
  • Tests

    • Added comprehensive test coverage for terminal control functionality, lane deletion cleanup, and PR data refresh behavior.

Review Change Stack

Greptile Summary

This PR tightens PR detail hydration to prevent stale snapshot data from overwriting live responses, extends lane deletion to clean up associated environments and port leases across desktop, sync, iOS, and runtime action paths, and adds a Ctrl+T toggle for Claude terminal control in the TUI with animated border feedback.

  • PR context fix: PrsContext.tsx now gates markPrimarySettled behind if (cancelled) return; in .finally(), resolving the stale-closure race from the previous review. PrDetailPane.tsx tracks per-PR live-load refs so snapshot hydration can't overwrite already-delivered live data on a back-navigation.
  • Lane delete parity: runLaneDeleteBatchSequentially replaces Promise.allSettled to carry lane identity in failure results; deleteLaneWithRuntimeCleanup and the registry delete action both call teardownEnv + portAllocationService.release before/after the core delete, with test coverage across desktop, sync, and iOS.
  • Terminal control (TUI): isTerminalControlToggle / splitTerminalControlInput added to app.tsx; TerminalPane renders a spinning-color rounded border and adjusted dimensions when Claude has control. FooterControls surfaces ^t hints contextually.

Confidence Score: 5/5

Safe to merge. All three feature areas are well-tested and the stale-closure fix in PrsContext is correctly guarded.

The stale .finally() closure bug from the previous review is addressed by the if (cancelled) return; gate. Lane delete cleanup is consistent across all four code paths. The only finding is a leftover includeExternalClosed: boolean field in the inFlightSnapshotRef type — purely cosmetic.

apps/desktop/src/renderer/components/prs/tabs/GitHubTab.tsx — stale ref type annotation should be cleaned up.

Important Files Changed

Filename Overview
apps/desktop/src/renderer/components/prs/state/PrsContext.tsx Refactored primary detail fetch to fire 4 requests concurrently with progressive settlement. Adds if (cancelled) return; guard in .finally() to fix the stale-closure race flagged in the previous review.
apps/desktop/src/renderer/components/prs/tabs/GitHubTab.tsx Drops external PR list from allItems and removes cross-repo fallback. Stale inFlightSnapshotRef type still references includeExternalClosed.
apps/desktop/src/renderer/components/lanes/lanePageModel.ts Adds runLaneDeleteBatchSequentially and selectTerminalGithubUpdateForPr. Logic and tests are sound.
apps/desktop/src/renderer/components/prs/detail/PrDetailPane.tsx Switches to per-fetch refs to prevent snapshot hydration from overwriting live data. State reset on PR switch is now explicit and complete.
apps/desktop/src/main/services/prs/prService.ts Removes includeExternalClosed / external-PR query path entirely. Simplifies cache epoch tracking with githubSnapshotCacheEpoch.
apps/desktop/src/main/services/adeActions/registry.ts Adds delete to the lane runtime action domain with env teardown and port release. Uses resolveLane which already passes includeArchived: true.
apps/desktop/src/preload/preload.ts Introduces callPrReadRuntimeActionOr helper and createLocalIpcEventSubscription factory for shared-listener multiplexing.
apps/ade-cli/src/tuiClient/app.tsx Adds Ctrl+T toggle for Claude terminal control mode with splitTerminalControlInput and claudeTerminalControlActive resize adjustments.
apps/ios/ADE/Services/SyncService.swift Adds commandTimeoutNanoseconds(for:) giving lanes.delete a 240-second budget.

Comments Outside Diff (1)

  1. apps/desktop/src/renderer/components/prs/state/PrsContext.tsx, line 1136-1215 (link)

    P1 Stale-closure markPrimarySettled fires even for cancelled requests

    .finally(() => markPrimarySettled(fulfilled)) always executes — it is not gated by cancelled. On a rapid A→B→A PR selection (i.e. user opens PR A, switches to B, then back to A), the four requests from the first A fetch are still in-flight with cancelled = true. When they settle, their .then() returns early (so fulfilled stays false), but .finally() still calls markPrimarySettled(false). Because selectedPrIdRef.current === prId is true again (user returned to A), those stale completions drive two side effects that corrupt the new A fetch's state:

    1. When the first stale request settles (primarySettledCount === 1), detailFetchInProgress.current is prematurely reset to false for the new fetch.
    2. When all four stale requests settle (primarySettledCount === 4), setDetailLiveDataPrId(null) is called (because primaryFulfilledCount === 0), overriding whatever the new A fetch has already written.

    The old Promise.allSettled code was immune because the entire .then() block was guarded by if (cancelled) return. The fix is a one-line cancelled guard in .finally().

    Prompt To Fix With AI
    This is a comment left during a code review.
    Path: apps/desktop/src/renderer/components/prs/state/PrsContext.tsx
    Line: 1136-1215
    
    Comment:
    **Stale-closure `markPrimarySettled` fires even for cancelled requests**
    
    `.finally(() => markPrimarySettled(fulfilled))` always executes — it is not gated by `cancelled`. On a rapid A→B→A PR selection (i.e. user opens PR A, switches to B, then back to A), the four requests from the first A fetch are still in-flight with `cancelled = true`. When they settle, their `.then()` returns early (so `fulfilled` stays `false`), but `.finally()` still calls `markPrimarySettled(false)`. Because `selectedPrIdRef.current === prId` is true again (user returned to A), those stale completions drive two side effects that corrupt the new A fetch's state:
    1. When the first stale request settles (`primarySettledCount === 1`), `detailFetchInProgress.current` is prematurely reset to `false` for the new fetch.
    2. When all four stale requests settle (`primarySettledCount === 4`), `setDetailLiveDataPrId(null)` is called (because `primaryFulfilledCount === 0`), overriding whatever the new A fetch has already written.
    
    The old `Promise.allSettled` code was immune because the entire `.then()` block was guarded by `if (cancelled) return`. The fix is a one-line `cancelled` guard in `.finally()`.
    
    How can I resolve this? If you propose a fix, please make it concise.

    Fix in Claude Code

Fix All in Claude Code

Prompt To Fix All With AI
Fix the following 1 code review issue. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 1
apps/desktop/src/renderer/components/prs/tabs/GitHubTab.tsx:457
**Stale `includeExternalClosed` field in `inFlightSnapshotRef` type**

The ref type still carries `includeExternalClosed: boolean` from before external PR support was removed. Since `getGithubSnapshot` no longer accepts or uses that flag, any code that sets or reads `inFlightSnapshotRef.current?.includeExternalClosed` will rely on dead state. The type should be updated to `{ request: Promise<GitHubPrSnapshot> }` to match the simplified service contract introduced in this PR.

Reviews (3): Last reviewed commit: "ship: guard stale PR detail settlements" | Re-trigger Greptile

@vercel
Copy link
Copy Markdown

vercel Bot commented May 14, 2026

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
ade Ignored Ignored Preview May 15, 2026 0:03am

@arul28 arul28 changed the title Primary Improve ADE PR, lane, and TUI workflows May 14, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 14, 2026

📝 Walkthrough

Walkthrough

This PR integrates four major features and supporting infrastructure changes: Claude terminal control input/UI toggle (Ctrl-T), lane deletion lifecycle cleanup with environment teardown, GitHub PR snapshot caching simplification (removing external-PR variants), and PR detail hydration logic to prevent stale snapshots from overwriting live data.

Changes

Multi-feature Integration: Terminal Control, Lane Cleanup, and PR Data Layer Refactoring

Layer / File(s) Summary
Claude terminal control toggle (Ctrl-T)
apps/ade-cli/src/tuiClient/app.tsx, apps/ade-cli/src/tuiClient/components/FooterControls.tsx, apps/ade-cli/src/tuiClient/components/TerminalPane.tsx, apps/ade-cli/src/tuiClient/cli.tsx, apps/ade-cli/src/tuiClient/__tests__/*, apps/ade-cli/tsup.config.ts
Adds input helpers (isTerminalControlToggle, splitTerminalControlInput) and integrates them into TUI input flow to support terminal control attachment via Ctrl-T; includes Claude-specific control availability/active flags; updates footer UI to show "CLAUDE CONTROL" hints and terminal pane border color based on control state; updates help text; expands tsup ESM banner to define Node globals via imports; comprehensive test coverage for new input detection and component rendering.
Lane deletion with environment cleanup
apps/ade-cli/src/services/sync/syncRemoteCommandService.ts, apps/desktop/src/main/services/adeActions/registry.ts, apps/desktop/src/renderer/components/lanes/lanePageModel.ts, apps/desktop/src/renderer/components/lanes/LanesPage.tsx, apps/desktop/src/main/services/ipc/ipcTimeouts.ts, apps/desktop/src/main/services/ipc/registerIpc.ts, apps/ios/ADE/Services/SyncService.swift, apps/desktop/src/main/services/ipc/ipcTimeouts.test.ts, apps/ade-cli/src/services/sync/syncRemoteCommandService.test.ts, apps/desktop/src/main/services/adeActions/registry.test.ts, apps/desktop/src/renderer/components/lanes/LanesPage.test.ts
Introduces deleteLaneWithRuntimeCleanup helper and runLaneDeleteBatchSequentially batch runner to delete lanes sequentially with per-lane environment teardown (via laneEnvironmentService.cleanupLaneEnvironment) and port lease release; extends IPC timeout logic to recognize lane-delete runtime actions and apply 4-minute budget; updates iOS sync service to support action-specific timeouts; comprehensive test coverage for teardown callback invocation and per-lane result tracking.
GitHub PR snapshot caching refactor
apps/desktop/src/main/services/prs/prService.ts, apps/desktop/src/main/services/prs/prService.test.ts, apps/desktop/src/preload/preload.ts, apps/desktop/src/preload/preload.test.ts, apps/desktop/src/renderer/components/prs/tabs/GitHubTab.tsx, apps/desktop/src/renderer/components/prs/tabs/GitHubTab.test.tsx, apps/ios/ADE/Views/PRs/PrHelpers.swift, apps/ios/ADE/Views/PRs/PrDetailScreen.swift, apps/ios/ADE/Views/PRs/PrsRootScreen.swift, apps/ios/ADETests/ADETests.swift
Simplifies snapshot caching from multi-variant tracking to single in-flight request; removes includeExternalClosed state and external-PR search queries; always returns externalPullRequests: []; introduces TTL-based fast path for fresh cached snapshots; updates all PR read-list consumers (desktop GitHubTab, iOS views, preload) to use repoScopedGitHubPullRequests helper; extensive test coverage for cross-repo external PR filtering and snapshot reuse patterns.
PR detail live-data priority over snapshots
apps/desktop/src/renderer/components/prs/detail/PrDetailPane.tsx, apps/desktop/src/renderer/components/prs/state/PrsContext.tsx, apps/desktop/src/renderer/components/prs/detail/PrDetailPane.issueResolver.test.tsx, apps/desktop/src/renderer/components/prs/state/PrsContext.test.tsx, apps/desktop/src/renderer/components/prs/prsRouteState.ts, apps/desktop/src/renderer/components/prs/prsRouteState.test.ts
Refactors PrDetailPane to track which PR fields (detail/files/commits) have been live-loaded and conditionally apply snapshot hydration only when live data is not already available; updates PrsContext selected-PR loader to fetch status/checks/reviews/comments progressively per-piece and set live-loaded marker only after all settle; preserves snapshot in fallback holder for rate-limit recovery; updates route-state scoping to isolate stored PR routes by project; comprehensive test coverage for live-vs-snapshot precedence and progressive loading.
Build validation, TUI isolation, and infrastructure
apps/ade-cli/scripts/verify-built-cli.mjs, apps/desktop/scripts/validate-mac-artifacts.mjs, apps/desktop/scripts/validate-win-artifacts.mjs, apps/desktop/src/renderer/components/chat/AgentChatPane.tsx, apps/desktop/src/renderer/components/chat/AgentChatPane.companionDrawers.test.tsx
Adds assertIsolatedTuiHelp() verification to CLI build scripts to ensure TUI can run in isolation with proper ESM shimming; updates desktop artifact validators (Mac/Windows) to check bundled TUI for unshimmed __dirname/__filename and run smoke tests via isolated runner modules; adjusts AgentChatPane App Control and terminal drawer visibility to depend on laneToolsVisible instead of showWorkspaceChrome; adds test coverage for terminal-control-hidden state when lane tools are hidden.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

The PR spans multiple coordinated features (terminal control, lane cleanup, snapshot caching, detail hydration) across heterogeneous platforms (CLI/TUI, desktop, iOS) with significant logic density in PR caching/hydration refactors, widespread consumers and test updates, and intricate state management around live-vs-snapshot precedence and in-flight request coordination.

Possibly related PRs

  • arul28/ADE#289: Both PRs heavily modify apps/desktop/src/main/services/prs/prService.ts (snapshot caching, in-flight requests, getGithubSnapshot control flow) and related PR hydration/IPC wiring across desktop and preload, indicating overlapping refactoring of the PR data layer.

Suggested labels

desktop, ios

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 3.23% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'Improve ADE PR, lane, and TUI workflows' is vague and generic, using non-descriptive terms that don't convey specific information about the actual changes. Replace with a more specific title that describes the primary technical change, such as 'Add terminal control toggle and improve lane deletion cleanup' or similar to clarify the main focus.
✅ Passed checks (3 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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ade/ship-current-main-changes-20260514

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 and usage tips.

@capy-ai
Copy link
Copy Markdown

capy-ai Bot commented May 14, 2026

Capy auto-review is paused for this organization because the monthly auto-review limit has been reached. Increase the limit or turn it off in billing settings to resume automatic reviews.

@arul28
Copy link
Copy Markdown
Owner Author

arul28 commented May 14, 2026

@copilot review but do not make fixes

Copy link
Copy Markdown
Contributor

Copilot AI commented May 14, 2026

@copilot review but do not make fixes

Reviewed commit 6c3e39a end-to-end (PR routing/hydration, lane delete sequencing/cleanup, IPC timeout branching, and TUI terminal-control rendering) and did not apply any fixes as requested. I did not find a new blocker in those paths. I also attempted focused test runs, but this runner currently lacks test deps (vitest: not found), so no local re-run results to attach from this pass.

Copilot finished work on behalf of arul28 May 14, 2026 23:21
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (3)
apps/ade-cli/tsup.config.ts (1)

80-87: 💤 Low value

Consider joining banner statements with newlines for readability.

The banner statements are currently joined with spaces, creating a single long line. While this works correctly, joining with \n would improve maintainability.

♻️ Optional readability improvement
     banner: {
-      js: [
-        "import { createRequire as __adeCreateRequire } from 'node:module';",
-        "import { fileURLToPath as __adeFileURLToPath } from 'node:url';",
-        "import { dirname as __adeDirname } from 'node:path';",
-        "const require = __adeCreateRequire(import.meta.url);",
-        "const __filename = __adeFileURLToPath(import.meta.url);",
-        "const __dirname = __adeDirname(__filename);",
-      ].join(" "),
+      js: [
+        "import { createRequire as __adeCreateRequire } from 'node:module';",
+        "import { fileURLToPath as __adeFileURLToPath } from 'node:url';",
+        "import { dirname as __adeDirname } from 'node:path';",
+        "const require = __adeCreateRequire(import.meta.url);",
+        "const __filename = __adeFileURLToPath(import.meta.url);",
+        "const __dirname = __adeDirname(__filename);",
+      ].join("\n"),
     },
🤖 Prompt for 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.

In `@apps/ade-cli/tsup.config.ts` around lines 80 - 87, The banner array assigned
to js currently joins entries with a space which yields a single long line;
update the join call from join(" ") to join("\n") so the created banner string
places each statement on its own line (affecting the js array containing
"__adeCreateRequire", "__adeFileURLToPath", "__adeDirname", the require
declaration, __filename, and __dirname) to improve readability and
maintainability.
apps/desktop/src/renderer/components/chat/AgentChatPane.companionDrawers.test.tsx (1)

404-404: ⚡ Quick win

Consider using role-based query for consistency.

Other tests in this file use getByRole("button", { name: "..." }) to locate buttons (see lines 321, 333). For consistency and better accessibility testing practices, consider using a role-based query here as well:

-    expect(screen.queryByTitle("Open terminal")).toBeNull();
+    expect(screen.queryByRole("button", { name: /open terminal/i })).toBeNull();

This approach aligns with React Testing Library best practices and makes the test more resilient to implementation changes that might affect the title attribute.

🤖 Prompt for 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.

In
`@apps/desktop/src/renderer/components/chat/AgentChatPane.companionDrawers.test.tsx`
at line 404, Replace the title-based query in the test that uses
screen.queryByTitle("Open terminal") with a role-based query to match other
tests: use screen.queryByRole("button", { name: "Open terminal" }) and keep the
same assertion (toBeNull()) so the test asserts absence via role/name instead of
title; update the test referencing the query in
AgentChatPane.companionDrawers.test (the line with screen.queryByTitle("Open
terminal")) to this new role-based query for consistency with other tests that
use getByRole("button", { name: "..." }).
apps/desktop/src/preload/preload.ts (1)

7104-7111: ⚡ Quick win

Drop the dead includeExternalClosed option from the preload API.

This refactor removes external-PR handling, but ade.prs.getGitHubSnapshot() still advertises includeExternalClosed. Keeping it here preserves a no-op public contract and lets stale callers survive silently instead of being caught by TypeScript.

Suggested fix
     getGitHubSnapshot: (args?: {
       force?: boolean;
-      includeExternalClosed?: boolean;
     }): Promise<GitHubPrSnapshot> =>
       callPrReadRuntimeActionOr(
         "getGithubSnapshot",
         { args: args ?? {} },
         () => ipcRenderer.invoke(IPC.prsGetGitHubSnapshot, args ?? {}),
       ),
🤖 Prompt for 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.

In `@apps/desktop/src/preload/preload.ts` around lines 7104 - 7111, The preload
API still advertises the dead includeExternalClosed option on getGitHubSnapshot;
remove it from the public args shape so TypeScript will catch stale callers.
Update the getGitHubSnapshot signature (the args object type used by
getGitHubSnapshot / GitHubPrSnapshot call) to only include force?: boolean, and
propagate that shape into the callPrReadRuntimeActionOr invocation and the
ipcRenderer.invoke(IPC.prsGetGitHubSnapshot, ...) call (keep the existing args
?? {} handling). Ensure no other references rely on includeExternalClosed in
this function so callers that still pass it will now be flagged by the compiler.
🤖 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 `@apps/ade-cli/src/services/sync/syncRemoteCommandService.ts`:
- Around line 1478-1486: The pre-delete overlay context resolution is missing
archived lanes; update the call to resolveLaneOverlayContext (used when
args.laneEnvironmentService is truthy) to request archived lanes by passing
includeArchived: true (e.g., resolveLaneOverlayContext(args, deleteArgs.laneId,
{ includeArchived: true }) or the appropriate options argument), so envContext
includes archived lanes during pre-delete teardown and preserve the existing
catch/log behavior for errors.

In `@apps/desktop/src/main/services/prs/prService.ts`:
- Around line 5119-5124: The current condition allows an in-flight snapshot to
publish when cachedGithubSnapshot === null, so a stale request can repopulate
the cache after invalidateGithubSnapshotCache() clears it; update the guard so
only the matching in-flight token can publish and only if the cache wasn't
explicitly cleared — i.e., change the condition using githubSnapshotInFlight,
inFlight, and cachedGithubSnapshot so publishGithubSnapshot(snapshot,
capturedAt) is called only when githubSnapshotInFlight === inFlight AND
cachedGithubSnapshot !== null (remove the || cachedGithubSnapshot === null
branch).

In `@apps/desktop/src/preload/preload.ts`:
- Around line 1422-1426: The local subscription created by
subscribeLocalSessionChangedEvents (via createLocalIpcEventSubscription and
IPC.sessionsChanged) does not clear sessionDeltaCache before notifying
subscribers, so handlers that call ade.sessions.getDelta() may read stale data;
modify the local fanout path in the subscription handler to invalidate/clear
sessionDeltaCache (the same way the remote/runtime-streamed path does)
immediately before emitting the "session changed" event to subscribers so any
onChanged handlers see a fresh getDelta().

---

Nitpick comments:
In `@apps/ade-cli/tsup.config.ts`:
- Around line 80-87: The banner array assigned to js currently joins entries
with a space which yields a single long line; update the join call from join("
") to join("\n") so the created banner string places each statement on its own
line (affecting the js array containing "__adeCreateRequire",
"__adeFileURLToPath", "__adeDirname", the require declaration, __filename, and
__dirname) to improve readability and maintainability.

In `@apps/desktop/src/preload/preload.ts`:
- Around line 7104-7111: The preload API still advertises the dead
includeExternalClosed option on getGitHubSnapshot; remove it from the public
args shape so TypeScript will catch stale callers. Update the getGitHubSnapshot
signature (the args object type used by getGitHubSnapshot / GitHubPrSnapshot
call) to only include force?: boolean, and propagate that shape into the
callPrReadRuntimeActionOr invocation and the
ipcRenderer.invoke(IPC.prsGetGitHubSnapshot, ...) call (keep the existing args
?? {} handling). Ensure no other references rely on includeExternalClosed in
this function so callers that still pass it will now be flagged by the compiler.

In
`@apps/desktop/src/renderer/components/chat/AgentChatPane.companionDrawers.test.tsx`:
- Line 404: Replace the title-based query in the test that uses
screen.queryByTitle("Open terminal") with a role-based query to match other
tests: use screen.queryByRole("button", { name: "Open terminal" }) and keep the
same assertion (toBeNull()) so the test asserts absence via role/name instead of
title; update the test referencing the query in
AgentChatPane.companionDrawers.test (the line with screen.queryByTitle("Open
terminal")) to this new role-based query for consistency with other tests that
use getByRole("button", { name: "..." }).
🪄 Autofix (Beta)

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

Run ID: f7da1c08-904f-414c-82e3-687e751be896

📥 Commits

Reviewing files that changed from the base of the PR and between 690554b and 6c3e39a.

⛔ Files ignored due to path filters (12)
  • docs/ARCHITECTURE.md is excluded by !docs/**
  • docs/browser-mock.md is excluded by !docs/**
  • docs/codex migration plan.md is excluded by !docs/**
  • docs/codex-cli-passthrough-audit.md is excluded by !docs/**
  • docs/features/ade-code/README.md is excluded by !docs/**
  • docs/features/chat/README.md is excluded by !docs/**
  • docs/features/chat/composer-and-ui.md is excluded by !docs/**
  • docs/features/computer-use/app-control.md is excluded by !docs/**
  • docs/features/lanes/README.md is excluded by !docs/**
  • docs/features/pull-requests/README.md is excluded by !docs/**
  • docs/plans/ade-31-claude-agent-sdk-rewrite.md is excluded by !docs/**
  • docs/transcript.txt is excluded by !docs/**
📒 Files selected for processing (41)
  • apps/ade-cli/scripts/verify-built-cli.mjs
  • apps/ade-cli/src/services/sync/syncRemoteCommandService.ts
  • apps/ade-cli/src/tuiClient/__tests__/HeaderFooter.test.tsx
  • apps/ade-cli/src/tuiClient/__tests__/TerminalPane.test.tsx
  • apps/ade-cli/src/tuiClient/__tests__/appInput.test.ts
  • apps/ade-cli/src/tuiClient/app.tsx
  • apps/ade-cli/src/tuiClient/cli.tsx
  • apps/ade-cli/src/tuiClient/components/FooterControls.tsx
  • apps/ade-cli/src/tuiClient/components/TerminalPane.tsx
  • apps/ade-cli/tsup.config.ts
  • apps/desktop/scripts/validate-mac-artifacts.mjs
  • apps/desktop/scripts/validate-win-artifacts.mjs
  • apps/desktop/src/main/services/adeActions/registry.test.ts
  • apps/desktop/src/main/services/adeActions/registry.ts
  • apps/desktop/src/main/services/ipc/ipcTimeouts.test.ts
  • apps/desktop/src/main/services/ipc/ipcTimeouts.ts
  • apps/desktop/src/main/services/ipc/registerIpc.ts
  • apps/desktop/src/main/services/prs/prService.test.ts
  • apps/desktop/src/main/services/prs/prService.ts
  • apps/desktop/src/main/services/sync/syncRemoteCommandService.test.ts
  • apps/desktop/src/preload/preload.test.ts
  • apps/desktop/src/preload/preload.ts
  • apps/desktop/src/renderer/components/chat/AgentChatPane.companionDrawers.test.tsx
  • apps/desktop/src/renderer/components/chat/AgentChatPane.tsx
  • apps/desktop/src/renderer/components/lanes/LanesPage.test.ts
  • apps/desktop/src/renderer/components/lanes/LanesPage.tsx
  • apps/desktop/src/renderer/components/lanes/lanePageModel.ts
  • apps/desktop/src/renderer/components/prs/PRsPage.tsx
  • apps/desktop/src/renderer/components/prs/detail/PrDetailPane.issueResolver.test.tsx
  • apps/desktop/src/renderer/components/prs/detail/PrDetailPane.tsx
  • apps/desktop/src/renderer/components/prs/prsRouteState.test.ts
  • apps/desktop/src/renderer/components/prs/prsRouteState.ts
  • apps/desktop/src/renderer/components/prs/state/PrsContext.test.tsx
  • apps/desktop/src/renderer/components/prs/state/PrsContext.tsx
  • apps/desktop/src/renderer/components/prs/tabs/GitHubTab.test.tsx
  • apps/desktop/src/renderer/components/prs/tabs/GitHubTab.tsx
  • apps/ios/ADE/Services/SyncService.swift
  • apps/ios/ADE/Views/PRs/PrDetailScreen.swift
  • apps/ios/ADE/Views/PRs/PrHelpers.swift
  • apps/ios/ADE/Views/PRs/PrsRootScreen.swift
  • apps/ios/ADETests/ADETests.swift

Comment thread apps/ade-cli/src/services/sync/syncRemoteCommandService.ts
Comment thread apps/desktop/src/main/services/prs/prService.ts
Comment thread apps/desktop/src/preload/preload.ts
Comment thread apps/desktop/src/renderer/components/prs/tabs/GitHubTab.tsx
@arul28
Copy link
Copy Markdown
Owner Author

arul28 commented May 14, 2026

@copilot review but do not make fixes

Comment thread apps/desktop/src/renderer/components/prs/state/PrsContext.tsx
@arul28
Copy link
Copy Markdown
Owner Author

arul28 commented May 15, 2026

@copilot review but do not make fixes

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