diff --git a/docs/reference/feature-education-retention-analytics.md b/docs/reference/feature-education-retention-analytics.md
index 51e338fb7e1..1478ab46fb6 100644
--- a/docs/reference/feature-education-retention-analytics.md
+++ b/docs/reference/feature-education-retention-analytics.md
@@ -32,7 +32,7 @@ Emitted once when a contextual tour first renders a measured target.
Payload:
-- `tour_id`: `workspace-board`, `browser`, `tasks`, `automations`, or `workspace-creation`
+- `tour_id`: `workspace-board`, `browser`, `tasks`, or `automations`
- `source`: bounded source enum from `src/shared/feature-education-telemetry.ts`
- `was_feature_previously_interacted`: boolean from local education state at the moment the tour is shown
@@ -122,7 +122,6 @@ Question: Do users later use the feature taught by the tour?
Build funnels from tour events to real product events:
-- `workspace-creation`: `contextual_tour_outcome` -> `workspace_created`
- `tasks`: `contextual_tour_outcome` -> workspace creation from task-linked flows where existing telemetry exposes the source; if the current event is insufficient, add a targeted task-started-workspace event.
- `browser`: `contextual_tour_outcome` -> browser grab/annotation events. If these do not exist, add targeted events for the concrete actions, not a broad feature-interaction event.
- `automations`: `contextual_tour_outcome` -> automation creation/run events. If these do not exist, add targeted events for create/run.
diff --git a/src/renderer/src/components/NewWorkspaceComposerCard.tsx b/src/renderer/src/components/NewWorkspaceComposerCard.tsx
index b4c4035d3fe..d0403ba91df 100644
--- a/src/renderer/src/components/NewWorkspaceComposerCard.tsx
+++ b/src/renderer/src/components/NewWorkspaceComposerCard.tsx
@@ -307,7 +307,7 @@ export default function NewWorkspaceComposerCard({
)}
>
-
+
@@ -452,7 +452,6 @@ export default function NewWorkspaceComposerCard({
size="sm"
onClick={onToggleAdvanced}
className="-ml-2 text-xs"
- data-contextual-tour-target="workspace-creation-setup"
>
Advanced
{creating ? : null}
{primaryActionLabel}
diff --git a/src/renderer/src/components/NewWorkspaceComposerModal.tsx b/src/renderer/src/components/NewWorkspaceComposerModal.tsx
index d924ace58c8..02bf3bd0b47 100644
--- a/src/renderer/src/components/NewWorkspaceComposerModal.tsx
+++ b/src/renderer/src/components/NewWorkspaceComposerModal.tsx
@@ -8,7 +8,6 @@ import { AGENT_CATALOG } from '@/lib/agent-catalog'
import type { LinkedWorkItemSummary } from '@/lib/new-workspace'
import { shouldAllowComposerEnterSubmitTarget } from '@/lib/new-workspace-enter-guard'
import { isScreenSubmitShortcut } from '@/lib/screen-submit-shortcut'
-import { useContextualTour } from '@/components/contextual-tours/use-contextual-tour'
import type {
TuiAgent,
WorkspaceCreateTelemetrySource,
@@ -99,7 +98,6 @@ function QuickTabBody({
onClose: () => void
active: boolean
}): React.JSX.Element {
- useContextualTour('workspace-creation', active, 'workspace_creation_modal')
const settings = useAppStore((s) => s.settings)
const { cardProps, composerRef, nameInputRef, submitQuick, createDisabled } = useComposerState({
initialName: modalData.prefilledName ?? '',
diff --git a/src/renderer/src/components/contextual-tours/contextual-tour-gate.test.ts b/src/renderer/src/components/contextual-tours/contextual-tour-gate.test.ts
index 8e8451cb5d3..46a325a4955 100644
--- a/src/renderer/src/components/contextual-tours/contextual-tour-gate.test.ts
+++ b/src/renderer/src/components/contextual-tours/contextual-tour-gate.test.ts
@@ -14,15 +14,12 @@ import {
import { getContextualTourPanelCssPosition } from './contextual-tour-panel-position'
describe('contextual tour gate', () => {
- it('allows workspace creation only over its own creation modals', () => {
- const workspaceCreation = getContextualTour('workspace-creation')
+ it('blocks tours while another modal is active', () => {
const tasks = getContextualTour('tasks')
- expect(isContextualTourAllowedForModal(workspaceCreation, 'new-workspace-composer')).toBe(true)
- expect(isContextualTourAllowedForModal(workspaceCreation, 'add-repo')).toBe(true)
- expect(isContextualTourAllowedForModal(workspaceCreation, 'quick-open')).toBe(false)
expect(isContextualTourAllowedForModal(tasks, 'none')).toBe(true)
expect(isContextualTourAllowedForModal(tasks, 'new-workspace-composer')).toBe(false)
+ expect(isContextualTourAllowedForModal(tasks, 'add-repo')).toBe(false)
})
it('does not start when the required first target is missing', () => {
diff --git a/src/renderer/src/components/contextual-tours/use-contextual-tour.ts b/src/renderer/src/components/contextual-tours/use-contextual-tour.ts
index 7603505bf54..d18282042ff 100644
--- a/src/renderer/src/components/contextual-tours/use-contextual-tour.ts
+++ b/src/renderer/src/components/contextual-tours/use-contextual-tour.ts
@@ -7,8 +7,7 @@ const TOUR_SOURCES = {
'workspace-board': 'workspace_board_visible',
browser: 'browser_visible',
tasks: 'tasks_open',
- automations: 'automations_open',
- 'workspace-creation': 'workspace_creation_visible'
+ automations: 'automations_open'
} satisfies Record
export function useContextualTour(
diff --git a/src/renderer/src/components/sidebar/AddRepoCreateStep.tsx b/src/renderer/src/components/sidebar/AddRepoCreateStep.tsx
index 7bfc34c4c51..97187f9a703 100644
--- a/src/renderer/src/components/sidebar/AddRepoCreateStep.tsx
+++ b/src/renderer/src/components/sidebar/AddRepoCreateStep.tsx
@@ -320,10 +320,7 @@ export function CreateStep({
(= content size), so a long path inside the Location row would blow out
the dialog width even with flex + truncate on the row itself. min-w-0
here caps the grid track at the dialog's max-width. */}
-
+
{/* Kind toggle. Real radiogroup so screen readers announce it as a choice. */}