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(', ')}.`}
-