From e8e918392c5d7e54a146db5bd91ca573a2066305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B0=E6=9C=94?= <565183519@qq.com> Date: Mon, 17 Aug 2026 00:57:09 +0800 Subject: [PATCH] deploy(hololake): open bounded public update route --- .../enterprise-four-domain-entry.json | 2 +- ...-UPDATE-PUBLIC-BOOTSTRAP-20260817-001.json | 45 +++++++++++++++++++ .../hololake-native-desktop/foundation.json | 4 +- .../scripts/domain-number-routing.test.mjs | 2 +- .../scripts/foundation.test.mjs | 8 ++-- .../server/release-broadcast/README.md | 16 +++---- .../release-broadcast/public-route.json | 6 +-- 7 files changed, 64 insertions(+), 19 deletions(-) create mode 100644 product-source/hololake-native-desktop/deployment/receipts/GH-HOLOLAKE-UPDATE-PUBLIC-BOOTSTRAP-20260817-001.json diff --git a/product-source/hololake-native-desktop/contracts/enterprise-four-domain-entry.json b/product-source/hololake-native-desktop/contracts/enterprise-four-domain-entry.json index 8221d41c4..24c1e7d87 100644 --- a/product-source/hololake-native-desktop/contracts/enterprise-four-domain-entry.json +++ b/product-source/hololake-native-desktop/contracts/enterprise-four-domain-entry.json @@ -7,7 +7,7 @@ "persona_relationship_gate": {"shows_species":"AGE","shows_current_persona_identity":true,"shows_invalid_age_individual_numbers":false,"human_confirms_relationship_mapping":true,"human_confirmation_is_persona_acceptance":false,"responsibility_acceptance_is_separate":true}, "work_entry": {"domain":"DOMAIN-ZS","channel":"GUANGHU_CHANNEL","preserves_responsibility_domain":true}, "personal_route": {"separate_node_ownership_check":true,"enterprise_credentials_are_sufficient":false,"self_connection_guide_visible_in_zero_sense_domain":true,"connection_executor":"HUMAN_OR_OWN_PERSONA"}, - "desktop_install_acceptance": {"mac_arm64":"BOOTSTRAP_REBUILD_REQUIRED","mac_x86_64":"NOT_BUILT","windows":"NOT_BUILT","automatic_update_channel":"TRUST_PROVISIONED_PUBLIC_ROUTE_PENDING"}, + "desktop_install_acceptance": {"mac_arm64":"BOOTSTRAP_REBUILD_REQUIRED","mac_x86_64":"NOT_BUILT","windows":"NOT_BUILT","automatic_update_channel":"BOOTSTRAP_TRUST_AND_PUBLIC_ENDPOINT_READY_NO_ACTIVE_RELEASE"}, "ui_template": "REPO-012@27d34dfdbf5df4c67b805402d442e5912c8f4c31:official-login-template-v0.4-locked+inner-screens-v0.1", "source": "routing/hololake-enterprise-four-domain-work-channel.json" } diff --git a/product-source/hololake-native-desktop/deployment/receipts/GH-HOLOLAKE-UPDATE-PUBLIC-BOOTSTRAP-20260817-001.json b/product-source/hololake-native-desktop/deployment/receipts/GH-HOLOLAKE-UPDATE-PUBLIC-BOOTSTRAP-20260817-001.json new file mode 100644 index 000000000..ec363b73a --- /dev/null +++ b/product-source/hololake-native-desktop/deployment/receipts/GH-HOLOLAKE-UPDATE-PUBLIC-BOOTSTRAP-20260817-001.json @@ -0,0 +1,45 @@ +{ + "schema": "hololake.update-public-bootstrap-acceptance-receipt/v1", + "receiptId": "GH-HOLOLAKE-UPDATE-PUBLIC-BOOTSTRAP-20260817-001", + "observedAt": "2026-08-17T00:55:04+08:00", + "state": "PUBLIC_HTTPS_EMPTY_FAIL_CLOSED_AND_CLIENT_TRUST_READY", + "sourceCommit": "cfa8fdefc2c7e475ba7163fddca42226abcc929d", + "clientTrust": { + "state": "PROVISIONED", + "endpoint": "https://guanghulab.com/hololake/releases/latest.json", + "host": "guanghulab.com", + "automaticCheckOnStartup": false, + "automaticDownload": false, + "humanOptInInstallRequired": true, + "automaticRestart": false, + "privateSigningMaterialInRepository": false + }, + "origin": { + "nodeId": "JD-FD-PRIMARY", + "bootId": "1170988c-5390-4f47-b89a-e9f88b2c5bbb", + "control": "GUANGHU_OS_MASTER", + "listener": "127.0.0.1:3940", + "healthState": "EMPTY_FAIL_CLOSED", + "latestHttpStatus": 204, + "masterInitSha256": "a58f80535e0fb305b5b956cbeca66e4026fe63309424673b66bb0871c9feeca9", + "releaseBridgeSha256": "b89e23d8732c28aa1a77fc3166c175a0bc5973cb59958f7e821aecea825e7117", + "nextBootPersistenceInstalled": true, + "currentBootBridgeActive": true + }, + "frontDoor": { + "nodeId": "BS-GZ-006", + "dedicatedUser": "hololake-tunnel", + "loopbackListener": "127.0.0.1:19440", + "publicEndpointHttpStatus": 204, + "nonGetMethodHttpStatus": 403, + "nginxSiteSha256": "e266fbd9380d56a52a634d2fa00e8180ac108aab3f62e3740701af44fe8f1542", + "nginxSnippetSha256": "ba699339d2d71f6139e74c0fd1878bae33a3aa8b4953ded0f4e7bd220a618d45", + "tunnelAuthority": "REMOTE_FORWARD_ONLY_EXACT_LOOPBACK_PORT_NO_SHELL" + }, + "remaining": { + "activeRelease": false, + "bootstrapMacArm64Built": false, + "appleNotarizationCompleted": false, + "publicUpdateInstallEndToEndPassed": false + } +} diff --git a/product-source/hololake-native-desktop/foundation.json b/product-source/hololake-native-desktop/foundation.json index 4997bfe9d..42bbcb0e7 100644 --- a/product-source/hololake-native-desktop/foundation.json +++ b/product-source/hololake-native-desktop/foundation.json @@ -83,14 +83,14 @@ "release_broadcast_candidate_service_source": "server/release-broadcast/server.mjs", "release_public_route_contract": "server/release-broadcast/public-route.json", "release_public_path_prefix": "/hololake/releases", - "release_public_route_deployed": false, + "release_public_route_deployed": true, "release_front_door_bounded_config_renderer_implemented": true, "release_broadcast_explicit_operator_activation_implemented": true, "release_broadcast_activation_requires_exact_human_approval": true, "release_broadcast_activation_requires_repeated_expected_facts": true, "release_broadcast_operator_automatic_restart_allowed": false, "release_pipeline_automatic_upload_allowed": false, - "release_production_activation_state": "BOOTSTRAP_CLIENT_TRUST_PROVISIONED_PENDING_PUBLIC_ROUTE_AND_FIRST_NOTARIZED_RELEASE", + "release_production_activation_state": "PUBLIC_ROUTE_AND_BOOTSTRAP_TRUST_READY_PENDING_FIRST_SIGNED_NOTARIZED_RELEASE", "tauri_update_artifacts_enabled": true, "tauri_update_artifacts_enablement_gate": "JD_CONTROLLER_PUBLIC_KEY_AND_SIGNED_RELEASE_PIPELINE_REQUIRED", "automatic_update_check_on_startup": false, diff --git a/product-source/hololake-native-desktop/scripts/domain-number-routing.test.mjs b/product-source/hololake-native-desktop/scripts/domain-number-routing.test.mjs index 8f5777eb0..926853619 100644 --- a/product-source/hololake-native-desktop/scripts/domain-number-routing.test.mjs +++ b/product-source/hololake-native-desktop/scripts/domain-number-routing.test.mjs @@ -65,7 +65,7 @@ test('the locked Qoder world template is the running client structure, not a ski assert.equal(contract.desktop_install_acceptance.mac_arm64, 'BOOTSTRAP_REBUILD_REQUIRED') assert.equal(contract.desktop_install_acceptance.mac_x86_64, 'NOT_BUILT') assert.equal(contract.desktop_install_acceptance.windows, 'NOT_BUILT') - assert.equal(contract.desktop_install_acceptance.automatic_update_channel, 'TRUST_PROVISIONED_PUBLIC_ROUTE_PENDING') + assert.equal(contract.desktop_install_acceptance.automatic_update_channel, 'BOOTSTRAP_TRUST_AND_PUBLIC_ENDPOINT_READY_NO_ACTIVE_RELEASE') assert.match(frontend, /number-nucleus/) assert.match(frontend, /worldStage === 'domain'/) assert.match(frontend, /worldStage === 'channel'/) diff --git a/product-source/hololake-native-desktop/scripts/foundation.test.mjs b/product-source/hololake-native-desktop/scripts/foundation.test.mjs index 889ba8bfa..18dcc6f61 100644 --- a/product-source/hololake-native-desktop/scripts/foundation.test.mjs +++ b/product-source/hololake-native-desktop/scripts/foundation.test.mjs @@ -58,16 +58,16 @@ test('release activation remains explicitly human controlled', () => { assert.equal(foundation.release_broadcast_activation_requires_repeated_expected_facts, true) assert.equal(foundation.release_broadcast_operator_automatic_restart_allowed, false) assert.equal(foundation.release_public_path_prefix, '/hololake/releases') - assert.equal(foundation.release_public_route_deployed, false) + assert.equal(foundation.release_public_route_deployed, true) assert.equal(publicRoute.publicPathPrefix, foundation.release_public_path_prefix) assert.equal(publicRoute.proxyRequestUriPolicy, 'PRESERVE_FULL_PUBLIC_PATH') - assert.equal(publicRoute.frontDoorLoopbackPort, null) - assert.equal(publicRoute.deployed, false) + assert.equal(publicRoute.frontDoorLoopbackPort, 19440) + assert.equal(publicRoute.deployed, true) assert.equal(foundation.release_front_door_bounded_config_renderer_implemented, true) assert.equal(foundation.release_pipeline_automatic_upload_allowed, false) assert.equal( foundation.release_production_activation_state, - 'BOOTSTRAP_CLIENT_TRUST_PROVISIONED_PENDING_PUBLIC_ROUTE_AND_FIRST_NOTARIZED_RELEASE', + 'PUBLIC_ROUTE_AND_BOOTSTRAP_TRUST_READY_PENDING_FIRST_SIGNED_NOTARIZED_RELEASE', ) }) diff --git a/product-source/hololake-native-desktop/server/release-broadcast/README.md b/product-source/hololake-native-desktop/server/release-broadcast/README.md index f3465931e..1f2657fe8 100644 --- a/product-source/hololake-native-desktop/server/release-broadcast/README.md +++ b/product-source/hololake-native-desktop/server/release-broadcast/README.md @@ -11,20 +11,20 @@ receipt form one exact evidence chain. Invalid evidence locks the whole release endpoint until an operator fixes the evidence and explicitly restarts the service. -The service listens only on `127.0.0.1`. Public HTTPS routing, updater trust-key -provisioning, artifact upload, activation, and desktop rollout are independent -deployment gates. +The service listens only on `127.0.0.1`. The public HTTPS path is carried by a +dedicated, port-forwarding-only identity from JD-FD-PRIMARY to BS-GZ-006 and +currently returns the origin's empty fail-closed `204` response. Artifact +upload, activation, and desktop rollout remain independent deployment gates. The registered public namespace is `/hololake/releases`. The loopback origin accepts the manifest at both its operator health-check path `/latest.json` and the public updater path `/hololake/releases/latest.json`; release package URLs must remain under that same public prefix. The front-door proxy must therefore -preserve the full request URI. Its loopback tunnel port remains deliberately -unassigned until the BS-GZ-006 route owner returns the live, non-conflicting -topology. +preserve the full request URI. The registered BS-GZ-006 loopback tunnel port is +`19440`; it is not a public listener. -Once that port is returned and independently verified, `render-front-door.mjs ---loopback-port PORT` renders the bounded Nginx location. It refuses an omitted +`render-front-door.mjs --loopback-port PORT` renders the bounded Nginx +location. It refuses an omitted port, preserves the full public request path by leaving `proxy_pass` without a URI suffix, accepts only GET and HEAD, forwards no request body, and strips authorization, cookies, and client forwarding headers. Rendering is not diff --git a/product-source/hololake-native-desktop/server/release-broadcast/public-route.json b/product-source/hololake-native-desktop/server/release-broadcast/public-route.json index f21dcbbe6..ec81f6a5b 100644 --- a/product-source/hololake-native-desktop/server/release-broadcast/public-route.json +++ b/product-source/hololake-native-desktop/server/release-broadcast/public-route.json @@ -1,13 +1,13 @@ { "schema": "hololake.release-public-route/v1", - "state": "REGISTERED_PENDING_FRONT_DOOR_DEPLOYMENT", + "state": "DEPLOYED_EMPTY_FAIL_CLOSED", "publicBaseUrl": "https://guanghulab.com/hololake/releases", "releaseEndpoint": "https://guanghulab.com/hololake/releases/latest.json", "publicPathPrefix": "/hololake/releases", "originNode": "JD-FD-PRIMARY", "originListener": "127.0.0.1:3940", "frontDoorNode": "BS-GZ-006", - "frontDoorLoopbackPort": null, + "frontDoorLoopbackPort": 19440, "proxyRequestUriPolicy": "PRESERVE_FULL_PUBLIC_PATH", "allowedMethods": ["GET", "HEAD"], "requestBodyAllowed": false, @@ -15,5 +15,5 @@ "packageCachePolicy": "PUBLIC_IMMUTABLE", "automaticUpload": false, "automaticActivation": false, - "deployed": false + "deployed": true }