Maestro task f89279b8-b92c-4d9f-a6c2-fd87fccda509. Onboarding step 3 now calls subscribePush() from its tap and shows the honest result, and POST /api/v1/settings/notifications/test-push sends a test notification through the notify path. The physical-device verification is split out to an owner-dependent task. See the developer report on the PR.
Maestro task f89279b8-b92c-4d9f-a6c2-fd87fccda509. Onboarding step 3 now calls subscribePush() from its tap and shows the honest result, and POST /api/v1/settings/notifications/test-push sends a test notification through the notify path. The physical-device verification is split out to an owner-dependent task. See the developer report on the PR.
Onboarding step 3's "Turn on notifications" now calls usePush().subscribePush
straight from that tap (the only place onboarding asks for permission) and
shows how it ended: on; blocked, with how to allow it in the browser's site
settings; not supported, with how to add MealQuest to the Home Screen on
iPhone; or a dismissed prompt that can be asked again. "Maybe later" still
finishes without asking. The interim notificationsUnavailable is gone.
POST /api/v1/settings/notifications/test-push queues "MealQuest test
notification" through the notification outbox as a plan_ready event with a
fresh plan_ready:test-<ULID> key, opening /plan, on the push channel only
(new notify.Service.EmitPush), never Google Chat. It answers 202
{event_key, subscriptions}, or 409 no_subscriptions / push_off rather than
reporting success when nothing would be sent.
Maestro task f89279b8-b92c-4d9f-a6c2-fd87fccda509.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SendTest now reads the plan_ready push preference before the stored
subscriptions, so with push off and no device subscribed the test-push
endpoint answers 409 push_off rather than 409 no_subscriptions.
Onboarding step 3's unsupported result now gives the Home Screen guidance
in any iOS browser, not only Safari. isIos in InstallHint.tsx is the one
check for iPhone, iPod and iPad; isIosSafari builds on it and InstallHint
itself stays Safari-only.
Task f89279b8-b92c-4d9f-a6c2-fd87fccda509
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Maestro task f89279b8-b92c-4d9f-a6c2-fd87fccda509. Onboarding step 3 now calls subscribePush() from its tap and shows the honest result, and POST /api/v1/settings/notifications/test-push sends a test notification through the notify path. The physical-device verification is split out to an owner-dependent task. See the developer report on the PR.
Onboarding step 3's "Turn on notifications" now calls usePush().subscribePush straight from that tap (the only place onboarding asks for permission) and shows how it ended: on; blocked, with how to allow it in the browser's site settings; not supported, with how to add MealQuest to the Home Screen on iPhone; or a dismissed prompt that can be asked again. "Maybe later" still finishes without asking. The interim notificationsUnavailable is gone. POST /api/v1/settings/notifications/test-push queues "MealQuest test notification" through the notification outbox as a plan_ready event with a fresh plan_ready:test-<ULID> key, opening /plan, on the push channel only (new notify.Service.EmitPush), never Google Chat. It answers 202 {event_key, subscriptions}, or 409 no_subscriptions / push_off rather than reporting success when nothing would be sent. Maestro task f89279b8-b92c-4d9f-a6c2-fd87fccda509. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>Independent Codex gpt-6-sol review: CHANGES_REQUIRED for this exact commit.
Independent Codex gpt-6-sol review: APPROVED for this exact commit.