Harden public release-notes guidance
This commit is contained in:
parent
fe200ef1ee
commit
0e19b13718
5 changed files with 162 additions and 0 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue