From 433a25ec16b33206c172365b2969d37f5d6b2878 Mon Sep 17 00:00:00 2001 From: axiomlogicnexus Date: Tue, 30 Jun 2026 23:04:58 +0000 Subject: [PATCH] Harden package proof truth and legal route continuity --- .../index.json | 419 ++++++++++++++++++ .../index.json | 419 ++++++++++++++++++ ...ated_family_package_validation_report.json | 33 +- ...DOWS_BUILD_LANE_VERIFICATION_2026-06-01.md | 66 +++ ...BUILD_VALIDATION_REQUIREMENT_2026-06-01.md | 54 +++ .../HyperTwist/DEVELOPMENT.md | 72 ++- .../HyperTwist/FEATURE_REGISTRY.md | 4 +- ...oke-HyperTwistHigherDimensionalPackage.ps1 | 18 + ...ertwist-web-package-validation-summary.mjs | 24 + ...te-exact-source-browser-package-refresh.sh | 13 +- website/README.md | 18 + .../__tests__/public-marketing-pages.test.tsx | 6 +- .../release-validation-summary.test.tsx | 57 +++ website/src/auth/auth-api.ts | 5 + .../ui/ReleaseValidationSummary.tsx | 14 +- website/src/pages/public-pages-commerce.tsx | 49 ++ .../windows-package-validation-summary.json | 9 +- website/src/shared/package-validation.ts | 27 ++ 18 files changed, 1283 insertions(+), 24 deletions(-) create mode 100644 docs/generated/browser_automation/Browser-ExactSource-20260630dualbuildtruth/index.json create mode 100644 docs/generated/browser_automation/Browser-ExactSource-20260630maintained/index.json create mode 100644 website/src/__tests__/release-validation-summary.test.tsx diff --git a/docs/generated/browser_automation/Browser-ExactSource-20260630dualbuildtruth/index.json b/docs/generated/browser_automation/Browser-ExactSource-20260630dualbuildtruth/index.json new file mode 100644 index 0000000..6d6f459 --- /dev/null +++ b/docs/generated/browser_automation/Browser-ExactSource-20260630dualbuildtruth/index.json @@ -0,0 +1,419 @@ +{ + "devices": [ + { + "deviceName": "DESKTOP-KS3VGHU", + "instance": "CB01B5594B738A3EB566D09397472D76", + "instanceName": "DESKTOP-KS3VGHU-16908", + "platform": "WindowsEditor", + "oSVersion": "Windows 11 (23H2) [10.0.22631.4037] ", + "model": "Default", + "gPU": "GenericGPUBrand", + "cPUModel": "12th Gen Intel(R) Core(TM) i7-12700H", + "rAMInGB": 16, + "renderMode": "SM6", + "rHI": "", + "appInstanceLog": "" + } + ], + "reportCreatedOn": "2026.06.30-22.37.33", + "succeeded": 26, + "succeededWithWarnings": 0, + "failed": 0, + "notRun": 0, + "inProcess": 0, + "totalDuration": 26.079837799072266, + "comparisonExported": false, + "comparisonExportDirectory": "", + "tests": [ + { + "testDisplayName": "NotificationCapture", + "fullTestPath": "HyperTwist.Browser.Bridge.NotificationCapture", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.016066901385784149, + "dateTime": "2026.06.30-22.37.01", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "RuntimeReadyDelegate", + "fullTestPath": "HyperTwist.Browser.Bridge.RuntimeReadyDelegate", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.017024699598550797, + "dateTime": "2026.06.30-22.37.01", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "RuntimeReadyPayloadDecode", + "fullTestPath": "HyperTwist.Browser.Bridge.RuntimeReadyPayloadDecode", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.017505999654531479, + "dateTime": "2026.06.30-22.37.01", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "RuntimeStatusEnvelopeDecode", + "fullTestPath": "HyperTwist.Browser.Bridge.RuntimeStatusEnvelopeDecode", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.01534309983253479, + "dateTime": "2026.06.30-22.37.01", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "TilingStateEnvelopeDecode", + "fullTestPath": "HyperTwist.Browser.Bridge.TilingStateEnvelopeDecode", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.017251200973987579, + "dateTime": "2026.06.30-22.37.01", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlInputReadinessInspectSurface", + "fullTestPath": "HyperTwist.Browser.CoachDashboard.ControlInputReadinessInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.89371442794799805, + "dateTime": "2026.06.30-22.37.01", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlProfileContinuityArtifacts", + "fullTestPath": "HyperTwist.Browser.CoachDashboard.ControlProfileContinuityArtifacts", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 1.1729363203048706, + "dateTime": "2026.06.30-22.37.02", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlProfileRosterInspectSurface", + "fullTestPath": "HyperTwist.Browser.CoachDashboard.ControlProfileRosterInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.73883110284805298, + "dateTime": "2026.06.30-22.37.03", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlSettingsOwnershipInspectSurface", + "fullTestPath": "HyperTwist.Browser.CoachDashboard.ControlSettingsOwnershipInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 1.4053404331207275, + "dateTime": "2026.06.30-22.37.10", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlSurfaceStructuredTextArtifacts", + "fullTestPath": "HyperTwist.Browser.CoachDashboard.ControlSurfaceStructuredTextArtifacts", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 19.225212097167969, + "dateTime": "2026.06.30-22.37.11", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "RuntimeInspectSurface", + "fullTestPath": "HyperTwist.Browser.CoachDashboard.RuntimeInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.73295348882675171, + "dateTime": "2026.06.30-22.37.30", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlInputReadinessInspectSurface", + "fullTestPath": "HyperTwist.Browser.TrainingPanel.ControlInputReadinessInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.29860779643058777, + "dateTime": "2026.06.30-22.37.31", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlProfileContinuityParity", + "fullTestPath": "HyperTwist.Browser.TrainingPanel.ControlProfileContinuityParity", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.25921639800071716, + "dateTime": "2026.06.30-22.37.31", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlProfileRosterInspectSurface", + "fullTestPath": "HyperTwist.Browser.TrainingPanel.ControlProfileRosterInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.12610380351543427, + "dateTime": "2026.06.30-22.37.32", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlSettingsOwnershipInspectSurface", + "fullTestPath": "HyperTwist.Browser.TrainingPanel.ControlSettingsOwnershipInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.96445262432098389, + "dateTime": "2026.06.30-22.37.32", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "RuntimeInspectSurface", + "fullTestPath": "HyperTwist.Browser.TrainingPanel.RuntimeInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.016324199736118317, + "dateTime": "2026.06.30-22.37.33", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "AuthoritativeShellArtifacts", + "fullTestPath": "HyperTwist.Browser.Widget.AuthoritativeShellArtifacts", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.016057197004556656, + "dateTime": "2026.06.30-22.37.33", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "BundledShellUrl", + "fullTestPath": "HyperTwist.Browser.Widget.BundledShellUrl", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.016535300761461258, + "dateTime": "2026.06.30-22.37.33", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "OperatorStatusSurfaceLive", + "fullTestPath": "HyperTwist.Browser.Widget.OperatorStatusSurfaceLive", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.016621701419353485, + "dateTime": "2026.06.30-22.37.33", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "OperatorStatusSurfaceResetOnShellChange", + "fullTestPath": "HyperTwist.Browser.Widget.OperatorStatusSurfaceResetOnShellChange", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.016673099249601364, + "dateTime": "2026.06.30-22.37.33", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "OperatorStatusSurfaceWaiting", + "fullTestPath": "HyperTwist.Browser.Widget.OperatorStatusSurfaceWaiting", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.015180099755525589, + "dateTime": "2026.06.30-22.37.33", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "QueuedOutboundMessages", + "fullTestPath": "HyperTwist.Browser.Widget.QueuedOutboundMessages", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.01636119931936264, + "dateTime": "2026.06.30-22.37.33", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "StatusSurfaceArtifacts", + "fullTestPath": "HyperTwist.Browser.Widget.StatusSurfaceArtifacts", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.015504103153944016, + "dateTime": "2026.06.30-22.37.33", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlInputContinuityStateFormatting", + "fullTestPath": "HyperTwist.Browser.ControlInputContinuityStateFormatting", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.016568697988986969, + "dateTime": "2026.06.30-22.37.33", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlProfileContinuityStateFormatting", + "fullTestPath": "HyperTwist.Browser.ControlProfileContinuityStateFormatting", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.015964202582836151, + "dateTime": "2026.06.30-22.37.33", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlSettingsContinuityStateFormatting", + "fullTestPath": "HyperTwist.Browser.ControlSettingsContinuityStateFormatting", + "tags": [], + "state": "Success", + "deviceInstance": [ + "CB01B5594B738A3EB566D09397472D76" + ], + "duration": 0.017481900751590729, + "dateTime": "2026.06.30-22.37.33", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + } + ] +} \ No newline at end of file diff --git a/docs/generated/browser_automation/Browser-ExactSource-20260630maintained/index.json b/docs/generated/browser_automation/Browser-ExactSource-20260630maintained/index.json new file mode 100644 index 0000000..17bc455 --- /dev/null +++ b/docs/generated/browser_automation/Browser-ExactSource-20260630maintained/index.json @@ -0,0 +1,419 @@ +{ + "devices": [ + { + "deviceName": "DESKTOP-KS3VGHU", + "instance": "0AA31F0E46740A2E2A01E3BED13832AD", + "instanceName": "DESKTOP-KS3VGHU-7384", + "platform": "WindowsEditor", + "oSVersion": "Windows 11 (23H2) [10.0.22631.4037] ", + "model": "Default", + "gPU": "GenericGPUBrand", + "cPUModel": "12th Gen Intel(R) Core(TM) i7-12700H", + "rAMInGB": 16, + "renderMode": "SM6", + "rHI": "", + "appInstanceLog": "" + } + ], + "reportCreatedOn": "2026.06.30-22.07.31", + "succeeded": 26, + "succeededWithWarnings": 0, + "failed": 0, + "notRun": 0, + "inProcess": 0, + "totalDuration": 17.35059928894043, + "comparisonExported": false, + "comparisonExportDirectory": "", + "tests": [ + { + "testDisplayName": "NotificationCapture", + "fullTestPath": "HyperTwist.Browser.Bridge.NotificationCapture", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.016310598701238632, + "dateTime": "2026.06.30-22.07.08", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "RuntimeReadyDelegate", + "fullTestPath": "HyperTwist.Browser.Bridge.RuntimeReadyDelegate", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.016536802053451538, + "dateTime": "2026.06.30-22.07.08", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "RuntimeReadyPayloadDecode", + "fullTestPath": "HyperTwist.Browser.Bridge.RuntimeReadyPayloadDecode", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.016871500760316849, + "dateTime": "2026.06.30-22.07.08", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "RuntimeStatusEnvelopeDecode", + "fullTestPath": "HyperTwist.Browser.Bridge.RuntimeStatusEnvelopeDecode", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.01631850004196167, + "dateTime": "2026.06.30-22.07.08", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "TilingStateEnvelopeDecode", + "fullTestPath": "HyperTwist.Browser.Bridge.TilingStateEnvelopeDecode", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.016465499997138977, + "dateTime": "2026.06.30-22.07.08", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlInputReadinessInspectSurface", + "fullTestPath": "HyperTwist.Browser.CoachDashboard.ControlInputReadinessInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.5846174955368042, + "dateTime": "2026.06.30-22.07.08", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlProfileContinuityArtifacts", + "fullTestPath": "HyperTwist.Browser.CoachDashboard.ControlProfileContinuityArtifacts", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.84562957286834717, + "dateTime": "2026.06.30-22.07.09", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlProfileRosterInspectSurface", + "fullTestPath": "HyperTwist.Browser.CoachDashboard.ControlProfileRosterInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.51417040824890137, + "dateTime": "2026.06.30-22.07.10", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlSettingsOwnershipInspectSurface", + "fullTestPath": "HyperTwist.Browser.CoachDashboard.ControlSettingsOwnershipInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 1.0403076410293579, + "dateTime": "2026.06.30-22.07.15", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlSurfaceStructuredTextArtifacts", + "fullTestPath": "HyperTwist.Browser.CoachDashboard.ControlSurfaceStructuredTextArtifacts", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 12.62702465057373, + "dateTime": "2026.06.30-22.07.16", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "RuntimeInspectSurface", + "fullTestPath": "HyperTwist.Browser.CoachDashboard.RuntimeInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.45001870393753052, + "dateTime": "2026.06.30-22.07.28", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlInputReadinessInspectSurface", + "fullTestPath": "HyperTwist.Browser.TrainingPanel.ControlInputReadinessInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.22110320627689362, + "dateTime": "2026.06.30-22.07.29", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlProfileContinuityParity", + "fullTestPath": "HyperTwist.Browser.TrainingPanel.ControlProfileContinuityParity", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.12378060072660446, + "dateTime": "2026.06.30-22.07.29", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlProfileRosterInspectSurface", + "fullTestPath": "HyperTwist.Browser.TrainingPanel.ControlProfileRosterInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.052301902323961258, + "dateTime": "2026.06.30-22.07.29", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlSettingsOwnershipInspectSurface", + "fullTestPath": "HyperTwist.Browser.TrainingPanel.ControlSettingsOwnershipInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.62891197204589844, + "dateTime": "2026.06.30-22.07.29", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "RuntimeInspectSurface", + "fullTestPath": "HyperTwist.Browser.TrainingPanel.RuntimeInspectSurface", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.016043398529291153, + "dateTime": "2026.06.30-22.07.30", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "AuthoritativeShellArtifacts", + "fullTestPath": "HyperTwist.Browser.Widget.AuthoritativeShellArtifacts", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.016895398497581482, + "dateTime": "2026.06.30-22.07.30", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "BundledShellUrl", + "fullTestPath": "HyperTwist.Browser.Widget.BundledShellUrl", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.016039799898862839, + "dateTime": "2026.06.30-22.07.30", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "OperatorStatusSurfaceLive", + "fullTestPath": "HyperTwist.Browser.Widget.OperatorStatusSurfaceLive", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.016507796943187714, + "dateTime": "2026.06.30-22.07.30", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "OperatorStatusSurfaceResetOnShellChange", + "fullTestPath": "HyperTwist.Browser.Widget.OperatorStatusSurfaceResetOnShellChange", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.016129400581121445, + "dateTime": "2026.06.30-22.07.30", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "OperatorStatusSurfaceWaiting", + "fullTestPath": "HyperTwist.Browser.Widget.OperatorStatusSurfaceWaiting", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.016162998974323273, + "dateTime": "2026.06.30-22.07.30", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "QueuedOutboundMessages", + "fullTestPath": "HyperTwist.Browser.Widget.QueuedOutboundMessages", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.015451699495315552, + "dateTime": "2026.06.30-22.07.30", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "StatusSurfaceArtifacts", + "fullTestPath": "HyperTwist.Browser.Widget.StatusSurfaceArtifacts", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.016372699290513992, + "dateTime": "2026.06.30-22.07.30", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlInputContinuityStateFormatting", + "fullTestPath": "HyperTwist.Browser.ControlInputContinuityStateFormatting", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.016020897775888443, + "dateTime": "2026.06.30-22.07.30", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlProfileContinuityStateFormatting", + "fullTestPath": "HyperTwist.Browser.ControlProfileContinuityStateFormatting", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.018849499523639679, + "dateTime": "2026.06.30-22.07.30", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + }, + { + "testDisplayName": "ControlSettingsContinuityStateFormatting", + "fullTestPath": "HyperTwist.Browser.ControlSettingsContinuityStateFormatting", + "tags": [], + "state": "Success", + "deviceInstance": [ + "0AA31F0E46740A2E2A01E3BED13832AD" + ], + "duration": 0.01575860008597374, + "dateTime": "2026.06.30-22.07.31", + "entries": [], + "warnings": 0, + "errors": 0, + "artifacts": [] + } + ] +} \ No newline at end of file diff --git a/docs/generated/higher_dimensional_training_maps/phase6c_dedicated_family_package_validation_report.json b/docs/generated/higher_dimensional_training_maps/phase6c_dedicated_family_package_validation_report.json index 8e46319..59a4175 100644 --- a/docs/generated/higher_dimensional_training_maps/phase6c_dedicated_family_package_validation_report.json +++ b/docs/generated/higher_dimensional_training_maps/phase6c_dedicated_family_package_validation_report.json @@ -1,8 +1,8 @@ { "reportVersion": "ht-higher-dimensional-package-validation/v1", - "generatedAtUtc": "2026-06-30T10:45:24.1772955Z", - "projectRoot": "C:\\HTpp", - "archiveDirectory": "C:\\HTpp_packaged_phase6c_higherdim_refresh_20260630", + "generatedAtUtc": "2026-06-30T22:37:40.2738982Z", + "projectRoot": "C:\\HyperTwist_worktrees\\phase10validate", + "archiveDirectory": "C:\\HyperTwist_worktrees\\phase10validate_packaged_phase6c_higherdim_refresh_20260630dualbuildtruth", "configuration": "Development", "cookMaps": [ "/Game/HyperTwistTraining/Maps/L_HyperTwist_Magic120CellTraining", @@ -17,10 +17,15 @@ "-SkipCookingEditorContent" ], "cleanArchive": false, - "skipBuild": false, + "skipBuild": true, + "prePackageEditorBuild": { + "lane": "Windows Unreal editor build", + "performed": true, + "result": "passed" + }, "skipLaunch": false, "authoringManifest": { - "path": "C:\\HTpp\\docs\\generated\\higher_dimensional_training_maps\\phase6c_dedicated_family_map_manifest.json", + "path": "C:\\HyperTwist_worktrees\\phase10validate\\docs\\generated\\higher_dimensional_training_maps\\phase6c_dedicated_family_map_manifest.json", "manifestId": "phase6c/dedicated-family-training-map-authoring", "manifestVersion": "2026.06.18", "authoredThroughGameModeClassPath": "/Script/UnrealHyperTwist.HyperTwistCoachDashboardGameMode", @@ -50,13 +55,13 @@ ] }, "result": "passed", - "packagedExecutablePath": "C:\\HTpp_packaged_phase6c_higherdim_refresh_20260630\\Windows\\UnrealHyperTwist.exe", + "packagedExecutablePath": "C:\\HyperTwist_worktrees\\phase10validate_packaged_phase6c_higherdim_refresh_20260630dualbuildtruth\\Windows\\UnrealHyperTwist.exe", "smokeReports": [ { "reportVersion": "ht-higher-dimensional-package-smoke/v1", - "generatedAtUtc": "2026-06-30T11:39:15.0336201Z", - "packageRoot": "C:\\HTpp_packaged_phase6c_higherdim_refresh_20260630", - "executablePath": "C:\\HTpp_packaged_phase6c_higherdim_refresh_20260630\\Windows\\UnrealHyperTwist.exe", + "generatedAtUtc": "2026-06-30T22:40:06.2800637Z", + "packageRoot": "C:\\HyperTwist_worktrees\\phase10validate_packaged_phase6c_higherdim_refresh_20260630dualbuildtruth", + "executablePath": "C:\\HyperTwist_worktrees\\phase10validate_packaged_phase6c_higherdim_refresh_20260630dualbuildtruth\\Windows\\UnrealHyperTwist.exe", "mapUrl": "/Game/HyperTwistTraining/Maps/L_HyperTwist_Magic120CellTraining", "smokeSeconds": 10, "resolution": { @@ -65,16 +70,16 @@ }, "keepRunning": false, "result": "passed", - "processId": 34020, + "processId": 36088, "processStopped": true, "exitCode": null, "error": null }, { "reportVersion": "ht-higher-dimensional-package-smoke/v1", - "generatedAtUtc": "2026-06-30T11:39:25.7497608Z", - "packageRoot": "C:\\HTpp_packaged_phase6c_higherdim_refresh_20260630", - "executablePath": "C:\\HTpp_packaged_phase6c_higherdim_refresh_20260630\\Windows\\UnrealHyperTwist.exe", + "generatedAtUtc": "2026-06-30T22:40:17.1538107Z", + "packageRoot": "C:\\HyperTwist_worktrees\\phase10validate_packaged_phase6c_higherdim_refresh_20260630dualbuildtruth", + "executablePath": "C:\\HyperTwist_worktrees\\phase10validate_packaged_phase6c_higherdim_refresh_20260630dualbuildtruth\\Windows\\UnrealHyperTwist.exe", "mapUrl": "/Game/HyperTwistTraining/Maps/L_HyperTwist_MagicCube5DTraining", "smokeSeconds": 10, "resolution": { @@ -83,7 +88,7 @@ }, "keepRunning": false, "result": "passed", - "processId": 34908, + "processId": 34680, "processStopped": true, "exitCode": null, "error": null diff --git a/docs/ops/HYPERTWIST_REVERSE_SSH_WINDOWS_BUILD_LANE_VERIFICATION_2026-06-01.md b/docs/ops/HYPERTWIST_REVERSE_SSH_WINDOWS_BUILD_LANE_VERIFICATION_2026-06-01.md index ab0c2ae..5741857 100644 --- a/docs/ops/HYPERTWIST_REVERSE_SSH_WINDOWS_BUILD_LANE_VERIFICATION_2026-06-01.md +++ b/docs/ops/HYPERTWIST_REVERSE_SSH_WINDOWS_BUILD_LANE_VERIFICATION_2026-06-01.md @@ -240,6 +240,14 @@ Live follow-up on `2026-06-30` established these additional facts: and the public summary was re-rendered into `website/src/shared/generated/windows-package-validation-summary.json` with truthful `skip_build: false` +- later same-day maintained-root recovery then proved the inverse-but-still + truthful packet shape on the primary root: + - the exact-source wrapper again passed a fresh editor build first + - the higher-dimensional package helper then legitimately reused the + existing packaged-game receipt + - the aggregate report and public summary therefore now need to carry both + truths rather than overloading one `skip_build` field to mean the entire + proof packet did or did not rebuild - `scripts/run-hypertwist-remote-unreal-automation.sh` now also treats the exported automation report itself as authority, not only the `UnrealEditor-Cmd` process exit: @@ -824,3 +832,61 @@ If any of these change: - auth posture update this note and the linked governing docs in the same turn. + +## Addendum - 2026-06-30 (maintained exact-source recovery closed on the live root) + +Later same-day follow-up on `2026-06-30` established these additional facts: + +- the primary reverse-SSH tunnel on `localhost:22022` remained healthy for the + maintained-lane recovery itself; fallback root `C:\HTpp` was no longer the + latest authority once the live host state was repaired +- the maintained Windows validation root remained + `C:\HyperTwist_worktrees\phase10validate` +- the earlier host-side lock on + `HyperTwistTrainingRepositoryLibrary.cpp` was traced to stale Windows-side + remote-sync writer trees still holding the file open; after stopping only + those stale writer processes, a bounded exclusive-open retest on the same + path succeeded +- the current exact-source continuation then repaired a real local compile seam + in `HyperTwistTrainingRepositoryLibrary.cpp` by scoping the + `Completed` queue-summary branch correctly and replacing the deprecated + `RightChopInline(..., false)` overload with `EAllowShrinking::No` +- the same maintained root then exposed a truthful parity miss rather than a + source failure: it lacked the split coach-repository ownership files + `HyperTwistTrainingRepositoryLibraryCoachWorkflow.cpp` and + `HyperTwistTrainingRepositoryLibraryCoachSummaries.cpp` +- the repo-local wrapper + `scripts/run-hypertwist-remote-exact-source-browser-package-refresh.sh` now + carries that current bounded training-repository ownership set in its default + exact-source sync list, so future maintained-lane refreshes do not rely on + ad hoc manual `--sync-file` recovery for this family +- after that maintained-root parity repair, the same exact-source wrapper + completed end-to-end on `C:\HyperTwist_worktrees\phase10validate` with: + - editor build `Result: Succeeded` + - pulled browser report + `docs/generated/browser_automation/Browser-ExactSource-20260630maintained/index.json` + - `26` browser tests succeeded + - `0` failed + - `0` not run + - `0` in process + - refreshed higher-dimensional package proof pulled back into + `docs/generated/higher_dimensional_training_maps/phase6c_dedicated_family_package_validation_report.json` + - refreshed public summary re-rendered into + `website/src/shared/generated/windows-package-validation-summary.json` +- the maintained higher-dimensional package refresh archive was written to: + `C:\HyperTwist_worktrees\phase10validate_packaged_phase6c_higherdim_refresh_20260630maintained` +- packaged smoke validation succeeded again for both dedicated-family maps on + that maintained package set: + - `/Game/HyperTwistTraining/Maps/L_HyperTwist_Magic120CellTraining` + - `/Game/HyperTwistTraining/Maps/L_HyperTwist_MagicCube5DTraining` + +Operational reading after this follow-up: + +- the live maintained `phase10validate` root is again the latest exact-source + authority for build, browser automation, and higher-dimensional package + proof +- the earlier `C:\HTpp` fallback proof remains valid historical evidence, but + it is no longer the newest same-day authority for this lane +- when a maintained-root failure shifts from host lock to missing split source + ownership, prefer bounded hash-verified file sync and same-root rerun over + reopening a broader fallback narrative diff --git a/docs/ops/HYPERTWIST_UNREAL_BUILD_VALIDATION_REQUIREMENT_2026-06-01.md b/docs/ops/HYPERTWIST_UNREAL_BUILD_VALIDATION_REQUIREMENT_2026-06-01.md index 880a33b..4ebd004 100644 --- a/docs/ops/HYPERTWIST_UNREAL_BUILD_VALIDATION_REQUIREMENT_2026-06-01.md +++ b/docs/ops/HYPERTWIST_UNREAL_BUILD_VALIDATION_REQUIREMENT_2026-06-01.md @@ -260,6 +260,15 @@ maintained-root `-SkipBuild` helper proof into bounded exact-source fallback proof when a live Windows host lock temporarily makes the maintained root unusable. +Later same-day maintained-root recovery then tightened the public reading +again: when the exact-source wrapper can once more run a fresh editor build on +`C:\HyperTwist_worktrees\phase10validate` and the maintained package helper +then legitimately reuses the existing packaged-game receipt, the public summary +must present both truths instead of flattening the packet back down to one +`skip_build` boolean. The authoritative package report therefore now carries +both the package-helper `skipBuild` state and the surrounding +`prePackageEditorBuild` result for the same proof packet. + Further `2026-06-13` continuation proof on that same primary lane recovered the classic-cube replay/leaderboard/package slice after a corrupted reverse sync incident: a prior aborted broad tar sync left remote @@ -536,3 +545,48 @@ This requirement must stay aligned with these docs: If this doctrine changes, update those references in the same turn so the rule does not drop out of working memory again. + +## Addendum - 2026-06-30 (maintained exact-source recovery closed on the live root) + +Later same-day follow-up on `2026-06-30` then closed the maintained-root +recovery on the live primary lane itself rather than only on the temporary +fallback root. The current primary reverse-SSH lane on `localhost:22022` +remained healthy, the maintained Windows validation root stayed +`C:\HyperTwist_worktrees\phase10validate`, and the earlier +`HyperTwistTrainingRepositoryLibrary.cpp` source lock was resolved by stopping +only the stale remote-sync writer trees that still held that file open. After +that host-state repair, the same maintained root exposed two truthful source +parity issues that were then repaired in-bounds: a real local compile seam in +the `Completed` queue-summary branch of +`HyperTwistTrainingRepositoryLibrary.cpp`, and a missing maintained-root copy +of the split coach-repository ownership files +`HyperTwistTrainingRepositoryLibraryCoachWorkflow.cpp` and +`HyperTwistTrainingRepositoryLibraryCoachSummaries.cpp`. + +The maintained-lane exact-source wrapper +`scripts/run-hypertwist-remote-exact-source-browser-package-refresh.sh` now +syncs that bounded training-repository ownership set by default alongside the +browser/package support surfaces it already carried, so future maintained-root +exact-source reruns do not depend on ad hoc manual `--sync-file` recovery for +this current family. With that recovery in place, the same maintained root +then completed the full exact-source validation packet cleanly: + +- editor build `Result: Succeeded` +- pulled browser report + `docs/generated/browser_automation/Browser-ExactSource-20260630maintained/index.json` + with `26` succeeded, `0` failed, `0` not run, and `0` in process +- refreshed higher-dimensional package proof pulled into + `docs/generated/higher_dimensional_training_maps/phase6c_dedicated_family_package_validation_report.json` +- refreshed public release summary re-rendered into + `website/src/shared/generated/windows-package-validation-summary.json` +- maintained package archive written to + `C:\HyperTwist_worktrees\phase10validate_packaged_phase6c_higherdim_refresh_20260630maintained` +- packaged smoke launch succeeded again for both dedicated-family maps: + `/Game/HyperTwistTraining/Maps/L_HyperTwist_Magic120CellTraining` and + `/Game/HyperTwistTraining/Maps/L_HyperTwist_MagicCube5DTraining` + +This extends the doctrine from fallback-root recovery proof into fully +recovered maintained-root exact-source proof on the same live primary reverse-SSH +lane. The truthful current reading is that `C:\HTpp` remains historical +fallback evidence, while `C:\HyperTwist_worktrees\phase10validate` is again +the latest maintained authority for this browser plus package validation lane. diff --git a/docs/v6_5_deep_manual_pack/HyperTwist/DEVELOPMENT.md b/docs/v6_5_deep_manual_pack/HyperTwist/DEVELOPMENT.md index b757908..da2e556 100644 --- a/docs/v6_5_deep_manual_pack/HyperTwist/DEVELOPMENT.md +++ b/docs/v6_5_deep_manual_pack/HyperTwist/DEVELOPMENT.md @@ -259,6 +259,38 @@ Later same-family refactor-tool ownership continuation on `2026-06-30`: Latest same-day follow-up later on `2026-06-24`: +Current maintained Windows exact-source recovery truth after the +`2026-06-30` continuation: + +- `scripts/run-hypertwist-remote-exact-source-browser-package-refresh.sh` + now syncs the current bounded coach-repository ownership source set by + default in addition to the browser/package support files: + - `HyperTwistTrainingRepositoryLibrary.cpp` + - `HyperTwistTrainingRepositoryLibraryInternal.h` + - `HyperTwistTrainingRepositoryLibraryCoachPolicies.cpp` + - `HyperTwistTrainingRepositoryLibraryCoachWorkflow.cpp` + - `HyperTwistTrainingRepositoryLibraryCoachSummaries.cpp` +- that hardening exists because the maintained Windows validation root + `C:\HyperTwist_worktrees\phase10validate` had a real same-day parity miss + after a host-lock recovery: the editor build on the live maintained root + was healthy again only after those split training-repository ownership files + were hash-synced back into place +- the current maintained-root exact-source packet is now green again end to + end: + - editor build succeeded + - `docs/generated/browser_automation/Browser-ExactSource-20260630maintained/index.json` + records `26` succeeded and `0` failed + - the refreshed higher-dimensional package report was pulled back into + `docs/generated/higher_dimensional_training_maps/phase6c_dedicated_family_package_validation_report.json` + - the public/browser release summary was re-rendered into + `website/src/shared/generated/windows-package-validation-summary.json` + - packaged smoke launch succeeded for both dedicated-family higher-dimensional + maps from the maintained archive + `C:\HyperTwist_worktrees\phase10validate_packaged_phase6c_higherdim_refresh_20260630maintained` +- operationally, prefer the maintained `phase10validate` root again for this + lane; the earlier `C:\HTpp` fallback proof remains valid history but is not + the latest same-day authority after the maintained-root recovery closed + - the shared product-surface authority matrix landed across the homepage, feature atlas, public docs, and protected dashboard without widening product claims @@ -2530,11 +2562,21 @@ Latest same-family responsive public-route expansion follow-up on `2026-06-29`: - the public packaged-proof bridge was then rerendered from that exact-source package report again: - `website/src/shared/generated/windows-package-validation-summary.json` - - truthful posture now shows `skip_build: false` + - truthful fallback-root posture at that moment showed `skip_build: false` - the related public marketing proof was hardened so website tests accept the - two truthful packaged-build modes instead of assuming only one: - - existing target receipt reused + two truthful package-helper modes instead of assuming only one: + - existing packaged-game target receipt reused - full package build +- the later same-day maintained-root rerun then tightened that public proof + again without regressing honesty: + - the exact-source packet passed a fresh editor build first + - the maintained higher-dimensional package helper then legitimately reused + the packaged-game target receipt + - the generated report and the website-facing packaged-validation summary now + carry both truths through `prePackageEditorBuild` / + `pre_package_editor_build` plus the helper-level `skipBuild` / + `skip_build` state instead of flattening the whole packet into one build + flag - the same repo state then reran the full owned web-surface gate green: - `scripts/run-hypertwist-web-surface-validation.sh` - focused website route/auth/release validation: @@ -3304,3 +3346,27 @@ Later same-day recommendation-history micro-follow-up (`2026-06-30`): - keep draining the same recommendation-history function, especially the remaining lane-conditioned outcome branches near the top of that block, before widening into unrelated website or XR work + +## Latest public legal/distribution manual continuity follow-up (`2026-06-30`) + +- the next same-family continuation stayed inside the first-party + `website/` public manual lane instead of reopening native scope: + - `website/src/pages/public-pages-commerce.tsx` + - `website/src/__tests__/public-marketing-pages.test.tsx` +- `OpenSourceNoticesPage` now also carries: + - the shared browser-versus-desktop reality section + - a live current-surface authority map + - the same offline operator-manual continuity already present on stronger + brochure/manual routes +- `ShippingPaymentPage` now also carries: + - the shared auth-method lineup + - the same current-surface authority map + - the same offline operator-manual continuity +- current truthful reading after this continuity pass: + - the deeper legal/distribution routes no longer fall back to a materially + thinner shell than homepage, pricing, download, docs, and resources + - the public operator manual now stays more coherent when operators move from + brochure pages into notices or payment/delivery follow-through +- focused validation stayed green under: + - `npm --prefix website test -- --run src/__tests__/public-marketing-pages.test.tsx` + - `npm --prefix website run type-check` diff --git a/docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md b/docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md index be828c2..36884c6 100644 --- a/docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md +++ b/docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md @@ -268,7 +268,7 @@ repo. | Feature | Status | Primary authority | Notes | |---|---|---|---| -| Public `hypertwist.app` marketing shell | Implemented now | first-party `website/` app + feature registry/roadmap authority | HyperTwist now has a dedicated first-party public web surface for homepage, feature atlas, about, resources, pricing, download, support, legal routes, a dedicated `/getting-started` onboarding surface, and a dedicated `/launch-status` authority surface. This lane is separate from the embedded Unreal browser runtime under `Content/Browser/` and does not claim browser-simulator parity. The same public lane now also serves as a bounded operator/distribution manual through the docs/resources/download/support surfaces, the public feature-atlas route, the dedicated getting-started route, the dedicated launch-status route, and related launch/status surfaces, explaining browser-versus-desktop posture, rollout steps, package proof, simulator-use guidance, and current input/device truth without claiming browser ownership of the native runtime or overclaiming unfinished VR/controller posture. The same package now also carries a first-party external runtime-readiness verifier so deploy-time env and live health posture can be checked outside the dashboard, plus separated local-versus-production env templates whose placeholder values are intentionally rejected until real launch config is in place, bootstrap CI now validates both the frontend and auth-server website commands directly, and the auth server can now auto-serve the built `website/dist` bundle with bounded SPA fallback for same-origin public deployment. Request-level server coverage now also proves that public/app shell delivery does not shadow `/api/*`, `/auth*`, `/health`, or missing asset paths, while the pricing/download/notices routes now surface first-party preview-versus-launch posture from the same bounded launch checklist instead of relying on hidden operator-only status. The shared marketing shell now also carries a compact public-site-status banner across public pages, the homepage keeps a fuller status section, and the shared public launch-status component now consumes live auth-health webhook/runtime truth in addition to release-manifest download readiness so public marketing copy does not claim launch posture from static checkout/download config alone. The auth server now also emits an authoritative `launch` summary on `/api/auth/health`, including required blocker labels, billing product/price-map gates, and current checkout targets, so the public banner and protected dashboard no longer duplicate launch-blocker evaluation client-side. A later same-family continuation then widened that release-manifest authority again to carry public runtime commerce config for operator/studio checkout URLs and live plan-price strings, so pricing, notices, and dashboard launch-readiness surfaces no longer depend only on frontend build-time checkout config. The live website lane now also owns route-aware title/description/canonical/Open-Graph/Twitter metadata for the real `hypertwist.app` marketing surface so deployed public pages no longer remain on a single generic SPA title/description, plus first-party `robots.txt` and `sitemap.xml` assets for the public route set while keeping `/app`, `/login`, and `/register` out of crawler posture. The later shared search-authority hardening pass then moved both assets onto one generated authority seam backed by `website/src/public-route-registry.json`, `website/src/public-search-policy.json`, and first-party script/test ownership, keeping `/app`, `/api/`, `/auth`, `/health`, `/login`, and `/register` aligned without hand-maintained crawler drift. The real `check-runtime-readiness` CLI is now also exercised against the checked-in production example env files, and a spawned `website/server` bootstrap proof now verifies the live same-origin process path from production-shaped env into `/health`, `/api/auth/health`, built-shell serving, and the public anonymous release-manifest posture for the shared desktop release lane. The same verifier now also probes the deployed root-shell marker and can explicitly fail when the public origin is still serving the older placeholder rollout page instead of the first-party website/auth-server lane, while the repo now also carries first-party `website/deploy/` `nginx` plus `systemd` handoff templates, a concrete same-origin public-host cutover guide, a deployment-file renderer that emits resolved operator outputs from real checkout paths, and a manifest-driven bundle renderer that lets one authoritative input own the public origin while emitting validated env plus install artifacts together, with the shared-VPS-safe default upstream moved to `3011` after live host inspection confirmed `3001` is already occupied by FamiliarOS. The same deployment lane now also distinguishes `launch` from `preview` posture so honest missing checkout/download/webhook/release values are accepted only for non-public rehearsal while placeholder strings still fail, `runtime.mode: mixed` plus `public_origin_ready: true` counts as valid preview-host proof, and the staging helper can archive either committed `HEAD` or the live worktree through `--archive-source worktree`. An isolated VPS-local staging proof then confirmed that both the committed HyperTwist website lane and the later preview-tier worktree packet can serve green health, release-manifest, and first-party shell responses on that real shared host behind `3011`, and a later root-owned cutover then replaced the public placeholder site with the live first-party same-origin preview deployment on `https://hypertwist.app`. The package now also ships a bounded root-owned live-deploy helper that stages the committed checkout, uploads the rendered bundle, installs env, rebuilds the site, replaces the live `systemd` plus `nginx` files, and validates the public origin; that helper has already been re-proved idempotently against the live host. The repo now also ships that host-proof flow as a first-party staging helper so future sessions can rerun the temp checkout/build/boot verification path directly before or after root-owned cutover. The website lane now also owns a sanitized generated packaged-validation summary for the Windows higher-dimensional desktop proof, rendered from the checked-in authoritative package report into `website/src/shared/generated/windows-package-validation-summary.json`, and the owned web-surface validation gate now checks that generated proof for freshness before approving the current public/auth/download/browser lane. The repo now also carries checked-in preview-tier frontend/server env examples plus a matching preview same-origin bundle example for the current live `hypertwist.app` posture, while the launch-tier examples still intentionally fail until real checkout, download, source, and webhook values replace their placeholders. The remaining public conversion seams now also stop dead-ending on generic sign-in/support detours when the next lane is already known: the explorer CTA preserves `/register?next=/app`, operator fallback opens the protected downloads lane, studio fallback opens the protected browser-access rollout lane, and launch/download fallback callouts now point directly at protected release, notices, or dashboard follow-through. The narrative/help surfaces then widened again so the public About and Support pages also surface the same live launch-readiness callout and packaged desktop-proof section already used by the stronger public manual routes, keeping maturity language attached to current native release evidence instead of leaving those pages purely abstract. The same public manual continuation now also adds a direct reusable surface-choice guide across the homepage, About, Pricing, Download, and Support pages so operators no longer have to infer from the larger surface matrix alone when they should stay on the public web surface, move into the protected dashboard, or move into the packaged desktop runtime. A later same-family continuation then propagated that same guide through the remaining public feature/docs/resources/changelog/legal pages as well, so the whole public site now preserves one consistent browser-versus-protected-versus-desktop handoff story instead of leaving those lower-traffic surfaces on older implicit wording. A further same-day manual-clarity continuation then added a reusable direct comparison section across the homepage, About, Docs, and Download routes explaining why the website remains necessary, where it is intentionally narrower than the simulator, why the native Unreal runtime stays primary, and how the current keyboard or mouse versus unfinished XR/controller truth should be read. The latest same-family parity follow-up then widened that exact browser-versus-desktop reality section into Pricing and Resources as well, so commercial and reference-heavy public routes no longer rely only on the lighter surface-choice guide when explaining what stays native and where the current XR/controller boundary still begins. The next adjacent parity follow-up then extended the same direct comparison into the public Feature atlas and Support routes as well, so the remaining major public operator-facing surfaces no longer fall back to the lighter guide alone when capability review or recovery work needs the sharper website-versus-native split. A later same-family continuity follow-up then widened the shared release-decision guide into the remaining public legal/notices routes too, so open-source notices, privacy, terms, and shipping/payment now also tell the operator whether the next honest move is protected desktop access, pricing/provisioning, protected browser/account continuity, or notices/source follow-through instead of leaving those pages on the older lighter handoff only. The same browser shell now also has a first-party top-level runtime-recovery boundary, so unexpected React route failures degrade into a HyperTwist-owned retry/return surface that keeps the browser-versus-desktop product truth explicit instead of collapsing into a blank shell. A later same-family quickstart/manual continuation then added a reusable first serious-session guide across homepage, docs, and download so operators can see the real path from release-target choice through desktop-link pairing, first native verification, higher-dimensional verification, and the current XR/controller `No-Go` boundary in one place instead of reconstructing that flow from scattered adjacent sections. That same onboarding/manual packet is now also anchored at a dedicated public `/getting-started` route so the shortest complete browser-to-desktop first-session path is canonical, crawlable, and easier to hand off than the broader site sections alone. The next adjacent launch-authority continuation then did the same for rollout truth through a dedicated public `/launch-status` route, giving preview-versus-launch posture, rollout blockers, packaged proof, and release-reference follow-through one canonical public authority surface instead of leaving that lane distributed across pricing and compact status banners alone. The next same-family shared-auth manual continuation then widened the real browser-account method lineup beyond the auth entry forms and deeper docs surfaces into the homepage, pricing, download, and support routes too, so the public pages where operators actually decide to sign in, buy access, or recover access posture now expose the real provider lineup directly. The latest same-family manual continuation now also adds a shared public route atlas across homepage, docs, and resources so each major public page explains its exact job in the broader operator/distribution manual instead of leaving page purpose mostly implicit in navigation alone. The latest same-family atlas-parity follow-up then widened the public feature-atlas route again so it now also carries the shared runtime control guide directly, keeping the practical classic-control, higher-dimensional-control, native-diagnostics, and explicit XR/controller-boundary truth visible on `/features` instead of forcing advanced readers to leave the atlas for deeper manual routes. The latest same-family responsive-proof expansion then widened browser-level viewport evidence across those newer manual and authority routes too, so `/features`, `/docs`, `/getting-started`, and `/launch-status` now sit inside the owned public responsive validation lane instead of relying only on source-level or unit-level proof. The latest same-family commerce/download manual deepening follow-up then widened `/pricing` and `/download` again so the actual purchase and package routes now carry the installed-software simulator manual, the higher-dimensional family guide, and the current input/device plus runtime-control truth directly instead of leaving that practical product explanation to docs/resources/getting-started alone. A later same-family continuation then completed the shared-section path on the feature atlas itself by routing its higher-dimensional guide, input/device posture, control-profile roster, and runtime-control guide through the same shared helper ownership as the surrounding public routes, and widened responsive public-route proof across `/changelog`, `/open-source-notices`, `/privacy`, `/terms`, and `/shipping-payment`, while a later adjacent auth-entry parity follow-up also brought `/login` into that same owned mobile/tablet matrix, bringing the explicit public-route browser proof to `34` passed Playwright checks while the broader `13`-file/`79`-test website route/auth/release suite and `10`-file/`36`-test auth-server suite stayed green. The latest same-family high-traffic FAQ promotion follow-up then surfaced the shared browser-versus-desktop boundary Q&A directly on homepage and About as well, so operators no longer have to drill into deeper support/manual surfaces just to learn that the current browser lane is intentionally narrower than the desktop simulator and why that narrower posture is still the stronger shipping product shape. | +| Public `hypertwist.app` marketing shell | Implemented now | first-party `website/` app + feature registry/roadmap authority | HyperTwist now has a dedicated first-party public web surface for homepage, feature atlas, about, resources, pricing, download, support, legal routes, a dedicated `/getting-started` onboarding surface, and a dedicated `/launch-status` authority surface. This lane is separate from the embedded Unreal browser runtime under `Content/Browser/` and does not claim browser-simulator parity. The same public lane now also serves as a bounded operator/distribution manual through the docs/resources/download/support surfaces, the public feature-atlas route, the dedicated getting-started route, the dedicated launch-status route, and related launch/status surfaces, explaining browser-versus-desktop posture, rollout steps, package proof, simulator-use guidance, and current input/device truth without claiming browser ownership of the native runtime or overclaiming unfinished VR/controller posture. The same package now also carries a first-party external runtime-readiness verifier so deploy-time env and live health posture can be checked outside the dashboard, plus separated local-versus-production env templates whose placeholder values are intentionally rejected until real launch config is in place, bootstrap CI now validates both the frontend and auth-server website commands directly, and the auth server can now auto-serve the built `website/dist` bundle with bounded SPA fallback for same-origin public deployment. Request-level server coverage now also proves that public/app shell delivery does not shadow `/api/*`, `/auth*`, `/health`, or missing asset paths, while the pricing/download/notices routes now surface first-party preview-versus-launch posture from the same bounded launch checklist instead of relying on hidden operator-only status. The shared marketing shell now also carries a compact public-site-status banner across public pages, the homepage keeps a fuller status section, and the shared public launch-status component now consumes live auth-health webhook/runtime truth in addition to release-manifest download readiness so public marketing copy does not claim launch posture from static checkout/download config alone. The auth server now also emits an authoritative `launch` summary on `/api/auth/health`, including required blocker labels, billing product/price-map gates, and current checkout targets, so the public banner and protected dashboard no longer duplicate launch-blocker evaluation client-side. A later same-family continuation then widened that release-manifest authority again to carry public runtime commerce config for operator/studio checkout URLs and live plan-price strings, so pricing, notices, and dashboard launch-readiness surfaces no longer depend only on frontend build-time checkout config. The live website lane now also owns route-aware title/description/canonical/Open-Graph/Twitter metadata for the real `hypertwist.app` marketing surface so deployed public pages no longer remain on a single generic SPA title/description, plus first-party `robots.txt` and `sitemap.xml` assets for the public route set while keeping `/app`, `/login`, and `/register` out of crawler posture. The later shared search-authority hardening pass then moved both assets onto one generated authority seam backed by `website/src/public-route-registry.json`, `website/src/public-search-policy.json`, and first-party script/test ownership, keeping `/app`, `/api/`, `/auth`, `/health`, `/login`, and `/register` aligned without hand-maintained crawler drift. The real `check-runtime-readiness` CLI is now also exercised against the checked-in production example env files, and a spawned `website/server` bootstrap proof now verifies the live same-origin process path from production-shaped env into `/health`, `/api/auth/health`, built-shell serving, and the public anonymous release-manifest posture for the shared desktop release lane. The same verifier now also probes the deployed root-shell marker and can explicitly fail when the public origin is still serving the older placeholder rollout page instead of the first-party website/auth-server lane, while the repo now also carries first-party `website/deploy/` `nginx` plus `systemd` handoff templates, a concrete same-origin public-host cutover guide, a deployment-file renderer that emits resolved operator outputs from real checkout paths, and a manifest-driven bundle renderer that lets one authoritative input own the public origin while emitting validated env plus install artifacts together, with the shared-VPS-safe default upstream moved to `3011` after live host inspection confirmed `3001` is already occupied by FamiliarOS. The same deployment lane now also distinguishes `launch` from `preview` posture so honest missing checkout/download/webhook/release values are accepted only for non-public rehearsal while placeholder strings still fail, `runtime.mode: mixed` plus `public_origin_ready: true` counts as valid preview-host proof, and the staging helper can archive either committed `HEAD` or the live worktree through `--archive-source worktree`. An isolated VPS-local staging proof then confirmed that both the committed HyperTwist website lane and the later preview-tier worktree packet can serve green health, release-manifest, and first-party shell responses on that real shared host behind `3011`, and a later root-owned cutover then replaced the public placeholder site with the live first-party same-origin preview deployment on `https://hypertwist.app`. The package now also ships a bounded root-owned live-deploy helper that stages the committed checkout, uploads the rendered bundle, installs env, rebuilds the site, replaces the live `systemd` plus `nginx` files, and validates the public origin; that helper has already been re-proved idempotently against the live host. The repo now also ships that host-proof flow as a first-party staging helper so future sessions can rerun the temp checkout/build/boot verification path directly before or after root-owned cutover. The website lane now also owns a sanitized generated packaged-validation summary for the Windows higher-dimensional desktop proof, rendered from the checked-in authoritative package report into `website/src/shared/generated/windows-package-validation-summary.json`, and the owned web-surface validation gate now checks that generated proof for freshness before approving the current public/auth/download/browser lane. The repo now also carries checked-in preview-tier frontend/server env examples plus a matching preview same-origin bundle example for the current live `hypertwist.app` posture, while the launch-tier examples still intentionally fail until real checkout, download, source, and webhook values replace their placeholders. The remaining public conversion seams now also stop dead-ending on generic sign-in/support detours when the next lane is already known: the explorer CTA preserves `/register?next=/app`, operator fallback opens the protected downloads lane, studio fallback opens the protected browser-access rollout lane, and launch/download fallback callouts now point directly at protected release, notices, or dashboard follow-through. The narrative/help surfaces then widened again so the public About and Support pages also surface the same live launch-readiness callout and packaged desktop-proof section already used by the stronger public manual routes, keeping maturity language attached to current native release evidence instead of leaving those pages purely abstract. The same public manual continuation now also adds a direct reusable surface-choice guide across the homepage, About, Pricing, Download, and Support pages so operators no longer have to infer from the larger surface matrix alone when they should stay on the public web surface, move into the protected dashboard, or move into the packaged desktop runtime. A later same-family continuation then propagated that same guide through the remaining public feature/docs/resources/changelog/legal pages as well, so the whole public site now preserves one consistent browser-versus-protected-versus-desktop handoff story instead of leaving those lower-traffic surfaces on older implicit wording. A further same-day manual-clarity continuation then added a reusable direct comparison section across the homepage, About, Docs, and Download routes explaining why the website remains necessary, where it is intentionally narrower than the simulator, why the native Unreal runtime stays primary, and how the current keyboard or mouse versus unfinished XR/controller truth should be read. The latest same-family parity follow-up then widened that exact browser-versus-desktop reality section into Pricing and Resources as well, so commercial and reference-heavy public routes no longer rely only on the lighter surface-choice guide when explaining what stays native and where the current XR/controller boundary still begins. The next adjacent parity follow-up then extended the same direct comparison into the public Feature atlas and Support routes as well, so the remaining major public operator-facing surfaces no longer fall back to the lighter guide alone when capability review or recovery work needs the sharper website-versus-native split. A later same-family continuity follow-up then widened the shared release-decision guide into the remaining public legal/notices routes too, so open-source notices, privacy, terms, and shipping/payment now also tell the operator whether the next honest move is protected desktop access, pricing/provisioning, protected browser/account continuity, or notices/source follow-through instead of leaving those pages on the older lighter handoff only. The same browser shell now also has a first-party top-level runtime-recovery boundary, so unexpected React route failures degrade into a HyperTwist-owned retry/return surface that keeps the browser-versus-desktop product truth explicit instead of collapsing into a blank shell. A later same-family quickstart/manual continuation then added a reusable first serious-session guide across homepage, docs, and download so operators can see the real path from release-target choice through desktop-link pairing, first native verification, higher-dimensional verification, and the current XR/controller `No-Go` boundary in one place instead of reconstructing that flow from scattered adjacent sections. That same onboarding/manual packet is now also anchored at a dedicated public `/getting-started` route so the shortest complete browser-to-desktop first-session path is canonical, crawlable, and easier to hand off than the broader site sections alone. The next adjacent launch-authority continuation then did the same for rollout truth through a dedicated public `/launch-status` route, giving preview-versus-launch posture, rollout blockers, packaged proof, and release-reference follow-through one canonical public authority surface instead of leaving that lane distributed across pricing and compact status banners alone. The next same-family shared-auth manual continuation then widened the real browser-account method lineup beyond the auth entry forms and deeper docs surfaces into the homepage, pricing, download, and support routes too, so the public pages where operators actually decide to sign in, buy access, or recover access posture now expose the real provider lineup directly. The latest same-family manual continuation now also adds a shared public route atlas across homepage, docs, and resources so each major public page explains its exact job in the broader operator/distribution manual instead of leaving page purpose mostly implicit in navigation alone. The latest same-family atlas-parity follow-up then widened the public feature-atlas route again so it now also carries the shared runtime control guide directly, keeping the practical classic-control, higher-dimensional-control, native-diagnostics, and explicit XR/controller-boundary truth visible on `/features` instead of forcing advanced readers to leave the atlas for deeper manual routes. The latest same-family responsive-proof expansion then widened browser-level viewport evidence across those newer manual and authority routes too, so `/features`, `/docs`, `/getting-started`, and `/launch-status` now sit inside the owned public responsive validation lane instead of relying only on source-level or unit-level proof. The latest same-family commerce/download manual deepening follow-up then widened `/pricing` and `/download` again so the actual purchase and package routes now carry the installed-software simulator manual, the higher-dimensional family guide, and the current input/device plus runtime-control truth directly instead of leaving that practical product explanation to docs/resources/getting-started alone. A later same-family continuation then completed the shared-section path on the feature atlas itself by routing its higher-dimensional guide, input/device posture, control-profile roster, and runtime-control guide through the same shared helper ownership as the surrounding public routes, and widened responsive public-route proof across `/changelog`, `/open-source-notices`, `/privacy`, `/terms`, and `/shipping-payment`, while a later adjacent auth-entry parity follow-up also brought `/login` into that same owned mobile/tablet matrix, bringing the explicit public-route browser proof to `34` passed Playwright checks while the broader `13`-file/`79`-test website route/auth/release suite and `10`-file/`36`-test auth-server suite stayed green. The latest same-family high-traffic FAQ promotion follow-up then surfaced the shared browser-versus-desktop boundary Q&A directly on homepage and About as well, so operators no longer have to drill into deeper support/manual surfaces just to learn that the current browser lane is intentionally narrower than the desktop simulator and why that narrower posture is still the stronger shipping product shape. The latest same-family legal/distribution continuity follow-up then widened `/open-source-notices` and `/shipping-payment` again so those deeper public routes now also carry the live surface-authority map plus offline operator-manual continuity, while the shipping/payment lane also keeps the shared auth-method lineup visible, preventing the purchase, payment, source, and notices surfaces from degrading back into a materially thinner shell than the main brochure/manual routes. | | Browser-based operator/account dashboard | Implemented now | first-party `website/` app + shared auth/dashboard packet | A protected browser dashboard is now live for operator access, account state, download posture, browser-access boundary explanation, notices review, and bounded billing/entitlement status. It reuses the shared SuperTokens auth posture proven in FamiliarOS and ScriptoriumAI while remaining HyperTwist-specific in product content and boundary claims, the current auth-health surface now truthfully distinguishes configured versus reachable or ready shared-core posture while exposing fallback-active reason instead of hardcoding readiness, and the same dashboard now also surfaces launch-readiness truth for download URLs, checkout links, source/notices URLs, billing-secret/map configuration, and local-versus-public runtime deployment posture. The same shared-auth lane now also carries end-to-end optional provider parity for GitHub, Google, and bounded ORCID sign-in: the auth server owns the ORCID custom-provider path, the same-origin bundle emits matching ORCID frontend/server env truth, the browser client now registers ORCID through the supported third-party recipe provider contract instead of leaving that final step implicit, auth-health reports ORCID readiness alongside the other providers, and the public docs route now exposes the current browser-account method lineup instead of leaving provider truth visible only on the form pages. The surrounding public decision surfaces now also mirror that same provider-lineup truth on homepage, pricing, download, and support, so shared-auth reality is not hidden until operators reach either the auth forms or the deeper manual. The same protected overview now also consumes the server-backed Windows packaged-validation summary that the release-manifest authority exposes, so operators can see current higher-dimensional desktop proof without drilling into the dedicated downloads screen. The adjacent protected `/app/browser-access` and `/app/notices` routes now also reuse the bounded escalation-map and release-follow-through guidance from the public support/manual lane, so sign-in does not degrade operator troubleshooting quality into a thinner shell than the public surface. The protected overview and protected download center now also mirror the same launch-readiness, operator-access, and studio-rollout help lanes as the public support/manual surface, but translate those actions into direct signed-in dashboard, downloads, browser-access, account, notices, pricing, and release-notes targets instead of sending the operator back through anonymous auth detours. A later same-family parity follow-up then added the same blunt browser-versus-desktop reality explanation to the protected dashboard, protected downloads, and browser-access routes as well, so sign-in no longer makes the product boundary or unfinished XR/controller truth less explicit than the public manual. The next adjacent parity follow-up then extended that same compact reality panel into the protected account and notices routes too, so entitlement review and distribution/compliance work no longer soften the browser-support versus native-simulator split after sign-in. The auth entry pages now also render the same browser-versus-desktop truth before sign-in is even complete, so login and register no longer rely only on next-step routing plus later dashboard surfaces to explain what stays native and where the current XR/controller boundary still begins. A later same-family protected-shell continuation then widened signed-in auth truth itself, so the dashboard and account routes now surface the auth method, current provider lineup, shared-auth readiness, runtime origins, cookie/public-origin posture, fallback state, and deployment diagnostics directly instead of collapsing that truth down to a thin stack label. The protected fallback path now also preserves signed-in viewer plan/access posture from local session truth when live manifest authority is temporarily unavailable, while still keeping download authority conservative until the auth server returns. The shared browser auth layer now also has a bounded release-authority reconciliation path that refreshes and persists the local browser session snapshot from fresher manifest viewer truth, while the dashboard and account surfaces expose a compact live-authority sync notice summarizing what changed so operators can see the session catch-up clearly. That same auth layer now also clears stale stored sessions when shared auth is configured and `/api/auth/me` returns `401`, while still preserving the intended offline/local-fallback posture when the account API is merely unreachable or shared auth is not configured. The next adjacent protected-shell launch-authority continuation then added a dedicated signed-in `/app/launch-status` route, so launch posture, rollout blockers, release references, packaged proof, and signed-in next actions no longer collapse back to a single overview panel once account context exists. The follow-through continuation after that then threaded the same signed-in launch-status route back through protected release-action cards, release-reference panels, and the browser-access, download, account, and notices surfaces, so rollout authority remains attached to the surrounding signed-in operator shell instead of becoming an isolated page. Focused frontend coverage now also protects deep-link login redirect preservation, safe `next`-path normalization across auth entry points, fallback/email auth-bootstrap normalization, login/register continuation behavior, public download-gating behavior, protected-route/shell behavior, real lazy-route tree behavior for key public and protected paths, top-level app-bootstrap and SuperTokens-wrapper posture, login/register unhappy-path and OAuth-button behavior, support-topic fallback routing when live checkout is not configured, desktop-link verify-url/dashboard readiness behavior, and explicit `noindex,nofollow` posture on protected/auth browser surfaces. The validation lane now also has a bounded signed test-session harness under `TEST_MODE=testing` that proves `/api/auth/me`, stale-session invalidation, release-authority reconciliation, and `/api/auth/desktop-link` behavior through the live spawned auth-server process without widening production auth posture. A later same-family responsive-browser hardening follow-up then added Playwright viewport proof for `/app`, `/app/launch-status`, `/app/downloads`, `/app/browser-access`, `/app/account`, and `/app/notices`, so the shipped signed-in operator shell now has the same bounded mobile/tablet no-horizontal-overflow proof posture as the current public-route family. | | Desktop download posture and browser-to-desktop pairing | Implemented now | first-party `website/` app + `website/server` desktop-link endpoints | Public download targets, dashboard-side release posture, and short-lived desktop-link token generation/verification are now first-party owned. The current server posture now enforces exact website-origin matching, bounded per-user issuance, one-time token consumption, and billing-backed plan/download entitlement resolution with focused `website/server` tests green on `2026-06-22`, and the verify handshake now returns the same resolved download-entitlement posture the dashboard sees instead of only identity plus plan/role. The same lane now also owns a shared `GET /api/releases/manifest` runtime authority for release version/channel/build/published/file-size/checksum/docs/source metadata, with anonymous callers intentionally denied raw download URLs while entitled session-backed callers receive the configured direct platform URL. That manifest now also carries first-party packaged-validation summary truth for the Windows higher-dimensional desktop lane, so the public `/download` page, the public `/resources` reference page, and the protected `/app/downloads` surface can project real package evidence for the dedicated-family `Magic120Cell` / `MagicCube5D` maps even while launch-tier release URLs remain unconfigured. That website-facing packaged proof is now sourced through a sanitized generated summary rendered from the checked-in authoritative `phase6c_dedicated_family_package_validation_report.json`, and the owned web-surface validation gate now checks that generated summary for freshness before approving the current public/auth/download/browser lane. The public `/download` page now keeps raw download URLs behind the protected dashboard instead of exposing them directly, preserves requested platform continuity through `/app/downloads?platform=...`, and surfaces that requested target again after auth handoff inside the protected release lane. The public download fallbacks now also open exact protected download and dashboard follow-through instead of stopping at a generic anonymous login hop. When live manifest authority is unavailable, the protected fallback path now still reflects the signed-in viewer posture from local session truth while continuing to withhold raw delivery authority. When live manifest authority resolves fresher entitled viewer truth than the local browser auth snapshot, the protected download-center lane now also follows that server-backed viewer posture for the actual download action instead of leaving the operator blocked behind stale local session state. Both the public and protected download surfaces now also carry first-party rollout steps, first-launch desktop setup guidance, browser-to-desktop pairing follow-through, and release/notices/source references so the desktop setup lane is more than a generic link bucket, while the support surface now carries an explicit escalation map separating account, package, runtime, and rollout/compliance problems. The protected dashboard overview and protected account surface now also mirror that same first-launch follow-through, and the protected browser-access/notices routes now mirror the same escalation separation, so post-sign-in operator guidance does not collapse back into a thinner release-only shell. The protected download center now also mirrors the same three help-topic lanes used by the public support/manual surface, but with direct signed-in actions for downloads, dashboard, account, browser access, notices, and release notes so entitled operators can stay inside the protected rollout lane once auth has already succeeded. The dashboard plus public launch-status callouts now consume the same manifest-backed Windows download truth instead of only static frontend config. Actual release URLs remain deployment configuration rather than hardcoded product truth. | | Paddle-ready pricing and billing webhook seam | Implemented now | first-party `website/` app + `website/server` billing endpoint | The public pricing surface now exists with plan structure, checkout-link configuration seams, and the same `/api/billing/paddle/webhook` endpoint family used by the broader product website lane. The current server now verifies `Paddle-Signature` against `PADDLE_WEBHOOK_SECRET` using the documented raw-body HMAC flow, persists a bounded first-party billing state file, and applies verified Paddle events into account/download entitlement state that the browser dashboard consumes, with focused `website/server` tests green on `2026-06-22`. The shared `GET /api/releases/manifest` authority now also carries public runtime commerce config for operator/studio checkout URLs and live plan-price strings, allowing the pricing page to switch from frontend build-time checkout assumptions to auth-server runtime truth when those values are configured. The fallback plan CTAs now also use exact protected release/browser-access targets when live checkout URLs are absent, instead of routing operators back into a vague public support detour. A spawned live-process proof now also verifies that a real signed webhook updates processed-event health and persisted billing state through the actual auth-server runtime, not only helper-level store tests, and transaction events no longer leak their id into stored `subscriptionId` state. Production checkout URLs, secret management, and broader operator/admin billing workflows remain deployment/application tasks, not shipped-code omissions. | @@ -294,7 +294,7 @@ repo. | Higher-dimensional initial shared-map launch and view-context execution bridge | Implemented now | landed `Phase 6C` continuation packet | First-party current code first bundled higher-dimensional launch surfaces and view-context surfaces for `Magic120Cell` and `MagicCube5D`, resolved those surfaces through the training runtime library plus the live training panel/session-actor caches, and let the training subsystem start the shared-map seed run, apply default selector posture, persist the generated-mode launch request, and start the owned generated run without widening into external-process ownership. After recovering an interrupted follow-up, the primary reverse-SSH `localhost:22022` Windows lane rebuilt that cleaned slice on `2026-06-18` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 124.81 seconds`, and passed all `8` `HyperTwist.FirstParty.HigherDimensional.Phase6C` tests, including `LaunchCatalog`, `ViewContextCatalog`, `LaunchExecution`, and `RunStateActivationResolution`; that initial bridge is now superseded by the later dedicated-family map ownership continuation. | | Higher-dimensional explicit dedicated-host seam | Implemented now | landed `Phase 6C` host-surface continuation packet | First-party current code then recorded the preferred dedicated-family `Magic120Cell` / `MagicCube5D` host-map targets in an explicit higher-dimensional host-surface catalog while the slice still kept the shared training map as the interim effective runtime fallback, mirrored that resolved host seam through the training runtime library plus the panel/session caches, and threaded the host-surface id into the launch/view-context surfaces and generated-mode lineage. The primary reverse-SSH `localhost:22022` Windows lane rebuilt this widened slice on `2026-06-18` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 2858.02 seconds`, and passed all `9` `HyperTwist.FirstParty.HigherDimensional.Phase6C` tests, including the new `HostCatalog`; that interim fallback is now superseded by the later dedicated-family map ownership continuation. | | Higher-dimensional executed runtime session surface | Implemented now | landed `Phase 6C` session-surface continuation packet | First-party current code now merges the higher-dimensional launch, host, and view-context seams into an explicit runtime-session catalog for `Magic120Cell` and `MagicCube5D`, mirrors that session surface through the training runtime library plus the panel/session caches, upgrades generated-mode deck lineage to record the resolved session surface, and applies the merged launch-plus-view selector posture at start time instead of only the narrower launch defaults. The primary reverse-SSH `localhost:22022` Windows lane rebuilt this widened slice on `2026-06-18` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 3541.98 seconds`, and passed all `10` `HyperTwist.FirstParty.HigherDimensional.Phase6C` tests, including the new `SessionCatalog`; the longer `LaunchExecution` quiet interval of `573.84 seconds` remained known-good. | -| Higher-dimensional dedicated-family interactive scene ownership | Implemented now | landed `Phase 6C` interactive-scene and dedicated-host continuation packet | First-party current code now promotes the higher-dimensional runtime-session seams into explicit `Magic120Cell` and `MagicCube5D` interactive-scene surfaces with family-owned runtime-state, projection, and persistence envelopes, replaces the shared-map bridge with dedicated-family training-map assets plus dedicated host/launch/view-context/session surfaces, exposes explicit scene-envelope decoders through the runtime library, batches default selector application so generated-mode launch execution no longer rebuilds repository views once per selector, and then defers repository-view projection across the internal generated-mode handoff itself so only the final launch state forces a view refresh. The primary reverse-SSH `localhost:22022` Windows lane rebuilt the dedicated-family ownership slice on `2026-06-18` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 1648.33 seconds`; the later projection-deferral hardening rebuild completed in `400.77 seconds`, and the exported automation report passed all `11` `HyperTwist.FirstParty.HigherDimensional.Phase6C` tests with `totalDuration` `41.88494873046875`, `LaunchExecution` duration `41.53509521484375`, and the controller quiet interval reduced to `41.52 seconds`. The current recovery-proof continuation now also deterministically reauthors the dedicated-family maps through `scripts/hypertwist_author_higher_dimensional_training_maps.py`, records manifest-backed owned hashes in `docs/generated/higher_dimensional_training_maps/phase6c_dedicated_family_map_manifest.json`, preserves the optional `AHyperTwistHigherDimensionalTrainingShellActor` for manual/editor authoring while intentionally skipping it on the headless commandlet lane because that spawn path still crashes `UnrealEditor-Cmd`, passes all `13` `HyperTwist.FirstParty.HigherDimensional.Phase6C` tests through pulled proof in `docs/generated/higher_dimensional_training_maps/phase6c_dedicated_map_ownership_automation_report.json`, including `DedicatedMapAuthoringManifest` and `DedicatedMapOwnedShell`, and now has a maintained packaged-validation seam through `scripts/Invoke-HyperTwistHigherDimensionalPackage.ps1` plus `scripts/Launch-HyperTwistHigherDimensionalPackage.ps1`. That helper was then live-validated on `2026-06-22` against isolated worktree `C:\HyperTwist_worktrees\phase10validate` in `-SkipBuild` mode, with `BuildCookRun time: 118.53 s`, archive output in `C:\HyperTwist_worktrees\phase10validate_packaged_phase6c_higherdim`, both dedicated-family packaged smoke maps green, and pulled aggregate proof in `docs/generated/higher_dimensional_training_maps/phase6c_dedicated_family_package_validation_report.json`. The same maintained helper lane was refreshed again on `2026-06-23` after the recovered authoritative editor rebuild, again in `-SkipBuild` mode against the existing receipt, with `BuildCookRun time: 70.74 s`, archive output in `C:\HyperTwist_worktrees\phase10validate_packaged_phase6c_higherdim_refresh_20260623`, both dedicated-family packaged smoke maps green again, and the checked-in aggregate report refreshed in place. A later exact-source recovery on `2026-06-30` then proved the same dedicated-family package lane can stay truthful even when the maintained isolated worktree is temporarily blocked by a Windows host file lock: the new bounded wrapper `scripts/run-hypertwist-remote-exact-source-browser-package-refresh.sh` retried the maintained-root editor build, fell back to `C:\HTpp` when the lock persisted, narrow-synced the exact-source browser/package support surfaces that fallback root lacked, reran `HyperTwist.Browser` proof with `26` succeeded and `0` failed, then completed a full packaged higher-dimensional build there because the fallback root did not yet have the packaged-game target receipt. Both dedicated-family smoke maps still passed, and the checked-in aggregate package report plus public summary were refreshed with truthful `skip_build: false` posture instead of pretending the old maintained-root `-SkipBuild` condition still applied. | +| Higher-dimensional dedicated-family interactive scene ownership | Implemented now | landed `Phase 6C` interactive-scene and dedicated-host continuation packet | First-party current code now promotes the higher-dimensional runtime-session seams into explicit `Magic120Cell` and `MagicCube5D` interactive-scene surfaces with family-owned runtime-state, projection, and persistence envelopes, replaces the shared-map bridge with dedicated-family training-map assets plus dedicated host/launch/view-context/session surfaces, exposes explicit scene-envelope decoders through the runtime library, batches default selector application so generated-mode launch execution no longer rebuilds repository views once per selector, and then defers repository-view projection across the internal generated-mode handoff itself so only the final launch state forces a view refresh. The primary reverse-SSH `localhost:22022` Windows lane rebuilt the dedicated-family ownership slice on `2026-06-18` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 1648.33 seconds`; the later projection-deferral hardening rebuild completed in `400.77 seconds`, and the exported automation report passed all `11` `HyperTwist.FirstParty.HigherDimensional.Phase6C` tests with `totalDuration` `41.88494873046875`, `LaunchExecution` duration `41.53509521484375`, and the controller quiet interval reduced to `41.52 seconds`. The current recovery-proof continuation now also deterministically reauthors the dedicated-family maps through `scripts/hypertwist_author_higher_dimensional_training_maps.py`, records manifest-backed owned hashes in `docs/generated/higher_dimensional_training_maps/phase6c_dedicated_family_map_manifest.json`, preserves the optional `AHyperTwistHigherDimensionalTrainingShellActor` for manual/editor authoring while intentionally skipping it on the headless commandlet lane because that spawn path still crashes `UnrealEditor-Cmd`, passes all `13` `HyperTwist.FirstParty.HigherDimensional.Phase6C` tests through pulled proof in `docs/generated/higher_dimensional_training_maps/phase6c_dedicated_map_ownership_automation_report.json`, including `DedicatedMapAuthoringManifest` and `DedicatedMapOwnedShell`, and now has a maintained packaged-validation seam through `scripts/Invoke-HyperTwistHigherDimensionalPackage.ps1` plus `scripts/Launch-HyperTwistHigherDimensionalPackage.ps1`. That helper was then live-validated on `2026-06-22` against isolated worktree `C:\HyperTwist_worktrees\phase10validate` in `-SkipBuild` mode, with `BuildCookRun time: 118.53 s`, archive output in `C:\HyperTwist_worktrees\phase10validate_packaged_phase6c_higherdim`, both dedicated-family packaged smoke maps green, and pulled aggregate proof in `docs/generated/higher_dimensional_training_maps/phase6c_dedicated_family_package_validation_report.json`. The same maintained helper lane was refreshed again on `2026-06-23` after the recovered authoritative editor rebuild, again in `-SkipBuild` mode against the existing receipt, with `BuildCookRun time: 70.74 s`, archive output in `C:\HyperTwist_worktrees\phase10validate_packaged_phase6c_higherdim_refresh_20260623`, both dedicated-family packaged smoke maps green again, and the checked-in aggregate report refreshed in place. A later exact-source recovery on `2026-06-30` then proved the same dedicated-family package lane can stay truthful even when the maintained isolated worktree is temporarily blocked by a Windows host file lock: the new bounded wrapper `scripts/run-hypertwist-remote-exact-source-browser-package-refresh.sh` retried the maintained-root editor build, fell back to `C:\HTpp` when the lock persisted, narrow-synced the exact-source browser/package support surfaces that fallback root lacked, reran `HyperTwist.Browser` proof with `26` succeeded and `0` failed, then completed a full packaged higher-dimensional build there because the fallback root did not yet have the packaged-game target receipt. Both dedicated-family smoke maps still passed, and the checked-in aggregate package report plus public summary were refreshed with truthful `skip_build: false` posture instead of pretending the old maintained-root `-SkipBuild` condition still applied. The later same-day maintained-root recovery then tightened that public release proof again by carrying both truths in the same generated artifact chain: the exact-source wrapper passed a fresh editor build on `C:\HyperTwist_worktrees\phase10validate`, the higher-dimensional package helper then legitimately reused the existing packaged-game receipt, and the aggregate package report plus website-facing summary now expose both the packet-level `prePackageEditorBuild` result and the helper-level `skipBuild` state instead of collapsing them into one ambiguous build flag. | | Broad non-Euclidean interaction shell and host ownership | Deep-source grounded retained | `MagicTile` retained remainder | Broad interaction-shell, WinForms/OpenTK host ownership, native spherical/hyperbolic renderer ownership beyond the landed first-party native behavior proof, and generic runtime replacement remain deferred after the landed `Phase 6R-T`, `Phase 7A`, `Phase 7B`, and `Phase 7C` slices, with later native renderer reopening now governed by the separate spec-only `Phase 7D` decision gate. | ### 8. Speech input and voice sidecars diff --git a/scripts/Invoke-HyperTwistHigherDimensionalPackage.ps1 b/scripts/Invoke-HyperTwistHigherDimensionalPackage.ps1 index 4a9ec86..e89dddd 100644 --- a/scripts/Invoke-HyperTwistHigherDimensionalPackage.ps1 +++ b/scripts/Invoke-HyperTwistHigherDimensionalPackage.ps1 @@ -14,6 +14,9 @@ param( [string]$ValidationReportPath = '', [switch]$CleanArchive, [switch]$SkipBuild, + [switch]$PrePackageEditorBuildPerformed, + [ValidateSet('not-run', 'passed')] + [string]$PrePackageEditorBuildResult = 'not-run', [switch]$SkipLaunch ) @@ -217,6 +220,16 @@ if ($SkipBuild -and -not (Test-Path $GameTargetReceiptPath)) throw "SkipBuild was requested, but the packaged-game target receipt was not found at '$GameTargetReceiptPath'. Re-run without -SkipBuild so RunUAT can build the Win64 game target." } +if ($PrePackageEditorBuildPerformed -and $PrePackageEditorBuildResult -ne 'passed') +{ + throw "PrePackageEditorBuildPerformed was set, but PrePackageEditorBuildResult was '$PrePackageEditorBuildResult' instead of 'passed'." +} + +if (-not $PrePackageEditorBuildPerformed -and $PrePackageEditorBuildResult -eq 'passed') +{ + throw "PrePackageEditorBuildResult was 'passed', but PrePackageEditorBuildPerformed was not set." +} + if ($CleanArchive -and (Test-Path $ArchiveDirectory)) { Remove-Item -LiteralPath $ArchiveDirectory -Recurse -Force @@ -271,6 +284,11 @@ $ValidationReport = [ordered]@{ additionalCookerOptions = @($ResolvedAdditionalCookerOptions) cleanArchive = [bool]$CleanArchive skipBuild = [bool]$SkipBuild + prePackageEditorBuild = [ordered]@{ + lane = 'Windows Unreal editor build' + performed = [bool]$PrePackageEditorBuildPerformed + result = $PrePackageEditorBuildResult + } skipLaunch = [bool]$SkipLaunch authoringManifest = [ordered]@{ path = $AuthoringManifestPath diff --git a/scripts/render-hypertwist-web-package-validation-summary.mjs b/scripts/render-hypertwist-web-package-validation-summary.mjs index f4d5d7c..9adb4b5 100644 --- a/scripts/render-hypertwist-web-package-validation-summary.mjs +++ b/scripts/render-hypertwist-web-package-validation-summary.mjs @@ -42,6 +42,28 @@ function assertBoolean(value, label) { return value } +function normalizePrePackageEditorBuild(value) { + if (value == null) { + return null + } + + if (typeof value !== 'object') { + throw new Error('prePackageEditorBuild must be an object when present.') + } + + const lane = assertString(value.lane, 'prePackageEditorBuild.lane') + const performed = assertBoolean(value.performed, 'prePackageEditorBuild.performed') + if (value.result !== 'passed' && value.result !== 'not-run') { + throw new Error('prePackageEditorBuild.result must be "passed" or "not-run".') + } + + return { + lane, + performed, + result: value.result, + } +} + function normalizeSmokeResult(value, label) { if (value === 'passed' || value === 'failed') { return value @@ -58,6 +80,7 @@ function buildSummary(report) { const generatedAtUtc = assertString(report.generatedAtUtc, 'generatedAtUtc') const configuration = assertString(report.configuration, 'configuration') const skipBuild = assertBoolean(report.skipBuild, 'skipBuild') + const prePackageEditorBuild = normalizePrePackageEditorBuild(report.prePackageEditorBuild) const result = normalizeSmokeResult(report.result, 'result') const validatedEntries = Array.isArray(report.authoringManifest?.validatedEntries) ? report.authoringManifest.validatedEntries @@ -89,6 +112,7 @@ function buildSummary(report) { generated_at: generatedAtUtc, configuration, skip_build: skipBuild, + pre_package_editor_build: prePackageEditorBuild, smoke_map_count: smokeMaps.length, smoke_maps: smokeMaps, } diff --git a/scripts/run-hypertwist-remote-exact-source-browser-package-refresh.sh b/scripts/run-hypertwist-remote-exact-source-browser-package-refresh.sh index f1a0f58..10fc1ef 100644 --- a/scripts/run-hypertwist-remote-exact-source-browser-package-refresh.sh +++ b/scripts/run-hypertwist-remote-exact-source-browser-package-refresh.sh @@ -226,6 +226,11 @@ exact_source_support_files=( "scripts/Invoke-HyperTwistHigherDimensionalPackage.ps1" "scripts/Launch-HyperTwistHigherDimensionalPackage.ps1" "docs/generated/higher_dimensional_training_maps/phase6c_dedicated_family_map_manifest.json" + "UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp" + "UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibraryInternal.h" + "UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibraryCoachPolicies.cpp" + "UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibraryCoachWorkflow.cpp" + "UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibraryCoachSummaries.cpp" ) effective_sync_files=() @@ -259,6 +264,8 @@ run_refresh_for_root() { local current_package_archive_dir="$package_archive_dir" local current_game_target_receipt_path="${current_worktree_root}\\UnrealHyperTwist\\Binaries\\Win64\\UnrealHyperTwist.target" local package_skip_build_clause="" + local pre_package_editor_build_ps_bool='$false' + local pre_package_editor_build_result='not-run' local step_exit=0 if [[ "$current_worktree_root" != "$worktree_root" && "$package_archive_dir" == "${worktree_root}_packaged_phase6c_higherdim_refresh_${report_stamp}" ]]; then @@ -292,6 +299,8 @@ run_refresh_for_root() { if [[ "$skip_build" != "true" ]]; then echo "Running remote Unreal editor build." if run_or_print "$remote_build_wrapper" --worktree-root "$current_worktree_root"; then + pre_package_editor_build_ps_bool='$true' + pre_package_editor_build_result='passed' : else step_exit="$?" @@ -343,10 +352,12 @@ run_refresh_for_root() { \$ArchiveDirectory = $(ps_single_quote "$current_package_archive_dir") \$PackageScriptPath = $(ps_single_quote "$current_package_script_path") \$ValidationReportPath = $(ps_single_quote "$current_validation_report_path") +\$PrePackageEditorBuildPerformed = ${pre_package_editor_build_ps_bool} +\$PrePackageEditorBuildResult = $(ps_single_quote "$pre_package_editor_build_result") if (-not (Test-Path -LiteralPath \$PackageScriptPath)) { throw "Higher-dimensional package script was not found at '\$PackageScriptPath'." } -& \$PackageScriptPath -ProjectRoot \$ProjectRoot -ArchiveDirectory \$ArchiveDirectory -ValidationReportPath \$ValidationReportPath${package_skip_build_clause} +& \$PackageScriptPath -ProjectRoot \$ProjectRoot -ArchiveDirectory \$ArchiveDirectory -ValidationReportPath \$ValidationReportPath -PrePackageEditorBuildPerformed:\$PrePackageEditorBuildPerformed -PrePackageEditorBuildResult \$PrePackageEditorBuildResult${package_skip_build_clause} exit \$LASTEXITCODE EOF )" diff --git a/website/README.md b/website/README.md index 7ff2133..4cf87c7 100644 --- a/website/README.md +++ b/website/README.md @@ -647,6 +647,10 @@ Use the runtime-readiness command before public launch or deployment approval: rendered from `docs/generated/higher_dimensional_training_maps/phase6c_dedicated_family_package_validation_report.json` by `scripts/render-hypertwist-web-package-validation-summary.mjs` +- that generated summary now carries both the package-helper `skip_build` + posture and the surrounding same-packet `pre_package_editor_build` truth, so + public download and release surfaces do not flatten a fresh editor rebuild + plus receipt-reuse package proof into one misleading build label - the auth server can now also serve the built `website/dist` bundle directly for same-origin `hypertwist.app` deployment when that build output is present - the repo now also includes first-party same-origin `nginx` and `systemd` handoff templates under `website/deploy/` @@ -714,6 +718,20 @@ 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 latest legal/distribution continuity follow-up on `2026-06-30` then also +kept the deeper public commerce pages inside that same richer manual lane: + +- `/open-source-notices` now also carries the shared browser-versus-desktop + reality explanation, a live surface-authority map, and the same offline + operator-manual continuity instead of acting like an isolated compliance stub +- `/shipping-payment` now also carries the shared auth-method lineup, the same + surface-authority map, and the same offline operator-manual continuity so the + purchase/delivery lane does not fall back to a thinner shell than the + homepage, pricing, and download routes +- focused validation stayed green under: + - `npm --prefix website test -- --run src/__tests__/public-marketing-pages.test.tsx` + - `npm --prefix website run type-check` + The follow-on public-manual widening on `2026-06-22` then also passed: - `npm run type-check` diff --git a/website/src/__tests__/public-marketing-pages.test.tsx b/website/src/__tests__/public-marketing-pages.test.tsx index ffa16e3..19e4558 100644 --- a/website/src/__tests__/public-marketing-pages.test.tsx +++ b/website/src/__tests__/public-marketing-pages.test.tsx @@ -1174,7 +1174,7 @@ describe('public marketing pages', () => { expect(within(packagedProofSection as HTMLElement).getByText(/MagicCube5D dedicated-family training map: passed/i)).toBeTruthy() expect( within(packagedProofSection as HTMLElement).getByText( - /Build step during latest proof: (skipped and reused existing target receipt|full package build)/i + /Package helper build mode: (reused the existing packaged-game target receipt|ran a full package build)/i ) ).toBeTruthy() expect(screen.getAllByText('Support topic quick routes').length).toBeGreaterThan(0) @@ -1966,6 +1966,8 @@ describe('public marketing pages', () => { expect(within(noticesView.container).getByText('Choose the right HyperTwist surface')).toBeTruthy() expect(within(noticesView.container).getByText('Choose the next release move')).toBeTruthy() expect(within(noticesView.container).getByText('Need notices, corresponding source, or release follow-through?')).toBeTruthy() + expect(within(noticesView.container).getByText('Current surface authority map')).toBeTruthy() + expect(within(noticesView.container).getByText('Offline operator manual')).toBeTruthy() expect(within(noticesView.container).getByText('Current packaged desktop proof')).toBeTruthy() expect(within(noticesView.container).getByText('Packaged validation passed')).toBeTruthy() @@ -2006,6 +2008,8 @@ describe('public marketing pages', () => { expect(within(shippingPaymentView.container).getByText('Need plan selection, billing, or operator provisioning?')).toBeTruthy() expect(within(shippingPaymentView.container).getByText('Release references and source availability')).toBeTruthy() expect(within(shippingPaymentView.container).getByRole('link', { name: 'https://notes.hypertwist.app' })).toBeTruthy() + expect(within(shippingPaymentView.container).getByText('Current surface authority map')).toBeTruthy() + expect(within(shippingPaymentView.container).getByText('Offline operator manual')).toBeTruthy() expect(within(shippingPaymentView.container).getByText('Terms of access in practice')).toBeTruthy() expect(within(shippingPaymentView.container).getByText('Distribution doctrine')).toBeTruthy() expect(within(shippingPaymentView.container).getByText('Release and redistribution checklist')).toBeTruthy() diff --git a/website/src/__tests__/release-validation-summary.test.tsx b/website/src/__tests__/release-validation-summary.test.tsx new file mode 100644 index 0000000..f9e85c5 --- /dev/null +++ b/website/src/__tests__/release-validation-summary.test.tsx @@ -0,0 +1,57 @@ +import { render, screen } from '@testing-library/react' +import { describe, expect, it } from 'vitest' + +import { ReleaseValidationSummary } from '../components/ui/ReleaseValidationSummary' + +describe('ReleaseValidationSummary', () => { + it('shows both the pre-package editor-build truth and the package-helper build mode when both are known', () => { + render( + , + ) + + expect(screen.getByText(/Pre-package editor build in same proof packet: passed on the windows unreal editor build lane/i)).toBeTruthy() + expect(screen.getByText(/Package helper build mode: reused the existing packaged-game target receipt/i)).toBeTruthy() + }) +}) diff --git a/website/src/auth/auth-api.ts b/website/src/auth/auth-api.ts index 1cf1640..8fd84c0 100644 --- a/website/src/auth/auth-api.ts +++ b/website/src/auth/auth-api.ts @@ -123,6 +123,11 @@ export interface ReleaseManifestPlatformPayload { generated_at: string configuration: string skip_build: boolean + pre_package_editor_build?: { + lane: string + performed: boolean + result: 'passed' | 'not-run' + } | null smoke_map_count: number smoke_maps: Array<{ map_url: string diff --git a/website/src/components/ui/ReleaseValidationSummary.tsx b/website/src/components/ui/ReleaseValidationSummary.tsx index 229a3ef..70d0853 100644 --- a/website/src/components/ui/ReleaseValidationSummary.tsx +++ b/website/src/components/ui/ReleaseValidationSummary.tsx @@ -9,6 +9,10 @@ export function ReleaseValidationSummary({ platform }: { platform: ReleaseManife const generatedAt = formatReleasePublishedAt(summary.generated_at) || summary.generated_at const resultLabel = summary.result === 'passed' ? 'Packaged validation passed' : 'Packaged validation needs attention' + const prePackageEditorBuild = summary.pre_package_editor_build + const packageBuildModeLabel = summary.skip_build + ? 'reused the existing packaged-game target receipt' + : 'ran a full package build' return (
@@ -23,7 +27,15 @@ export function ReleaseValidationSummary({ platform }: { platform: ReleaseManife {map.label}: {map.result} ))} -
  • Build step during latest proof: {summary.skip_build ? 'skipped and reused existing target receipt' : 'full package build'}
  • + {prePackageEditorBuild ? ( +
  • + Pre-package editor build in same proof packet:{' '} + {prePackageEditorBuild.performed + ? `${prePackageEditorBuild.result} on the ${prePackageEditorBuild.lane.toLowerCase()} lane` + : `not run on the ${prePackageEditorBuild.lane.toLowerCase()} lane`} +
  • + ) : null} +
  • Package helper build mode: {packageBuildModeLabel}
  • ) diff --git a/website/src/pages/public-pages-commerce.tsx b/website/src/pages/public-pages-commerce.tsx index a5bbbf1..80a4246 100644 --- a/website/src/pages/public-pages-commerce.tsx +++ b/website/src/pages/public-pages-commerce.tsx @@ -37,6 +37,7 @@ import { operatorFallbackPlan, PlanActionLink, PublicPackagedDesktopProofSection, + PublicManualRouteAtlasSection, PublicReleaseDecisionGuideSection, ReleaseAuthorityBundleSection, releaseCommerceFallback, @@ -485,6 +486,18 @@ export function OpenSourceNoticesPage() { description="The notices lane should also say plainly whether the next honest move is protected desktop access, pricing/provisioning, browser/account continuity, or notices/source follow-through." /> + + +
    + +
    + + + + + ) @@ -806,6 +829,15 @@ export function ShippingPaymentPage() { description="Shipping and payment posture is clearer when it also says whether the next honest move is protected desktop access, pricing/provisioning, browser/account continuity, or notices/source follow-through." /> + + + +
    +
    + +
    + + + + + ) diff --git a/website/src/shared/generated/windows-package-validation-summary.json b/website/src/shared/generated/windows-package-validation-summary.json index 9ea6128..6941752 100644 --- a/website/src/shared/generated/windows-package-validation-summary.json +++ b/website/src/shared/generated/windows-package-validation-summary.json @@ -1,9 +1,14 @@ { "lane": "Windows Unreal packaged validation", "result": "passed", - "generated_at": "2026-06-30T10:45:24.1772955Z", + "generated_at": "2026-06-30T22:37:40.2738982Z", "configuration": "Development", - "skip_build": false, + "skip_build": true, + "pre_package_editor_build": { + "lane": "Windows Unreal editor build", + "performed": true, + "result": "passed" + }, "smoke_map_count": 2, "smoke_maps": [ { diff --git a/website/src/shared/package-validation.ts b/website/src/shared/package-validation.ts index 1a6b838..7c90e26 100644 --- a/website/src/shared/package-validation.ts +++ b/website/src/shared/package-validation.ts @@ -7,12 +7,19 @@ export interface ReleasePlatformValidationSmokeMap { result: 'passed' | 'failed' } +export interface ReleasePlatformPrePackageEditorBuildSummary { + lane: string + performed: boolean + result: 'passed' | 'not-run' +} + export interface ReleasePlatformValidationSummary { lane: string result: 'passed' | 'failed' generated_at: string configuration: string skip_build: boolean + pre_package_editor_build?: ReleasePlatformPrePackageEditorBuildSummary | null smoke_map_count: number smoke_maps: ReleasePlatformValidationSmokeMap[] } @@ -23,6 +30,7 @@ const WINDOWS_VALIDATION_SUMMARY_FALLBACK: ReleasePlatformValidationSummary = { generated_at: '2026-06-24T12:53:32.7234772Z', configuration: 'Development', skip_build: true, + pre_package_editor_build: null, smoke_map_count: 2, smoke_maps: [ { @@ -51,6 +59,19 @@ function isValidationSmokeMap( ) } +function isPrePackageEditorBuildSummary( + input: unknown, +): input is ReleasePlatformPrePackageEditorBuildSummary { + return Boolean( + input + && typeof input === 'object' + && typeof (input as ReleasePlatformPrePackageEditorBuildSummary).lane === 'string' + && typeof (input as ReleasePlatformPrePackageEditorBuildSummary).performed === 'boolean' + && ((input as ReleasePlatformPrePackageEditorBuildSummary).result === 'passed' + || (input as ReleasePlatformPrePackageEditorBuildSummary).result === 'not-run'), + ) +} + function isValidationSummary( input: unknown, ): input is ReleasePlatformValidationSummary { @@ -63,6 +84,12 @@ function isValidationSummary( && typeof (input as ReleasePlatformValidationSummary).generated_at === 'string' && typeof (input as ReleasePlatformValidationSummary).configuration === 'string' && typeof (input as ReleasePlatformValidationSummary).skip_build === 'boolean' + && ( + (input as ReleasePlatformValidationSummary).pre_package_editor_build == null + || isPrePackageEditorBuildSummary( + (input as ReleasePlatformValidationSummary).pre_package_editor_build, + ) + ) && typeof (input as ReleasePlatformValidationSummary).smoke_map_count === 'number' && Array.isArray((input as ReleasePlatformValidationSummary).smoke_maps) && (input as ReleasePlatformValidationSummary).smoke_maps.every(isValidationSmokeMap),