Remove dead FirstMeeting onboarding flow#18907
Conversation
Co-Authored-By: ashlee@vellum.ai <ashlee@vellum.ai>
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
⚙️ Control Options:
|
LUM-282 Migrate CapabilitiesModalView to use VModal
ContextSub-issue of LUM-276 (lower priority). Migrate File: Current State
Considerations
Acceptance Criteria
Summary: Migrate the onboarding Key Context:
✨ Generated by Linear Issue Context Agent |
|
Closing this PR — |
Delete 10 unused files from FirstMeeting/ directory and remove first-meeting-specific state from OnboardingState. The FirstMeetingFlowView (the only consumer of these files) is never instantiated — the active onboarding uses OnboardingFlowView with a different step sequence. JITPermissionManager and JITPermissionView are retained as they are still used by MainWindowView. Co-Authored-By: ashlee@vellum.ai <ashlee@vellum.ai>
Co-Authored-By: ashlee@vellum.ai <ashlee@vellum.ai>
Git History Evidence: Why These Files Are Dead CodeThe Timeline
Key Evidence
Kept Files
|
Summary
The
FirstMeeting/onboarding flow (FirstMeetingFlowViewand its 9 child views) is dead code —FirstMeetingFlowViewis never instantiated anywhere in the codebase. The active onboarding usesOnboardingFlowViewwith a completely different step sequence (WakeUp → APIKey → APIKeyEntry → ImproveExperience). This PR deletes the unreachable code and cleans up associated state.Why this is safe to remove — git history evidence
The FirstMeeting flow was an experimental variant that lasted ~1 day before being deliberately disconnected. The files were never reconnected.
7738d6efe(#1350)FirstMeetingFlowViewadded, wired intoOnboardingWindowvia variant routing (if state.onboardingVariant == .firstMeeting)1b2c0bdc0(#1405)OnboardingWindow, makingFirstMeetingFlowViewunreachable. Commit message: "simplify onboarding to use only the default flow."What changed
Deleted (10 files, ~1,660 lines):
FirstMeetingFlowView,FirstMeetingEggView,FirstMeetingHatchViewFirstMeetingIntroductionView,FirstMeetingIntroductionViewModelCapabilitiesBriefingView,CapabilitiesModalViewObservationModeView,ObservationSessionView,ObservationSummaryViewKept (2 files in
FirstMeeting/):JITPermissionManager.swift— actively used byMainWindowViewJITPermissionView.swift— actively used byMainWindowViewCleaned up in
OnboardingState.swift:OnboardingVariantenum (.default/.firstMeeting)firstMeetingCrackProgress,conversationCompleted,capabilitiesBriefingShown,observationCompleted,firstTaskCandidate,observationDurationMinutes,observationInsights)crackProgress,init(), andpersist()maxStep = 3clearPersistedState()still removes the oldonboarding.variantandonboarding.firstMeetingCrackProgresskeys so they get cleaned up on logout/retireReview & Testing Checklist for Human
MacOSClientFeatureFlagManager.shared.isEnabled("managed_sign_in_enabled")before falling through tomaxStep = 3. Both managed and non-managed paths already resolved tomaxStep = 3; only the now-deletedfirstMeetingvariant hadmaxStep = 4. Confirmlet maxStep = 3is equivalent in all flag states.JITPermissionManagerandJITPermissionViewwere kept. Confirm the JIT permission overlay inMainWindowViewstill works.Test plan: Launch the app → trigger onboarding → complete all steps through to hatching. Separately, trigger a JIT permission prompt (e.g. accessibility) to verify the overlay still appears.
Notes
clearPersistedState()retains the oldonboarding.variantandonboarding.firstMeetingCrackProgresskeys in its cleanup list so any orphaned UserDefaults values are removed on logout/retire.persist()no longer writes them.CapabilitiesModalView(LUM-282), but investigation revealed the view is unreachable. Issue updated to Won't Do.Link to Devin session: https://app.devin.ai/sessions/771fad2a97c547ee91fb8306e99a216f
Requested by: @ashleeradka