Skip to content

fix: skip non-essential health checks for signup and show clear errors on outages#413

Open
MattBro wants to merge 4 commits intomainfrom
matt/fix-health-check-visibility
Open

fix: skip non-essential health checks for signup and show clear errors on outages#413
MattBro wants to merge 4 commits intomainfrom
matt/fix-health-check-visibility

Conversation

@MattBro
Copy link
Copy Markdown
Contributor

@MattBro MattBro commented Apr 23, 2026

Problem

Two issues with health check behavior:

  1. --signup blocked by irrelevant services - Provisioning only makes HTTP calls to PostHog, but the wizard blocks when Anthropic is degraded. This means users can't sign up during Anthropic outages even though provisioning doesn't use Anthropic.

  2. Silent exit on outages - When health checks block the run, the TUI flashes and exits with just "posthog-integration exited." No explanation of what's wrong or which service is down.

Changes

Reduced health checks for signup:

  • Added SIGNUP_WIZARD_READINESS_CONFIG that only blocks on posthogOverall and llmGateway
  • Agent runner, TUI gate, and HealthCheckScreen all use the reduced config when session.signup is true

Clear error messaging:

  • TUI now waits for user acknowledgment via health-check gate before proceeding
  • Agent runner fallback path calls wizardAbort with blocking service names
  • LoggingUI lists each blocking service with status and error detail

All 82 store tests and 37 health check tests pass.

…tages

Two fixes for health check behavior:

1. When --signup is used, only PostHog and LLM Gateway are required (not
   Anthropic, npm, GitHub Releases, etc.) since provisioning doesn't use
   those services. Added SIGNUP_WIZARD_READINESS_CONFIG and wired it
   through the agent-runner, TUI gate, and HealthCheckScreen.

2. When health checks block the run, the wizard now properly waits for
   user acknowledgment in the TUI (via the health-check gate in bin.ts)
   and exits with a clear error message in the agent-runner fallback
   path (via wizardAbort with blocking service names). The LoggingUI
   also now lists each blocking service with its status.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

🧙 Wizard CI

Run the Wizard CI and test your changes against wizard-workbench example apps by replying with a GitHub comment using one of the following commands:

Test all apps:

  • /wizard-ci all

Test all apps in a directory:

  • /wizard-ci android
  • /wizard-ci angular
  • /wizard-ci astro
  • /wizard-ci django
  • /wizard-ci fastapi
  • /wizard-ci flask
  • /wizard-ci javascript-node
  • /wizard-ci javascript-web
  • /wizard-ci laravel
  • /wizard-ci next-js
  • /wizard-ci nuxt
  • /wizard-ci python
  • /wizard-ci rails
  • /wizard-ci react-native
  • /wizard-ci react-router
  • /wizard-ci stripe
  • /wizard-ci sveltekit
  • /wizard-ci swift
  • /wizard-ci tanstack-router
  • /wizard-ci tanstack-start
  • /wizard-ci vue

Test an individual app:

  • /wizard-ci android/Jetchat
  • /wizard-ci angular/angular-saas
  • /wizard-ci astro/astro-hybrid-marketing
Show more apps
  • /wizard-ci astro/astro-ssr-docs
  • /wizard-ci astro/astro-static-marketing
  • /wizard-ci astro/astro-view-transitions-marketing
  • /wizard-ci django/django3-saas
  • /wizard-ci fastapi/fastapi3-ai-saas
  • /wizard-ci flask/flask3-social-media
  • /wizard-ci javascript-node/express-todo
  • /wizard-ci javascript-node/fastify-blog
  • /wizard-ci javascript-node/hono-links
  • /wizard-ci javascript-node/koa-notes
  • /wizard-ci javascript-node/native-http-contacts
  • /wizard-ci javascript-web/saas-dashboard
  • /wizard-ci laravel/laravel12-saas
  • /wizard-ci next-js/15-app-router-saas
  • /wizard-ci next-js/15-app-router-todo
  • /wizard-ci next-js/15-pages-router-saas
  • /wizard-ci next-js/15-pages-router-todo
  • /wizard-ci nuxt/movies-nuxt-3-6
  • /wizard-ci nuxt/movies-nuxt-4
  • /wizard-ci python/meeting-summarizer
  • /wizard-ci rails/fizzy
  • /wizard-ci react-native/expo-react-native-hacker-news
  • /wizard-ci react-native/react-native-saas
  • /wizard-ci react-router/react-router-v7-project
  • /wizard-ci react-router/rrv7-starter
  • /wizard-ci react-router/saas-template
  • /wizard-ci react-router/shopper
  • /wizard-ci stripe/stripe-next-js-saas-starter
  • /wizard-ci stripe/stripe-saas-demo
  • /wizard-ci sveltekit/CMSaasStarter
  • /wizard-ci swift/hackers-ios
  • /wizard-ci tanstack-router/tanstack-router-code-based-saas
  • /wizard-ci tanstack-router/tanstack-router-file-based-saas
  • /wizard-ci tanstack-start/tanstack-start-saas
  • /wizard-ci vue/movies

Results will be posted here when complete.

@MattBro MattBro requested a review from a team April 23, 2026 18:26
Copy link
Copy Markdown
Collaborator

@gewenyu99 gewenyu99 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think with this, we lose the service warnings. DEFAULT_WIZARD_READINESS_CONFIG show a blocking service warning that users can dismiss.

Only when when we try downloading from githubReleases and that fails, do we show a modal that you just press any key to exit. When this is down, I think it'll block sign up anyway.

I think this change makes sense, but maybe the sequencing is off here. Maybe it's:

  1. user runs with --signup
  2. we administer a new account with the email
  3. we then run github release download for the skills menu json + health checks
  4. we show a warning like before.

And where we can be different is maybe offer the option to follow the traditional onboarding if say, anthropic is down, but everything else is fine.

What do you think?

@MattBro MattBro requested a review from a team April 23, 2026 20:37
For signup, the reduced SIGNUP_WIZARD_READINESS_CONFIG block list meant
that services like Anthropic being degraded would silently skip past
the health check screen. Now any service that would have blocked under
the default config is shown as a dismissable warning modal so the user
can see what's degraded and decide whether to continue.

Hard blocks (posthog, llm-gateway) still render red; warnings render
yellow with a softer message.
@MattBro
Copy link
Copy Markdown
Contributor Author

MattBro commented Apr 24, 2026

Went with a smaller fix than resequencing in 12828e2:

  • Kept SIGNUP_WIZARD_READINESS_CONFIG as the hard-block list (posthog + llm-gateway only).
  • Added back a dismissable yellow warning for signup when services that would block under DEFAULT are degraded (e.g. Anthropic). "Continue anyway?" lets user proceed.
  • Gate waits for dismissal whenever signup has either hard blocks or warnings.

Anthropic degraded during signup now = yellow modal, user sees what's affected, dismisses, continues. No silent skip.

Skipped the resequencing for this PR, bigger restructure, can be a follow-up. Fallback-to-traditional-onboarding feels like a separate product call.

Copy link
Copy Markdown
Collaborator

@gewenyu99 gewenyu99 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ran this through a proxy, the blocking behavior works as described. This isn't based on top of the branch that adds --email yet, right? Don't see email anywhere in bin.ts so couldn't test the full flow

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.

2 participants