Remove dead onboarding code: Hatch/, Interview/, and unused step views#19000
Merged
Conversation
Co-Authored-By: ashlee@vellum.ai <ashlee@vellum.ai>
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>
Delete 23 unreachable files (~3,400 lines) from the onboarding system: - Hatch/: EggSceneView, HatchViewModel, OnboardingStageImage, EggHatchScene, EggFragmentMap, PixelArtData, CreatureView (egg/hatch animation system) - Interview/: InterviewStepView, InterviewChatView, InterviewViewModel, InterviewMessage, ProfileExtractor (onboarding chat interview) - Step views: AliveStepView, NamingStepView, FnKeyStepView, SpeechPermissionStepView, AccessibilityPermissionStepView, ScreenPermissionStepView (old onboarding steps 4-8) - Utilities: ReactionBubble, MeadowBackground, TypewriterText, OnboardingPanel, OnboardingFooter Clean up OnboardingState: remove crackProgress, interviewCompleted, permission-related properties (speechGranted, accessibilityGranted, screenGranted, skipPermissionChecks, anyPermissionDenied). Remove skipPermissionChecks debug flag from OnboardingWindow (no longer read by any view). Co-Authored-By: ashlee@vellum.ai <ashlee@vellum.ai>
Contributor
Author
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
⚙️ Control Options:
|
Base automatically changed from
devin/1773873692-lum-282-migrate-capabilities-modal-to-vmodal
to
main
March 19, 2026 01:05
Co-Authored-By: ashlee@vellum.ai <ashlee@vellum.ai>
ProfileExtractor.swift (deleted as dead code) contained the UserProfile struct which MainWindowView still uses to decode the stored user profile from UserDefaults. Move the struct to its own file in MainWindow/. Co-Authored-By: ashlee@vellum.ai <ashlee@vellum.ai>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Deletes 23 unreachable files (~2,850 lines) from the onboarding system. The active onboarding flow uses only 4 steps (WakeUp → APIKey → APIKeyEntry → ImproveExperience → HatchingStepView). The deleted code belongs to a previous 8-step flow and the egg-hatching animation system, none of which is instantiated anywhere in the codebase.
Why this is safe to remove — git history evidence
These files were deliberately disconnected from
OnboardingFlowViewacross four design changes in Feb 2026. Since disconnection, they received only mechanical edits (color token migrations, icon library swaps) — no active development.12c052121(#1011) — "Redesign onboarding to vertical card layout"EggSceneViewfromOnboardingFlowView, replacing the SpriteKit egg animation with static stage PNGs. Made the entireHatch/SpriteKit pipeline unreachable.f8b909b87(#2881) — "defer microphone/screen-recording permission asks to dashboard tasks"SpeechPermissionStepViewandScreenPermissionStepViewfrom the flow. Commit noted "preserved for later reuse by dashboard tasks" — that reuse never happened.d57600a25(#2957) — "add light theme support, redesign onboarding"MeadowBackgroundfrom the flow, replacing it withVColor.surfaceOverlay.94c8410f0(#4682) — "avatar evolution during onboarding"NamingStepView,AliveStepView,FnKeyStepView,AccessibilityPermissionStepView,InterviewStepView,OnboardingFooter,OnboardingStageImage. Sub-commit: "Remove legacy onboarding step branches". Replaced the 8-step flow with the current 4-step flow.What changed
Deleted files (23):
EggSceneView,HatchViewModel,OnboardingStageImage,EggHatchScene,EggFragmentMap,PixelArtData,CreatureView— SpriteKit egg-crack animation pipeline. The activeHatchingStepView(added in Remove .vellum writes during remote setup, add Hatch! button with hatching animation #4832) uses a completely different animation system and does not reference any of these.InterviewStepView,InterviewChatView,InterviewViewModel,InterviewMessage,ProfileExtractor— onboarding chat interview system.InterviewStepViewwas the only entry point; removed from the flow in94c8410f0.AliveStepView,NamingStepView,FnKeyStepView,SpeechPermissionStepView,AccessibilityPermissionStepView,ScreenPermissionStepView— old steps from the 8-step flow.ReactionBubble,MeadowBackground,TypewriterText,OnboardingPanel,OnboardingFooter— only consumed by the deleted views above and by FirstMeeting files (removed in Remove dead FirstMeeting onboarding flow #18907).Extracted to standalone file (1):
UserProfile.swift→Features/MainWindow/UserProfile.swift— TheUserProfilestruct was defined insideProfileExtractor.swift(deleted above), butMainWindowView.resolveParticipantNames()still decodes it from UserDefaults to resolve the user's display name for conversation export. Moved the struct to its own file alongside its only remaining consumer.OnboardingState cleanup: Removed
speechGranted,accessibilityGranted,screenGranted,skipPermissionChecks,anyPermissionDenied,crackProgress, andinterviewCompleted. All were only read/written by deleted views.clearPersistedState()still removes the old UserDefaults keys for backwards compatibility.OnboardingWindow: Removed the
#if DEBUG/--skip-permission-checksblock since theskipPermissionChecksproperty it set no longer exists.Kept:
assistantNameandchosenKey— still persisted andchosenKeyis read byAppDelegate+WindowsAndSurfacesto set the activation key.Review & Testing Checklist for Human
ProfileExtractor.swiftwas deleted but containedUserProfilewhichMainWindowViewstill uses — confirm the extractedUserProfile.swiftinFeatures/MainWindow/resolves the reference correctly.OnboardingStatecleanup.MainWindowView.resolveParticipantNames()still decodesUserProfilefrom UserDefaults without errors.chosenKeydefault —FnKeyStepView(the only view that setchosenKey) is deleted, sochosenKeywill always be.fn(the default). ConfirmAppDelegate+WindowsAndSurfacesstill reads it correctly and the activation key works post-onboarding.Test plan: Build → launch app → complete onboarding → verify activation key works → copy a conversation to clipboard → confirm no crashes or regressions.
Notes
assistantNameis now vestigial — persisted/restored but never displayed by any live view. Left in place since removing it from persistence is a separate, riskier change.LogExporterstill references"onboarding.interviewCompleted"as a UserDefaults key for diagnostics export — this is fine, it just reads whatever value exists in UserDefaults.--skip-permission-checksCLI argument now silently no-ops. If dev workflows depended on it, note that no view was reading it anyway since the permission step views were already disconnected.Link to Devin session: https://app.devin.ai/sessions/771fad2a97c547ee91fb8306e99a216f
Requested by: @ashleeradka