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
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