Skip to content

Remove dead onboarding code: Hatch/, Interview/, and unused step views#19000

Merged
ashleeradka merged 6 commits into
mainfrom
devin/1773880935-remove-dead-onboarding-code
Mar 19, 2026
Merged

Remove dead onboarding code: Hatch/, Interview/, and unused step views#19000
ashleeradka merged 6 commits into
mainfrom
devin/1773880935-remove-dead-onboarding-code

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Mar 19, 2026

Copy link
Copy Markdown
Contributor

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 OnboardingFlowView across four design changes in Feb 2026. Since disconnection, they received only mechanical edits (color token migrations, icon library swaps) — no active development.

Date Commit What it disconnected
Feb 12 12c052121 (#1011) — "Redesign onboarding to vertical card layout" Removed EggSceneView from OnboardingFlowView, replacing the SpriteKit egg animation with static stage PNGs. Made the entire Hatch/ SpriteKit pipeline unreachable.
Feb 15 f8b909b87 (#2881) — "defer microphone/screen-recording permission asks to dashboard tasks" Removed SpeechPermissionStepView and ScreenPermissionStepView from the flow. Commit noted "preserved for later reuse by dashboard tasks" — that reuse never happened.
Feb 15 d57600a25 (#2957) — "add light theme support, redesign onboarding" Removed MeadowBackground from the flow, replacing it with VColor.surfaceOverlay.
Feb 18 94c8410f0 (#4682) — "avatar evolution during onboarding" Removed all remaining old views: 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):

  • Hatch/ (7): EggSceneView, HatchViewModel, OnboardingStageImage, EggHatchScene, EggFragmentMap, PixelArtData, CreatureView — SpriteKit egg-crack animation pipeline. The active HatchingStepView (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.
  • Interview/ (5): InterviewStepView, InterviewChatView, InterviewViewModel, InterviewMessage, ProfileExtractor — onboarding chat interview system. InterviewStepView was the only entry point; removed from the flow in 94c8410f0.
  • Step views (6): AliveStepView, NamingStepView, FnKeyStepView, SpeechPermissionStepView, AccessibilityPermissionStepView, ScreenPermissionStepView — old steps from the 8-step flow.
  • Utilities (5): 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.swiftFeatures/MainWindow/UserProfile.swift — The UserProfile struct was defined inside ProfileExtractor.swift (deleted above), but MainWindowView.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, and interviewCompleted. 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-checks block since the skipPermissionChecks property it set no longer exists.

Kept: assistantName and chosenKey — still persisted and chosenKey is read by AppDelegate+WindowsAndSurfaces to set the activation key.

Review & Testing Checklist for Human

  • Build in Xcode — Verify the project compiles cleanly. ProfileExtractor.swift was deleted but contained UserProfile which MainWindowView still uses — confirm the extracted UserProfile.swift in Features/MainWindow/ resolves the reference correctly.
  • Run through onboarding — Complete the active flow (WakeUp → APIKey → APIKeyEntry → ImproveExperience → hatching) to confirm no regressions from the OnboardingState cleanup.
  • Test conversation export — Copy a conversation to clipboard (Cmd+C or via menu) to verify MainWindowView.resolveParticipantNames() still decodes UserProfile from UserDefaults without errors.
  • Verify chosenKey defaultFnKeyStepView (the only view that set chosenKey) is deleted, so chosenKey will always be .fn (the default). Confirm AppDelegate+WindowsAndSurfaces still 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

  • Follows Remove dead FirstMeeting onboarding flow #18907 (FirstMeeting cleanup, now merged). The two together remove the entire old onboarding variant system (~33 files, ~4,500 lines total).
  • assistantName is now vestigial — persisted/restored but never displayed by any live view. Left in place since removing it from persistence is a separate, riskier change.
  • LogExporter still references "onboarding.interviewCompleted" as a UserDefaults key for diagnostics export — this is fine, it just reads whatever value exists in UserDefaults.
  • The --skip-permission-checks CLI 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


Open with Devin

devin-ai-integration Bot and others added 4 commits March 18, 2026 22:42
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>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor Author

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 3 additional findings.

Open in Devin Review

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>
@vellum-ai vellum-ai deleted a comment from devin-ai-integration Bot Mar 19, 2026
@vellum-ai vellum-ai deleted a comment from devin-ai-integration Bot Mar 19, 2026
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>
@ashleeradka ashleeradka merged commit 817d47d into main Mar 19, 2026
3 checks passed
@ashleeradka ashleeradka deleted the devin/1773880935-remove-dead-onboarding-code branch March 19, 2026 01:23
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