Skip to content

feat(web): choose whether app updates include provider CLIs - #28420

Open
nobottomline wants to merge 3 commits into
pingdotgg:mainfrom
nobottomline:t3/separate-app-provider-updates
Open

nobottomline wants to merge 3 commits into
pingdotgg:mainfrom
nobottomline:t3/separate-app-provider-updates

Conversation

@nobottomline

@nobottomline nobottomline commented Oct 31, 2026 •

Copy link
Copy Markdown

The sidebar's combined update action always includes eligible provider CLIs. Users can update the desktop app from About, but cannot leave provider updates for later while updating T3 Code across connected machines.

Add Include provider updates beside the confirmation buttons, enabled by default. Clearing it removes provider updates from the displayed plan and execution while retaining app/server updates. The preference is saved on this client and shared across its tabs; an open confirmation keeps its own selection. If its last app/server target disappears, it closes rather than silently becoming a provider-only operation.

This is a focused configuration option for the existing combined updater under CONTRIBUTING.md. Provider-only sidebar updates, Settings → Providers → Update all, version/catalog checks, and track switches retain their behavior. No server API or contract changes are needed. Web and desktop share this flow; mobile already exposes separate update actions. Managed runtimes may still change with T3 Code itself.

Related: #23982 describes the desire to leave externally managed CLIs alone. This PR does not resolve its MacPorts ownership bug, which is addressed separately by #25208.

Verification

  • vp run check:changed passed format, lint, both knip passes, affected typechecks, adjacent browser tests, and React Compiler coverage.
  • 25 focused tests passed across the sidebar, update coordination, planning, and update-result handling. Cases include default/explicit inclusion, exclusion with zero provider batch calls, a remote server update without a local app update, a local app plus three remote servers with providers included/excluded (checking plan rows, restart targets, and each server invocation), provider-only fallback, track switches, persistence/re-enabling, multiple mounted clients, and disappearing app targets.
  • Three independent Codex GPT-6.1 Sol high implementation reviews completed; their actionable findings were addressed. A further Codex review of the footer refinement found nothing blocking.
  • Captured the real dialog at 1280, 390, and 320px using controlled fixture data. Checked the included/excluded choice, active-thread warnings, busy/disabled states, and dialogs without a provider choice. The choice wraps above the grouped buttons on narrow screens.
  • Browser interaction and recording used the production sidebar, update coordination, and dialog with controlled fixture adapters. The recording demonstrates exclusion and persistence after a page reload. Before/after screenshots use the real dialog with fixture machine/provider data. No app or provider installer was executed; a packaged Electron restart was not tested.

UI evidence

Before Current confirmation
Before: provider choice above the machine list After: provider choice beside Cancel and Update

The choice wraps above the buttons in a narrow window:

Provider choice and grouped buttons at 320px

This interaction recording demonstrates exclusion and persistence after a reload. It predates the footer layout adjustment; the behavior is unchanged:

update-choice-demo.mp4

Model: GPT-6.1 Sol (high). Harness: Codex in T3 Code.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Oct 31, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 31, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 94e0264

Macroscope's review found this PR approvable — Adds a remembered option to leave provider CLI updates out of app/server updates while preserving default inclusion and separate provider updates. The change narrows execution only through an explicit choice in the existing confirmation flow.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

The update plan now supports an optional provider-update selection. The sidebar confirmation dialog exposes and persists that choice when available. Tests cover provider eligibility, selection persistence, and confirmation behavior.

Changes: Update-all provider selection

Layer / File(s) Summary
Update-plan options and provider eligibility
apps/web/src/components/sidebar/useUpdateEverything.ts, apps/web/src/components/settings/UpdateTrackSwitchDialog.tsx, apps/web/src/components/sidebar/useUpdateEverything.browser.test.tsx
The hook accepts channelSwitch and includeProviderUpdates options. It excludes provider updates during a channel switch and can exclude them from app updates. Tests cover local and remote update plans, provider-only updates, and track switches.
Persisted selection and confirmation dialog
apps/web/src/components/sidebar/SidebarUpdatePill.tsx, apps/web/src/components/sidebar/UpdateEverythingDialog.tsx, apps/web/src/components/sidebar/SidebarUpdatePill.browser.test.tsx, docs/user/updating.md
The sidebar saves the provider-inclusion choice and supplies it to the dialog when provider updates are selectable. The dialog displays a checkbox when given provider-update options. Tests cover persistence and confirmation behavior; the guide describes the option and related update paths.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Feature

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant UpdateEverythingDialog
  participant SidebarUpdateControl
  participant useUpdateEverything
  User->>UpdateEverythingDialog: Change provider-inclusion checkbox
  UpdateEverythingDialog->>SidebarUpdateControl: Send selected Boolean
  SidebarUpdateControl->>SidebarUpdateControl: Save selection to local storage
  SidebarUpdateControl->>useUpdateEverything: Pass current selection
  useUpdateEverything-->>SidebarUpdateControl: Return update plan
Loading

Possibly related issues

  • pingdotgg/t3code#23982: The option can omit provider updates from the combined flow, but this change does not detect MacPorts ownership or resolve the reported maintenance issue.

Suggested reviewers: juliusmarminge

Merge Risk: Minimal · up to ccec6

The update dialog gains an Include provider updates option that defaults to on and is remembered on the device. Existing provider-only update flows are unchanged. No merge-blocking risk was found in the supplied changes.

Pre-merge checks: Passed 4

Check name Status Explanation
Title check Passed The title clearly describes the provider update option.
Description check Passed The description covers the problem, change, scope, verification, and UI evidence. The Problem, Change, and Scope and approval headings are missing, but the corresponding information is present.
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 a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Recent review info

Run configuration

Commits

Reviewing files that changed from the base of the PR and between 56fb5aa and ccec659.

Files selected for processing: 1

  • apps/web/src/components/sidebar/UpdateEverythingDialog.tsx
Files skipped from review as they are similar to previous changes: 1

  • apps/web/src/components/sidebar/UpdateEverythingDialog.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.

@iXab3r

iXab3r commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Minor proposal - maybe move checkbox into same line where buttons currently are ?
image
Would allow to not waste vertical space and won't blur this important decision with rest of the text.

This branch has not been deployed

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

Labels

size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants