Harden public release-notes guidance

This commit is contained in:
axiomlogicnexus 2026-06-24 07:15:58 +00:00
parent fe200ef1ee
commit 0e19b13718
5 changed files with 162 additions and 0 deletions

View file

@ -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

View file

@ -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:

View file

@ -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(<ChangelogPage />, ['/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,

View file

@ -22,6 +22,7 @@ import {
operatorManualTracks,
operatorPlaybooks,
publicDocumentationPrinciples,
releaseRolloutChecklist,
productSurfaceMatrixRows,
releaseStoryCards,
resourceCollections,
@ -839,6 +840,24 @@ export function ChangelogPage() {
</div>
</Section>
<Section
title="Release rollout checklist"
description="Use the public release notes as an operator tool, not just a chronology. This keeps each change tied to package proof, entitlement posture, and distribution follow-through."
>
<div className="card-grid">
{releaseRolloutChecklist.map((card) => (
<article key={card.title} className="card">
<h3>{card.title}</h3>
<ul className="list top-gap">
{card.bullets.map((bullet) => (
<li key={bullet}>{bullet}</li>
))}
</ul>
</article>
))}
</div>
</Section>
{releaseManifest.release_notes_url ? (
<Section title="External release notes">
<a className="button button--ghost" href={releaseManifest.release_notes_url} target="_blank" rel="noreferrer">

View file

@ -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',