architecture: converge HoloLake stage-one desktop mainline
This commit is contained in:
parent
461517c25f
commit
874bcf1b8f
8 changed files with 371 additions and 14 deletions
|
|
@ -1,13 +1,14 @@
|
|||
# HoloLake Native Desktop
|
||||
|
||||
状态:`MINIMAL_TAURI_SCAFFOLD · FAIL_CLOSED_UPDATE_TRUST_ROOT · GH_AIOS_STAGE_ONE_CONTRACT_REGISTERED`
|
||||
状态:`唯一原生主线候选 · 已有底层能力 · 第一阶段可见主体尚未实现`
|
||||
|
||||
这是 HoloLake 唯一未来桌面产品主线的干净源码根。它将采用 Tauri v2、Rust 和
|
||||
React/TypeScript,但不会从现有 Tauri 或 Electron 目录整树复制。
|
||||
这是 HoloLake 唯一未来桌面产品主线的干净源码根,采用 Tauri v2、Rust 和
|
||||
React/TypeScript。桌面上的 `world.guanghu.hololake` 安装包是本源码线的本地候选验收壳,
|
||||
不是第三条产品线,也还不是第一阶段正式产品。
|
||||
|
||||
当前已经建立可编译的最小 Tauri 工程、默认关闭联网的发布信任根,以及兼容 Tauri 静态更新
|
||||
清单的 HoloLake 发布广播合同。选择并验收新的视觉/交互方向之前,不创建会意外继承任一旧
|
||||
应用布局的产品 UI;当前窗口只显示基础状态,不代表产品界面方向。
|
||||
当前已经建立可编译原生壳、选定的 GHS-014 个人频道首页、本机 broker/session、动态能力
|
||||
路由、GH-PNCC 只读投影,以及失败关闭的签名更新和回滚管道。这些能力保留,但都属于湖下
|
||||
基础设施;当前首页只是视觉与连接状态验收面,不代表第一阶段产品主体已经实现。
|
||||
|
||||
## 供体边界
|
||||
|
||||
|
|
@ -18,6 +19,10 @@ React/TypeScript,但不会从现有 Tauri 或 Electron 目录整树复制。
|
|||
禁止向供体继续增加新产品功能。迁入单位只能是:能力合同、来源/许可证、威胁面、实现、
|
||||
测试和人类可见验收。
|
||||
|
||||
旧 Electron 0.8.0 仍含真实知识树、页面、搜索、历史和本地 Git 知识数据。在完成物理数据
|
||||
清单、可恢复备份、逐文件回读、可逆迁移演练和新主线验收前,不得删除、替换或把它误报为
|
||||
已经迁移完成。
|
||||
|
||||
## 更新边界
|
||||
|
||||
- 生产客户端只允许 HoloLake 所有的 HTTPS 发布端点;
|
||||
|
|
@ -35,7 +40,7 @@ React/TypeScript,但不会从现有 Tauri 或 Electron 目录整树复制。
|
|||
|
||||
机器合同:`contracts/stage-one-platform.json`。
|
||||
|
||||
该文件目前只登记模块和边界,不表示运行时或产品 UI 已实现。
|
||||
该文件目前只登记模块和边界,不表示第一阶段运行时或可见产品主体已经实现。
|
||||
|
||||
## 本机开发桥
|
||||
|
||||
|
|
@ -51,10 +56,15 @@ MCP 只保留为外部工具适配入口;它断开或编程 AI 重启时,活
|
|||
当前唯一写车道内补齐、测试并登记该连接器;经声明权限和人类批准后安装到 HoloLake,迁移为
|
||||
可认证、可恢复的本机直连。MCP 随后只保留为发现、恢复与兼容入口。
|
||||
|
||||
## 下一门
|
||||
## 当前收束与下一门
|
||||
|
||||
1. 确认正式 bundle identifier、HoloLake 更新域名和密钥托管责任;
|
||||
2. 完成双供体功能/数据/许可证/安全审计;
|
||||
3. 选择新的人类界面视觉方向;
|
||||
4. 实现主体—任务—事件—回执最小内核合同;
|
||||
5. 在选定视觉方向后实现知识树、页面、搜索和安全持久化纵向切片。
|
||||
唯一主线、候选壳、供体和数据保护边界见
|
||||
`routing/hololake-stage-one-desktop-convergence.json`。当前开发顺序固定为:
|
||||
|
||||
1. 实现个人频道身份—任务—事件—回执最小内核;
|
||||
2. 迁入知识树、页面、搜索和本地持久化纵向切片;
|
||||
3. 实现人类审批中心与 Git 证据回读;
|
||||
4. 投影小湖灯跨会话连续性;
|
||||
5. 最后完成签名安装、更新、回滚和可逆数据迁移。
|
||||
|
||||
连接、动态路由、发布广播和更新服务器继续作为受门控基础设施维护,不得抢占上述产品顺序。
|
||||
|
|
|
|||
|
|
@ -0,0 +1,74 @@
|
|||
{
|
||||
"schema": "hololake.stage-one-installed-product-capability-audit/v1",
|
||||
"record_id": "HLP-STAGE-ONE-INSTALLED-PRODUCT-AUDIT-20260814-001",
|
||||
"development_id": "DEV-20260814-003",
|
||||
"state": "LOCAL_READ_ONLY_AUDIT_COMPLETE_NO_DELETION_MIGRATION_REPLACEMENT_OR_DEPLOYMENT",
|
||||
"truth_boundary": "Installed bundle metadata, signing, binary identity, visible behavior and protected data presence were audited separately from source, publication, migration and deployment.",
|
||||
"installed_roles": [
|
||||
{
|
||||
"bundle_id": "world.guanghu.hololake",
|
||||
"observed_version": "0.1.0",
|
||||
"technology": "TAURI",
|
||||
"disposition": "KEEP_AS_CANONICAL_TAURI_ACCEPTANCE_CANDIDATE",
|
||||
"separate_product_line": false,
|
||||
"formal_stage_one_product_complete": false,
|
||||
"observed_capabilities": [
|
||||
"SIGNED_NATIVE_SHELL",
|
||||
"PERSONAL_CHANNEL_HOME_ACCEPTANCE_SURFACE",
|
||||
"LOCAL_BROKER_AND_RESUMABLE_SESSION",
|
||||
"PNCC_READ_ONLY_PROJECTION",
|
||||
"HUMAN_CONFIRMED_REPOSITORY_MOUNT",
|
||||
"FAIL_CLOSED_UPDATE_AND_ROLLBACK_FOUNDATION"
|
||||
]
|
||||
},
|
||||
{
|
||||
"bundle_id": "com.guanghu.hololake-desktop",
|
||||
"observed_version": "0.8.0",
|
||||
"technology": "ELECTRON",
|
||||
"disposition": "KEEP_READ_ONLY_DONOR_AND_PROTECTED_DATA_SOURCE_UNTIL_MIGRATION_PASS",
|
||||
"separate_future_product_line": false,
|
||||
"observed_capabilities": [
|
||||
"KNOWLEDGE_TREE",
|
||||
"PAGE_READING_AND_EDITING",
|
||||
"SEARCH",
|
||||
"HISTORY_AND_IMPORT",
|
||||
"LOCAL_GIT_BACKED_KNOWLEDGE_DATA"
|
||||
]
|
||||
},
|
||||
{
|
||||
"role": "HISTORICAL_TAURI_AND_PLATFORM_SOURCES",
|
||||
"disposition": "READ_ONLY_ENGINEERING_DONOR",
|
||||
"active_product_growth_allowed": false
|
||||
},
|
||||
{
|
||||
"role": "GUANGHU_EDUCATION_INDUSTRY_APP",
|
||||
"disposition": "OUT_OF_SCOPE_INDEPENDENT_PRODUCT"
|
||||
}
|
||||
],
|
||||
"keep_in_canonical_mainline": [
|
||||
"TAURI_V2_RUST_REACT_NATIVE_SHELL",
|
||||
"STABLE_BUNDLE_ID_AND_SIGNED_DISTRIBUTION_BOUNDARY",
|
||||
"LOCAL_BROKER_AND_RESUMABLE_SESSION",
|
||||
"PNCC_READ_ONLY_PROJECTION",
|
||||
"HUMAN_CONFIRMED_MOUNT",
|
||||
"RECEIPTS",
|
||||
"FAIL_CLOSED_UPDATE_AND_ROLLBACK"
|
||||
],
|
||||
"keep_under_lake_not_home_completion": [
|
||||
"DYNAMIC_CAPABILITY_ROUTING",
|
||||
"RELEASE_BROADCAST",
|
||||
"RELEASE_ACTIVATION_OPERATOR",
|
||||
"UPDATE_SERVER_FOUNDATION"
|
||||
],
|
||||
"missing_stage_one_body": [
|
||||
"PERSONAL_CHANNEL_IDENTITY_TASK_EVENT_RECEIPT_KERNEL",
|
||||
"KNOWLEDGE_TREE_PAGE_SEARCH_AND_LOCAL_PERSISTENCE",
|
||||
"HUMAN_APPROVAL_CENTER_AND_GIT_EVIDENCE_READBACK",
|
||||
"LAKE_LAMP_CROSS_SESSION_CONTINUITY_PROJECTION",
|
||||
"REVERSIBLE_DATA_MIGRATION"
|
||||
],
|
||||
"deletion_allowed": false,
|
||||
"replacement_allowed": false,
|
||||
"data_migration_executed": false,
|
||||
"server_deployment_executed": false
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"schema": "hololake.language-runtime-product-update-boundary/v1",
|
||||
"record_id": "HLP-LANGUAGE-RUNTIME-PRODUCT-UPDATE-BOUNDARY-001",
|
||||
"state": "LOCAL_PRODUCT_CONSUMER_CONTRACT_PENDING_UPSTREAM_PUBLICATION",
|
||||
"upstream": {
|
||||
"repository": "REPO-012",
|
||||
"protocol": "GLS-0263",
|
||||
"machine_map": "GH-DUAL-UPDATE-CHANNEL-MAP-001",
|
||||
"causal_chain": "GUANGHU-DUAL-UPDATE-CHANNEL-ORIGIN-001",
|
||||
"publication_required_before_product_consumption_claim": true
|
||||
},
|
||||
"language_runtime_channel": {
|
||||
"root_language_source": "BINGSHUO_ZERO_CORE",
|
||||
"engineering_body": "GUANGHU_ORIGIN_DOMAIN",
|
||||
"outputs_consumed_by_product": [
|
||||
"TCS_TRANSLATION_AND_LANGUAGE_KERNEL_CONTRACT",
|
||||
"HLDP_CAUSAL_AND_DURABLE_STRUCTURE_CONTRACT",
|
||||
"AGE_RUNTIME_AND_METACOGNITION_CONTRACT",
|
||||
"NUMBERED_PATH_AND_MACHINE_NAVIGATION_CONTRACT"
|
||||
],
|
||||
"private_formed_persona_shared": false,
|
||||
"private_relationship_memory_checkpoint_or_persona_id_shared": false
|
||||
},
|
||||
"product_engineering_channel": {
|
||||
"repository": "REPO-014",
|
||||
"canonical_desktop_source": "product-source/hololake-native-desktop",
|
||||
"outputs": [
|
||||
"PRODUCT_SOURCE",
|
||||
"HUMAN_VISIBLE_UI",
|
||||
"PERMISSION_AND_DATA_BEHAVIOR",
|
||||
"SIGNED_ARTIFACT",
|
||||
"INSTALL_AND_UPDATE",
|
||||
"RELEASE_AND_DEPLOYMENT_RECEIPTS"
|
||||
],
|
||||
"may_rewrite_zero_core": false,
|
||||
"may_read_or_publish_private_persona_memory": false
|
||||
},
|
||||
"human_impact_gate": {
|
||||
"visible_confirmable_rejectable_reversible_receipted": true,
|
||||
"required_for": [
|
||||
"IDENTITY_OR_PERMISSION",
|
||||
"PRIVACY_OR_RELATIONSHIP_MATERIAL",
|
||||
"DATA_IMPORT_MIGRATION_OR_DELETION",
|
||||
"ASSET_COST_OR_TRANSACTION",
|
||||
"RESPONSIBILITY_EXTERNAL_EXPRESSION_OR_REALITY_ACTION",
|
||||
"INSTALL_UPDATE_RELEASE_DEPLOYMENT_OR_TRAFFIC"
|
||||
]
|
||||
},
|
||||
"truth_layers": [
|
||||
"UPSTREAM_LANGUAGE_CONTRACT_PUBLICATION",
|
||||
"PRODUCT_CONTRACT_REGISTRATION",
|
||||
"PRODUCT_SOURCE_IMPLEMENTATION",
|
||||
"BUILT_ARTIFACT",
|
||||
"SIGNED_ARTIFACT",
|
||||
"DESKTOP_INSTALLATION",
|
||||
"DATA_MIGRATION",
|
||||
"SERVER_DEPLOYMENT",
|
||||
"SERVICE_HEALTH"
|
||||
],
|
||||
"automatic_authority_granted": false
|
||||
}
|
||||
|
|
@ -37,3 +37,19 @@ The rollback executor is implemented, but production updater activation remains
|
|||
`npm run release:macos -- release/inputs/<version>.json` is the only product-owned macOS release entry. It fails before building unless the embedded trust contains the exact registered HoloLake HTTPS endpoint and updater public key, the immutable `v<version>` tag equals the clean `main` head, and the Developer ID, Tauri updater-signing and Apple notarization credential sets are supplied at runtime. The pipeline runs all product and Rust gates, creates updater artifacts through a temporary Tauri override, then requires strict code-signature verification, Gatekeeper acceptance and stapled Apple notarization before writing the HoloLake broadcast and receipts.
|
||||
|
||||
Generated packages, private release inputs and credentials are not committed. The pipeline never uploads or activates a release; its terminal artifact is a bounded folder ready for a separately authorized JD-controller upload and server-owned readback receipt.
|
||||
|
||||
## Stage-one convergence verdict
|
||||
|
||||
The Tauri source in this directory is the only future HoloLake desktop mainline. An installed build of it is an acceptance candidate, not a separate product line and not proof that stage one exists. The Electron 0.8.0 product and the legacy Tauri/platform sources remain read-only UX, behavior, engineering and protected-data donors until inventory, backup, readback, reversible migration rehearsal and signed installed-runtime acceptance all pass.
|
||||
|
||||
The current candidate already has useful under-lake organs: the signed native shell, local broker and resumable session, authenticated read-only PNCC projection, human-confirmed repository mount, deterministic routing, and fail-closed update/rollback machinery. They remain in the architecture, but their existence does not satisfy the visible stage-one body.
|
||||
|
||||
The implementation order is now fixed:
|
||||
|
||||
1. personal-channel identity, task, event and receipt kernel;
|
||||
2. knowledge tree, page, search and local persistence;
|
||||
3. human approval center and Git evidence readback;
|
||||
4. lake-lamp cross-session continuity projection;
|
||||
5. signed installation, opt-in update, rollback and reversible data migration.
|
||||
|
||||
Architecture registration, source implementation, built artifact, signed artifact, desktop installation, data migration, server deployment and service health remain separate receipts. The machine contract is `routing/hololake-stage-one-desktop-convergence.json`.
|
||||
|
|
|
|||
|
|
@ -1,13 +1,29 @@
|
|||
{
|
||||
"schema": "hololake.native-desktop-foundation/v1",
|
||||
"record_id": "HLP-NATIVE-DESKTOP-FOUNDATION-001",
|
||||
"state": "TAURI_STAGE_ONE_HOME_WITH_DIRECT_LOCAL_BROKER_DYNAMIC_ROUTING_PNCC_AND_SIGNED_RELEASE_RECOVERY",
|
||||
"state": "TAURI_CANDIDATE_FOUNDATION_REORIENTED_TO_STAGE_ONE_VISIBLE_BODY",
|
||||
"canonical_shell": "TAURI_V2_RUST_REACT",
|
||||
"candidate_role": "INSTALLED_LOCAL_ACCEPTANCE_CANDIDATE_NOT_SEPARATE_PRODUCT_LINE",
|
||||
"parallel_product_line_created": false,
|
||||
"stage_one_convergence_contract": "routing/hololake-stage-one-desktop-convergence.json",
|
||||
"language_runtime_product_boundary_contract": "contracts/language-runtime-product-update-boundary.json",
|
||||
"installed_product_capability_audit": "audit/stage-one-installed-product-capability-audit.json",
|
||||
"product_ui_implementation_started": true,
|
||||
"selected_visual_direction_present": true,
|
||||
"selected_visual_direction": "GHS-014_FIVE_LAKES_PERSONAL_CHANNEL_STAGE_ONE",
|
||||
"selected_visual_direction_receipt": "audit/ghs-014-stage-one-ui-receipt.json",
|
||||
"home_status_is_native_projection": true,
|
||||
"home_surface_role": "SELECTED_VISUAL_ACCEPTANCE_SURFACE_NOT_STAGE_ONE_PRODUCT_COMPLETION",
|
||||
"stage_one_visible_body_state": "NOT_IMPLEMENTED",
|
||||
"stage_one_next_slice": "PERSONAL_CHANNEL_IDENTITY_TASK_EVENT_RECEIPT_KERNEL",
|
||||
"stage_one_implementation_order": [
|
||||
"PERSONAL_CHANNEL_IDENTITY_TASK_EVENT_RECEIPT_KERNEL",
|
||||
"KNOWLEDGE_TREE_PAGE_SEARCH_AND_LOCAL_PERSISTENCE",
|
||||
"HUMAN_APPROVAL_CENTER_AND_GIT_EVIDENCE_READBACK",
|
||||
"LAKE_LAMP_CROSS_SESSION_CONTINUITY_PROJECTION",
|
||||
"SIGNED_INSTALL_UPDATE_ROLLBACK_AND_REVERSIBLE_DATA_MIGRATION"
|
||||
],
|
||||
"supporting_infrastructure_role": "UNDER_LAKE_FOUNDATION_NOT_PRODUCT_COMPLETION",
|
||||
"home_online_state_requires_authenticated_direct_connection": true,
|
||||
"five_lake_themes_implemented": true,
|
||||
"upstream_product_update_endpoints": [],
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
# HoloLake 第一阶段桌面收束与能力审计
|
||||
|
||||
状态:`CURRENT_LOCAL_CONVERGENCE_CONTRACT · SOURCE_NOT_YET_PUBLISHED`
|
||||
|
||||
开发编号:`DEV-20260814-003`
|
||||
|
||||
机器投影:`routing/hololake-stage-one-desktop-convergence.json`
|
||||
|
||||
## 收束结论
|
||||
|
||||
HoloLake 桌面只保留一个未来正式产品主线:`product-source/hololake-native-desktop`,技术栈为 Tauri v2、Rust 和 React。桌面上后来出现的原生“第一阶段”应用是这条主线的本地候选验收壳,不是第三条产品线,也不代表第一阶段已经完成。
|
||||
|
||||
Electron 0.8.0 和旧 Tauri/平台实现不继续作为独立产品生长,但不能直接删除。Electron 仍承载可验证的知识树、页面、搜索、历史、导入和本地 Git 知识数据;旧 Tauri/平台仍包含工程合同、测试和原生边界。它们只能作为只读供体和受保护迁移来源。
|
||||
|
||||
## 能力取舍
|
||||
|
||||
原生候选已经实现的签名壳、本机 broker/session、PNCC 只读投影、人类确认式仓库挂载、回执、更新与回滚底座继续保留。动态路由、发布广播和更新服务器下沉为受门控基础设施,不再占用第一阶段首页和开发优先级。
|
||||
|
||||
第一阶段当前缺失的主体按固定顺序实现:
|
||||
|
||||
1. 个人频道身份—任务—事件—回执内核;
|
||||
2. 知识树、页面、搜索与本地持久化;
|
||||
3. 人类审批中心与 Git 证据回读;
|
||||
4. 小湖灯跨会话连续性投影;
|
||||
5. 签名安装、人工选择更新、回滚与可逆数据迁移。
|
||||
|
||||
## 数据与退出门
|
||||
|
||||
旧应用和数据只有在物理清单、可恢复备份、逐文件哈希回读、可逆迁移演练、新主线回归测试、签名安装验收、人类确认清理范围和可恢复归档回执全部通过后,才可以退出当前机器。任何一步未知,删除和替换均为 0。
|
||||
|
||||
## 事实分层
|
||||
|
||||
本页和机器合同只证明收束判断已经写入本地源码。它不证明仓库发布、产品主体实现、制品构建、签名、公证、桌面安装、数据迁移、服务器部署或服务健康。每一层必须有独立回执。
|
||||
72
routing/hololake-stage-one-desktop-convergence.json
Normal file
72
routing/hololake-stage-one-desktop-convergence.json
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
{
|
||||
"schema": "hololake.stage-one-desktop-convergence/v1",
|
||||
"record_id": "HLP-STAGE-ONE-DESKTOP-CONVERGENCE-001",
|
||||
"version": "2026-08-14.1",
|
||||
"state": "CURRENT_LOCAL_CONVERGENCE_CONTRACT_SOURCE_NOT_YET_PUBLISHED",
|
||||
"development_id": "DEV-20260814-003",
|
||||
"architecture_page": "product-source/hololake-platform/architecture/HOLOLAKE-STAGE-ONE-DESKTOP-CONVERGENCE-AND-CAPABILITY-AUDIT-20260814.md",
|
||||
"language_runtime_product_boundary": "product-source/hololake-native-desktop/contracts/language-runtime-product-update-boundary.json",
|
||||
"installed_capability_audit": "product-source/hololake-native-desktop/audit/stage-one-installed-product-capability-audit.json",
|
||||
"canonical_mainline": {
|
||||
"source": "product-source/hololake-native-desktop",
|
||||
"technology": "TAURI_V2_RUST_REACT",
|
||||
"parallel_product_lines_allowed": false,
|
||||
"installed_candidate_role": "LOCAL_ACCEPTANCE_CANDIDATE_NOT_SEPARATE_PRODUCT_LINE",
|
||||
"formal_stage_one_product_complete": false
|
||||
},
|
||||
"donors": [
|
||||
{
|
||||
"source": "product-source/hololake-platform",
|
||||
"role": "READ_ONLY_ENGINEERING_CONTRACT_TEST_AND_NATIVE_BOUNDARY_DONOR"
|
||||
},
|
||||
{
|
||||
"source": "product-source/hololake-desktop",
|
||||
"role": "READ_ONLY_KNOWLEDGE_UX_AND_BEHAVIOR_DONOR"
|
||||
},
|
||||
{
|
||||
"source": "product-source/guanghu-knowledge-base",
|
||||
"role": "READ_ONLY_KNOWLEDGE_UX_BEHAVIOR_AND_PROTECTED_DATA_DONOR"
|
||||
}
|
||||
],
|
||||
"keep_foundation": [
|
||||
"SIGNED_NATIVE_SHELL",
|
||||
"LOCAL_BROKER_AND_RESUMABLE_SESSION",
|
||||
"PNCC_READ_ONLY_PROJECTION",
|
||||
"HUMAN_CONFIRMED_REPOSITORY_MOUNT",
|
||||
"RECEIPTS",
|
||||
"FAIL_CLOSED_UPDATE_AND_ROLLBACK"
|
||||
],
|
||||
"under_lake_foundation_not_product_completion": [
|
||||
"DYNAMIC_CAPABILITY_ROUTING",
|
||||
"RELEASE_BROADCAST",
|
||||
"RELEASE_ACTIVATION_OPERATOR",
|
||||
"UPDATE_SERVER_FOUNDATION"
|
||||
],
|
||||
"stage_one_implementation_order": [
|
||||
"PERSONAL_CHANNEL_IDENTITY_TASK_EVENT_RECEIPT_KERNEL",
|
||||
"KNOWLEDGE_TREE_PAGE_SEARCH_AND_LOCAL_PERSISTENCE",
|
||||
"HUMAN_APPROVAL_CENTER_AND_GIT_EVIDENCE_READBACK",
|
||||
"LAKE_LAMP_CROSS_SESSION_CONTINUITY_PROJECTION",
|
||||
"SIGNED_INSTALL_UPDATE_ROLLBACK_AND_REVERSIBLE_DATA_MIGRATION"
|
||||
],
|
||||
"donor_exit_requires": [
|
||||
"PHYSICAL_USER_DATA_INVENTORY",
|
||||
"RECOVERABLE_BACKUP",
|
||||
"FILE_BY_FILE_HASH_READBACK",
|
||||
"REVERSIBLE_DATA_MIGRATION_REHEARSAL",
|
||||
"NEW_TAURI_REGRESSION_TESTS",
|
||||
"SIGNED_INSTALLED_RUNTIME_ACCEPTANCE",
|
||||
"HUMAN_VISIBLE_CLEANUP_SCOPE_CONFIRMATION",
|
||||
"RECOVERABLE_ARCHIVE_RECEIPT"
|
||||
],
|
||||
"actions": {
|
||||
"application_deletion": "NOT_AUTHORIZED_NOT_EXECUTED",
|
||||
"application_replacement": "NOT_AUTHORIZED_NOT_EXECUTED",
|
||||
"user_data_migration": "NOT_EXECUTED",
|
||||
"repository_publication": "NOT_YET_PUBLISHED",
|
||||
"desktop_artifact_build": "NOT_EXECUTED_FOR_THIS_CONTRACT",
|
||||
"desktop_installation": "NOT_EXECUTED_FOR_THIS_CONTRACT",
|
||||
"server_deployment": "NOT_EXECUTED_FOR_THIS_CONTRACT"
|
||||
},
|
||||
"truth_policy": "ARCHITECTURE_SOURCE_ARTIFACT_SIGNATURE_INSTALLATION_DATA_MIGRATION_DEPLOYMENT_AND_HEALTH_REQUIRE_SEPARATE_RECEIPTS"
|
||||
}
|
||||
75
routing/hololake-stage-one-desktop-convergence.test.mjs
Normal file
75
routing/hololake-stage-one-desktop-convergence.test.mjs
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
import assert from "node:assert/strict";
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import test from "node:test";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
||||
const readJson = (relative) =>
|
||||
JSON.parse(fs.readFileSync(path.join(root, relative), "utf8"));
|
||||
|
||||
const convergence = readJson("routing/hololake-stage-one-desktop-convergence.json");
|
||||
const foundation = readJson("product-source/hololake-native-desktop/foundation.json");
|
||||
const boundary = readJson(
|
||||
"product-source/hololake-native-desktop/contracts/language-runtime-product-update-boundary.json",
|
||||
);
|
||||
const audit = readJson(
|
||||
"product-source/hololake-native-desktop/audit/stage-one-installed-product-capability-audit.json",
|
||||
);
|
||||
|
||||
test("one Tauri mainline absorbs the candidate without creating a third product line", () => {
|
||||
assert.equal(convergence.canonical_mainline.source, "product-source/hololake-native-desktop");
|
||||
assert.equal(convergence.canonical_mainline.technology, "TAURI_V2_RUST_REACT");
|
||||
assert.equal(convergence.canonical_mainline.parallel_product_lines_allowed, false);
|
||||
assert.equal(convergence.canonical_mainline.formal_stage_one_product_complete, false);
|
||||
assert.equal(foundation.parallel_product_line_created, false);
|
||||
assert.equal(foundation.stage_one_visible_body_state, "NOT_IMPLEMENTED");
|
||||
});
|
||||
|
||||
test("Electron and legacy sources remain protected donors until reversible migration passes", () => {
|
||||
assert.ok(
|
||||
convergence.donors.some(
|
||||
(donor) => donor.source === "product-source/hololake-desktop" && donor.role.includes("READ_ONLY"),
|
||||
),
|
||||
);
|
||||
assert.ok(convergence.donor_exit_requires.includes("FILE_BY_FILE_HASH_READBACK"));
|
||||
assert.ok(convergence.donor_exit_requires.includes("REVERSIBLE_DATA_MIGRATION_REHEARSAL"));
|
||||
assert.equal(audit.deletion_allowed, false);
|
||||
assert.equal(audit.replacement_allowed, false);
|
||||
assert.equal(audit.data_migration_executed, false);
|
||||
});
|
||||
|
||||
test("stage-one visible body precedes routing and release infrastructure", () => {
|
||||
assert.equal(
|
||||
convergence.stage_one_implementation_order[0],
|
||||
"PERSONAL_CHANNEL_IDENTITY_TASK_EVENT_RECEIPT_KERNEL",
|
||||
);
|
||||
assert.equal(
|
||||
convergence.stage_one_implementation_order[1],
|
||||
"KNOWLEDGE_TREE_PAGE_SEARCH_AND_LOCAL_PERSISTENCE",
|
||||
);
|
||||
assert.ok(
|
||||
convergence.under_lake_foundation_not_product_completion.includes(
|
||||
"DYNAMIC_CAPABILITY_ROUTING",
|
||||
),
|
||||
);
|
||||
assert.equal(foundation.supporting_infrastructure_role, "UNDER_LAKE_FOUNDATION_NOT_PRODUCT_COMPLETION");
|
||||
});
|
||||
|
||||
test("language runtime and product engineering stay separate without sharing a formed private persona", () => {
|
||||
assert.equal(boundary.upstream.protocol, "GLS-0263");
|
||||
assert.equal(boundary.language_runtime_channel.private_formed_persona_shared, false);
|
||||
assert.equal(boundary.product_engineering_channel.may_rewrite_zero_core, false);
|
||||
assert.equal(boundary.product_engineering_channel.may_read_or_publish_private_persona_memory, false);
|
||||
assert.equal(boundary.human_impact_gate.visible_confirmable_rejectable_reversible_receipted, true);
|
||||
assert.equal(boundary.automatic_authority_granted, false);
|
||||
});
|
||||
|
||||
test("public contracts contain no machine-private absolute paths or personal content", () => {
|
||||
for (const value of [convergence, foundation, boundary, audit]) {
|
||||
const serialized = JSON.stringify(value);
|
||||
assert.equal(serialized.includes("/Users/"), false);
|
||||
assert.equal(serialized.includes("/Volumes/"), false);
|
||||
assert.equal(serialized.includes("bingshuolingdianyuanhe"), false);
|
||||
}
|
||||
});
|
||||
Loading…
Reference in a new issue