Skip to content

M2: macOS — Consolidate Connect into One Flow#7403

Merged
ashleeradka merged 1 commit into
mainfrom
swarm/pairing-ux-consol/task-2
Feb 24, 2026
Merged

M2: macOS — Consolidate Connect into One Flow#7403
ashleeradka merged 1 commit into
mainfrom
swarm/pairing-ux-consol/task-2

Conversation

@ashleeradka
Copy link
Copy Markdown
Contributor

@ashleeradka ashleeradka commented Feb 24, 2026

Summary

Consolidates iOS pairing settings into the Connect tab, removing the split between Connect and Advanced tabs.

Implementation

  • Moved "Enable iOS Pairing" toggle from Advanced tab to Connect tab's pairing section
  • Reordered Connect tab sections: Pair with iOS first, then Gateway, Bearer Token, channels, status, and developer options last
  • Wrapped Developer Local Pairing section in a DisclosureGroup (collapsed by default)
  • Removed the entire iOS Device section from SettingsAdvancedTab
  • Removed the now-unnecessary onNavigateToConnect parameter from SettingsAdvancedTab

Key Technical Choices

  • Pairing section placed at the top of Connect tab since it's the primary action users come here for
  • Developer Local Pairing collapsed by default to avoid confusing non-developer users
  • Override section from Advanced tab not duplicated — already covered by Developer Local Pairing section

Closes #7392

🤖 Generated with Claude Code


Open with Devin

Co-Authored-By: Claude <noreply@anthropic.com>
@ashleeradka ashleeradka self-assigned this Feb 24, 2026
@ashleeradka ashleeradka merged commit f179581 into main Feb 24, 2026
1 check failed
@ashleeradka ashleeradka deleted the swarm/pairing-ux-consol/task-2 branch February 24, 2026 01:31
Copy link
Copy Markdown
Contributor

@devin-ai-integration devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

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

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 4 additional findings.

Open in Devin Review

Copy link
Copy Markdown

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

Choose a reason for hiding this comment

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

💡 Codex Review

Text("Override URL")
.font(VFont.caption)
.foregroundColor(VColor.textSecondary)
TextField("http://192.168.1.x:7830", text: $iosPairingGatewayOverride)

P2 Badge Restore editable bearer-token override in Connect settings

This refactor removes the only UI for setting iosPairingTokenOverride (the old override block in SettingsAdvancedTab) but keeps token-override resolution in production code (SettingsStore.resolvedIosBearerToken via PairingConfiguration.resolvedBearerToken). In the new flow, this section exposes only a gateway URL override, so users who pair against gateways requiring a custom bearer token can no longer configure or rotate that token from the app, which can leave QR pairing unusable unless they manually edit defaults.

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

@ashleeradka
Copy link
Copy Markdown
Contributor Author

Addressed in #7429

ashleeradka pushed a commit that referenced this pull request May 21, 2026
Brings apps/web/src/domains/settings/ to feature parity with the
platform repo's current end state for the billing, storage, and
compute settings surfaces. Covers four "Web App Repo Move" drift
issues that accumulated after settings paths were frozen on May 20:

- LUM-1683: Billing UI reorder + referral stats (platform #7376)
- LUM-1682: Pro billing machine resize + storage card + tier
  selection (platform #7310, #7312, #7323, #7338)
- LUM-1761: Noa's billing UI polish (platform #7462, #7473, #7492)
- LUM-1760: Shaarson's Pro storage/compute UX (platform #7389,
  #7390, #7392, #7395, #7399, #7400, #7403, #7404)

The port targets feature parity, not 1:1 file translation:

- Routing translated from platform's useAppNavigate / next/navigation
  to react-router (useNavigate, useSearchParams) per target conventions.
- Feature flag reads translated from useAppFeatureFlags() context to
  the target's useFeatureFlagStore.use.X() Zustand pattern.
- Component imports redirected to @vellum/design-library and
  @/generated/api.
- Shared hooks/utils that already exist in the target
  (use-billing-portal-session, payment-method-brand) wired up rather
  than recreated.
- Daemon-aware Assistant type from @/assistant/api.js used in place
  of platform's @/lib/assistants/api.

New files:
- assistant-storage-card.tsx (per-assistant Storage card)
- compute-upgrade-card.tsx (rewritten with full machine-size range)
- plan-feature-list.tsx (inline + checklist variants for
  AdjustPlanModal and PlanCard)
- resize-errors.ts (extractResizeError envelope for friendly resize
  failure messaging)
- tier-picker.tsx (Dropdown-driven tier selection for Pro upgrade)
- lib/billing/machine-sizes.ts (TIER_TO_SIZES, SIZE_LABEL,
  SIZE_DESCRIPTION, machineSizeRank shared util)

Deletions (functionality moved to general settings, per-assistant):
- storage-card.tsx
- machine-size-card.tsx
- machine-size-modal.tsx

Other changes:
- onboarding-page.tsx: storage step replaces pvc-readiness polling;
  failures count now gates wizard progression.
- billing-page.tsx: drops storage/machine card mounts; ReferralPanel
  renders unconditionally.
- general-page.tsx: mounts AssistantStorageCard alongside
  ComputeUpgradeCard.
- adjust-plan-modal.tsx: tier-picker + plan-feature-list, dynamic
  LOST_FEATURES via prop, copy and layout polish.
- referralCodes and referralCodesAdmin flags removed from the store
  and dev panel (no longer gated upstream).
- preferences-menu.tsx: drops referralCodes gating so Earn Credits
  always renders.
- design-library dropdown.tsx: DropdownOption.disabled support +
  findEnabledIndex helper for keyboard/click guards (needed by
  tier-picker).

Platform PR #7476 (unify per-assistant cards into a single
ResizeCard) is not yet merged in platform and is therefore not
included; the two-card layout is the current end state.
ashleeradka added a commit that referenced this pull request May 21, 2026
* chore(web): refresh platform.yaml for billing/storage/compute drift port

Pulls the current platform OpenAPI bundle so the regenerated client picks
up assistantsResize, AssistantResizeRequestRequest, provisioned_storage_gib,
selected_storage_gib, and the onboarding/storage endpoint. Prerequisite for
porting the Pro storage/compute UX cluster (LUM-1760) and selected storage
state surfacing (LUM-1682 #7312) from platform to vellum-assistant.

Refs LUM-1683, LUM-1682, LUM-1761, LUM-1760.

* feat(web/settings): port billing/storage/compute drift from platform

Brings apps/web/src/domains/settings/ to feature parity with the
platform repo's current end state for the billing, storage, and
compute settings surfaces. Covers four "Web App Repo Move" drift
issues that accumulated after settings paths were frozen on May 20:

- LUM-1683: Billing UI reorder + referral stats (platform #7376)
- LUM-1682: Pro billing machine resize + storage card + tier
  selection (platform #7310, #7312, #7323, #7338)
- LUM-1761: Noa's billing UI polish (platform #7462, #7473, #7492)
- LUM-1760: Shaarson's Pro storage/compute UX (platform #7389,
  #7390, #7392, #7395, #7399, #7400, #7403, #7404)

The port targets feature parity, not 1:1 file translation:

- Routing translated from platform's useAppNavigate / next/navigation
  to react-router (useNavigate, useSearchParams) per target conventions.
- Feature flag reads translated from useAppFeatureFlags() context to
  the target's useFeatureFlagStore.use.X() Zustand pattern.
- Component imports redirected to @vellum/design-library and
  @/generated/api.
- Shared hooks/utils that already exist in the target
  (use-billing-portal-session, payment-method-brand) wired up rather
  than recreated.
- Daemon-aware Assistant type from @/assistant/api.js used in place
  of platform's @/lib/assistants/api.

New files:
- assistant-storage-card.tsx (per-assistant Storage card)
- compute-upgrade-card.tsx (rewritten with full machine-size range)
- plan-feature-list.tsx (inline + checklist variants for
  AdjustPlanModal and PlanCard)
- resize-errors.ts (extractResizeError envelope for friendly resize
  failure messaging)
- tier-picker.tsx (Dropdown-driven tier selection for Pro upgrade)
- lib/billing/machine-sizes.ts (TIER_TO_SIZES, SIZE_LABEL,
  SIZE_DESCRIPTION, machineSizeRank shared util)

Deletions (functionality moved to general settings, per-assistant):
- storage-card.tsx
- machine-size-card.tsx
- machine-size-modal.tsx

Other changes:
- onboarding-page.tsx: storage step replaces pvc-readiness polling;
  failures count now gates wizard progression.
- billing-page.tsx: drops storage/machine card mounts; ReferralPanel
  renders unconditionally.
- general-page.tsx: mounts AssistantStorageCard alongside
  ComputeUpgradeCard.
- adjust-plan-modal.tsx: tier-picker + plan-feature-list, dynamic
  LOST_FEATURES via prop, copy and layout polish.
- referralCodes and referralCodesAdmin flags removed from the store
  and dev panel (no longer gated upstream).
- preferences-menu.tsx: drops referralCodes gating so Earn Credits
  always renders.
- design-library dropdown.tsx: DropdownOption.disabled support +
  findEnabledIndex helper for keyboard/click guards (needed by
  tier-picker).

Platform PR #7476 (unify per-assistant cards into a single
ResizeCard) is not yet merged in platform and is therefore not
included; the two-card layout is the current end state.

* fix(web/settings): drop stale eslint-disable for react-hooks/exhaustive-deps

The directive was ported from platform, but apps/web's eslint config
does not enable react-hooks/exhaustive-deps, so the unknown rule
trips the report-unused-disable check. The useMemo dependency array
still keys on clientSecret intentionally to retrigger appearance
resolution on each new SetupIntent.

---------

Co-authored-by: Claude <noreply@anthropic.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.

M2: macOS — Consolidate Connect into One Flow

1 participant