diff --git a/product-source/hololake-native-desktop/audit/donor-audit.json b/product-source/hololake-native-desktop/audit/donor-audit.json new file mode 100644 index 0000000..9ca6949 --- /dev/null +++ b/product-source/hololake-native-desktop/audit/donor-audit.json @@ -0,0 +1,73 @@ +{ + "schema": "hololake.donor-audit/v1", + "record_id": "HLP-DONOR-AUDIT-001", + "development_id": "DEV-20260811-010", + "audited_source_commit": "cff488bb033051909ae078991787e0c272a2d5eb", + "state": "BASELINE_RECORDED_SECURITY_PARTIAL_LICENSE_AND_DATA_GATES_ACTIVE", + "truth_boundary": "This record permits capability and behavior extraction only. It does not authorize donor source copying, donor deletion, data migration, product UI implementation, release, or deployment.", + "donors": [ + { + "path": "../hololake-platform", + "role": "READ_ONLY_ENGINEERING_CAPABILITY_DONOR", + "source_license": "AGPL-3.0-or-later", + "declared_authors": ["Luca Rossi"], + "code_reuse": "BLOCKED_PENDING_FILE_PROVENANCE_AND_PRODUCT_LICENSE_DECISION", + "security_scan": "NOT_COMPLETE" + }, + { + "path": "../hololake-desktop", + "role": "READ_ONLY_KNOWLEDGE_UX_AND_BEHAVIOR_DONOR", + "source_license": "UNDECLARED_NO_LICENSE_FILE_OR_PACKAGE_FIELD_FOUND", + "code_reuse": "BLOCKED_PENDING_OWNERSHIP_AND_FILE_PROVENANCE", + "security_scan": "COMPLETE_AT_AUDITED_COMMIT", + "security_scan_id": "b7cae66e-20bb-4110-be9a-205600ed2f39" + }, + { + "path": "../guanghu-knowledge-base", + "role": "READ_ONLY_KNOWLEDGE_UX_BEHAVIOR_AND_DATA_DONOR", + "source_license": "UNDECLARED_NO_LICENSE_FILE_OR_PACKAGE_FIELD_FOUND", + "code_reuse": "BLOCKED_PENDING_OWNERSHIP_AND_FILE_PROVENANCE", + "security_scan": "COMPLETE_AT_AUDITED_COMMIT", + "security_scan_id": "944b7cb0-fd2b-4310-889f-42062124e155" + } + ], + "capability_dispositions": [ + {"capability":"PAGE_FOLDER_TREE_AND_READING_HIERARCHY","disposition":"KEEP_UX_REFERENCE","target":"CLEAN_ROOM_NATIVE_IMPLEMENTATION"}, + {"capability":"MARKDOWN_IMPORT_EXPORT_AND_DURABILITY","disposition":"KEEP_CONTRACT","target":"COLLISION_SAFE_SYMLINK_SAFE_MIGRATION"}, + {"capability":"RICH_BLOCKS_TABLE_CODE_MATH_DIAGRAM_WHITEBOARD_SHEET","disposition":"INVESTIGATE","target":"DEPENDENCY_LICENSE_SECURITY_AND_WEBVIEW_PARITY_GATES"}, + {"capability":"PROPERTIES_FILTER_SORT_AND_DATABASE_VIEWS","disposition":"REDESIGN","target":"HUMAN_FIRST_KNOWLEDGE_SURFACE"}, + {"capability":"SEARCH_BACKLINKS_WIKILINKS_AND_ATTACHMENTS","disposition":"KEEP_CONTRACT","target":"LOCAL_FIRST_BOUNDED_GRAPH"}, + {"capability":"GIT_VERSION_DIFF_RECOVERY_AND_RECEIPTS","disposition":"KEEP_CONTRACT","target":"AUTHENTICATED_EVIDENCE_LAYER_WITH_VALIDATED_PATHS_REVISIONS_AND_REMOTES"}, + {"capability":"AGENT_CHAT_AND_CONFIRMATION","disposition":"REPLACE","target":"AGE_PARTNERSHIP_WITH_AUTHENTICATED_HUMAN_EXACT_IMMUTABLE_PAYLOAD_CONFIRMATION"}, + {"capability":"WORLD_DOMAIN_IDENTITY_AND_NODE_SURFACES","disposition":"REDESIGN","target":"CURRENT_HOLOLAKE_ARCHITECTURE_NOT_DONOR_NAVIGATION"}, + {"capability":"UPSTREAM_AND_DONOR_UPDATERS","disposition":"RETIRE","target":"HOLOLAKE_SIGNED_HUMAN_OPT_IN_UPDATE_TRUST_ROOT"}, + {"capability":"DEFAULT_TELEMETRY_AND_ERROR_REPORTING","disposition":"INVESTIGATE","target":"OFF_BY_DEFAULT_UNTIL_EXPLICIT_HUMAN_CONSENT_AND_DATA_CONTRACT"} + ], + "data_classes": [ + {"class":"KNOWLEDGE_CONTENT_AND_ATTACHMENTS","observed_locations":["Electron userData/data/knowledge-base","knowledge-base KB_REPO_PATH or kb-data","legacy user-selected vault paths"],"sensitivity":"HUMAN_OWNED_PRIVATE_BY_DEFAULT","migration":"BACKUP_INVENTORY_HASH_AND_REVERSIBLE_REHEARSAL_REQUIRED"}, + {"class":"GIT_HISTORY_REMOTES_CHANNEL_STATE_AND_RECEIPTS","observed_locations":["knowledge repository .git","knowledge repository .hololake/channel-state.json","knowledge repository .hololake/receipts"],"sensitivity":"PROVENANCE_AUTHORITY_AND_NETWORK_SENSITIVE","migration":"SEPARATE_CONTENT_HISTORY_REMOTE_AUTHORITY_AND_RECEIPT_DECISIONS"}, + {"class":"AGE_CONVERSATIONS_AND_PENDING_ACTIONS","observed_locations":["Electron userData/agent-conversations.json","knowledge-base HOLOLAKE_AGENT_STATE_PATH"],"sensitivity":"RELATIONSHIP_AND_ACTION_AUTHORITY_SENSITIVE","migration":"NO_BLIND_IMPORT_PENDING_ACTIONS_REQUIRE_EXPIRY_OWNERSHIP_AND_RECONFIRMATION"}, + {"class":"MODEL_AND_SERVER_CREDENTIALS","observed_locations":["Electron userData/model-config.json","Electron userData/server-auth.json","Electron userData/node-keystore.json","Electron userData/hololake-git-askpass.sh"],"sensitivity":"SECRET_CRITICAL","migration":"NEVER_COPY_AS_PLAIN_DATA_REAUTHORIZE_PER_DESTINATION_AND_STORE_IN_OS_CREDENTIAL_VAULT"}, + {"class":"SERVER_PROFILES_AND_UI_PREFERENCES","observed_locations":["Electron userData/server-profiles.json","browser localStorage hololake.layout.* and hololake.human-preferences.v1"],"sensitivity":"PERSONAL_CONFIGURATION","migration":"SCHEMA_VALIDATE_AND_ALLOW_HUMAN_RESET"}, + {"class":"LEGACY_VAULT_TOOL_CONFIGURATION","observed_locations":["user-selected vaults","vault .agents/mcp_config.json","external MCP client configuration files"],"sensitivity":"EXECUTION_BOUNDARY_SENSITIVE","migration":"DO_NOT_MUTATE_OR_IMPORT_UNTIL_TOOL_AUTHORITY_AUDIT_COMPLETES"} + ], + "prohibited_transplants": [ + "ELECTRON_PRIVILEGED_PRELOAD_WITHOUT_NAVIGATION_AND_SENDER_ORIGIN_LOCK", + "UNAUTHENTICATED_LOOPBACK_CONTROL_API_OR_NULL_ORIGIN_CORS", + "STORED_MODEL_KEY_REBOUND_TO_RENDERER_SELECTED_BASE_URL", + "FIXED_PORT_TUNNEL_READINESS_INFERENCE", + "PERSISTENT_ALL_SCOPE_TOKEN_WITHOUT_REVOCATION", + "LEXICAL_ONLY_PATH_CONTAINMENT_OR_UNVALIDATED_GIT_REVISION_REMOTE", + "UPSTREAM_OR_DONOR_UPDATE_ENDPOINTS", + "DONOR_SOURCE_WITHOUT_FILE_PROVENANCE_AND_LICENSE_AUTHORIZATION" + ], + "open_gates": [ + "LEGACY_TAURI_SECURITY_SCAN", + "DIRECT_AND_TRANSITIVE_DEPENDENCY_LICENSE_SBOM", + "FILE_LEVEL_PROVENANCE", + "PHYSICAL_USER_DATA_INVENTORY_AND_BACKUP", + "REVERSIBLE_DATA_MIGRATION_REHEARSAL", + "VISUAL_DIRECTION_SELECTION" + ], + "complete": false +} diff --git a/product-source/hololake-native-desktop/foundation.json b/product-source/hololake-native-desktop/foundation.json index c1f348e..426f3b1 100644 --- a/product-source/hololake-native-desktop/foundation.json +++ b/product-source/hololake-native-desktop/foundation.json @@ -1,7 +1,7 @@ { "schema": "hololake.native-desktop-foundation/v1", "record_id": "HLP-NATIVE-DESKTOP-FOUNDATION-001", - "state": "MINIMAL_TAURI_SCAFFOLD_AND_FAIL_CLOSED_UPDATE_TRUST_ROOT_IMPLEMENTED", + "state": "MINIMAL_TAURI_SCAFFOLD_UPDATE_TRUST_ROOT_AND_DONOR_AUDIT_BASELINE_IMPLEMENTED", "canonical_shell": "TAURI_V2_RUST_REACT", "product_ui_implementation_started": false, "selected_visual_direction_present": false, @@ -15,6 +15,9 @@ "human_opt_in_download_install_required": true, "automatic_restart_allowed": false, "private_signing_material_allowed_in_source": false, + "donor_audit_record": "audit/donor-audit.json", + "donor_audit_complete": false, + "donor_source_copying_allowed": false, "donors": [ { "path": "../hololake-platform", diff --git a/product-source/hololake-native-desktop/scripts/donor-audit.test.mjs b/product-source/hololake-native-desktop/scripts/donor-audit.test.mjs new file mode 100644 index 0000000..3e38d31 --- /dev/null +++ b/product-source/hololake-native-desktop/scripts/donor-audit.test.mjs @@ -0,0 +1,30 @@ +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 audit = JSON.parse(fs.readFileSync(path.join(root, 'audit/donor-audit.json'), 'utf8')) + +test('all donors remain read-only and source copying stays blocked', () => { + assert.equal(audit.complete, false) + assert.equal(audit.donors.length, 3) + for (const donor of audit.donors) { + assert.match(donor.role, /^READ_ONLY_/) + assert.match(donor.code_reuse, /^BLOCKED_/) + } +}) + +test('audit preserves security and secret migration prohibitions', () => { + assert.ok(audit.prohibited_transplants.includes('UNAUTHENTICATED_LOOPBACK_CONTROL_API_OR_NULL_ORIGIN_CORS')) + assert.ok(audit.prohibited_transplants.includes('ELECTRON_PRIVILEGED_PRELOAD_WITHOUT_NAVIGATION_AND_SENDER_ORIGIN_LOCK')) + const secretData = audit.data_classes.find((entry) => entry.class === 'MODEL_AND_SERVER_CREDENTIALS') + assert.match(secretData.migration, /NEVER_COPY_AS_PLAIN_DATA/) +}) + +test('visual implementation cannot start while audit gates remain open', () => { + assert.ok(audit.open_gates.includes('VISUAL_DIRECTION_SELECTION')) + assert.ok(audit.open_gates.includes('LEGACY_TAURI_SECURITY_SCAN')) + assert.ok(audit.open_gates.includes('REVERSIBLE_DATA_MIGRATION_REHEARSAL')) +}) diff --git a/routing/hololake-canonical-desktop-shell.json b/routing/hololake-canonical-desktop-shell.json index a83e33c..9e2263e 100644 --- a/routing/hololake-canonical-desktop-shell.json +++ b/routing/hololake-canonical-desktop-shell.json @@ -1,13 +1,13 @@ { "schema": "hololake.canonical-desktop-shell/v2", "record_id": "HLP-CANONICAL-DESKTOP-SHELL-001", - "version": "2026-08-12.2", - "state": "CURRENT_CANONICAL_MINIMAL_TAURI_SCAFFOLD_AND_FAIL_CLOSED_UPDATE_TRUST_ROOT_IMPLEMENTED", + "version": "2026-08-12.3", + "state": "CURRENT_CANONICAL_NATIVE_TAURI_FOUNDATION_WITH_UPDATE_TRUST_ROOT_AND_PARTIAL_DONOR_AUDIT", "development_id": "DEV-20260811-010", "decision": { "canonical_shell": "TAURI_V2_RUST_REACT", "canonical_source": "product-source/hololake-native-desktop", - "canonical_source_state": "MINIMAL_TAURI_SCAFFOLD_AND_FAIL_CLOSED_UPDATE_TRUST_ROOT_IMPLEMENTED", + "canonical_source_state": "MINIMAL_TAURI_SCAFFOLD_UPDATE_TRUST_ROOT_AND_DONOR_AUDIT_BASELINE_IMPLEMENTED", "existing_tauri_source": "product-source/hololake-platform", "existing_tauri_role": "READ_ONLY_ENGINEERING_CAPABILITY_DONOR_AND_ACCEPTANCE_ORACLE", "electron_role": "READ_ONLY_KNOWLEDGE_UX_BEHAVIOR_DONOR_AND_ACCEPTANCE_ORACLE", @@ -82,6 +82,12 @@ "audit": { "first_live_ui_comparison_complete": true, "full_source_data_security_and_license_audit_complete": false, + "record": "product-source/hololake-native-desktop/audit/donor-audit.json", + "electron_shell_security_scan_complete": true, + "knowledge_core_security_scan_complete": true, + "legacy_tauri_security_scan_complete": false, + "file_provenance_and_dependency_license_audit_complete": false, + "physical_user_data_inventory_and_migration_rehearsal_complete": false, "allowed_outcomes": [ "KEEP_CONTRACT", "KEEP_UX_REFERENCE",