diff --git a/docs/ops/HYPERTWIST_PUBLIC_WEBSITE_CONTENT_AND_OPERATOR_MANUAL_PACKET_2026-06-22.md b/docs/ops/HYPERTWIST_PUBLIC_WEBSITE_CONTENT_AND_OPERATOR_MANUAL_PACKET_2026-06-22.md index b68d439..6ebe93b 100644 --- a/docs/ops/HYPERTWIST_PUBLIC_WEBSITE_CONTENT_AND_OPERATOR_MANUAL_PACKET_2026-06-22.md +++ b/docs/ops/HYPERTWIST_PUBLIC_WEBSITE_CONTENT_AND_OPERATOR_MANUAL_PACKET_2026-06-22.md @@ -258,6 +258,25 @@ Latest same-family public-manual follow-up on `2026-06-24`: - embedded simulator browser shell - native Unreal desktop runtime - optional full-browser simulator branch +- the public `/changelog` lane now also carries an explicit release-rollout + checklist so release notes remain tied to package proof, protected download + posture, and notices or corresponding-source follow-through instead of + acting like isolated chronology +- focused public-page coverage now also proves that the newest + `June 24, 2026` selector-recall diagnostics entry stays visible on the + public release-notes page together with that rollout checklist +- the current broader website validation then stayed green again under: + - `npm --prefix website run type-check` + - `npm --prefix website test -- --run src/__tests__/public-marketing-pages.test.tsx` + - `1` test file passed + - `11` tests passed + - `npm --prefix website run build` + - `npm --prefix website test -- --run` + - `39` test files passed + - `158` tests passed +- the public manual therefore now also keeps the release-notes lane honest at + page level instead of only carrying the new selector-recall packet in shared + data - that matrix now makes two easy-to-confuse truths materially clearer: - the public website and the embedded browser shell are not the same thing - the embedded browser shell and the frozen optional full-browser simulator diff --git a/docs/ops/HYPERTWIST_REFACTORING_TOOLCHAIN_2026-06-22.md b/docs/ops/HYPERTWIST_REFACTORING_TOOLCHAIN_2026-06-22.md index 4a88c44..9cd5f3c 100644 --- a/docs/ops/HYPERTWIST_REFACTORING_TOOLCHAIN_2026-06-22.md +++ b/docs/ops/HYPERTWIST_REFACTORING_TOOLCHAIN_2026-06-22.md @@ -675,6 +675,35 @@ Latest same-day validation follow-up later on `2026-06-24`: - `Current commit: ccbc988` - `Status: up-to-date` +Latest public-manual hardening follow-up later on `2026-06-24`: + +- the release-notes/manual continuation was revalidated again after the + selector-recall changelog hardening packet rather than being left as a + page-only claim +- `scripts/run-hypertwist-sentrux-source-only.sh` stayed green at: + - `Quality: 6138` + - all `7` checked rules passing +- `scripts/run-hypertwist-gitnexus-analyze.sh` again rejected the retained + local CLI cleanly on this host, then completed successfully through + `npx -y gitnexus@latest` in `82.5s` +- the refreshed bounded source-only mirror then indexed at: + - `16,174` nodes + - `37,848` edges + - `666` clusters + - `300` flows +- `scripts/run-hypertwist-gitnexus-status.sh` then again reported: + - `Indexed commit: a66f6e1` + - `Current commit: a66f6e1` + - `Status: up-to-date` +- the broader website lane also stayed green under: + - `npm --prefix website test -- --run` + - `39` test files passed + - `158` tests passed +- current highest-signal structural reading remains unchanged: + - the public/manual website lane is not where current structural debt lives + - the remaining refactor pressure still appears concentrated in the older + Unreal validator ownership seams documented above + ## Out of scope This note does not: diff --git a/website/src/__tests__/public-marketing-pages.test.tsx b/website/src/__tests__/public-marketing-pages.test.tsx index bb07f66..29e5614 100644 --- a/website/src/__tests__/public-marketing-pages.test.tsx +++ b/website/src/__tests__/public-marketing-pages.test.tsx @@ -103,6 +103,7 @@ vi.mock('../site-config', () => ({ import { AboutPage, + ChangelogPage, DocsPage, DownloadPage, FeaturesPage, @@ -868,6 +869,76 @@ describe('public marketing pages', () => { expect(await screen.findByRole('link', { name: /open public docs portal/i })).toBeTruthy() }) + it('renders the release-notes page with the latest native selector-recall packet and rollout checklist', async () => { + mockGetAuthHealth.mockResolvedValue({ + ok: true, + service: 'hypertwist-auth-server', + supertokens: { + configured: true, + reachable: true, + ready: true, + apiVersion: '5.4', + error: null, + oauth: { + github: false, + google: false, + }, + }, + fallback: { + enabled: true, + active: false, + reason: null, + }, + billing: { + statePath: '/var/lib/hypertwist/auth/hypertwist-billing-state.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: [], + }, + }) + mockGetReleaseManifest.mockResolvedValue({ + ok: true, + manifest: { + generated_at: '2026-06-24T12:00:00.000Z', + support_email: 'hello@hypertwist.app', + public_docs_url: 'https://docs.hypertwist.app', + release_notes_url: 'https://notes.hypertwist.app', + corresponding_source_url: 'https://hypertwist.app/open-source/source.zip', + open_source_repo_url: 'https://github.com/hypertwist/hypertwist', + viewer: { + authenticated: false, + canDownload: false, + plan: null, + role: null, + accessStatus: null, + }, + platforms: [], + }, + }) + + renderWithProviders(, ['/changelog']) + + expect(screen.getByText('Latest changes')).toBeTruthy() + expect(screen.getByText('June 24, 2026')).toBeTruthy() + expect(screen.getByText('Native selector-recall diagnostics hardened and revalidated')).toBeTruthy() + expect(screen.getByText('Release rollout checklist')).toBeTruthy() + expect(screen.getByText('Read the actual lane that changed')).toBeTruthy() + expect(screen.getByText(/Pair the release note with the current packaged-validation summary/i)).toBeTruthy() + expect(await screen.findByRole('link', { name: /open release feed/i })).toBeTruthy() + expect(document.title).toBe('HyperTwist release notes | HyperTwist') + expect(document.head.querySelector('meta[property=\"og:url\"]')?.getAttribute('content')).toBe('https://hypertwist.app/changelog') + }) + it('renders the expanded legal and digital-delivery guidance across public support surfaces', async () => { mockGetAuthHealth.mockResolvedValue({ ok: true, diff --git a/website/src/pages/public-pages-marketing.tsx b/website/src/pages/public-pages-marketing.tsx index 7ccbdf4..52508b2 100644 --- a/website/src/pages/public-pages-marketing.tsx +++ b/website/src/pages/public-pages-marketing.tsx @@ -22,6 +22,7 @@ import { operatorManualTracks, operatorPlaybooks, publicDocumentationPrinciples, + releaseRolloutChecklist, productSurfaceMatrixRows, releaseStoryCards, resourceCollections, @@ -839,6 +840,24 @@ export function ChangelogPage() { +
+
+ {releaseRolloutChecklist.map((card) => ( +
+

{card.title}

+
    + {card.bullets.map((bullet) => ( +
  • {bullet}
  • + ))} +
+
+ ))} +
+
+ {releaseManifest.release_notes_url ? (
diff --git a/website/src/site-data.ts b/website/src/site-data.ts index 47e7710..c6be7d7 100644 --- a/website/src/site-data.ts +++ b/website/src/site-data.ts @@ -717,6 +717,30 @@ export const changelogEntries = [ }, ] as const +export const releaseRolloutChecklist = [ + { + title: 'Read the actual lane that changed', + bullets: [ + 'Differentiate native simulator/runtime work from browser-operator or release-surface work before changing rollout expectations.', + 'Treat selector-recall, control-profile, and diagnostics entries as native-surface truth, not as a claim that the browser lane now owns simulator behavior.', + ], + }, + { + title: 'Confirm package proof before broad rollout', + bullets: [ + 'Pair the release note with the current packaged-validation summary so teams know whether a native change is merely implemented or also freshly package-proven.', + 'Use the protected download center when actual entitlement or package delivery posture matters.', + ], + }, + { + title: 'Keep distribution and legal follow-through attached', + bullets: [ + 'Review notices and corresponding-source posture before redistributing any build that contains covered code or newly widened package surfaces.', + 'Keep public docs, release notes, and download guidance aligned so browser, package, and legal truths do not drift apart.', + ], + }, +] as const + export const openSourceNotices = [ { component: 'cubing/cubing.js',