From 7ab22106ee52e28add551e3cbeb45ceafedf774d Mon Sep 17 00:00:00 2001 From: axiomlogicnexus Date: Mon, 29 Jun 2026 17:20:22 +0000 Subject: [PATCH] Refine HyperTwist launch banner blocker detail --- .../HyperTwist/DEVELOPMENT.md | 37 ++++++++ website/README.md | 7 ++ .../src/__tests__/PublicLaunchStatus.test.tsx | 85 ++++++++++++++++++- .../src/components/ui/PublicLaunchStatus.tsx | 34 ++++++-- 4 files changed, 154 insertions(+), 9 deletions(-) diff --git a/docs/v6_5_deep_manual_pack/HyperTwist/DEVELOPMENT.md b/docs/v6_5_deep_manual_pack/HyperTwist/DEVELOPMENT.md index 729b8f9..7a23dc0 100644 --- a/docs/v6_5_deep_manual_pack/HyperTwist/DEVELOPMENT.md +++ b/docs/v6_5_deep_manual_pack/HyperTwist/DEVELOPMENT.md @@ -1955,6 +1955,43 @@ Latest same-family responsive public-route expansion follow-up on `2026-06-29`: - the browser launch-authority lane now matches the already-declared server-owned contract more closely instead of merely being consistent with it by coincidence + - the always-visible marketing-shell status banner should not regress into + generic rollout prose when deeper launch-authority surfaces already know + the concrete blockers + - the compact banner continuation now also projects the first concrete live + auth-health or billing-runtime blockers plus a remaining-count summary, + while `/launch-status` and `/app/launch-status` still carry the full + blocker list + - the same-family verification loop then stayed green under: + - `npm --prefix website run type-check` + - `npm --prefix website test -- --run src/__tests__/PublicLaunchStatus.test.tsx src/__tests__/public-marketing-pages.test.tsx` + - `2` files passed + - `19` tests passed + - `scripts/run-hypertwist-web-surface-validation.sh` + - focused website route/auth/release validation: `14` files, `82` tests + passed + - website deployment/readiness tooling validation: `3` files, `30` tests + passed + - `website/server` validation: `10` files, `36` tests passed + - website plus `Content/Browser` production builds passed + - `website/` and `Content/Browser/` production audits stayed at + `found 0 vulnerabilities` + - `website/server/` again retained only the already-documented upstream + `supertokens-node -> nodemailer` residual advisory + - `scripts/run-hypertwist-sentrux-source-only.sh` + - `Quality: 6234` + - all `7` rules passing + - `scripts/run-hypertwist-gitnexus-analyze.sh` + - retained local runtime again fell back truthfully to + `npx gitnexus@latest` on this Linux host because of the known + `invalid ELF header` `LadybugDB` mismatch + - bounded mirror refreshed at: + - `16,406` nodes + - `38,773` edges + - `677` clusters + - `300` flows + - `scripts/run-hypertwist-gitnexus-status.sh` + - bounded mirror `Status: up-to-date` ## Latest shared public-manual helper consolidation follow-up (`2026-06-29`) diff --git a/website/README.md b/website/README.md index 7a00219..26a9cbb 100644 --- a/website/README.md +++ b/website/README.md @@ -636,6 +636,13 @@ also passed the full frontend `npm test` suite and a fresh `npm run build` after an older auth-page mock was widened to include the new shared `getAuthHealth` dependency used by the marketing shell. +The later launch-summary continuity refinement on `2026-06-29` then also kept +that always-visible marketing-shell banner from drifting back into generic +missing-label prose: when the live site is still in preview posture, the banner +now names the first concrete auth-health or billing-runtime blockers and a +remaining-count summary, while the deeper `/launch-status` surfaces still carry +the full blocker list. + The follow-on public-manual widening on `2026-06-22` then also passed: - `npm run type-check` diff --git a/website/src/__tests__/PublicLaunchStatus.test.tsx b/website/src/__tests__/PublicLaunchStatus.test.tsx index 7b1a406..433da53 100644 --- a/website/src/__tests__/PublicLaunchStatus.test.tsx +++ b/website/src/__tests__/PublicLaunchStatus.test.tsx @@ -10,9 +10,9 @@ vi.mock('../auth/auth-api', () => ({ getAuthHealth: (...args: unknown[]) => mockGetAuthHealth(...args), })) -import { PublicLaunchStatus } from '../components/ui/PublicLaunchStatus' +import { MarketingLaunchStatusBanner, PublicLaunchStatus } from '../components/ui/PublicLaunchStatus' -function renderComponent() { +function renderComponent(element: React.ReactNode = ) { const queryClient = new QueryClient({ defaultOptions: { queries: { @@ -24,7 +24,7 @@ function renderComponent() { return render( - + {element} , ) @@ -122,6 +122,85 @@ describe('PublicLaunchStatus', () => { expect(screen.getByText('Runtime warning: SUPERTOKENS_CORE_URI still targets a loopback/local-development host.')).toBeTruthy() }) + it('keeps the marketing banner compact while still surfacing concrete live blockers', async () => { + mockGetAuthHealth.mockResolvedValue({ + ok: true, + service: 'hypertwist-auth-server', + supertokens: { + configured: true, + reachable: true, + ready: false, + apiVersion: '5.4', + error: null, + oauth: { + github: true, + google: false, + orcid: true, + }, + }, + fallback: { + enabled: true, + active: false, + reason: null, + }, + billing: { + statePath: '/tmp/hypertwist-billing.json', + processedEventCount: 0, + pricePlanMapConfigured: false, + productPlanMapConfigured: false, + webhookSecretConfigured: false, + }, + runtime: { + mode: 'mixed', + public_origin_ready: true, + cookie_secure: true, + api_domain: 'https://hypertwist.app', + website_domain: 'https://hypertwist.app', + warnings: [], + errors: [], + }, + launch: { + posture: 'preview', + ready: false, + readiness: { + windowsDownloadConfigured: true, + macosDownloadConfigured: false, + linuxDownloadConfigured: false, + operatorCheckoutConfigured: false, + studioCheckoutConfigured: false, + mplSourceConfigured: true, + openSourceRepoConfigured: true, + billingProductPlanMapConfigured: false, + billingPricePlanMapConfigured: false, + billingWebhookSecretConfigured: false, + publicAuthRuntimeReady: false, + }, + checklist: [ + { + id: 'windows-download', + label: 'Windows release authority', + configured: true, + requiredForPublicLaunch: true, + }, + ], + missingLabels: ['operator checkout URL', 'studio checkout URL'], + targets: { + operatorCheckoutTarget: null, + studioCheckoutTarget: null, + }, + }, + }) + + renderComponent() + + await waitFor(() => { + expect(screen.getByText(/Live preview lane: Operator checkout is still on support fallback/i)).toBeTruthy() + }) + + expect(screen.getByText(/Studio checkout is still on support fallback/i)).toBeTruthy() + expect(screen.getByText(/4 more live blockers remain on the deployment/i)).toBeTruthy() + }) + it('omits the blocker section when the live launch posture is ready and warning-free', async () => { mockGetAuthHealth.mockResolvedValue({ ok: true, diff --git a/website/src/components/ui/PublicLaunchStatus.tsx b/website/src/components/ui/PublicLaunchStatus.tsx index d2713aa..198e148 100644 --- a/website/src/components/ui/PublicLaunchStatus.tsx +++ b/website/src/components/ui/PublicLaunchStatus.tsx @@ -6,6 +6,32 @@ import { buildLiveLaunchBlockerDetails, resolvePublicLaunchStatusSummary } from import { launchReadiness } from '../../site-config' import { buildProtectedDownloadPath } from '../../site-routes' +function buildMarketingLaunchStatusSummary( + ready: boolean, + liveBlockerDetails: string[], + missingLabels: string[], +) { + if (ready) { + return 'Checkout, release, notices, and live auth-runtime posture are aligned for the current public lane.' + } + + if (liveBlockerDetails.length > 0) { + const featuredBlockers = liveBlockerDetails.slice(0, 2) + const remainingBlockerCount = liveBlockerDetails.length - featuredBlockers.length + const remainingBlockerLine = remainingBlockerCount > 0 + ? ` ${remainingBlockerCount} more live blocker${remainingBlockerCount === 1 ? '' : 's'} remain on the deployment.` + : '' + + return `Live preview lane: ${featuredBlockers.join(' ')}${remainingBlockerLine}` + } + + if (missingLabels.length > 0) { + return `Live preview lane: remaining launch blockers are ${missingLabels.join(', ')}.` + } + + return 'Live preview lane: rollout configuration is still incomplete on the current deployment.' +} + function usePublicLaunchStatus() { const authHealthQuery = useQuery({ queryKey: ['auth-health', 'public-launch-status'], @@ -43,7 +69,7 @@ function usePublicLaunchStatus() { } export function MarketingLaunchStatusBanner() { - const { missingLabels, ready } = usePublicLaunchStatus() + const { liveBlockerDetails, missingLabels, ready } = usePublicLaunchStatus() return (
@@ -53,11 +79,7 @@ export function MarketingLaunchStatusBanner() {

Public site status -

- {ready - ? 'Checkout, release, notices, and live auth-runtime posture are aligned for the current public lane.' - : `Live preview lane: remaining launch blockers are ${missingLabels.join(', ')}.`} -

+

{buildMarketingLaunchStatusSummary(ready, liveBlockerDetails, missingLabels)}

View launch posture