Skip to content

Onboarding reminder step fails with 422, blocking account setup (PUT /api/profiles/:id) #877

Description

@CoryMCodes

Onboarding reminder step fails with 422, blocking account setup (PUT /api/profiles/:id)

Summary

Completing the check-in reminder step of onboarding fails for every user. PUT /api/profiles/:id
returns 422 Unprocessable Entity and Ember throws The adapter rejected the commit because it was invalid, so onboarding can't be completed.

Both choices on that step fail — picking a reminder time, and choosing "do not remind me" — for two
independent reasons.

Steps to reproduce

  1. Sign in as a user who hasn't completed onboarding
  2. Advance to the reminder step
  3. Either pick a time or select "do not remind me", then continue
  4. PUT /api/profiles/:id → 422

Root cause

frontend/app/components/onboarding/reminder-step.js:22 always sets onboardingReminder = true
before saving, so the scheduling branch in ProfilesController#update runs on every completion of
the step, regardless of what the user chose:

if time_changed || initial_onboarding_reminder
  delete_old_job(@profile.reminder_job_id)

  job_id = CheckinReminderJob.perform_in(get_reminder_time.minutes, @profile.id, @profile.checkin_reminder_at)
  @profile.update_column(:reminder_job_id, job_id)
end

1. "Do not remind me" → NoMethodError

transform_hash_time sets checkin_reminder_at to nil whenever the param is absent, and
get_reminder_time then calls .strftime on it:

NoMethodError: undefined method `strftime' for nil:NilClass
  app/controllers/api/v1/profiles_controller.rb:64

2. Picking a time → ArgumentError

@profile.checkin_reminder_at is an ActiveSupport::TimeWithZone, which Sidekiq 7's strict
argument checking rejects:

ArgumentError: Job arguments to CheckinReminderJob must be native JSON types,
but Fri, 21 Aug 2026 20:30:00.000000000 UTC +00:00 is a ActiveSupport::TimeWithZone.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions