Skip to content

[RQ-4695 / RQ-4696 / RQ-4699] Deprecate legacy API Client: onboarding cleanup, hide local workspaces, block sending#81

Open
Kanishkrawatt wants to merge 8 commits into
masterfrom
rq-4283-remove-api-client-onboarding
Open

[RQ-4695 / RQ-4696 / RQ-4699] Deprecate legacy API Client: onboarding cleanup, hide local workspaces, block sending#81
Kanishkrawatt wants to merge 8 commits into
masterfrom
rq-4283-remove-api-client-onboarding

Conversation

@Kanishkrawatt

@Kanishkrawatt Kanishkrawatt commented Jul 10, 2026

Copy link
Copy Markdown
Member

What & why

Scoped to exactly the three linked stories. The legacy API Client is being deprecated in place — it stays mounted, but onboarding no longer funnels into it, local (file-system) workspaces are hidden, and request execution is stopped behind a mandatory migration modal.

Note: the earlier [RQ-4283] wholesale-removal commits (route/product-surface deletion) were reverted in this PR — that strategy is mutually exclusive with RQ-4699 (the migration modal only mounts inside the API Client container, and makeRequest is only reachable from the Send UI, both of which the removal deleted). This PR keeps the client reachable and gates it instead.

[RQ-4695] Route legacy desktop onboarding straight to auth

Desktop first-run no longer shows a feature-selection screen — the FEATURE_SELECTION / WelcomeCard (+ WelcomeCardHeader) and the FOLDER_SELECTION local-workspace step are removed; the step machine initializes at AUTH. AuthCard back-arrow removed. Orphaned local-workspace wiring dropped. Extension/web onboarding untouched.

[RQ-4696] Hide local (file-system) workspaces from the UI

UI-hiding only — on-disk data is not deleted, LOCAL_STORAGE (logged-out) unchanged.

  • Central lever (useWorkspaceFetcher): only shared/team workspaces flow into allWorkspaces, so every consumer (dropdown / overlay / settings) surfaces no LOCAL entry. This structurally makes the list-driven LOCAL surfaces — WorkspaceList/WorkspaceListItem rows + MULTI checkboxes, EmptyWorkspaceListView, and TeamViewer's LocalWorkspaceSettings — unreachable (dead branches), and closes the MULTI view.
  • WorkspacesOverlay, WorkspaceDropdown, CommonEmptyView: LOCAL section / active-local avatar / "load from local files" refresh / "New local workspace" CTA removed.
  • CreateWorkspaceModalOld: LOCAL create option removed. The newer CreateWorkspaceModal LOCAL path has no live caller (all LOCAL entry points removed), so it is unreachable too.
  • A user active in a LOCAL workspace is not force-switched or errored (one-way door), per the ticket.

[RQ-4699] Block sending + mandatory migration modal

  • Single choke point: makeRequest() guards on growthbook.isOn(MIGRATION_BLOCK_FLAG) and rejects with a typed MigrationBlockedError before dispatching. Covers all six outbound paths (HTTP/GraphQL send, response-panel Retry, Collection Runner, GraphQL introspection, WSDL/SOAP import fetch) — full stop per the ticket's DECISION. Read from the GrowthBook singleton (not a hook) so the guard can't throw.
  • Mandatory modal (MigrationBlockModal): dismissable forced false (non-dismissable across all variants); per-segment early-returns dropped so it shows for every segment when the master kill-switch is on. Same flag mounts the modal and blocks the engine, so they engage together.

Verification

  • ESLint clean on changed files.
  • tsc --noEmit: RQ-4699 adds zero new type errors (utils.ts holds the same 10 pre-existing errors with and without the guard; new/edited files are error-free). Overall count reflects the RQ-4283 revert restoring the repo's true pre-removal baseline.
  • vite build succeeds.

Not live-run in this session. The makeRequest block and the non-dismissable-for-all-segments modal are the bits most worth an eyeball.

🤖 Generated with Claude Code

Kanishkrawatt and others added 2 commits July 10, 2026 20:34
… creation

The API Client is now a separate standalone product, but the Interceptor
app still surfaced it in onboarding and workspace creation, funneling
users into creating local workspaces (which only ever held API Client
files). Per epic RQ-4191, remove all API Client touchpoints from these
flows so onboarding offers only Interceptor:

- DesktopOnboardingModal / WelcomeCard: remove the "Start using API
  Client" welcome card (expandable local-workspace create/open options)
  and the FOLDER_SELECTION local-workspace-creation step it fed into;
  drop the now-unused WorkspaceCreationProvider wrapper and the hooks
  (useCreateDefaultLocalWorkspace / useOpenLocalWorkspace /
  LocalWorkspaceCreateOptions / redirectToApiClient). "Skip" now simply
  completes onboarding instead of creating a local API Client workspace
  and redirecting to the API Client. Drop FOLDER_SELECTION from the
  OnboardingStep enum.
- CreateWorkspaceModalOld: remove the entire "Local workspace" option
  ("only API client files are supported") and its dead local-workspace
  creation code — the modal now creates team workspaces only.
- personaRecommendationData: remove the dead "Test API endpoints ->
  API Client" recommendation entry.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Follow-up to the onboarding/workspace-creation removal: strip every
user-reachable API Client entry point from the Interceptor app so the
product is fully inaccessible/invisible. The shared infrastructure that
happens to live under features/apiClient/ (workspace system, tab system,
variable/secrets slices, environment backend) is left in place — other
features depend on it — but nothing routes to or surfaces the API Client
product anymore.

Removed:
- Route: apiClientRoutes registration in routes/index.tsx.
- Primary sidebar "APIs" item (+ SidebarItemKey.APIs, icon, order entries).
- Home page ApiClientCard (component deleted) + its render.
- "API Client" breadcrumb label; PATHS.API_CLIENT.INDEX from the
  root-path landing set (useRootPathRedirector).
- Network inspector "Edit and Replay" context-menu item and its
  APIClientModal replay chain (ContextMenu -> VirtualTableV2 ->
  NetworkTable).
- Mock editor "Test" button and its APIClientModal test-mock chain.
- Session viewer "Replay Request" context-menu item and its
  APIClientModal chain.
- cURL-import deep link (AppModeInitializer OPEN_CURL_IMPORT_MODAL
  listener that navigated to the API Client).
Orphaned imports/vars from the above cleaned up.

Verified: ESLint clean on changed files (one pre-existing exhaustive-deps
warning), `tsc --noEmit` introduces zero new errors (net -9 vs the repo's
1298 baseline), and `vite build` succeeds.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Kanishkrawatt Kanishkrawatt changed the title [RQ-4283] Remove API Client from legacy onboarding & workspace creation [RQ-4283] Remove API Client from the Interceptor app (onboarding, workspace creation & all product surfaces) Jul 13, 2026
Kanishkrawatt and others added 4 commits July 17, 2026 14:51
The desktop first-run onboarding still opened on a feature-selection
screen (WelcomeCard) that framed a choice between the API Client and
Rules and funnelled users into local-workspace creation. The API Client
is now a standalone product, so that screen is obsolete.

- Remove the FEATURE_SELECTION step / WelcomeCard (and WelcomeCardHeader)
  in full; drop FEATURE_SELECTION from the OnboardingStep enum. The step
  machine now initializes — and stays — at AUTH, so first-run users land
  directly on the sign-in/sign-up card.
- AuthCard: remove the back-arrow (onBackClick) — there is no prior step
  to return to.

No path creates a local workspace or redirects to the API Client during
onboarding. Extension/web onboarding (OnboardingModal) is untouched.

Verified: ESLint clean on changed files; `tsc --noEmit` net 0 new errors
(1289 baseline unchanged); `vite build` succeeds.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
WorkspaceType.LOCAL workspaces existed only to back the API Client, which
is being removed. Hide them from every user-facing surface. This is
UI-hiding only — on-disk workspace folders are NOT deleted, and
LOCAL_STORAGE (logged-out) behavior is unchanged.

- Central lever (useWorkspaceFetcher): stop fetching/injecting local
  workspaces into `allWorkspaces`; only shared (team) workspaces flow in
  now. Everything that reads `allWorkspaces` (dropdown/overlay/settings)
  therefore surfaces no LOCAL entry.
- WorkspacesOverlay: remove the "Local workspaces" list section entirely
  (list rows, "Add", the empty-state section and its "New/Create local
  workspace" CTA) and the local-sync gating; drop the now-dead
  hasLocalWorkspaces / isLocalSyncEnabled state. Only the shared section
  and the common empty view remain. This also closes the MULTI
  (multi-workspace) view — its only UI entry was the LOCAL row checkboxes.
- CommonEmptyView: remove the desktop-only "New local workspace" button
  and the local mention from the description (team-only now).
- WorkspaceDropdown: remove the active-local avatar special-casing (use
  the generic WorkspaceAvatar for all single-view workspaces) and the
  "Load latest changes from your local files" refresh button.

Per the ticket's decision, a user currently active in a LOCAL workspace
is not force-switched or errored — they simply have no LOCAL entries to
switch back to (one-way door). Migration segment strings are unchanged.

Verified: ESLint clean on changed files; `tsc --noEmit` net 0 new errors
(1289 baseline unchanged); `vite build` succeeds.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This PR is being narrowed to exactly the three linked stories
(RQ-4695, RQ-4696, RQ-4699). RQ-4699 keeps the legacy API Client
mounted but blocks request execution behind a mandatory migration
modal — a strategy that is mutually exclusive with RQ-4283's
wholesale removal (the modal only mounts inside the API Client
container and makeRequest is only reachable from the Send UI, both
of which the route/product-surface removal deleted).

Revert the app-wide product-surface removal so the API Client is
reachable again and RQ-4699 can gate it:
- routes/index.tsx apiClientRoutes registration
- PrimarySidebar "APIs" item
- Home ApiClientCard (+ component files)
- RQBreadcrumb "API Client" label
- useRootPathRedirector root-path landing entry
- NetworkInspector "Edit and Replay", MockEditor "Test",
  SessionViewer "Replay Request" (APIClientModal chains)
- AppModeInitializer cURL-import deep link
- personaRecommendationData "Test API endpoints -> API Client" entry

The onboarding (RQ-4695) and CreateWorkspaceModalOld local-option
(RQ-4696) changes from the original RQ-4283 commits are retained —
they belong to the two sibling stories.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…on modal

The migration block was a modal overlaid on a fully-live client — it never
gated the request engine, so Send/Cmd+Enter kept firing requests. Add a real,
unconditional stop and make the comms mandatory. Web + desktop legacy client
(the client stays mounted; only sending is blocked).

The block (single choke point):
- makeRequest() (apiClient/screens/apiClient/utils.ts) is the universal exit
  for all six outbound paths — HTTP send, GraphQL send, response-panel Retry,
  Collection Runner, GraphQL introspection, WSDL/SOAP import fetch. Guard it
  before dispatching to extension/proxy: if the migration block is on, reject
  with a typed MigrationBlockedError. One edit = full coverage (per the ticket's
  DECISION: guard makeRequest for a full stop).
- Read block state from the GrowthBook singleton (growthbook.isOn), not a hook —
  makeRequest is not a React context. isOn returns a boolean even before
  features load, so the guard can't itself throw. Same MIGRATION_BLOCK_FLAG the
  container uses to mount the modal, so block + modal engage together.

The comms (mandatory modal, MigrationBlockModal.tsx):
- Force dismissable = false → drives every variant's Modal
  closable/keyboard/maskClosable/onCancel, so the modal is non-dismissable.
- Drop the three per-segment early-returns so the modal shows for all segments
  (local-storage / auto-cloud / auto-local-fs) whenever the master kill-switch
  is on; remove the now-unused per-segment variant flags.
- Workspace-loading guards are retained — irrelevant to the block since the
  engine is stopped in makeRequest regardless of modal render timing.

Verified: ESLint clean on changed files; `tsc --noEmit` adds zero new errors
(utils.ts holds the same 10 pre-existing errors with and without the guard;
MigrationBlockModal + MigrationBlockedError are error-free).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Kanishkrawatt Kanishkrawatt changed the title [RQ-4283] Remove API Client from the Interceptor app (onboarding, workspace creation & all product surfaces) [RQ-4695 / RQ-4696 / RQ-4699] Deprecate legacy API Client: onboarding cleanup, hide local workspaces, block sending Jul 20, 2026
Kanishkrawatt and others added 2 commits July 20, 2026 19:37
…tions

Drop the "Test API endpoints -> API Client" recommendation entry (and the
now-unused ApiOutlined import). Last remaining API Client touchpoint in the
legacy onboarding surface; the recommendations grid is itself unreferenced
(dead code), so no behavior change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Widen the home-screen primary cards (325px -> 588px) so they fill the
content width.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Kanishkrawatt
Kanishkrawatt requested a review from wrongsahil July 20, 2026 14:10
@Kanishkrawatt
Kanishkrawatt marked this pull request as ready for review July 20, 2026 14:10
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.

1 participant