Skip to content

refactor: QR sheet manual pairing behind disclosure (#7472)#7476

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

refactor: QR sheet manual pairing behind disclosure (#7472)#7476
ashleeradka merged 1 commit into
mainfrom
swarm/connect-tab-consol/task-2

Conversation

@ashleeradka
Copy link
Copy Markdown
Contributor

@ashleeradka ashleeradka commented Feb 24, 2026

Summary

Wraps the manual pairing section in PairingQRCodeSheet behind a DisclosureGroup, collapsed by default, so the QR modal feels focused on scanning rather than a second settings page.

Changes

  • Added @State private var manualPairingExpanded: Bool = false
  • Wrapped gateway URL row + bearer token row in DisclosureGroup("Manual Pairing")
  • Removed standalone "Manual Pairing" header (DisclosureGroup label replaces it)
  • All copy/reveal functionality preserved

Key files

  • clients/macos/vellum-assistant/Features/Settings/PairingQRCodeSheet.swift

Closes #7472

🤖 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 f737cb6 into main Feb 24, 2026
@ashleeradka ashleeradka deleted the swarm/connect-tab-consol/task-2 branch February 24, 2026 02:58
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 1 additional finding.

Open in Devin Review

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: QR Sheet Polish — Manual Pairing Behind Disclosure

1 participant