From ea071cc2c8e2e294f06e1af73212f9a13ee4cdf6 Mon Sep 17 00:00:00 2001 From: Matt Brooker Date: Mon, 13 Apr 2026 12:12:55 -0400 Subject: [PATCH] fix: unblock signup during release outages --- .../screens/health/HealthCheckScreen.test.tsx | 30 +++++++++++++++++++ .../tui/screens/health/HealthCheckScreen.tsx | 11 +++++-- src/ui/tui/screens/health/outage-behavior.ts | 9 ++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 src/ui/tui/screens/health/HealthCheckScreen.test.tsx create mode 100644 src/ui/tui/screens/health/outage-behavior.ts diff --git a/src/ui/tui/screens/health/HealthCheckScreen.test.tsx b/src/ui/tui/screens/health/HealthCheckScreen.test.tsx new file mode 100644 index 00000000..c1465e9e --- /dev/null +++ b/src/ui/tui/screens/health/HealthCheckScreen.test.tsx @@ -0,0 +1,30 @@ +import { canContinueBlockingOutage } from './outage-behavior.js'; + +describe('canContinueBlockingOutage', () => { + it('allows continuing when GitHub Releases is healthy', () => { + expect( + canContinueBlockingOutage({ + isGithubReleasesDown: false, + signup: false, + }), + ).toBe(true); + }); + + it('blocks non-signup runs when GitHub Releases is down', () => { + expect( + canContinueBlockingOutage({ + isGithubReleasesDown: true, + signup: false, + }), + ).toBe(false); + }); + + it('allows signup runs to continue when GitHub Releases is down', () => { + expect( + canContinueBlockingOutage({ + isGithubReleasesDown: true, + signup: true, + }), + ).toBe(true); + }); +}); diff --git a/src/ui/tui/screens/health/HealthCheckScreen.tsx b/src/ui/tui/screens/health/HealthCheckScreen.tsx index 42d05a4b..a257405b 100644 --- a/src/ui/tui/screens/health/HealthCheckScreen.tsx +++ b/src/ui/tui/screens/health/HealthCheckScreen.tsx @@ -22,6 +22,7 @@ import { ServiceHealthStatus } from '../../../../lib/health-checks/types.js'; import { wizardAbort } from '../../../../utils/wizard-abort.js'; import { fetchSkillMenu, downloadSkill } from '../../../../lib/wizard-tools.js'; import { REMOTE_SKILLS_BASE_URL } from '../../../../lib/constants.js'; +import { canContinueBlockingOutage } from './outage-behavior.js'; interface HealthCheckScreenProps { store: WizardStore; @@ -92,6 +93,10 @@ export const HealthCheckScreen = ({ store }: HealthCheckScreenProps) => { if (blockingKeys.length === 0) return null; const isGithubReleasesDown = blockingKeys.includes('githubReleases'); + const canContinue = canContinueBlockingOutage({ + isGithubReleasesDown, + signup: store.session.signup, + }); const canDownloadSkills = result.health.githubReleases.status === ServiceHealthStatus.Healthy; const integration = store.session.integration; @@ -100,7 +105,9 @@ export const HealthCheckScreen = ({ store }: HealthCheckScreenProps) => { const docsUrl = store.session.frameworkConfig?.metadata.docsUrl; const description = isGithubReleasesDown - ? "The Wizard can't download necessary skills from GitHub Releases right now." + ? store.session.signup + ? "PostHog account creation can continue, but the Wizard can't download necessary skills from GitHub Releases right now." + : "The Wizard can't download necessary skills from GitHub Releases right now." : 'The Wizard may not work reliably while services are affected.'; const handleDownloadAndExit = async () => { @@ -138,7 +145,7 @@ export const HealthCheckScreen = ({ store }: HealthCheckScreenProps) => { title={title} width={72} footer={ - isGithubReleasesDown ? ( + !canContinue ? (