diff --git a/product-source/hololake-platform/docs/adr/0180-authenticated-native-public-projection-before-boot-cutover.md b/product-source/hololake-platform/docs/adr/0180-authenticated-native-public-projection-before-boot-cutover.md index 2b440fe..a1d0bac 100644 --- a/product-source/hololake-platform/docs/adr/0180-authenticated-native-public-projection-before-boot-cutover.md +++ b/product-source/hololake-platform/docs/adr/0180-authenticated-native-public-projection-before-boot-cutover.md @@ -46,5 +46,6 @@ JD 启动、磁盘或默认启动项。只有接收端、认证投影器、真 ## 当前结论 -协议源码和隔离整链测试为 100。BS-GZ 接收端部署、BS-SG 认证投影器部署、真实原生新鲜度、 -nginx 切换、原生公网等价、完整 Forgejo 等价和生产启动切换均保持 0。 +协议源码、隔离整链测试、BS-GZ 回环影子接收端和 BS-SG 认证投影器均为 100;合成 READY +完成精确只读回读后已恢复 DORMANT。真实原生新鲜度、nginx 切换、原生公网等价、完整 +Forgejo 等价和生产启动切换仍保持 0。 diff --git a/product-source/hololake-platform/guanghu-os/deployments/BS-GZ-006/NATIVE-PUBLIC-PROJECTION-SHADOW-RECEIPT-20260815.hldp b/product-source/hololake-platform/guanghu-os/deployments/BS-GZ-006/NATIVE-PUBLIC-PROJECTION-SHADOW-RECEIPT-20260815.hldp new file mode 100644 index 0000000..0598fb7 --- /dev/null +++ b/product-source/hololake-platform/guanghu-os/deployments/BS-GZ-006/NATIVE-PUBLIC-PROJECTION-SHADOW-RECEIPT-20260815.hldp @@ -0,0 +1,25 @@ +schema: guanghu.repository-projected-server-receipt/v1 +receipt_id: GHOS-BS-GZ-006-NATIVE-PROJECTION-SHADOW-20260815-001 +observed_at: 2026-08-15T20:16:32+08:00 +node_id: BS-GZ-006 +instance_id: b2ecf109-1999-4643-b223-e67e24d7667d +source_commit: 2e076c4d5ea75da55abecfd9d021fa4d1709705e +source_tree: c631bed8b042e718f4cbeb5b409446613a48687d +server_receipt: /var/lib/guanghu-os/receipts/BS-GZ-006-NATIVE-PROJECTION-SHADOW-RECEIPT.hldp +server_receipt_sha256: d3c22066ef5ad1880d4724df8bc1e8e99c1a6cf4ad5e35b662ccb3522e40a7bb +result: PASS_100_SHADOW_ONLY +listener: 127.0.0.1:19223 +external_listener: false +synthetic_ready_exact_readback: 100 +post_test_state: DORMANT +nginx_changed: false +current_public_anchor_http: 200 +current_public_code_http: 200 +bs_gz_shadow_receiver_deployed: 100 +bs_sg_authenticated_projector_deployed: 100 +live_native_freshness_readback: 0 +nginx_public_route_switched: 0 +public_native_anchor_equivalence: 0 +public_native_code_channel_equivalence: 0 +full_forgejo_equivalence: 0 +production_native_cutover: 0 diff --git a/product-source/hololake-platform/guanghu-os/deployments/BS-SG-003/NATIVE-PUBLIC-PROJECTION-RELAY-RECEIPT-20260815.hldp b/product-source/hololake-platform/guanghu-os/deployments/BS-SG-003/NATIVE-PUBLIC-PROJECTION-RELAY-RECEIPT-20260815.hldp new file mode 100644 index 0000000..6e4c876 --- /dev/null +++ b/product-source/hololake-platform/guanghu-os/deployments/BS-SG-003/NATIVE-PUBLIC-PROJECTION-RELAY-RECEIPT-20260815.hldp @@ -0,0 +1,26 @@ +schema: guanghu.repository-projected-server-receipt/v1 +receipt_id: GHOS-BS-SG-003-NATIVE-PROJECTION-RELAY-20260815-001 +observed_at: 2026-08-15T20:16:37+08:00 +node_id: BS-SG-003 +instance_id: 7a500f2d-9aed-4b93-b3b8-59c87c65d031 +source_commit: 2e076c4d5ea75da55abecfd9d021fa4d1709705e +source_tree: c631bed8b042e718f4cbeb5b409446613a48687d +server_receipt: /var/lib/guanghu-os/BS-SG-003-NATIVE-PROJECTION-RELAY-RECEIPT.hldp +server_receipt_sha256: e567ec9a776641bbde61b078a9c69c5988e105e91a3346394e0fdf409965d387 +result: PASS_100_AUTHENTICATED_PROJECTOR_DORMANT +relay_key_fingerprint: SHA256:g9GHrN0h0ih48hWkjJbY5N2f/gmfTQxSEcSdnrWuAzM +front_door_host_fingerprint: SHA256:P2EtuYFg8hptha4s0auP4yzp+Wg+H27bw4mdqzk1Cvk +existing_native_icmp_relay_active: true +new_projection_timer_active: true +last_projected_action: dormant +relay_receipt_status: RECOVERY_CAPABILITY_SENT +relay_receipt_mtime: 2026-08-07T06:21:00.386588868+08:00 +existing_native_icmp_relay_changed: false +bs_gz_shadow_receiver_deployed: 100 +bs_sg_authenticated_projector_deployed: 100 +live_native_freshness_readback: 0 +nginx_public_route_switched: 0 +public_native_anchor_equivalence: 0 +public_native_code_channel_equivalence: 0 +full_forgejo_equivalence: 0 +production_native_cutover: 0 diff --git a/product-source/hololake-platform/guanghu-os/standards/jd-native-public-projection-contract.json b/product-source/hololake-platform/guanghu-os/standards/jd-native-public-projection-contract.json index 435e4e4..86a212c 100644 --- a/product-source/hololake-platform/guanghu-os/standards/jd-native-public-projection-contract.json +++ b/product-source/hololake-platform/guanghu-os/standards/jd-native-public-projection-contract.json @@ -1,7 +1,7 @@ { "schema": "guanghu.jd-native-public-projection-contract/v1", "contract_id": "GHOS-JD-NATIVE-PUBLIC-PROJECTION-001", - "state": "SOURCE_AND_ISOLATED_TEST_ONLY", + "state": "AUTHENTICATED_SHADOW_DEPLOYED_DORMANT", "causal_route": [ "JD-FD-PRIMARY", "BS-SG-003", @@ -68,8 +68,8 @@ "acceptance_gates": { "contract_source": 100, "isolated_end_to_end_test": 100, - "bs_gz_shadow_receiver_deployed": 0, - "bs_sg_authenticated_projector_deployed": 0, + "bs_gz_shadow_receiver_deployed": 100, + "bs_sg_authenticated_projector_deployed": 100, "live_native_freshness_readback": 0, "nginx_public_route_switched": 0, "public_native_anchor_equivalence": 0, diff --git a/routing/guanghu-os-control-architecture.json b/routing/guanghu-os-control-architecture.json index 67b1d75..b9f8583 100644 --- a/routing/guanghu-os-control-architecture.json +++ b/routing/guanghu-os-control-architecture.json @@ -1,7 +1,7 @@ { "schema": "guanghu.os-control-architecture/v1", "record_id": "HLP-GUANGHU-OS-CONTROL-001", - "version": "2026-08-15.6", + "version": "2026-08-15.7", "state": "CURRENT_CANONICAL", "final_topology": "GUANGHU_MASTER_WITH_ON_DEMAND_LINUX_SUBCONTROL_AND_RESCUE", "control_ownership": { @@ -39,7 +39,7 @@ "linux_on_demand_subcontrol": 0, "linux_rescue_preserved": 100, "final_guanghu_os_master": 0, - "next_engineering_gate": "DEPLOY_AND_VERIFY_BS_GZ_006_LOOPBACK_SHADOW_RECEIVER_WITHOUT_NGINX_OR_BOOT_CHANGES" + "next_engineering_gate": "DESIGN_AND_TEST_FAIL_CLOSED_LINUX_FALLBACK_BEFORE_ANY_NGINX_ROUTE_SWITCH_OR_NATIVE_BOOT" }, "implementation": { "guanghu_supervisor_lifecycle_contract_source": 100, @@ -56,8 +56,8 @@ "jd_physical_host_isolated_qemu_capability": 100, "native_public_projection_contract_source": 100, "native_public_projection_isolated_end_to_end_test": 100, - "bs_gz_shadow_projection_receiver": 0, - "bs_sg_authenticated_projection_sender": 0, + "bs_gz_shadow_projection_receiver": 100, + "bs_sg_authenticated_projection_sender": 100, "live_native_projection_freshness": 0, "nginx_native_projection_route_switch": 0, "public_native_anchor_equivalence": 0, @@ -84,6 +84,18 @@ "native_physical_residency": 0, "public_native_service_equivalence": 0 }, + "native_public_projection_shadow_evidence": { + "source_commit": "2e076c4d5ea75da55abecfd9d021fa4d1709705e", + "source_tree": "c631bed8b042e718f4cbeb5b409446613a48687d", + "bs_gz_server_receipt": "/var/lib/guanghu-os/receipts/BS-GZ-006-NATIVE-PROJECTION-SHADOW-RECEIPT.hldp", + "bs_gz_server_receipt_sha256": "d3c22066ef5ad1880d4724df8bc1e8e99c1a6cf4ad5e35b662ccb3522e40a7bb", + "bs_sg_server_receipt": "/var/lib/guanghu-os/BS-SG-003-NATIVE-PROJECTION-RELAY-RECEIPT.hldp", + "bs_sg_server_receipt_sha256": "e567ec9a776641bbde61b078a9c69c5988e105e91a3346394e0fdf409965d387", + "synthetic_ready_shadow_readback": 100, + "post_test_state": "DORMANT", + "live_native_freshness_readback": 0, + "nginx_public_route_switched": 0 + }, "historical_evidence_policy": { "bare_metal_gosk_ghal_receipts_remain_valid_for_observed_capabilities": true, "historical_linux_free_completion_formula_is_current": false, diff --git a/routing/guanghu-os-control-architecture.test.mjs b/routing/guanghu-os-control-architecture.test.mjs index a025d27..0a6fb48 100644 --- a/routing/guanghu-os-control-architecture.test.mjs +++ b/routing/guanghu-os-control-architecture.test.mjs @@ -38,7 +38,7 @@ test("current JD state stays transitional and cannot impersonate final master co }); test("the physical shadow and host QEMU cycles are registered without impersonating Guanghu-owned boot control", () => { - assert.equal(contract.version, "2026-08-15.6"); + assert.equal(contract.version, "2026-08-15.7"); assert.equal(contract.implementation.guanghu_supervisor_lifecycle_contract_source, 100); assert.equal(contract.implementation.target_readback_and_mandatory_reclaim_state_machine, 100); assert.equal(contract.implementation.declared_supervisor_core_line_and_function_coverage, 100); @@ -52,8 +52,8 @@ test("the physical shadow and host QEMU cycles are registered without impersonat assert.equal(contract.implementation.jd_physical_host_isolated_qemu_capability, 100); assert.equal(contract.implementation.native_public_projection_contract_source, 100); assert.equal(contract.implementation.native_public_projection_isolated_end_to_end_test, 100); - assert.equal(contract.implementation.bs_gz_shadow_projection_receiver, 0); - assert.equal(contract.implementation.bs_sg_authenticated_projection_sender, 0); + assert.equal(contract.implementation.bs_gz_shadow_projection_receiver, 100); + assert.equal(contract.implementation.bs_sg_authenticated_projection_sender, 100); assert.equal(contract.implementation.live_native_projection_freshness, 0); assert.equal(contract.implementation.nginx_native_projection_route_switch, 0); assert.equal(contract.implementation.public_native_anchor_equivalence, 0); @@ -66,6 +66,12 @@ test("the physical shadow and host QEMU cycles are registered without impersonat assert.equal(contract.native_service_qemu_evidence.native_physical_residency, 0); assert.equal(contract.native_service_qemu_evidence.public_native_service_equivalence, 0); assert.match(contract.native_service_qemu_evidence.server_receipt_sha256, /^[0-9a-f]{64}$/); + assert.equal(contract.native_public_projection_shadow_evidence.synthetic_ready_shadow_readback, 100); + assert.equal(contract.native_public_projection_shadow_evidence.post_test_state, "DORMANT"); + assert.equal(contract.native_public_projection_shadow_evidence.live_native_freshness_readback, 0); + assert.equal(contract.native_public_projection_shadow_evidence.nginx_public_route_switched, 0); + assert.match(contract.native_public_projection_shadow_evidence.bs_gz_server_receipt_sha256, /^[0-9a-f]{64}$/); + assert.match(contract.native_public_projection_shadow_evidence.bs_sg_server_receipt_sha256, /^[0-9a-f]{64}$/); }); test("native public projection separates liveness, authenticated state, and pinned public bytes", () => { @@ -78,8 +84,8 @@ test("native public projection separates liveness, authenticated state, and pinn assert.equal(projectionContract.front_door_projection.nginx_route_switch_authorized, false); assert.equal(projectionContract.acceptance_gates.contract_source, 100); assert.equal(projectionContract.acceptance_gates.isolated_end_to_end_test, 100); - assert.equal(projectionContract.acceptance_gates.bs_gz_shadow_receiver_deployed, 0); - assert.equal(projectionContract.acceptance_gates.bs_sg_authenticated_projector_deployed, 0); + assert.equal(projectionContract.acceptance_gates.bs_gz_shadow_receiver_deployed, 100); + assert.equal(projectionContract.acceptance_gates.bs_sg_authenticated_projector_deployed, 100); assert.equal(projectionContract.acceptance_gates.live_native_freshness_readback, 0); assert.equal(projectionContract.acceptance_gates.nginx_public_route_switched, 0); assert.equal(projectionContract.acceptance_gates.public_native_anchor_equivalence, 0);