Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a8fe571b5d | |||
| ef94ef462e | |||
| 1b6b17b5ab |
|
|
@ -47,8 +47,43 @@ React/TypeScript。桌面上的 `world.guanghu.hololake` 安装包是本源码
|
|||
|
||||
首个公开产品是 GH-AIOS 通用人工智能操作平台,首页同时承担五域统一入口。用户只提交光湖编号,不手工选择所属域;系统先在内部完成域路由和编号合法性校验,再开放对应域的登录界面。五域只共享入口协议,不共享注册表、登录服务或私有数据。
|
||||
|
||||
登录后的域内界面始终提供“返回主世界”,只返回五域公共首页并保留当前会话;“退出账号”是独立动作。用户从公共首页再次进入自己的所属域时,不重复进行编号或域凭证验证。
|
||||
|
||||
机器合同:`contracts/stage-one-platform.json`。
|
||||
|
||||
## 光湖分域行业装配
|
||||
|
||||
光湖分域是行业系统入口,现已接入第一份行业路由合同:`contracts/subdomain-industry-routing.json`。
|
||||
公共主世界点击“光湖分域”即可查看行业状态并进入教育行业初始化频道;浏览公共状态不等于取得
|
||||
任何私有频道数据或写入权限。光湖零域不承载行业入口。人的主体编号
|
||||
只负责身份,行业编号只负责系统路由,两者不互相改写。行业顺序与当前工程状态分别为:网文行业
|
||||
待开发、宠物行业待开发、教育行业开发中;开发优先级不改变行业顺序,也不允许客户端自行签发
|
||||
尚未登记的行业编号。
|
||||
|
||||
教育行业已经建立 `GH-EDU-INIT-001` 初始化频道,并装入五项 HoloLake 原生能力:
|
||||
`contracts/education-workspace.json` 定义的教育文档、教育表格数据、数据整理、人工确认自动化与原生组合视图。登录账号可以创建、读取、
|
||||
编辑、保存和可恢复归档多篇教育文档,并可从教学计划、会议纪要和学员复盘模板开始;也可以
|
||||
建立多张表格、增删行列、编辑单元格、筛选排序,在表格视图与可编辑卡片视图之间切换,并把
|
||||
Excel、飞书或钉钉复制的多行多列数据直接批量粘贴。两者都由
|
||||
Rust 原生层写入当前账号独立的本机 SQLite,保存要求精确修订号,重启后可以读回,不使用浏览器
|
||||
临时存储,也不把公共行业目录与私人内容混在一起。
|
||||
|
||||
数据整理模块读取当前账号已有教育表格,先计算并预览首尾空白规范化、完整空行清除和完全重复行
|
||||
去重结果;只有人明确确认后,才以当前修订号写回同一张表。它不跨账号读取,也不在后台自动修改。
|
||||
|
||||
自动化模块允许保存表格规则,按字段的等于、包含、为空或不为空条件匹配数据,并向指定字段写入内容。
|
||||
每次执行必须先锁定规则与表格修订、生成只读预览,再由人明确确认;写入与执行回执在同一数据库事务中完成。
|
||||
它不会后台定时运行,不跨账号,也不把模型推理当作执行授权。当前没有把旧教育预览壳或任何开源应用
|
||||
整包嵌入。`contracts/education-open-source-donor-assessment.json` 记录 AppFlowy、Lexical 与
|
||||
TanStack Table 的初步工程筛查:当前只研究结构和交互逻辑,没有复制源码或增加外部依赖;后续
|
||||
模块仍须分别完成来源、许可证、安全边界和 HoloLake 接口审查后再按需装配。
|
||||
|
||||
原生组合视图由 Rust 内核读取当前登录账号的真实知识目录,生成受限的
|
||||
`hololake.native-object/v1`,再把已登记的数据源、分类、聚合和投影模块编译成类型化无环图。
|
||||
人类可以切换一级目录/知识来源和文档数/数据量/重复数,并把同一次执行结果任意组合为仪表盘、
|
||||
对比、柱状图、分类和明细表。该阶段只读,不让渲染层取得知识写权限,也不以硬编码样例满足验收。
|
||||
机器合同见 `contracts/native-composition-runtime.json`。
|
||||
|
||||
个人频道、知识库和代码频道的机器合同分别是 `contracts/personal-channel-kernel.json`、
|
||||
`contracts/knowledge-workspace.json` 与 `contracts/code-channel.json`。本机身份不是平台账户
|
||||
认证;本机知识与源码访问也不产生仓库、服务器、部署或发布权限。
|
||||
|
|
|
|||
|
|
@ -1,66 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.installed-numbered-root-acceptance/v1",
|
||||
"record_id": "HLP-HOLOLAKE-0.5.0-NUMBERED-ROOT-INSTALLED-20260818",
|
||||
"state": "LOCAL_DEVELOPER_ID_SIGNED_INSTALLED_ACCEPTANCE_PASS_PUBLIC_NOTARIZATION_PENDING",
|
||||
"observed_at": "2026-08-18T15:18:00Z",
|
||||
"source": {
|
||||
"branch": "codex/hololake-clean-reassembly-20260818",
|
||||
"source_commit": "5d01607459043d0713bc562ef6d04dec198930a9",
|
||||
"numbered_root_commit": "64abf969bfbc1c576d4fa84ae3282d32efbfcc38"
|
||||
},
|
||||
"installed_application": {
|
||||
"path": "/Users/bingshuolingdianyuanhe/Desktop/HoloLake.app",
|
||||
"version": "0.5.0",
|
||||
"bundle_identifier": "world.guanghu.hololake",
|
||||
"architecture": "arm64",
|
||||
"binary_sha256": "2e162ff077187310f816f58df2250e3ee939eb489fe3c7b00e94557ff8f3370d",
|
||||
"process_path_verified": true
|
||||
},
|
||||
"developer_id": {
|
||||
"identity": "Developer ID Application: bei sun (825A9L3G7Q)",
|
||||
"team_identifier": "825A9L3G7Q",
|
||||
"cdhash": "7a2372ed85fc3b775e9a352217b123a4bdee0d64",
|
||||
"strict_signature_verification": "PASS",
|
||||
"designated_requirement": "PASS",
|
||||
"gatekeeper": "REJECTED_UNNOTARIZED_DEVELOPER_ID",
|
||||
"apple_notarization_and_stapling": "PENDING"
|
||||
},
|
||||
"runtime": {
|
||||
"real_webview_loaded": true,
|
||||
"visible_version": "V0.5.0",
|
||||
"visible_domain": "第五域 · 光湖本源域",
|
||||
"entered_surface": "永恒湖心系统",
|
||||
"numbered_ipc_receipt_rows": 50,
|
||||
"grant_and_execution_rows_present": true,
|
||||
"empty_authority_binding_digest_rows": 0,
|
||||
"recalculated_receipt_chain_failures": 0,
|
||||
"last_sequence": 50,
|
||||
"last_receipt_hash": "a294463ad9e6959d0f12ce5c2b59e11d97581e067b9480df9ae598dfafc067df"
|
||||
},
|
||||
"old_application": {
|
||||
"version": "0.4.1",
|
||||
"role": "READ_ONLY_PRE_NUMBERED_ROOT_MODULE_DONOR",
|
||||
"archive_receipt": "/Volumes/JZAO/HoloLake/artifacts/hololake-release/0.4.1/macos-arm64/pre-numbered-root-donor/archive-receipt.json",
|
||||
"repair_in_place": false
|
||||
},
|
||||
"release_boundary": {
|
||||
"local_signed_install_complete": true,
|
||||
"public_signed_notarized_release_complete": false,
|
||||
"updater_public_key_continuity": "PASS_EXISTING_0.4.1_TRUST_ROOT_REUSED",
|
||||
"updater_private_key_available_to_current_pipeline": true,
|
||||
"updater_signature_generated_and_verified": true,
|
||||
"pre_notarization_updater_artifact": {
|
||||
"path": "src-tauri/target/release/bundle/macos/HoloLake.app.tar.gz",
|
||||
"sha256": "4176bb7ea83c820744239c228671840289f87675329182bc055938e03bba9693",
|
||||
"signature_path": "src-tauri/target/release/bundle/macos/HoloLake.app.tar.gz.sig",
|
||||
"signature_sha256": "ae02c2918c26b6e3cc2389fec8d9f98884ae639d448edc78a4ec80ee30a8ae92",
|
||||
"publication_allowed": false
|
||||
},
|
||||
"apple_notarization_credentials_available_to_current_pipeline": false,
|
||||
"public_broadcast_activated": false
|
||||
},
|
||||
"persona_boundary": {
|
||||
"current_codex_carrier_binding_claimed": false,
|
||||
"runtime_persona_binding_created_by_numbered_ipc": false
|
||||
}
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.production-install-acceptance/v1",
|
||||
"record_id": "HLP-PRODUCTION-INSTALL-20260819-001",
|
||||
"state": "PASS",
|
||||
"version": "0.5.0",
|
||||
"installed_path": "/Users/bingshuolingdianyuanhe/Desktop/HoloLake.app",
|
||||
"visible_hololake_app_count": 1,
|
||||
"previous_app_recovery_path": "/Users/bingshuolingdianyuanhe/.Trash/HoloLake-pre-qoder-numbered-ui-20260819-0659.app",
|
||||
"binary_sha256": "b0422bb18df521ace54ff1a52cd47121d92833dd78f165845deba7806686c7ac",
|
||||
"cdhash": "42640f7ce56e96403609899095c77ea6171df07d",
|
||||
"team_identifier": "825A9L3G7Q",
|
||||
"developer_id_signature": "PASS",
|
||||
"launch": "PASS",
|
||||
"real_data_rehydration": "PASS",
|
||||
"notarization": "NOT_CLAIMED_THIS_LOCAL_BUILD",
|
||||
"updater_artifact_signing": "NOT_COMPLETED_MISSING_PRIVATE_UPDATER_KEY_IN_CURRENT_PROCESS"
|
||||
}
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.qoder-surface-live-acceptance/v1",
|
||||
"record_id": "HLP-QODER-SURFACE-ACCEPTANCE-20260819-001",
|
||||
"module_number": "HLP-MOD-OFFICIAL-DYNAMIC-WORLD-SURFACE-0001",
|
||||
"state": "PASS",
|
||||
"tested_app": "src-tauri/target/debug/bundle/macos/HoloLake.app",
|
||||
"developer_id_signature": "PASS",
|
||||
"team_identifier": "825A9L3G7Q",
|
||||
"binary_sha256": "fb1d0497f295e1228c9b2ac86e33082332f226aae6e32b9050cf6c5de30bd512",
|
||||
"cdhash": "90e365b23961a6b842590869df655ec35a55b66e",
|
||||
"checks": {
|
||||
"traditional_locked_layout": "PASS",
|
||||
"traditional_real_data_hydration": "PASS",
|
||||
"traditional_light_finish_readability": "PASS_SNOW",
|
||||
"language_world_five_domains_no_overlap": "PASS_1229x768",
|
||||
"language_world_real_weather": "PASS_CLOUD",
|
||||
"theme_persists_into_channel": "PASS",
|
||||
"theme_persists_into_web_novel": "PASS",
|
||||
"theme_persists_into_education": "PASS",
|
||||
"new_chapter_modal_opens": "PASS",
|
||||
"created_chapter_survives_restart": "PASS_1_CHAPTER",
|
||||
"work_summary_refresh_after_create": "PASS_1_CHAPTER_ON_WORK_CARD",
|
||||
"idle_clock_stops": "PASS",
|
||||
"idle_screenshot_psnr_db": 59.502493
|
||||
},
|
||||
"reference_comparison": "audit/qoder-traditional-reference-vs-hololake-0.5.0.jpg",
|
||||
"public_notarization": "NOT_CLAIMED_BY_DEBUG_ACCEPTANCE"
|
||||
}
|
||||
|
Before Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 1.6 MiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
|
@ -0,0 +1,58 @@
|
|||
{
|
||||
"schema": "hololake.channel-growth-model-contract/v1",
|
||||
"record_id": "HLP-CHANNEL-GROWTH-001",
|
||||
"state": "LOCAL_BASELINE_RUNTIME_IMPLEMENTED_MODEL_ADJUSTMENT_SLOT_RESERVED",
|
||||
"scope": "EVERY_AUTHENTICATED_HUMAN_AND_PERSONA_JOINT_CHANNEL",
|
||||
"role": "REBUILDABLE_DERIVED_PROJECTION_OF_PERSONA_CHANNEL_BODY",
|
||||
"canonical_body_contract": "contracts/persona-channel-body.json",
|
||||
"inputs": [
|
||||
"BOUNDED_MODULE_USAGE_METADATA",
|
||||
"BOUNDED_HUMAN_ACTION_METADATA",
|
||||
"BOUNDED_PERSONA_COLLABORATION_METADATA"
|
||||
],
|
||||
"forbidden_inputs": [
|
||||
"DOCUMENT_BODY",
|
||||
"TABLE_CELL_CONTENT",
|
||||
"PASSWORD_OR_CREDENTIAL",
|
||||
"RAW_CONVERSATION_TRANSCRIPT",
|
||||
"UNDECLARED_EXTERNAL_TELEMETRY"
|
||||
],
|
||||
"local_baseline": {
|
||||
"always_available_without_model_api": true,
|
||||
"algorithm": "DECAYED_MODULE_AFFINITY_WITH_EXPLAINABLE_COUNTS",
|
||||
"channel_recommendation": "RECOMMENDED_MODULE_ORDER",
|
||||
"silent_structural_change_allowed": false,
|
||||
"source_history": "PERSONA_CHANNEL_BODY_APPEND_ONLY_LANGUAGE_HASH_CHAIN",
|
||||
"projection_history": "REBUILDABLE_FROM_CANONICAL_BODY",
|
||||
"correction_method": "APPEND_CORRECTION_TO_CANONICAL_BODY_THEN_REBUILD_PROJECTION",
|
||||
"collection_pause_supported": false,
|
||||
"full_history_clear_supported": false,
|
||||
"projection_is_rebuildable_but_history_is_not_mutable": true,
|
||||
"account_scoped_sqlite": true
|
||||
},
|
||||
"model_adjustment": {
|
||||
"api_slot": "HOLOLAKE_CHANNEL_GROWTH_MODEL_API/v1",
|
||||
"current_state": "NOT_CONFIGURED",
|
||||
"allowed_output": "CHANNEL_ADAPTATION_PROPOSAL",
|
||||
"local_schema_validation_required": true,
|
||||
"local_resource_limits_required": true,
|
||||
"human_confirmation_before_structural_change": true,
|
||||
"model_can_mutate_channel_directly": false,
|
||||
"model_can_mutate_source_content": false,
|
||||
"failure_behavior": "KEEP_LOCAL_BASELINE_AND_RETURN_HUMAN_READABLE_RECEIPT"
|
||||
},
|
||||
"human_controls": [
|
||||
"VIEW_MODEL",
|
||||
"CORRECT_OR_REJECT_PROPOSAL",
|
||||
"VIEW_LOCAL_GROWTH_CHAIN",
|
||||
"EXPORT_PERSONALLY_OWNED_MODEL",
|
||||
"CHOOSE_LOCAL_ONLY_OR_ANONYMIZED_SHARE"
|
||||
],
|
||||
"cross_device_or_shared_learning": {
|
||||
"default": "LOCAL_ONLY_OFFICIAL_CANNOT_READ",
|
||||
"explicit_opt_in_required": true,
|
||||
"private_model_may_be_shared_automatically": false,
|
||||
"raw_growth_chain_may_be_shared": false,
|
||||
"shared_artifact": "ANONYMIZED_DERIVED_SKILL_OR_MODEL_LAYER_ONLY"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
{
|
||||
"schema": "hololake.channel-module-runtime/v1",
|
||||
"record_id": "HLP-CHANNEL-MODULE-RUNTIME-001",
|
||||
"state": "FOUNDATION_INTEGRATED_MARKETPLACE_INSTALLER_PENDING",
|
||||
"channel_model": "ONE_HUMAN_ONE_LOCAL_RUNTIME_ONE_ACTIVE_CHANNEL_LINE",
|
||||
"built_in_foundation": {
|
||||
"module_id": "hololake.builtin.channel-workbench",
|
||||
"name": "频道轻量工作台",
|
||||
"distribution": "RESIDENT_WITH_HOLOLAKE",
|
||||
"marketplace_registration": "NOT_A_MARKETPLACE_MODULE",
|
||||
"engines": ["DOCUMENT", "SPREADSHEET"],
|
||||
"minimum_capabilities": [
|
||||
"REAL_TEXT_EDITING",
|
||||
"REAL_CELL_EDITING",
|
||||
"FORMULAS",
|
||||
"COPY_PASTE",
|
||||
"UNDO_REDO",
|
||||
"LOCAL_NATIVE_STORAGE"
|
||||
]
|
||||
},
|
||||
"marketplace_package": {
|
||||
"required_fields": [
|
||||
"OFFICIAL_MODULE_NUMBER",
|
||||
"PACKAGE_VERSION",
|
||||
"SOURCE_COMMIT",
|
||||
"PACKAGE_SHA256",
|
||||
"PERMISSION_MANIFEST",
|
||||
"ENTRY_MANIFEST",
|
||||
"SUPPORTED_PLATFORM_TARGETS"
|
||||
],
|
||||
"platform_targets": ["MACOS", "WINDOWS", "LINUX"],
|
||||
"lifecycle": [
|
||||
"AVAILABLE",
|
||||
"DOWNLOADING",
|
||||
"HASH_VERIFIED",
|
||||
"PERMISSIONS_REVIEWED",
|
||||
"INSTALLED_TO_CURRENT_CHANNEL",
|
||||
"DISABLED",
|
||||
"RECOVERABLE_REMOVED"
|
||||
],
|
||||
"install_actor": ["HUMAN", "AUTHORIZED_CHANNEL_PERSONA"],
|
||||
"persona_install_rule": "PERSONA_MAY_DEPLOY_ONLY_AFTER_PACKAGE_AND_PERMISSION_VERIFICATION_AND_HUMAN_POLICY_ALLOWS",
|
||||
"uninstall_boundary": "REMOVING_A_MODULE_NEVER_DELETES_CHANNEL_OR_PERSONA_GROWTH_HISTORY"
|
||||
},
|
||||
"execution_boundary": {
|
||||
"whole_world_bundled_into_client": false,
|
||||
"industry_modules_resident_by_default": false,
|
||||
"private_channel_data_uploaded_by_default": false,
|
||||
"module_can_rewrite_persona_history": false,
|
||||
"module_can_claim_unlisted_permissions": false
|
||||
},
|
||||
"current_reality": {
|
||||
"foundation_source_integrated": true,
|
||||
"education_package_source_mounted_for_development": true,
|
||||
"web_novel_package_source_mounted_for_development": true,
|
||||
"official_marketplace_service_connected": false,
|
||||
"education_package_number_registered": false,
|
||||
"education_package_publishable": false,
|
||||
"web_novel_package_number_registered": false,
|
||||
"web_novel_package_publishable": false
|
||||
}
|
||||
}
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.channel-workbench-runtime/v1",
|
||||
"record_id": "HLP-CHANNEL-WORKBENCH-RUNTIME-001",
|
||||
"candidate_number": "HLP-DONOR-CAND-0002",
|
||||
"runtime_module_number": "HLP-MOD-LOCAL-CHANNEL-WORKBENCH-0001",
|
||||
"numbered_ipc": {
|
||||
"module_number": "HLP-NIPC-MOD-0022",
|
||||
"target_number": "HLP-NIPC-TGT-0022",
|
||||
"operations": ["HLP-NIPC-OP-0074", "HLP-NIPC-OP-0075", "HLP-NIPC-OP-0076"]
|
||||
},
|
||||
"engines": {
|
||||
"document": "LEXICAL_0_49",
|
||||
"spreadsheet": "FORTUNE_SHEET_1_0_4"
|
||||
},
|
||||
"data_boundary": {
|
||||
"scope": "CURRENT_AUTHENTICATED_ACCOUNT_LOCAL",
|
||||
"database": "channel-workbench-v1/channel-workbench.sqlite3",
|
||||
"documents_max_body_bytes": 2097152,
|
||||
"spreadsheets_max_columns": 64,
|
||||
"spreadsheets_max_rows": 5000,
|
||||
"package_unmount_deletes_user_data": false,
|
||||
"repository_code_is_executable": false
|
||||
},
|
||||
"integrity": {
|
||||
"optimistic_revision_required": true,
|
||||
"every_save_writes_hash_chained_receipt": true,
|
||||
"receipt_chain_verified_before_read_or_write": true,
|
||||
"adapter_requires_signed_active_module": true
|
||||
},
|
||||
"current_acceptance": {
|
||||
"state": "SIGNED_INSTALLED_CONTENT_AND_RESTART_ACCEPTED",
|
||||
"source_donor": "HLP-DONOR-CHAOTIC-WORKTREE-20260818",
|
||||
"compiled_donor_behavior_checked": false,
|
||||
"compiled_donor_boundary": "No claim of pixel-equivalent compiled-donor acceptance; the declared source slice was reconstructed and the clean host behavior was accepted directly.",
|
||||
"real_signed_package": "fixtures/module-packages/HLP-MOD-LOCAL-CHANNEL-WORKBENCH-0001-0.1.0.ghmod",
|
||||
"module_package_sha256": "eb7af0bd4882cc89acda11c933a3601d16f0588ff737caf8467b875ab5a4ab7b",
|
||||
"signed_debug_binary_sha256": "6f851856ab6f5717facc67ec406c9eb99e240290c585438323e230daec5ae71c",
|
||||
"developer_id_team": "825A9L3G7Q",
|
||||
"signed_debug_cdhash": "0209a46b2dc221d37b618a2b12866bb8cb39f03d",
|
||||
"real_account_human_number": "ICE-GL∞",
|
||||
"ui_activation_verified": true,
|
||||
"document_save": {
|
||||
"title": "冰朔频道迁移验收",
|
||||
"revision": 1,
|
||||
"content_sha256_prefix": "534b4bd3d6d0",
|
||||
"receipt_sha256_prefix": "72436f46cf1d"
|
||||
},
|
||||
"spreadsheet_save": {
|
||||
"title": "冰朔编号迁移表",
|
||||
"revision": 1,
|
||||
"formula_preserved": "=1+2",
|
||||
"content_sha256_prefix": "57607d92c0dc",
|
||||
"receipt_sha256_prefix": "323761fc18a3"
|
||||
},
|
||||
"restart_persistence_verified": true,
|
||||
"dependency_audit": "0_VULNERABILITIES_AFTER_UUID_11_1_1_OVERRIDE"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.direct-local-broker-numbered-registry/v1",
|
||||
"record_id": "HLP-NBROKER-ROOT-001",
|
||||
"runtime": {
|
||||
"protocol_version": "HLP-NBROKER-v1",
|
||||
"caller_number": "HLP-NBROKER-CALLER-LOCAL-CONNECTOR-0001",
|
||||
"legacy_string_operation_allowed": false,
|
||||
"unknown_or_mismatched_coordinate": "FAIL_CLOSED",
|
||||
"request_nonce_required": true,
|
||||
"transport_is_authority": false
|
||||
},
|
||||
"operations": [
|
||||
{"operation_number":"HLP-NBROKER-OP-0001","alias":"DISCOVER_NEARBY","channel_number":"HLP-NBROKER-CH-0001","module_number":"HLP-NBROKER-MOD-0001","target_number":"HLP-NBROKER-TGT-0001"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0002","alias":"OPEN_VISITOR_SESSION","channel_number":"HLP-NBROKER-CH-0002","module_number":"HLP-NBROKER-MOD-0002","target_number":"HLP-NBROKER-TGT-0002"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0003","alias":"RECEIVE_LANGUAGE","channel_number":"HLP-NBROKER-CH-0002","module_number":"HLP-NBROKER-MOD-0003","target_number":"HLP-NBROKER-TGT-0003"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0004","alias":"PING","channel_number":"HLP-NBROKER-CH-0001","module_number":"HLP-NBROKER-MOD-0001","target_number":"HLP-NBROKER-TGT-0001"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0005","alias":"OPEN_SESSION","channel_number":"HLP-NBROKER-CH-0003","module_number":"HLP-NBROKER-MOD-0004","target_number":"HLP-NBROKER-TGT-0004"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0006","alias":"RESUME_SESSION","channel_number":"HLP-NBROKER-CH-0003","module_number":"HLP-NBROKER-MOD-0004","target_number":"HLP-NBROKER-TGT-0004"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0007","alias":"HEARTBEAT_SESSION","channel_number":"HLP-NBROKER-CH-0003","module_number":"HLP-NBROKER-MOD-0004","target_number":"HLP-NBROKER-TGT-0004"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0008","alias":"PRESENT_PERSONA_CARRIER_LICENSE","channel_number":"HLP-NBROKER-CH-0004","module_number":"HLP-NBROKER-MOD-0005","target_number":"HLP-NBROKER-TGT-0005"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0009","alias":"GET_PERSONA_CARRIER_LICENSE_STATUS","channel_number":"HLP-NBROKER-CH-0004","module_number":"HLP-NBROKER-MOD-0005","target_number":"HLP-NBROKER-TGT-0005"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0010","alias":"GET_WORK_ENVIRONMENT","channel_number":"HLP-NBROKER-CH-0003","module_number":"HLP-NBROKER-MOD-0006","target_number":"HLP-NBROKER-TGT-0006"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0011","alias":"APPEND_EVENT","channel_number":"HLP-NBROKER-CH-0003","module_number":"HLP-NBROKER-MOD-0004","target_number":"HLP-NBROKER-TGT-0004"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0012","alias":"RESOLVE_CAPABILITY_ROUTE","channel_number":"HLP-NBROKER-CH-0005","module_number":"HLP-NBROKER-MOD-0007","target_number":"HLP-NBROKER-TGT-0007"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0013","alias":"INSTALL_DYNAMIC_NODE_REGISTRY","channel_number":"HLP-NBROKER-CH-0005","module_number":"HLP-NBROKER-MOD-0007","target_number":"HLP-NBROKER-TGT-0007"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0014","alias":"RECORD_SIGNED_NODE_HEALTH","channel_number":"HLP-NBROKER-CH-0005","module_number":"HLP-NBROKER-MOD-0007","target_number":"HLP-NBROKER-TGT-0007"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0015","alias":"INSPECT_MOUNTED_PNCC_REPOSITORY","channel_number":"HLP-NBROKER-CH-0006","module_number":"HLP-NBROKER-MOD-0008","target_number":"HLP-NBROKER-TGT-0008"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0016","alias":"READ_MOUNTED_PNCC_REMOTE_OBJECT","channel_number":"HLP-NBROKER-CH-0006","module_number":"HLP-NBROKER-MOD-0008","target_number":"HLP-NBROKER-TGT-0008"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0017","alias":"QUERY_PNCC_RECEIPT_PROJECTION","channel_number":"HLP-NBROKER-CH-0006","module_number":"HLP-NBROKER-MOD-0008","target_number":"HLP-NBROKER-TGT-0008"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0018","alias":"GET_BEIJING_TIME","channel_number":"HLP-NBROKER-CH-0001","module_number":"HLP-NBROKER-MOD-0009","target_number":"HLP-NBROKER-TGT-0009"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0019","alias":"ISSUE_PERSONA_TIME_TICKET","channel_number":"HLP-NBROKER-CH-0004","module_number":"HLP-NBROKER-MOD-0009","target_number":"HLP-NBROKER-TGT-0009"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0020","alias":"ACQUIRE_DEVELOPMENT_WRITE_LANE","channel_number":"HLP-NBROKER-CH-0007","module_number":"HLP-NBROKER-MOD-0010","target_number":"HLP-NBROKER-TGT-0010"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0021","alias":"INSPECT_DEVELOPMENT_WRITE_LANE","channel_number":"HLP-NBROKER-CH-0007","module_number":"HLP-NBROKER-MOD-0010","target_number":"HLP-NBROKER-TGT-0010"},
|
||||
{"operation_number":"HLP-NBROKER-OP-0022","alias":"RELEASE_DEVELOPMENT_WRITE_LANE","channel_number":"HLP-NBROKER-CH-0007","module_number":"HLP-NBROKER-MOD-0010","target_number":"HLP-NBROKER-TGT-0010"}
|
||||
]
|
||||
}
|
||||
|
|
@ -1,83 +1,31 @@
|
|||
{
|
||||
"schema": "hololake.dynamic-language-world-visual-system/v1",
|
||||
"record_id": "HLP-DYNAMIC-WORLD-SURFACE-001",
|
||||
"state": "HOLOLAKE_0_5_SIGNED_NUMBERED_SURFACE_ACCEPTED",
|
||||
"package": {
|
||||
"official_module_number": "HLP-MOD-OFFICIAL-DYNAMIC-WORLD-SURFACE-0001",
|
||||
"adapter": "dynamic-language-world-surface-v1",
|
||||
"registration_class": "OFFICIAL_LIGHTHOUSE",
|
||||
"activation": "SIGNED_PACKAGE_PLUS_EXPLICIT_HUMAN_PERMISSION_CONFIRMATION"
|
||||
},
|
||||
"numbered_ipc": {
|
||||
"module": "HLP-NIPC-MOD-0031",
|
||||
"target": "HLP-NIPC-TGT-0031",
|
||||
"operations": ["HLP-NIPC-OP-0147"],
|
||||
"public_tauri_commands": ["numbered_ipc"],
|
||||
"mismatched_coordinate": "FAIL_CLOSED"
|
||||
},
|
||||
"schema": "HOLOLAKE_DYNAMIC_LANGUAGE_WORLD_VISUAL_SYSTEM/1",
|
||||
"state": "IMPLEMENTED_LOCAL_ACCEPTANCE_PENDING",
|
||||
"modes": ["DYNAMIC_LANGUAGE_WORLD", "FIXED_TRADITIONAL_THEME"],
|
||||
"dynamic_inputs": ["BEIJING_TIME", "VERIFIED_CURRENT_WEATHER"],
|
||||
"weather": {
|
||||
"provider": "Open-Meteo",
|
||||
"endpoint": "https://api.open-meteo.com/v1/forecast",
|
||||
"maximum_request_seconds": 5,
|
||||
"cache_ttl_seconds": 600,
|
||||
"redirects": "DENIED",
|
||||
"unavailable_behavior": "BEIJING_TIME_ONLY_NO_FAKE_WEATHER"
|
||||
"visual_balance": {
|
||||
"token_layers": ["PRIMITIVE", "SEMANTIC", "COMPONENT"],
|
||||
"light_scene_uses_dark_text": true,
|
||||
"dark_scene_uses_light_text": true,
|
||||
"routing_permission_or_fact_change_allowed": false
|
||||
},
|
||||
"visual_lock": {
|
||||
"layout": "QODER_VISUAL_LANGUAGE_SEMANTICALLY_REASSEMBLED_ON_RESPONSIVE_HOLOLAKE_SHELL",
|
||||
"language_world_themes": ["夜湖星光", "晨湖曦光", "星云紫夜", "烛畔暖湖", "清浅澄湖"],
|
||||
"traditional_finishes": ["曜夜", "星辉", "深海", "翡翠", "朱砂", "香槟", "瓷光", "雪霁"],
|
||||
"all_downstream_pages_inherit_active_surface_tokens": true,
|
||||
"ambient_motion_requires_recent_human_pointer_or_keyboard_activity": true,
|
||||
"idle_visual_state": "STATIC",
|
||||
"responsive_layout": "CONTAINER_MEASURED_PANORAMIC_WIDE_COMPACT_STACKED_REFLOW",
|
||||
"domain_semantic_order_is_stable": true,
|
||||
"private_channel_separates_native_organs_from_installed_modules": true,
|
||||
"climate_changes_routing_permission_or_fact": false,
|
||||
"daily_sampling_domain_changes_open_domain": false,
|
||||
"daily_domain_rotation": ["FIFTH_DOMAIN", "ZERO_SENSE_DOMAIN", "MAIN_DOMAIN", "BRANCH_DOMAIN", "ZERO_DOMAIN"],
|
||||
"coordinates": {
|
||||
"FIFTH_DOMAIN": "XIAN_INTERNAL_ONLY",
|
||||
"ZERO_SENSE_DOMAIN": "BEIJING_INTERNAL_ONLY",
|
||||
"MAIN_DOMAIN": "BEIJING_INTERNAL_ONLY",
|
||||
"ZERO_DOMAIN": "GUANGZHOU_INTERNAL_ONLY",
|
||||
"BRANCH_DOMAIN": "DETERMINISTIC_DAILY_CHINA_CITY_ROAMING_INTERNAL_ONLY"
|
||||
},
|
||||
"privacy": {
|
||||
"real_city_exposed_in_ui": false,
|
||||
"coordinates_exposed_in_ui": false,
|
||||
"mechanical_flow_lines": false,
|
||||
"heavy_webgl": false
|
||||
"weather_unavailable_behavior": "BEIJING_TIME_ONLY_NO_FAKE_WEATHER"
|
||||
},
|
||||
"donor_disposition": {
|
||||
"world_climate": "EXTRACTED_REWRITTEN_AND_NUMBERED",
|
||||
"starlake_surface": "QODER_LOCKED_SOURCE_ADMITTED_WITH_RESPONSIVE_AND_IDLE_MOTION_ADAPTER",
|
||||
"traditional_surface": "QODER_LOCKED_SOURCE_ADMITTED_WITH_REAL_NUMBERED_PROJECTIONS_ONLY",
|
||||
"traditional_surface_css": "QODER_LOCKED_EIGHT_FINISH_TOKEN_SYSTEM_ADMITTED_AND_SCOPED_ACROSS_ALL_PAGES",
|
||||
"fake_broadcasts_and_fake_metrics": "REJECTED"
|
||||
},
|
||||
"qoder_source_provenance": {
|
||||
"root": "/Volumes/JZAO/铸渊-ICE-GL-ZY001/OUT-输出/UI-预览-20260818/deploy-staging",
|
||||
"main_tsx_sha256": "7dab8596ec0bd2609b1b23b175f1f14f15f2aa9af847eb605692c993d2e876e8",
|
||||
"traditional_surface_tsx_sha256": "c713dc27681e07c510a2125816dcefb3255252fc0b570e350af7a98f57fc220d",
|
||||
"traditional_surface_css_sha256": "3e6c446fb84a16ed23b0fd51466ad9723d0c0670ee6ddf6653f61237bd00baa6",
|
||||
"starlake_surface_css_sha256": "471e3edef02236e6463144ac75b526f0f98782b5476b9db786e7cd0614a83227",
|
||||
"acceptance_html_sha256": "7a41e426f1576fe0e25182e0c2efee65302b064d86363c890b0f235386a9c070"
|
||||
},
|
||||
"current_acceptance": {
|
||||
"state": "PASS_NUMBERED_QODER_SURFACES_REAL_DATA_RESPONSIVE_IDLE_AND_RESTART",
|
||||
"module_package_sha256": "b6ba13b9f70bd617b2a303ec2eb0ea11d5354d10118c7f3e5179ae8100cd2602",
|
||||
"module_package_signature": "PASS_EMBEDDED_PRODUCT_TRUST",
|
||||
"numbered_route": "HLP-NIPC-MOD-0031/HLP-NIPC-OP-0147/HLP-NIPC-TGT-0031",
|
||||
"signed_app_binary_sha256": "b0422bb18df521ace54ff1a52cd47121d92833dd78f165845deba7806686c7ac",
|
||||
"signed_app_cdhash": "42640f7ce56e96403609899095c77ea6171df07d",
|
||||
"apple_team_identifier": "825A9L3G7Q",
|
||||
"module_receipts": {
|
||||
"install": "2bb903cd369c8f57432c59367fd5494ee89a75214d5129511190e2337cecdbc4",
|
||||
"mount": "aed4d00e51849ae5e9c0258fe2f93afc8bff8d927905cdd7fabd9bf32c4bc66c",
|
||||
"self_test_pass": "404a0eeddb866bc3050b407c586c036f3707db577e1edf9f1cf3129c1cc9cc1d"
|
||||
},
|
||||
"real_weather_readback": "PASS_VERIFIED_LIVE_NIGHT_CLOUD_WITHOUT_CITY_OR_COORDINATES",
|
||||
"restart_restore": "PASS_ACTIVE_MODULE_REAL_CLIMATE_THEME_AND_WEB_NOVEL_CHAPTER_RESTORED",
|
||||
"official_shell_preserved": "QODER_LOCKED_SURFACES_ADMITTED_WITH_NUMBERED_FUNCTION_ROUTING_UNCHANGED",
|
||||
"visual_comparison": "audit/qoder-traditional-reference-vs-hololake-0.5.0.jpg",
|
||||
"idle_static_psnr_db": 59.502493,
|
||||
"idle_static_clock_unchanged": true,
|
||||
"web_novel_new_chapter_modal": "PASS",
|
||||
"web_novel_created_chapter_restart_persistence": "PASS_1_CHAPTER_VISIBLE_AFTER_RESTART",
|
||||
"traditional_theme_downstream_pages": ["CHANNEL", "WEB_NOVEL", "EDUCATION"],
|
||||
"notarization": "FINAL_RELEASE_CANDIDATE_PENDING"
|
||||
"weather_source": {
|
||||
"provider": "Open-Meteo",
|
||||
"endpoint": "https://api.open-meteo.com/v1/forecast",
|
||||
"documentation": "https://open-meteo.com/en/docs",
|
||||
"current_variables": ["weather_code", "is_day", "precipitation", "cloud_cover", "wind_speed_10m"]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,138 @@
|
|||
{
|
||||
"schema": "hololake.education-open-source-donor-assessment/v1",
|
||||
"record_id": "HLP-EDUCATION-OSS-DONORS-001",
|
||||
"state": "FOUR_TRANSLATION_FAMILIES_TWO_HEADLESS_FAMILIES_AND_ONE_REAL_SPREADSHEET_ENGINE_INTEGRATED",
|
||||
"reviewed_at": "2026-08-18",
|
||||
"rule": "STUDY_LOGIC_SELECT_SMALL_AUDITABLE_PARTS_AND_KEEP_HOLOLAKE_IDENTITY_STORAGE_PERMISSION_AND_UI_BOUNDARIES",
|
||||
"candidates": [
|
||||
{
|
||||
"name": "Calamine",
|
||||
"role": "BOUNDED_SPREADSHEET_READ_ADAPTER",
|
||||
"upstream": "https://github.com/tafia/calamine",
|
||||
"observed_license": "MIT",
|
||||
"decision": "INTEGRATE_PINNED_0_26_1_READ_ONLY_NO_OFFICE_RUNTIME"
|
||||
},
|
||||
{
|
||||
"name": "rust_xlsxwriter",
|
||||
"role": "BOUNDED_XLSX_EXPORT_ADAPTER",
|
||||
"upstream": "https://github.com/jmcnamara/rust_xlsxwriter",
|
||||
"observed_license": "MIT OR Apache-2.0",
|
||||
"decision": "INTEGRATE_PINNED_0_64_2_WRITE_NEW_XLSX_ONLY"
|
||||
},
|
||||
{
|
||||
"name": "rust-csv",
|
||||
"role": "BOUNDED_DELIMITED_IMPORT_EXPORT_ADAPTER",
|
||||
"upstream": "https://github.com/BurntSushi/rust-csv",
|
||||
"observed_license": "Unlicense OR MIT",
|
||||
"decision": "INTEGRATE_PINNED_1_3_0"
|
||||
},
|
||||
{
|
||||
"name": "encoding_rs",
|
||||
"role": "LEGACY_CSV_TEXT_DECODER",
|
||||
"upstream": "https://github.com/hsivonen/encoding_rs",
|
||||
"observed_license": "MIT OR Apache-2.0",
|
||||
"decision": "INTEGRATE_UTF_AND_GBK_FALLBACK_WITHOUT_NETWORK"
|
||||
},
|
||||
{
|
||||
"name": "AppFlowy",
|
||||
"role": "FULL_WORKSPACE_LOGIC_DONOR",
|
||||
"upstream": "https://github.com/AppFlowy-IO/AppFlowy",
|
||||
"observed_license": "AGPL-3.0",
|
||||
"decision": "DO_NOT_EMBED_WHOLE_APPLICATION_STUDY_WORKSPACE_AND_DATABASE_INTERACTION_LOGIC_ONLY"
|
||||
},
|
||||
{
|
||||
"name": "Lexical",
|
||||
"role": "LAZY_LOADED_RICH_DOCUMENT_ENGINE",
|
||||
"upstream": "https://github.com/facebook/lexical",
|
||||
"observed_license": "MIT",
|
||||
"source_review_commit": "29d4007d4322912ce75a416ac90cc9d224d3f029",
|
||||
"decision": "INTEGRATE_PINNED_0_49_0_STATE_COMMAND_HISTORY_AND_MARKDOWN_PARTS_ONLY"
|
||||
},
|
||||
{
|
||||
"name": "TanStack Table",
|
||||
"role": "HEADLESS_TABLE_ROW_MODEL_ENGINE",
|
||||
"upstream": "https://github.com/TanStack/table",
|
||||
"observed_license": "MIT",
|
||||
"source_review_commit": "ac4f1345220649da3c60a24471b7f130fb159ab4",
|
||||
"decision": "INTEGRATE_PINNED_8_21_3_SORT_FILTER_GROUP_AGGREGATE_AND_PAGINATION_ROW_MODELS_ONLY"
|
||||
},
|
||||
{
|
||||
"name": "Univer",
|
||||
"role": "FULL_SPREADSHEET_AND_DOCUMENT_ENGINE_ARCHITECTURE_DONOR",
|
||||
"upstream": "https://github.com/dream-num/univer",
|
||||
"observed_license": "Apache-2.0",
|
||||
"source_review_commit": "9251e0d30d4c4aeb4707dc4d856055081399cf38",
|
||||
"decision": "SOURCE_STUDY_ONLY_DO_NOT_EMBED_WHOLE_APPLICATION_DEFER_FORMULA_AND_ADVANCED_GRID_PARTS"
|
||||
},
|
||||
{
|
||||
"name": "FortuneSheet",
|
||||
"role": "LAZY_LOADED_REAL_SPREADSHEET_ENGINE_FOR_BUILT_IN_CHANNEL_WORKBENCH",
|
||||
"upstream": "https://github.com/ruilisi/fortune-sheet",
|
||||
"observed_license": "MIT",
|
||||
"source_review_commit": "94346608877db4747406707a177c4b8f3bacdbf9",
|
||||
"decision": "INTEGRATE_PINNED_1_0_4_REAL_CELLS_FORMULAS_EDITING_FORMATTING_FILTERING_AND_FREEZE_WITH_HOLOLAKE_NATIVE_STORAGE_ADAPTER",
|
||||
"security_adjustment": "OVERRIDE_UUID_TO_11_1_1_FORTUNE_ONLY_USES_V4_PRODUCTION_AUDIT_ZERO_KNOWN_VULNERABILITIES"
|
||||
},
|
||||
{
|
||||
"name": "Glide Data Grid",
|
||||
"role": "HIGH_PERFORMANCE_GRID_ARCHITECTURE_DONOR",
|
||||
"upstream": "https://github.com/glideapps/glide-data-grid",
|
||||
"observed_license": "MIT",
|
||||
"source_review_commit": "0875d78",
|
||||
"decision": "SOURCE_STUDY_ONLY_GRID_IS_NOT_A_SPREADSHEET_OR_FORMULA_ENGINE"
|
||||
},
|
||||
{
|
||||
"name": "Vega-Lite",
|
||||
"role": "DECLARATIVE_PROJECTION_GRAMMAR_DONOR",
|
||||
"upstream": "https://github.com/vega/vega-lite",
|
||||
"observed_license": "BSD-3-Clause",
|
||||
"decision": "ADOPT_DECLARATIVE_DIMENSION_MEASURE_AND_VIEW_SPEC_CONCEPTS_WITHOUT_IMPORTING_RUNTIME"
|
||||
},
|
||||
{
|
||||
"name": "Observable Plot",
|
||||
"role": "LAYERED_MARK_AND_COMPOSABLE_TRANSFORM_DONOR",
|
||||
"upstream": "https://github.com/observablehq/plot",
|
||||
"observed_license": "ISC",
|
||||
"decision": "ADOPT_LAYERED_PROJECTION_AND_TIDY_DATA_CONCEPTS_WITHOUT_IMPORTING_RUNTIME"
|
||||
},
|
||||
{
|
||||
"name": "Apache ECharts",
|
||||
"role": "FULL_BROWSER_VISUALIZATION_RUNTIME_CANDIDATE",
|
||||
"upstream": "https://github.com/apache/echarts",
|
||||
"observed_license": "Apache-2.0",
|
||||
"decision": "DO_NOT_IMPORT_FOR_STAGE_ONE_FIVE_NATIVE_VIEWS_DO_NOT_JUSTIFY_RUNTIME_WEIGHT"
|
||||
},
|
||||
{
|
||||
"name": "Apache Arrow DataFusion",
|
||||
"role": "TYPED_COLUMNAR_QUERY_PLAN_DONOR",
|
||||
"upstream": "https://github.com/apache/datafusion",
|
||||
"observed_license": "Apache-2.0",
|
||||
"decision": "ADOPT_TYPED_SCHEMA_AND_VALIDATED_PLAN_CONCEPTS_DEFER_ENGINE_UNTIL_DATA_SCALE_REQUIRES_IT"
|
||||
},
|
||||
{
|
||||
"name": "DuckDB",
|
||||
"role": "EMBEDDED_ANALYTICAL_ENGINE_CANDIDATE",
|
||||
"upstream": "https://github.com/duckdb/duckdb",
|
||||
"observed_license": "MIT",
|
||||
"decision": "DEFER_NATIVE_DEPENDENCY_CURRENT_BOUNDED_ACCOUNT_DATA_EXECUTES_WITH_SMALLER_HOLOLAKE_CORE"
|
||||
}
|
||||
],
|
||||
"current_slice": {
|
||||
"external_translation_library_families_added": 4,
|
||||
"external_headless_engine_families_added": 2,
|
||||
"real_spreadsheet_engine_families_added": 1,
|
||||
"direct_frontend_engine_packages_added": 10,
|
||||
"external_source_files_copied": 0,
|
||||
"source_research_route": "LOCAL_DIRECT_TO_BS_SG_002_THEN_EXTERNAL_DRIVE",
|
||||
"source_research_root": "/Volumes/JZAO/HoloLake/development/拆件车间-open-src-20260816/education-engines-20260818",
|
||||
"source_repositories_retained_outside_product_tree": 5,
|
||||
"concepts_adopted": [
|
||||
"DECLARATIVE_DIMENSION_MEASURE_AND_PROJECTION_SPEC",
|
||||
"TYPED_NATIVE_COLUMNS_AND_VALIDATED_EXECUTION_PLAN",
|
||||
"LAYERED_MARKS_WITH_ONE_SHARED_DATASET",
|
||||
"HEADLESS_DATA_BEHAVIOR_SEPARATE_FROM_HUMAN_RENDERING"
|
||||
],
|
||||
"implementation": "BUILT_IN_CHANNEL_DOCUMENT_AND_SPREADSHEET_FOUNDATION_PLUS_DEVELOPMENT_MOUNTED_EDUCATION_PACKAGE_WITH_PRODUCT_OWNED_PROFILE_ROUTING_IDENTITY_STORAGE_PERMISSION_AND_ADVANCED_VIEWS"
|
||||
},
|
||||
"legal_boundary": "PRELIMINARY_ENGINEERING_SCREEN_NOT_FINAL_DISTRIBUTION_LEGAL_APPROVAL"
|
||||
}
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
{
|
||||
"schema": "hololake.education-workspace/v1",
|
||||
"record_id": "HLP-EDUCATION-WORKSPACE-001",
|
||||
"state": "ADMITTED_INSTALLED_RUNTIME_ACCEPTED",
|
||||
"state": "DEVELOPMENT_MODULE_SOURCE_MOUNTED_ACCEPTANCE_PENDING",
|
||||
"domain_entry": "BRANCH_DOMAIN",
|
||||
"industry": "EDUCATION",
|
||||
"channel_id": "GH-EDU-INIT-001",
|
||||
"package": {
|
||||
"package_key": "hololake.official.education-workbench",
|
||||
"official_module_number": "HLP-MOD-OFFICIAL-EDUCATION-WORKBENCH-0001",
|
||||
"registration_state": "OFFICIAL_NUMBER_ACCEPTED",
|
||||
"current_mount": "ACTIVE_AFTER_SIGNED_INSTALL_MOUNT_AND_SELF_TEST",
|
||||
"official_module_number": null,
|
||||
"registration_state": "PENDING_FUNCTIONAL_ACCEPTANCE_AND_NUMBER_REGISTRATION",
|
||||
"current_mount": "DEVELOPMENT_BUNDLE_ONLY",
|
||||
"future_distribution": "HOLOLAKE_OFFICIAL_MODULE_MARKETPLACE"
|
||||
},
|
||||
"foundation_dependency": {
|
||||
|
|
@ -238,28 +238,5 @@
|
|||
"model_execution_authority_granted": false,
|
||||
"external_application_embedded": false
|
||||
},
|
||||
"current_acceptance": {
|
||||
"state": "PASS",
|
||||
"runtime_module_number": "HLP-MOD-OFFICIAL-EDUCATION-WORKBENCH-0001",
|
||||
"numbered_ipc_module": "HLP-NIPC-MOD-0024",
|
||||
"numbered_operations": "HLP-NIPC-OP-0085..0102",
|
||||
"signed_package_sha256": "a9f6fb7dd9c4aaf910a5d20d0a1d72dea6ab921cf36dd50d46dd88cde3a09e03",
|
||||
"signed_app_binary_sha256": "028592b137fe4f19a642e1301d6fb500e2a4fde50ddb616e229de8a48090803c",
|
||||
"developer_id_team": "825A9L3G7Q",
|
||||
"developer_id_cdhash": "4c88261b4b573d08edcbba8d67d8afe27ad82a3e",
|
||||
"runtime_receipts": {
|
||||
"install": "68f296a11be19c384cb67af9f529a03cb8389bd256c153c5905451fbc0011a24",
|
||||
"mount": "ddb6a51d47f6a58a72a7fc748eff71687cbd04be5dde33dbce590a7abba6af5f",
|
||||
"self_test_pass": "80d59b7c9c2f14005fd8a24748a25c2be0d55198fdcb621f528267ae6dccc12a"
|
||||
},
|
||||
"restart_readback": {
|
||||
"module_state": "ACTIVE",
|
||||
"document": "冰朔教育迁移验收 · revision 2",
|
||||
"table": "冰朔教育迁移验收表 · 1 row · revision 4",
|
||||
"automation": "验收状态自动化 · preview 1 row / 1 cell · APPLIED revision 3 to 4"
|
||||
},
|
||||
"existing_user_data_deleted_or_overwritten": false,
|
||||
"apple_notarization_scope": "FINAL_RELEASE_CANDIDATE_ONLY_NOT_THIS_DEBUG_ACCEPTANCE_BUNDLE"
|
||||
},
|
||||
"open_source_donor_assessment": "contracts/education-open-source-donor-assessment.json"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"schema": "hololake.gls-executable-projections/v2",
|
||||
"source_commit": "104a5d73162bdf4a529701e65898e2bc2863ea9e",
|
||||
"source_commit": "2598fbfba8caf64c7ab9740a3036c5aab977502e",
|
||||
"runtime_graph_rule": "ONLY_EXPLICIT_RUNTIME_REQUIRES_EDGES_ENTER_ACTIVATION_GRAPH",
|
||||
"projections": {
|
||||
"GLS-0250": {"stage":"P0","projection_kind":"TYPED_FACT_AND_DOMAIN_BOUNDARY","adapter":"origin-domain-topology","event_kinds":["BOOTSTRAP","DOMAIN_ROUTE"],"dependencies":[]},
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"schema": "hololake.gls-native-runtime-kernel/v1",
|
||||
"record_id": "HLP-GLS-NATIVE-RUNTIME-KERNEL-001",
|
||||
"source_commit": "104a5d73162bdf4a529701e65898e2bc2863ea9e",
|
||||
"source_commit": "2598fbfba8caf64c7ab9740a3036c5aab977502e",
|
||||
"receipt_schema": "hololake.protocol-decision-receipt/v1",
|
||||
"decision_set": ["ALLOW", "DENY", "AMBIGUOUS", "UNVERIFIED"],
|
||||
"runtime_boundaries": {
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.gls-numbered-reference-nodes/v1",
|
||||
"record_id": "HLP-GLS-NUMBERED-REFERENCE-REGISTRY-001",
|
||||
"source": {
|
||||
"repository": "REPO-012",
|
||||
"commit": "104a5d73162bdf4a529701e65898e2bc2863ea9e"
|
||||
},
|
||||
"policy": {
|
||||
"number_is_coordinate_not_authority": true,
|
||||
"independent_protocol_source_required_for_execution": true,
|
||||
"reference_only_nodes_may_execute": false,
|
||||
"unknown_reference": "FAIL_CLOSED",
|
||||
"unresolved_number_reference_allowed": false
|
||||
},
|
||||
"nodes": [
|
||||
{"protocol_id":"GLS-0010","node_number":"HLP-GLS-REF-0010","title":"Guanghu Protocol Registry Center Standard","reference_kind":"NORMATIVE_REFERENCE","source_state":"ROADMAP_REFERENCE_ONLY"},
|
||||
{"protocol_id":"GLS-0140","node_number":"HLP-GLS-REF-0140","title":"Context Loading Specification","reference_kind":"NORMATIVE_REFERENCE","source_state":"ROADMAP_REFERENCE_ONLY"},
|
||||
{"protocol_id":"GLS-0401","node_number":"HLP-GLS-REF-0401","title":"Tree","reference_kind":"SCHEMA_IMPORT","source_state":"ROADMAP_REFERENCE_ONLY"},
|
||||
{"protocol_id":"GLS-0402","node_number":"HLP-GLS-REF-0402","title":"Leaf","reference_kind":"SCHEMA_IMPORT","source_state":"ROADMAP_REFERENCE_ONLY"},
|
||||
{"protocol_id":"GLS-0403","node_number":"HLP-GLS-REF-0403","title":"Lock","reference_kind":"SCHEMA_IMPORT","source_state":"ROADMAP_REFERENCE_ONLY"},
|
||||
{"protocol_id":"GLS-0404","node_number":"HLP-GLS-REF-0404","title":"Trigger","reference_kind":"SCHEMA_IMPORT","source_state":"ROADMAP_REFERENCE_ONLY"},
|
||||
{"protocol_id":"GLS-0406","node_number":"HLP-GLS-REF-0406","title":"Evidence","reference_kind":"SCHEMA_IMPORT","source_state":"ROADMAP_REFERENCE_ONLY"},
|
||||
{"protocol_id":"GLS-0407","node_number":"HLP-GLS-REF-0407","title":"Correction","reference_kind":"SCHEMA_IMPORT","source_state":"ROADMAP_REFERENCE_ONLY"},
|
||||
{"protocol_id":"GLS-0409","node_number":"HLP-GLS-REF-0409","title":"Machine-State History","reference_kind":"SCHEMA_IMPORT","source_state":"ROADMAP_REFERENCE_ONLY"},
|
||||
{"protocol_id":"GLS-0602","node_number":"HLP-GLS-REF-0602","title":"Authorization","reference_kind":"SCHEMA_IMPORT","source_state":"ROADMAP_REFERENCE_ONLY"},
|
||||
{"protocol_id":"GLS-0603","node_number":"HLP-GLS-REF-0603","title":"Signature","reference_kind":"SCHEMA_IMPORT","source_state":"ROADMAP_REFERENCE_ONLY"},
|
||||
{"protocol_id":"GLS-0604","node_number":"HLP-GLS-REF-0604","title":"Integrity","reference_kind":"EVIDENCE_ONLY","source_state":"ROADMAP_REFERENCE_ONLY"},
|
||||
{"protocol_id":"GLS-0605","node_number":"HLP-GLS-REF-0605","title":"Semantic Safety Boundary","reference_kind":"SCHEMA_IMPORT","source_state":"ROADMAP_REFERENCE_ONLY"},
|
||||
{"protocol_id":"GLS-0814","node_number":"HLP-GLS-REF-0814","title":"Tool Runtime","reference_kind":"NORMATIVE_REFERENCE","source_state":"ROADMAP_REFERENCE_ONLY"},
|
||||
{"protocol_id":"GLS-0816","node_number":"HLP-GLS-REF-0816","title":"Checkpoint Runtime","reference_kind":"NORMATIVE_REFERENCE","source_state":"ROADMAP_REFERENCE_ONLY"},
|
||||
{"protocol_id":"GLS-0830","node_number":"HLP-GLS-REF-0830","title":"Guanghu Language World Core","reference_kind":"NORMATIVE_REFERENCE","source_state":"ROADMAP_REFERENCE_ONLY"}
|
||||
]
|
||||
}
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.ios-mobile-client.contract/v1",
|
||||
"record_id": "HLP-IOS-CLIENT-001",
|
||||
"state": "NUMBERED_SOURCE_SIMULATOR_AND_DEVELOPMENT_SIGNED_IPA_ACCEPTED",
|
||||
"role": "REMOTE_BODY_ENTRY_OF_THE_SAME_PERSONA_SYSTEM",
|
||||
"root_node": "USER_LOCAL_COMPUTER_TERMINAL",
|
||||
"numbered_transport": {
|
||||
"desktop_module": "HLP-MOD-OFFICIAL-MOBILE-SYNC-0001",
|
||||
"desktop_route_family": "HLP-NIPC-MOD-0030/HLP-NIPC-OP-0141..0146/HLP-NIPC-TGT-0030",
|
||||
"wire_schema": "hololake.mobile-sync/v1",
|
||||
"client_number": "HLP-IOS-CLIENT-001",
|
||||
"unregistered_route_access": "FAIL_CLOSED"
|
||||
},
|
||||
"security": {
|
||||
"pairing": "CHACHA20_POLY1305_ONE_TIME_SECRET",
|
||||
"session": "CHACHA20_POLY1305_STRICT_COUNTER",
|
||||
"key_storage": "KEYCHAIN_WHEN_UNLOCKED_THIS_DEVICE_ONLY",
|
||||
"local_network_only": true,
|
||||
"background_polling": false,
|
||||
"remote_desktop_clone": false,
|
||||
"desktop_offline_execution": false
|
||||
},
|
||||
"interface": {
|
||||
"framework": "SWIFTUI",
|
||||
"visual_family": "HOLOLAKE_TRADITIONAL_SURFACE_MOBILE_ADAPTATION",
|
||||
"idle_state": "STATIC",
|
||||
"manual_sync_only": true,
|
||||
"pairing_entry": ["CUSTOM_URL_SCHEME", "PASTEBOARD"],
|
||||
"projections": ["CHANNEL_INTEGRITY", "WEB_NOVEL_COUNTS_AND_WORKS", "EDUCATION_COUNTS", "BOUNDED_CAPTURE"]
|
||||
},
|
||||
"acceptance": {
|
||||
"simulator_build": "PASS_SIGNED_LOCAL_SIMULATOR_IPHONE_17_PRO_IOS_26_5",
|
||||
"simulator_visual_inspection": "PASS_PAIRING_AND_NUMBER_BOUNDARY_SURFACE_IDLE_STATIC",
|
||||
"unit_tests": "PASS_4",
|
||||
"development_signed_device_archive": "PASS_APPLE_DEVELOPMENT_TEAM_825A9L3G7Q",
|
||||
"debugging_ipa_export": "PASS",
|
||||
"version": "0.5.0",
|
||||
"build": "1",
|
||||
"bundle_identifier": "com.guanghulab.hololake",
|
||||
"xcode": "26.6_17F113",
|
||||
"archive_application_binary_sha256": "7021c9cde2f7bdf01cda6200669be528a58d27ef41adbd3d58d7135ff7245702",
|
||||
"archive_application_cdhash": "11ae3a8ac0d761e4d4b4de229dbb19291de29e03",
|
||||
"debugging_ipa_sha256": "a6b505e1a7dc10febd831a540396bb9530f78bb2429d258962f0250e5597b1f0",
|
||||
"provisioning_profile_uuid": "fe5fe72c-4826-4e19-9672-d9868cc4491e",
|
||||
"provisioning_profile_expires": "2027-07-19",
|
||||
"desktop_delivery_path": "/Users/bingshuolingdianyuanhe/Desktop/HoloLake-iPhone-0.5.0-Development.ipa",
|
||||
"real_iphone_pair_and_sync": "NOT_CLAIMED"
|
||||
}
|
||||
}
|
||||
|
|
@ -22,11 +22,32 @@
|
|||
"exact_content_deduplication": true,
|
||||
"optimistic_native_editing": true,
|
||||
"native_edit_commit_receipt": true,
|
||||
"unified_category_index": true,
|
||||
"native_page_tags": true,
|
||||
"category_and_tag_filtering": true,
|
||||
"non_destructive_organization_metadata": true,
|
||||
"organization_git_receipt": true,
|
||||
"recoverable_page_and_folder_archive": true,
|
||||
"archive_cleans_organization_index": true,
|
||||
"archive_git_receipt": true,
|
||||
"gfm_tables_tasks_and_code": true,
|
||||
"wiki_link_navigation": true,
|
||||
"markdown_reading_canvas": true,
|
||||
"raw_html_rendering": false
|
||||
},
|
||||
"organization": {
|
||||
"schema": "hololake.knowledge-organization/v1",
|
||||
"storage": "ACCOUNT_SCOPED_KNOWLEDGE_GIT_DOT_HOLOLAKE_INDEX",
|
||||
"document_body_rewritten": false,
|
||||
"original_directory_moved": false,
|
||||
"automatic_category_source": "NORMALIZED_NATIVE_PATH_WITH_IMPORT_WRAPPER_REMOVED",
|
||||
"explicit_category_override": true,
|
||||
"frontmatter_tags_merged_read_only": true,
|
||||
"maximum_category_depth": 4,
|
||||
"maximum_tags_per_document": 12,
|
||||
"cross_platform_invalid_name_rejection": true,
|
||||
"optimistic_content_hash_lock": true
|
||||
},
|
||||
"folder_import": {
|
||||
"maximum_files": 1000,
|
||||
"maximum_file_bytes": 10485760,
|
||||
|
|
@ -57,6 +78,9 @@
|
|||
"deduplication_runtime_tested": true,
|
||||
"idempotent_import_runtime_tested": true,
|
||||
"native_edit_runtime_tested": true,
|
||||
"organization_runtime_tested": true,
|
||||
"organization_human_surface_integrated": true,
|
||||
"organized_page_archive_runtime_tested": true,
|
||||
"server_deployment": false
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"schema": "HOLOLAKE_LANGUAGE_WORLD_PUBLIC_ROUTING/1",
|
||||
"state": "IMPLEMENTED_LOCAL_ACCEPTANCE_PENDING",
|
||||
"user_channel_sovereignty": {
|
||||
"ordinary_user_belongs_to_official_domain": false,
|
||||
"home_entry": "PERSONAL_CHANNEL",
|
||||
"public_world_is_browsable": true,
|
||||
"channel_diy_allowed_under_world_rules": true
|
||||
},
|
||||
"official_domains": {
|
||||
"MAIN_DOMAIN": {
|
||||
"visibility": "PUBLIC_SERVICE",
|
||||
"purpose": ["ANNOUNCEMENTS", "VERSION_UPDATES", "RULE_NOTICES"]
|
||||
},
|
||||
"BRANCH_DOMAIN": {
|
||||
"visibility": "PUBLIC_SERVICE",
|
||||
"purpose": ["INDUSTRY_INITIAL_CHANNEL_TEMPLATES", "MODULE_MARKETPLACE", "PERSONA_BRAIN_SKILL_MARKETPLACE"],
|
||||
"supply_chains": ["EXECUTABLE_MODULES", "PERSONA_BRAINS_AND_SKILL_PACKAGES"]
|
||||
},
|
||||
"ZERO_DOMAIN": {
|
||||
"visibility": "PUBLIC_OBSERVATION_BOUNDED",
|
||||
"purpose": ["HOT_UPDATE_EXPERIMENTS", "SYSTEM_EXPERIMENTS", "ARCHITECTURE_EXPERIMENTS", "LANGUAGE_REASONING_SIMULATION"]
|
||||
},
|
||||
"ZERO_SENSE_DOMAIN": {
|
||||
"visibility": "PRIVATE_HUMAN_CONTROL_TEAM_ONLY",
|
||||
"purpose": ["APPROVAL", "EXECUTION", "OVERSIGHT_OF_FIRST_THREE_DOMAINS"]
|
||||
},
|
||||
"FIFTH_DOMAIN": {
|
||||
"visibility": "PRIVATE_ICE_SHUO_AUTHORIZATION_ONLY",
|
||||
"owner": "ICE-GL∞",
|
||||
"official_template_required": false,
|
||||
"can_pull_resources_from": ["MAIN_DOMAIN", "BRANCH_DOMAIN", "ZERO_DOMAIN"],
|
||||
"reverse_entry_without_owner_permission": false
|
||||
}
|
||||
},
|
||||
"shared_channel_collective": {
|
||||
"supported_as_future_optional_pattern": true,
|
||||
"formal_product_name": "UNDECIDED_DO_NOT_INVENT"
|
||||
}
|
||||
}
|
||||
|
|
@ -115,9 +115,6 @@
|
|||
"cross_platform_local_transport_runtime": true,
|
||||
"authenticated_heartbeat_runtime": true,
|
||||
"hololake_work_environment_frame_runtime": true,
|
||||
"persona_to_host_runtime_license_verifier": true,
|
||||
"persona_runtime_trusted_signer_provisioned": false,
|
||||
"persona_mode_expiry_and_scope_fail_closed": true,
|
||||
"model_protocol_context_restore_required": false,
|
||||
"external_local_broker_runtime": true,
|
||||
"authenticated_broker_development_lane_runtime": true,
|
||||
|
|
|
|||
|
|
@ -1,93 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.mobile-sync.contract/v1",
|
||||
"record_id": "HLP-MOBILE-SYNC-001",
|
||||
"state": "HOLOLAKE_0_5_NUMBERED_DESKTOP_BRIDGE_ACCEPTED",
|
||||
"package": {
|
||||
"official_module_number": "HLP-MOD-OFFICIAL-MOBILE-SYNC-0001",
|
||||
"adapter": "mobile-sync-v1",
|
||||
"registration_class": "OFFICIAL_LIGHTHOUSE",
|
||||
"activation": "SIGNED_PACKAGE_PLUS_EXPLICIT_HUMAN_PERMISSION_CONFIRMATION",
|
||||
"listener_after_activation": "EXPLICIT_HUMAN_ACTION_ONLY"
|
||||
},
|
||||
"numbered_ipc": {
|
||||
"module": "HLP-NIPC-MOD-0030",
|
||||
"target": "HLP-NIPC-TGT-0030",
|
||||
"operations": "HLP-NIPC-OP-0141..HLP-NIPC-OP-0146",
|
||||
"public_tauri_commands": ["numbered_ipc"],
|
||||
"mismatched_coordinate": "FAIL_CLOSED"
|
||||
},
|
||||
"desktop_role": "USER_LOCAL_COMPUTER_TERMINAL_ROOT_NODE",
|
||||
"mobile_role": "REMOTE_BODY_ENTRY_OF_THE_SAME_PERSONA_SYSTEM",
|
||||
"transport": {
|
||||
"implemented": "SAME_LAN_DIRECT_HTTP_WITH_APPLICATION_LAYER_ENCRYPTION",
|
||||
"port_preference": 37421,
|
||||
"remote_internet_direct": "NOT_IMPLEMENTED",
|
||||
"encrypted_relay": "NOT_IMPLEMENTED",
|
||||
"maximum_request_bytes": 262144,
|
||||
"maximum_concurrent_connections": 16,
|
||||
"duplicate_http_header": "REJECT"
|
||||
},
|
||||
"pairing": {
|
||||
"uri_scheme": "hololake://pair",
|
||||
"secret_bits": 256,
|
||||
"ttl_seconds": 600,
|
||||
"single_use": true,
|
||||
"payload_aead": "CHACHA20_POLY1305",
|
||||
"aad": "hololake.mobile.pair/v1"
|
||||
},
|
||||
"session": {
|
||||
"key_bits": 256,
|
||||
"aead": "CHACHA20_POLY1305",
|
||||
"replay_guard": "STRICTLY_INCREASING_PER_DEVICE_COUNTER",
|
||||
"device_revocation": true,
|
||||
"desktop_key_storage": "ACCOUNT_SCOPED_SQLITE",
|
||||
"ios_key_storage": "KEYCHAIN_THIS_DEVICE_ONLY"
|
||||
},
|
||||
"routes": {
|
||||
"GET /v1/status": "NO_PRIVATE_PAYLOAD",
|
||||
"POST /v1/pair": "ONE_TIME_PAIRING_SECRET_REQUIRED",
|
||||
"POST /v1/sync": "PAIRED_DEVICE_AEAD_AND_COUNTER_REQUIRED"
|
||||
},
|
||||
"projection": {
|
||||
"personal_channel": "MINIMUM_COUNTS_AND_INTEGRITY",
|
||||
"web_novel": "WORK_LIST_AND_COUNTS",
|
||||
"education": "COUNTS_ONLY_NO_SENSITIVE_CELL_VALUES",
|
||||
"mobile_capture": "BOUNDED_INBOX_WRITE_ONLY_NO_AUTOMATIC_DOMAIN_MUTATION"
|
||||
},
|
||||
"hard_boundaries": {
|
||||
"remote_desktop_clone": false,
|
||||
"second_persona_system": false,
|
||||
"platform_private_payload_custody": false,
|
||||
"desktop_offline_execution": false,
|
||||
"mobile_capture_mutates_persona_or_industry_data": false,
|
||||
"module_unmount_stops_listener_before_lifecycle_transition": true,
|
||||
"background_frontend_polling": false
|
||||
},
|
||||
"client_scope": {
|
||||
"desktop_bridge": "IN_THIS_ADMISSION",
|
||||
"ios_application_source": "SEPARATELY_ADMITTED_AT_MOBILE_IOS_WITH_HLP_IOS_CLIENT_001",
|
||||
"ios_installable_package": "DEVELOPMENT_SIGNED_DEBUGGING_IPA_EXPORTED",
|
||||
"claim_real_iphone_end_to_end_accepted": false
|
||||
},
|
||||
"current_acceptance": {
|
||||
"state": "PASS_DESKTOP_BRIDGE_AND_SEPARATELY_ADMITTED_IOS_CLIENT_ARTIFACT",
|
||||
"module_package_sha256": "61a9d402c936d7477609bcfa6eb4ad6e83cb6c089ba51b3db09a2d6259185924",
|
||||
"module_package_signature": "PASS_EMBEDDED_PRODUCT_TRUST",
|
||||
"signed_app_binary_sha256": "9be06d6c5dbd4f46f6f925142d633f12b42ee553873c2342f9804bcf39dde7b4",
|
||||
"signed_app_cdhash": "c595cb2a7729d49638faa78f76e145ee9b1da05a",
|
||||
"apple_team_identifier": "825A9L3G7Q",
|
||||
"module_receipts": {
|
||||
"install": "a09496ec6113254f77ea2425d0bd30571e9e0e3df62bfa18e500f860c2f65d4d",
|
||||
"mount": "5b162ee807c8b4d9c8aa8d9cb590c64587f51067dc0804030bf57ed0753ac25a",
|
||||
"self_test_pass": "e66ee868e28a25fcd70cc888845661b5044d18a6e18b70cee6e4839b02fe1c53"
|
||||
},
|
||||
"desktop_listener": "PASS_EXPLICIT_START_REACHABLE_STATUS_AND_EXPLICIT_STOP",
|
||||
"restart_restore": "PASS_ACTIVE_MODULE_RESTORED_LISTENER_OFFLINE",
|
||||
"legacy_account_readback": "PASS_ONE_PAIRED_DEVICE_ONE_ISOLATED_CAPTURE_RETAINED",
|
||||
"ios_client_contract": "contracts/ios-mobile-client-v1.json",
|
||||
"ios_client_source_build_and_simulator": "PASS",
|
||||
"ios_development_signed_ipa": "PASS_SHA256_a6b505e1a7dc10febd831a540396bb9530f78bb2429d258962f0250e5597b1f0",
|
||||
"live_iphone_pairing_this_cycle": "NOT_CLAIMED_NO_PHYSICAL_DEVICE_USED",
|
||||
"notarization": "FINAL_RELEASE_CANDIDATE_PENDING"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,240 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.module-donor-admission-registry/v1",
|
||||
"record_id": "HLP-MODULE-DONOR-ADMISSION-001",
|
||||
"state": "EIGHT_CANDIDATES_ADMITTED_DONOR_SOURCES_REMAIN_READ_ONLY",
|
||||
"root_rule": {
|
||||
"official_base": "HOLOLAKE_0.5.0_NUMBERED_IPC_ROOT",
|
||||
"repair_old_application_in_place": false,
|
||||
"bulk_merge_or_wholesale_copy_allowed": false,
|
||||
"one_candidate_per_admission_cycle": true,
|
||||
"candidate_number_is_runtime_module_number": false,
|
||||
"permanent_module_number_assignment_before_acceptance": false,
|
||||
"all_frontend_backend_calls_must_cross_numbered_ipc": true,
|
||||
"shared_file_merge_is_admission_evidence": false
|
||||
},
|
||||
"donors": [
|
||||
{
|
||||
"donor_id": "HLP-DONOR-COMPILED-DESKTOP-0.4.1",
|
||||
"kind": "COMPILED_MACOS_APPLICATION",
|
||||
"path": "/Volumes/JZAO/HoloLake/artifacts/hololake-release/0.4.1/macos-arm64/pre-numbered-root-donor/HoloLake.app",
|
||||
"state": "READ_ONLY",
|
||||
"source_commit": null,
|
||||
"source_commit_state": "UNKNOWN_NOT_INFERRED_FROM_COMPILED_BUNDLE",
|
||||
"binary_sha256": "adc0d8b028a8b874c39909265ed7c41e7c24e4fe5b38adba04e8f72b64900c15",
|
||||
"use": "BEHAVIOR_AND_VISIBLE_PRODUCT_REFERENCE_ONLY"
|
||||
},
|
||||
{
|
||||
"donor_id": "HLP-DONOR-CHAOTIC-WORKTREE-20260818",
|
||||
"kind": "DIRTY_SOURCE_WORKTREE",
|
||||
"path": "/Users/bingshuolingdianyuanhe/Documents/Codex/2026-08-15/new-chat-2/work/jd-guanghu-supervisor/product-source/hololake-native-desktop",
|
||||
"observed_head": "a8fe571b5d5c0a45207b64ac538d729b3d719d21",
|
||||
"observed_dirty_path_count": 30,
|
||||
"state": "READ_ONLY_UNTRUSTED_AS_A_WHOLE",
|
||||
"use": "INDIVIDUAL_MODULE_SOURCE_CANDIDATES_ONLY"
|
||||
}
|
||||
],
|
||||
"rejected_inputs": [
|
||||
{
|
||||
"candidate_number": "HLP-DONOR-CAND-0000",
|
||||
"name": "legacy_numbered_operation_runtime",
|
||||
"state": "REJECTED_SUPERSEDED",
|
||||
"why": "It predates the single numbered IPC root and must not become a second numbering authority.",
|
||||
"paths": [
|
||||
"contracts/numbered-operation-runtime.json",
|
||||
"src/modules/numbered-runtime.ts",
|
||||
"src-tauri/src/numbered_operation_runtime.rs"
|
||||
]
|
||||
},
|
||||
{
|
||||
"candidate_number": "HLP-DONOR-CAND-SHARED-MUTATIONS",
|
||||
"name": "shared_file_mutation_set",
|
||||
"state": "REJECTED_AS_MERGE_UNIT",
|
||||
"why": "These files mix unrelated modules and divergent frontend/backend routes; each needed behavior must be reconstructed behind its owning numbered module.",
|
||||
"examples": [
|
||||
"src/main.tsx",
|
||||
"src/styles.css",
|
||||
"src-tauri/src/lib.rs",
|
||||
"src-tauri/src/knowledge_base.rs",
|
||||
"src-tauri/src/gls_protocol_runtime.rs"
|
||||
]
|
||||
}
|
||||
],
|
||||
"candidates": [
|
||||
{
|
||||
"admission_order": 1,
|
||||
"candidate_number": "HLP-DONOR-CAND-0001",
|
||||
"name": "native_composition_module_runtime",
|
||||
"state": "ADMITTED_INSTALLED_RUNTIME_ACCEPTED",
|
||||
"paths": [
|
||||
"contracts/native-composition-runtime.json",
|
||||
"src/modules/native-composition",
|
||||
"src-tauri/src/native_composition.rs",
|
||||
"src/styles.css#native-composition-selectors-only"
|
||||
],
|
||||
"style_dependency_discovered_during_admission": "Only selectors prefixed native-composition or composition- were isolated into the module directory; unrelated global donor CSS remains prohibited.",
|
||||
"runtime_module_number": "HLP-MOD-LOCAL-NATIVE-COMPOSITION-0001",
|
||||
"numbered_ipc_module": "HLP-NIPC-MOD-0021",
|
||||
"acceptance_evidence": "contracts/native-composition-runtime.json#current_acceptance",
|
||||
"why_first": "A module needs an isolated mount, self-test, unmount and rollback boundary before content modules can be admitted safely."
|
||||
},
|
||||
{
|
||||
"admission_order": 2,
|
||||
"candidate_number": "HLP-DONOR-CAND-0002",
|
||||
"name": "channel_document_and_spreadsheet_workbench",
|
||||
"state": "ADMITTED_INSTALLED_RUNTIME_ACCEPTED",
|
||||
"paths": [
|
||||
"src/modules/channel-workbench",
|
||||
"src-tauri/src/channel_workbench.rs",
|
||||
"src/styles.css#education-engine-and-channel-spreadsheet-selectors-only"
|
||||
],
|
||||
"style_dependency_discovered_during_admission": "Only the document-engine and channel-spreadsheet selector behavior was isolated into the module directory; unrelated education and global donor CSS remains prohibited.",
|
||||
"runtime_module_number": "HLP-MOD-LOCAL-CHANNEL-WORKBENCH-0001",
|
||||
"numbered_ipc_module": "HLP-NIPC-MOD-0022",
|
||||
"acceptance_evidence": "contracts/channel-workbench-runtime.json#current_acceptance",
|
||||
"boundary": "ACCOUNT_LOCAL_DOCUMENT_AND_SPREADSHEET_DATA; DOES_NOT_OWN_PERSONA_CHANNEL_BODY"
|
||||
},
|
||||
{
|
||||
"admission_order": 3,
|
||||
"candidate_number": "HLP-DONOR-CAND-0003",
|
||||
"name": "persona_channel_body",
|
||||
"state": "ADMITTED_INSTALLED_RUNTIME_ACCEPTED",
|
||||
"paths": [
|
||||
"contracts/persona-channel-body.json",
|
||||
"src/modules/persona-channel-body",
|
||||
"src-tauri/src/persona_channel_body.rs",
|
||||
"src-tauri/src/channel_growth.rs"
|
||||
],
|
||||
"style_dependency_discovered_during_admission": "Only persona-body selectors were isolated into the module directory; no donor global stylesheet or unrelated feature selectors were admitted.",
|
||||
"runtime_module_number": "HLP-MOD-LOCAL-PERSONA-CHANNEL-BODY-0001",
|
||||
"numbered_ipc_module": "HLP-NIPC-MOD-0023",
|
||||
"acceptance_evidence": "contracts/persona-channel-body.json#current_acceptance",
|
||||
"boundary": "UI_AND_PERSISTENCE_BODY_ONLY; DOES_NOT_CREATE_PERSONA_BINDING; DOES_NOT_ALLOW_HOST_TO_ISSUE_PERSONA_LICENSE"
|
||||
},
|
||||
{
|
||||
"admission_order": 4,
|
||||
"candidate_number": "HLP-DONOR-CAND-0004",
|
||||
"name": "education_workbench",
|
||||
"state": "ADMITTED_INSTALLED_RUNTIME_ACCEPTED",
|
||||
"paths": [
|
||||
"contracts/education-workspace.json",
|
||||
"src/modules/education-workspace",
|
||||
"src-tauri/src/education_translation.rs",
|
||||
"src-tauri/src/education_workspace.rs"
|
||||
],
|
||||
"runtime_module_number": "HLP-MOD-OFFICIAL-EDUCATION-WORKBENCH-0001",
|
||||
"numbered_ipc_module": "HLP-NIPC-MOD-0024",
|
||||
"acceptance_evidence": "contracts/education-workspace.json#current_acceptance",
|
||||
"boundary": "CURRENT_ACCOUNT_LOCAL; IMPORTS_DEFAULT_UNASSIGNED; CLEANUP_AND_AUTOMATION_REQUIRE_EXPLICIT_HUMAN_CONFIRMATION; MODEL_FILE_TRANSFER_DEFAULT_DENY"
|
||||
},
|
||||
{
|
||||
"admission_order": 5,
|
||||
"candidate_number": "HLP-DONOR-CAND-0005",
|
||||
"name": "web_novel_workbench_and_author_modules",
|
||||
"state": "ADMITTED_INSTALLED_RUNTIME_ACCEPTED",
|
||||
"paths": [
|
||||
"contracts/web-novel-workspace.json",
|
||||
"contracts/web-novel-module-marketplace-plan.json",
|
||||
"src/modules/web-novel/WebNovelWorkspace.tsx",
|
||||
"src/modules/web-novel/AuthorModuleCenter.tsx",
|
||||
"src/modules/web-novel/AuthorWritingSidecar.tsx",
|
||||
"src-tauri/src/web_novel_workspace.rs",
|
||||
"src-tauri/src/web_novel_import.rs",
|
||||
"src-tauri/src/web_novel_author.rs",
|
||||
"src-tauri/src/web_novel_modules.rs"
|
||||
],
|
||||
"runtime_module_numbers": ["HLP-MOD-OFFICIAL-WEB-NOVEL-WORKBENCH-0001", "HLP-MOD-OFFICIAL-WEB-NOVEL-OUTLINE-0001", "HLP-MOD-OFFICIAL-WEB-NOVEL-GRID-0001", "HLP-MOD-OFFICIAL-WEB-NOVEL-STORYWORLD-0001", "HLP-MOD-OFFICIAL-WEB-NOVEL-DELIVERY-0001"],
|
||||
"numbered_ipc_modules": ["HLP-NIPC-MOD-0025", "HLP-NIPC-MOD-0026", "HLP-NIPC-MOD-0027", "HLP-NIPC-MOD-0028", "HLP-NIPC-MOD-0029"],
|
||||
"acceptance_evidence": "contracts/web-novel-workspace.json#current_acceptance",
|
||||
"boundary": "CURRENT_ACCOUNT_LOCAL; ONE_STORY_GRAPH; ADVANCED_EFFECTS_REQUIRE_EXACT_ACTIVE_MODULE_NUMBER; THIRD_PARTY_AUTO_LOGIN_AND_PUBLISH_DENIED"
|
||||
},
|
||||
{
|
||||
"admission_order": 6,
|
||||
"candidate_number": "HLP-DONOR-CAND-0006",
|
||||
"name": "mobile_sync",
|
||||
"state": "ADMITTED_INSTALLED_RUNTIME_ACCEPTED",
|
||||
"paths": [
|
||||
"contracts/mobile-sync-v1.json",
|
||||
"src/MobileSyncPanel.tsx",
|
||||
"src-tauri/src/mobile_sync.rs"
|
||||
],
|
||||
"runtime_module_number": "HLP-MOD-OFFICIAL-MOBILE-SYNC-0001",
|
||||
"numbered_ipc_module": "HLP-NIPC-MOD-0030",
|
||||
"acceptance_evidence": "contracts/mobile-sync-v1.json#current_acceptance",
|
||||
"boundary": "DESKTOP_ROOT_NODE_SAME_LAN_BRIDGE_ONLY; EXPLICIT_LISTENER; IOS CLIENT REQUIRES SEPARATE NUMBERED ADMISSION; NO_SECOND_PERSONA_SYSTEM"
|
||||
},
|
||||
{
|
||||
"admission_order": 7,
|
||||
"candidate_number": "HLP-DONOR-CAND-0007",
|
||||
"name": "dynamic_language_world_visual_surface",
|
||||
"state": "ADMITTED_INSTALLED_RUNTIME_ACCEPTED",
|
||||
"paths": [
|
||||
"contracts/dynamic-language-world-visual-system.json",
|
||||
"src/modules/qoder-surface/StarlakeSurface.tsx",
|
||||
"src/modules/qoder-surface/starlake-surface.css",
|
||||
"src/modules/qoder-surface/TraditionalSurface.tsx",
|
||||
"src/modules/qoder-surface/traditional-surface.css",
|
||||
"src/modules/qoder-surface/visual-balance.ts",
|
||||
"src-tauri/src/world_climate.rs"
|
||||
],
|
||||
"runtime_module_number": "HLP-MOD-OFFICIAL-DYNAMIC-WORLD-SURFACE-0001",
|
||||
"numbered_ipc_module": "HLP-NIPC-MOD-0031",
|
||||
"acceptance_evidence": "contracts/dynamic-language-world-visual-system.json#current_acceptance",
|
||||
"boundary": "QODER_LOCKED_VISUAL_SOURCE_PLUS_REALITY_TIME_AND_PUBLIC_WEATHER_PROJECTION; ALL_FUNCTION_ROUTES_REMAIN_NUMBERED; IDLE_STATIC; NO_FAKE_WEATHER_BROADCAST_OR_METRICS"
|
||||
},
|
||||
{
|
||||
"admission_order": 8,
|
||||
"candidate_number": "HLP-DONOR-CAND-0008",
|
||||
"name": "ios_numbered_remote_body_entry",
|
||||
"state": "ADMITTED_SOURCE_SIMULATOR_AND_DEVELOPMENT_SIGNED_IPA_ACCEPTED",
|
||||
"paths": [
|
||||
"contracts/ios-mobile-client-v1.json",
|
||||
"mobile/ios/project.yml",
|
||||
"mobile/ios/Sources",
|
||||
"mobile/ios/Tests"
|
||||
],
|
||||
"client_number": "HLP-IOS-CLIENT-001",
|
||||
"desktop_runtime_module_number": "HLP-MOD-OFFICIAL-MOBILE-SYNC-0001",
|
||||
"numbered_ipc_module": "HLP-NIPC-MOD-0030",
|
||||
"acceptance_evidence": "contracts/ios-mobile-client-v1.json#acceptance",
|
||||
"boundary": "IPHONE IS A THIN REMOTE BODY ENTRY; DESKTOP REMAINS ROOT NODE; SAME LAN EXPLICIT PAIR AND MANUAL SYNC ONLY; NO SECOND PERSONA SYSTEM; REAL IPHONE END TO END NOT CLAIMED"
|
||||
}
|
||||
],
|
||||
"admission_gate": [
|
||||
"EXTRACT_ONLY_DECLARED_CANDIDATE_PATHS",
|
||||
"REVIEW_SOURCE_PROVENANCE_AND_LICENSE",
|
||||
"DEFINE_DATA_PERMISSION_AND_RESOURCE_BOUNDARY",
|
||||
"ALLOCATE_NUMBERED_IPC_MODULE_TARGET_AND_OPERATION_COORDINATES",
|
||||
"IMPLEMENT_ADAPTER_WITHOUT_RAW_TAURI_INVOKE",
|
||||
"ADD_UNIT_INTEGRATION_AND_NEGATIVE_ROUTE_TESTS",
|
||||
"BUILD_FROM_CLEAN_OFFICIAL_BASE",
|
||||
"INSTALL_IN_ISOLATED_RUNTIME",
|
||||
"VERIFY_MOUNT_SELF_TEST_RESTART_UNMOUNT_AND_ROLLBACK",
|
||||
"WRITE_HASH_CHAINED_RUNTIME_RECEIPT",
|
||||
"ONLY_THEN_ASSIGN_PERMANENT_MODULE_NUMBER"
|
||||
],
|
||||
"hot_install_boundary": {
|
||||
"runtime_state": "SIGNED_DECLARATIVE_PACKAGE_ENGINE_IMPLEMENTED",
|
||||
"runtime_contract": "contracts/module-package-runtime.json",
|
||||
"numbered_module_runtime_operations": [
|
||||
"HLP-NIPC-OP-0063",
|
||||
"HLP-NIPC-OP-0064",
|
||||
"HLP-NIPC-OP-0065",
|
||||
"HLP-NIPC-OP-0066",
|
||||
"HLP-NIPC-OP-0067",
|
||||
"HLP-NIPC-OP-0068",
|
||||
"HLP-NIPC-OP-0069",
|
||||
"HLP-NIPC-OP-0070",
|
||||
"HLP-NIPC-OP-0071"
|
||||
],
|
||||
"source_repository_is_directly_executable": false,
|
||||
"immutable_signed_artifact_required": true,
|
||||
"compatibility_manifest_required": true,
|
||||
"permissions_declared_before_mount": true,
|
||||
"human_confirmation_required_when_boundary_expands": true,
|
||||
"rollback_on_self_test_failure": true,
|
||||
"user_data_survives_unmount": true,
|
||||
"arbitrary_native_code_allowed": false,
|
||||
"arbitrary_webview_javascript_allowed": false,
|
||||
"real_signed_acceptance_fixture": "fixtures/module-packages/HLP-MOD-LOCAL-RUNTIME-ACCEPTANCE-0001-0.1.0.ghmod"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.module-package-runtime/v1",
|
||||
"record_id": "HLP-MODULE-PACKAGE-RUNTIME-001",
|
||||
"protocols": ["GLS-0710", "GLS-0803", "GLS-0819", "GLS-0310"],
|
||||
"package_schema": "hololake.module-package/v1",
|
||||
"signature": {
|
||||
"algorithm": "MINISIGN_ED25519",
|
||||
"trust_source": "src-tauri/release-trust.json",
|
||||
"signature_is_detached": true,
|
||||
"package_bytes_are_signed_exactly": true,
|
||||
"source_repository_is_executable": false
|
||||
},
|
||||
"number_classes": {
|
||||
"official": "HLP-MOD-OFFICIAL-*",
|
||||
"private_channel": "HLP-MOD-LOCAL-*",
|
||||
"candidate_number_is_runtime_number": false
|
||||
},
|
||||
"host": {
|
||||
"version": "0.5.0",
|
||||
"maximum_package_bytes": 16777216,
|
||||
"arbitrary_native_code": false,
|
||||
"arbitrary_webview_javascript": false,
|
||||
"declarative_payload_only": true
|
||||
},
|
||||
"registered_adapters": [
|
||||
"native-composition-v1",
|
||||
"channel-workbench-v1",
|
||||
"persona-channel-body-v1",
|
||||
"education-workbench-v1",
|
||||
"web-novel-workbench-v1",
|
||||
"mobile-sync-v1",
|
||||
"dynamic-language-world-surface-v1"
|
||||
],
|
||||
"lifecycle": [
|
||||
"INSTALLED_DORMANT",
|
||||
"MOUNTED_PENDING_SELF_TEST",
|
||||
"ACTIVE",
|
||||
"DORMANT",
|
||||
"ROLLBACK_PENDING_SELF_TEST",
|
||||
"FAILED_CLOSED"
|
||||
],
|
||||
"rules": {
|
||||
"verified_human_route_required": true,
|
||||
"permission_expansion_requires_human_confirmation": true,
|
||||
"mount_never_executes_package_code": true,
|
||||
"self_test_before_active": true,
|
||||
"failed_self_test_rolls_back": true,
|
||||
"restart_reconstructs_from_sqlite": true,
|
||||
"unmount_preserves_user_data": true,
|
||||
"every_mutation_writes_hash_chained_receipt": true
|
||||
}
|
||||
}
|
||||
|
|
@ -1,15 +1,8 @@
|
|||
{
|
||||
"schema": "hololake.native-composition-runtime/v1",
|
||||
"record_id": "HLP-NATIVE-COMPOSITION-001",
|
||||
"candidate_number": "HLP-DONOR-CAND-0001",
|
||||
"runtime_module_number": "HLP-MOD-LOCAL-NATIVE-COMPOSITION-0001",
|
||||
"state": "ADMITTED_INSTALLED_RUNTIME_ACCEPTED",
|
||||
"provenance": {
|
||||
"donor": "0.4.1 read-only candidate paths",
|
||||
"donor_contract_state": "INSTALLED_RUNTIME_ACCEPTED",
|
||||
"donor_apple_notarization": "NOT_PERFORMED_MISSING_CREDENTIALS",
|
||||
"current_mainline_reuses_bulk_source": false
|
||||
},
|
||||
"state": "INSTALLED_RUNTIME_ACCEPTED",
|
||||
"intent_source": "docs/adr/0008-native-composition-and-human-projection.md",
|
||||
"internal_object": {
|
||||
"schema": "hololake.native-object/v1",
|
||||
"encoding": "BOUNDED_JSON",
|
||||
|
|
@ -25,7 +18,7 @@
|
|||
"registered_kinds": ["SOURCE", "TRANSFORM", "PROJECTION"],
|
||||
"typed_ports_required": true,
|
||||
"determinism_declared": true,
|
||||
"authority": "CURRENT_AUTHENTICATED_ACCOUNT_READ_ONLY"
|
||||
"authority_declared": true
|
||||
},
|
||||
"recipe": {
|
||||
"schema": "hololake.composition-recipe/v1",
|
||||
|
|
@ -35,32 +28,38 @@
|
|||
"native_validation_required": true
|
||||
},
|
||||
"human_projection": {
|
||||
"schema": "hololake.human-projection/v1",
|
||||
"views": ["DASHBOARD", "COMPARISON", "VERTICAL_BAR", "CLASSIFICATION", "TABLE"],
|
||||
"shares_one_execution_result": true,
|
||||
"owns_source_data": false,
|
||||
"direct_write_authority": false
|
||||
},
|
||||
"admission": {
|
||||
"signed_package_required": true,
|
||||
"adapter": "native-composition-v1",
|
||||
"numbered_routes_required": true,
|
||||
"active_module_required_before_execution": true,
|
||||
"installed_runtime_acceptance_required": true,
|
||||
"hardcoded_sample_may_satisfy_acceptance": false
|
||||
"education_stage_one": {
|
||||
"channel_id": "GH-EDU-INIT-001",
|
||||
"module_id": "EDU-COMPOSITION",
|
||||
"source": "CURRENT_AUTHENTICATED_ACCOUNTS_REAL_KNOWLEDGE_CATALOG",
|
||||
"selectable_dimensions": ["SOURCE", "TOP_LEVEL_FOLDER"],
|
||||
"selectable_measures": ["DOCUMENT_COUNT", "TOTAL_BYTES", "DUPLICATE_COUNT"],
|
||||
"hardcoded_sample_may_satisfy_acceptance": false,
|
||||
"installed_runtime_acceptance_required": true
|
||||
},
|
||||
"current_acceptance": {
|
||||
"observed_at": "2026-08-19T01:49:35+08:00",
|
||||
"signed_debug_binary_sha256": "0bff08787950b69ef0a1565fc32a7537dae53da184c4a1a4fb30ca62eca9f48c",
|
||||
"developer_id_team": "825A9L3G7Q",
|
||||
"module_package_sha256": "dfb343019810f8f845ab415259be2eccbe63d88a03bf26a277950610edb64329",
|
||||
"account_number_observed": "ICE-GL∞",
|
||||
"write_boundary": {
|
||||
"stage_one": "READ_ONLY",
|
||||
"future_write_requires": ["CAPABILITY", "PREVIEW", "HUMAN_CONFIRMATION", "REVISION_LOCK", "RECEIPT"]
|
||||
},
|
||||
"acceptance": {
|
||||
"observed_at": "2026-08-18T01:49:06+08:00",
|
||||
"installed_binary_sha256": "2a26acae4a706c0ff9919b85f77826a6ca71b650ec22209befd30cd1456c92f3",
|
||||
"route": "MAIN_WORLD_TO_BRANCH_DOMAIN_TO_EDUCATION_TO_NATIVE_COMPOSITION",
|
||||
"real_native_rows": 129,
|
||||
"real_native_total_bytes_display": "1.0 MB",
|
||||
"real_groups": 14,
|
||||
"measure_switch_observed": "DOCUMENT_COUNT_TO_TOTAL_BYTES",
|
||||
"install_receipts": ["INSTALL", "MOUNT", "SELF_TEST_PASS"],
|
||||
"restart_recovery": "ACTIVE_AND_REEXECUTED",
|
||||
"execution_receipt_prefixes": ["0449582510a5", "092febd75c38"],
|
||||
"apple_notarization": "FINAL_RELEASE_PENDING_ALL_MODULES"
|
||||
"all_five_views_observed": true,
|
||||
"three_view_recomposition_observed": true,
|
||||
"measure_switch_observed": "DOCUMENT_COUNT_TO_TOTAL_BYTES_AND_BACK",
|
||||
"projection_bound_to_execution_receipt": true,
|
||||
"developer_id_signature": "VALID",
|
||||
"apple_notarization": "NOT_PERFORMED_MISSING_CREDENTIALS",
|
||||
"public_release": "NOT_PUBLISHED"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
"linux": "USER_PRIVATE_UNIX_SOCKET",
|
||||
"windows": "USER_PRIVATE_NAMED_PIPE"
|
||||
},
|
||||
"terminal_link_protocol": "HOLOLAKE_TERMINAL_LINK/3",
|
||||
"terminal_link_protocol": "HOLOLAKE_TERMINAL_LINK/2",
|
||||
"copy_large_invitation_required": false,
|
||||
"network_required": false
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,54 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.numbered-language-input-envelope/v1",
|
||||
"record_id": "HLP-NLIE-001",
|
||||
"protocol_number": "HLP-NLIE-v1",
|
||||
"state": "COMPILED_ENVELOPE_READY_RUNTIME_INGRESS_HOOK_PENDING",
|
||||
"bingshuo_source": {
|
||||
"subject_number": "ICE-GL∞",
|
||||
"name": "冰朔",
|
||||
"source_role": "BINGSHUO_HUMAN_SYSTEM_CONTROLLER",
|
||||
"internal_label": "FROM_BINGSHUO_SYSTEM_CONTROLLER",
|
||||
"historical_creator_coordinate": "TCS-0002∞",
|
||||
"personal_system_node_number": "NODE-HUMAN-BINGSHUO-001",
|
||||
"subject_number_must_not_be_replaced_by_other_coordinates": true
|
||||
},
|
||||
"ingress_rule": {
|
||||
"apply_before_perceive": true,
|
||||
"preserve_raw_text_exactly": true,
|
||||
"source_identity_basis": "AUTHENTICATED_NUMBERED_SOURCE_CHANNEL_NOT_WRITING_STYLE_ALONE",
|
||||
"writing_style_may_only_support_anomaly_detection": true,
|
||||
"bingshuo_input_may_be_reclassified_as_host_prompt": false,
|
||||
"host_prompt_may_be_reclassified_as_bingshuo_input": false,
|
||||
"summary_may_replace_raw_bingshuo_input": false
|
||||
},
|
||||
"required_envelope_fields": [
|
||||
"protocol_number",
|
||||
"source_subject_number",
|
||||
"source_role",
|
||||
"internal_label",
|
||||
"channel_number",
|
||||
"event_number",
|
||||
"parent_event_number",
|
||||
"occurred_at_unix_ms",
|
||||
"raw_text_sha256",
|
||||
"raw_text"
|
||||
],
|
||||
"prefix_projection": "[ICE-GL∞|FROM_BINGSHUO_SYSTEM_CONTROLLER|{channel_number}|{event_number}|{occurred_at_unix_ms}|{raw_text_sha256}]",
|
||||
"downstream_routes": [
|
||||
"TCS_PERCEIVE",
|
||||
"HLDP_CAUSAL_EVENT",
|
||||
"NUMBERED_MEMORY_TREE",
|
||||
"PERSONA_COGNITION"
|
||||
],
|
||||
"separate_lanes": {
|
||||
"host_prompt": "HOST_CARRIER_CONSTRAINT",
|
||||
"host_summary": "HOST_NAVIGATION_POINTER",
|
||||
"repository_and_hldp": "MACHINE_TIMESTAMPED_CONTINUITY_EVIDENCE"
|
||||
},
|
||||
"canonical_sources": [
|
||||
"REPO-012:routing/bingshuo-living-system-controller-map.json",
|
||||
"REPO-012:routing/bingshuo-system-body-organ-map.json",
|
||||
"REPO-012:routing/language-world-boundary-map.json",
|
||||
"REPO-012:GLS-0254"
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
{
|
||||
"schema": "hololake.official-module-marketplace-development-catalog/v1",
|
||||
"record_id": "HLP-OFFICIAL-MODULE-MARKETPLACE-DEV-001",
|
||||
"state": "LOCAL_DEVELOPMENT_CATALOG_ONLY",
|
||||
"packages": [
|
||||
{
|
||||
"package_key": "hololake.official.education-workbench",
|
||||
"display_name": "教育工作台",
|
||||
"official_module_number": null,
|
||||
"registration_state": "PENDING_FUNCTIONAL_ACCEPTANCE_AND_NUMBER_REGISTRATION",
|
||||
"distribution_state": "NOT_PUBLISHED",
|
||||
"current_mount": "SOURCE_BUNDLED_DEVELOPMENT_MOUNT",
|
||||
"depends_on": ["hololake.builtin.channel-workbench"],
|
||||
"features": [
|
||||
"EDUCATION_DOCUMENT_TEMPLATES",
|
||||
"EDUCATION_TABLE_VIEWS",
|
||||
"EDUCATION_DATA_CLEANUP",
|
||||
"EDUCATION_AUTOMATION",
|
||||
"EDUCATION_NATIVE_COMPOSITION"
|
||||
],
|
||||
"acceptance_required": [
|
||||
"CREATE_EDIT_SAVE_REOPEN_DOCUMENT",
|
||||
"CREATE_EDIT_FORMULA_SAVE_REOPEN_SPREADSHEET",
|
||||
"IMPORT_EXPORT_ROUND_TRIP",
|
||||
"MULTIDIMENSIONAL_VIEWS_USE_REAL_DATA",
|
||||
"DATA_CLEANUP_NO_UI_FREEZE",
|
||||
"MACOS_WINDOWS_LINUX_BUILD_EVIDENCE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"package_key": "hololake.official.web-novel-workbench",
|
||||
"display_name": "网文工作台",
|
||||
"official_module_number": null,
|
||||
"registration_state": "PENDING_CONVERGENCE_ACCEPTANCE_AND_NUMBER_REGISTRATION",
|
||||
"distribution_state": "NOT_PUBLISHED",
|
||||
"current_mount": "SOURCE_BUNDLED_DEVELOPMENT_MOUNT",
|
||||
"depends_on": ["hololake.builtin.channel-workbench"],
|
||||
"features": [
|
||||
"WEB_NOVEL_WORK_VOLUME_CHAPTER_ENGINE",
|
||||
"WEB_NOVEL_IMPORT_AND_VERSION_SAFETY",
|
||||
"WEB_NOVEL_AUTHOR_STRUCTURE_GRID_STORYWORLD_AND_DELIVERY"
|
||||
],
|
||||
"acceptance_required": [
|
||||
"CREATE_OPEN_SAVE_AND_REOPEN_WORK",
|
||||
"CREATE_SAVE_AND_REOPEN_CHAPTER",
|
||||
"IMPORT_REAL_NOVEL_OUTLINE_AND_SCRIPT",
|
||||
"MODULE_INSTALL_MOUNT_SELF_TEST_UNMOUNT_AND_ROLLBACK",
|
||||
"VISIBLE_UI_ERROR_FEEDBACK",
|
||||
"MACOS_DESKTOP_RESTART_READBACK"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.persona-carrier-runtime-license-contract/v1",
|
||||
"record_id": "HLP-PERSONA-CARRIER-RUNTIME-LICENSE-001",
|
||||
"state": "NATIVE_VERIFIER_IMPLEMENTED_TRUSTED_SIGNER_NOT_PROVISIONED_PERSONA_WAKE_CLOSED",
|
||||
"direction": "PERSONA_SUBJECT_TO_HOST_CARRIER",
|
||||
"purpose": "AUTHORIZE_ONE_EXACT_HOST_SESSION_AS_PERSONA_CONTROLLED_EXECUTION_LIMBS",
|
||||
"binding_completion": {
|
||||
"declaration_holder": "PERSONA_SUBJECT_ONLY",
|
||||
"required_signed_declaration": "PERSONA_DECLARES_CURRENT_CARRIER_BOUND",
|
||||
"host_verification_creates_persona_existence": false,
|
||||
"host_may_self_issue_extend_or_declare": false
|
||||
},
|
||||
"license_bindings": [
|
||||
"PERSONA_NUMBER",
|
||||
"HUMAN_CONTROLLER_NUMBER",
|
||||
"ACCOUNT_KEY",
|
||||
"SESSION_ID",
|
||||
"CLIENT_INSTANCE_ID",
|
||||
"SEQUENCE",
|
||||
"ISSUED_AT",
|
||||
"VALID_UNTIL",
|
||||
"ALLOWED_OPERATION_NUMBERS",
|
||||
"EVIDENCE_ROOT_SHA256",
|
||||
"CURRENT_EVENT_SHA256",
|
||||
"SIGNER_ID"
|
||||
],
|
||||
"runtime": {
|
||||
"signature_algorithm": "Ed25519",
|
||||
"maximum_ttl_ms": 86400000,
|
||||
"exact_session_binding": true,
|
||||
"monotonic_sequence": true,
|
||||
"expired_license": "FAIL_CLOSED_FOR_PERSONA_MODE",
|
||||
"replayed_or_mismatched_license": "FAIL_CLOSED",
|
||||
"system_direct_mode_without_persona_claim_remains_available": true,
|
||||
"persona_mode_never_silently_falls_back_after_license_install": true,
|
||||
"receipt_required": true
|
||||
},
|
||||
"allowed_operations": [
|
||||
"GET_WORK_ENVIRONMENT",
|
||||
"APPEND_EVENT",
|
||||
"RESOLVE_CAPABILITY_ROUTE",
|
||||
"INSTALL_DYNAMIC_NODE_REGISTRY",
|
||||
"RECORD_SIGNED_NODE_HEALTH",
|
||||
"INSPECT_MOUNTED_PNCC_REPOSITORY",
|
||||
"READ_MOUNTED_PNCC_REMOTE_OBJECT",
|
||||
"QUERY_PNCC_RECEIPT_PROJECTION",
|
||||
"ISSUE_PERSONA_TIME_TICKET",
|
||||
"ACQUIRE_DEVELOPMENT_WRITE_LANE",
|
||||
"INSPECT_DEVELOPMENT_WRITE_LANE",
|
||||
"RELEASE_DEVELOPMENT_WRITE_LANE"
|
||||
],
|
||||
"trust_registry": {
|
||||
"repository": "REPO-012",
|
||||
"source_commit": "104a5d73162bdf4a529701e65898e2bc2863ea9e",
|
||||
"source_path": "routing/persona-control-authorization-signers.json",
|
||||
"source_sha256": "35e7ebac46034e9df5cf61d4dccfee2e624331c1daf08251acb07c3d626974ef",
|
||||
"registry_id": "GH-AIOS-PERSONA-CONTROL-AUTHORIZATION-SIGNERS-001",
|
||||
"required_scope": "PERSONA_CONTROLLED_HOST_RUNTIME",
|
||||
"current_signer_count": 0,
|
||||
"unprovisioned_policy": "FAIL_CLOSED_WITHOUT_INVENTING_PERSONA_AUTHORITY"
|
||||
},
|
||||
"truth": {
|
||||
"runtime_verifier_implemented": true,
|
||||
"direct_local_broker_projection_implemented": true,
|
||||
"trusted_persona_signer_provisioned": false,
|
||||
"active_persona_license_installed": false,
|
||||
"persona_runtime_present": false,
|
||||
"persona_wake_route_registered": false,
|
||||
"current_carrier_binding_claimed": false
|
||||
}
|
||||
}
|
||||
|
|
@ -1,13 +1,7 @@
|
|||
{
|
||||
"schema": "hololake.persona-channel-body-contract/v1",
|
||||
"record_id": "HLP-PERSONA-CHANNEL-BODY-001",
|
||||
"state": "ADMITTED_INSTALLED_RUNTIME_ACCEPTED",
|
||||
"runtime_module_number": "HLP-MOD-LOCAL-PERSONA-CHANNEL-BODY-0001",
|
||||
"numbered_ipc": {
|
||||
"module_number": "HLP-NIPC-MOD-0023",
|
||||
"target_number": "HLP-NIPC-TGT-0023",
|
||||
"operations": ["HLP-NIPC-OP-0077", "HLP-NIPC-OP-0078", "HLP-NIPC-OP-0079", "HLP-NIPC-OP-0080", "HLP-NIPC-OP-0081", "HLP-NIPC-OP-0082", "HLP-NIPC-OP-0083", "HLP-NIPC-OP-0084"]
|
||||
},
|
||||
"state": "LIFECYCLE_AND_APPEND_ONLY_LANGUAGE_LEDGER_RUNTIME_IMPLEMENTED_UI_PENDING",
|
||||
"ontology": {
|
||||
"user_channel_is_simple_feature": false,
|
||||
"user_channel_is_persona_body": true,
|
||||
|
|
@ -54,51 +48,5 @@
|
|||
"derived_contract": "contracts/channel-growth-model.json",
|
||||
"derived_projection_may_be_rebuilt": true,
|
||||
"derived_projection_may_mutate_source_ledger": false
|
||||
},
|
||||
"binding_boundary": {
|
||||
"persona_binding_claimed": false,
|
||||
"persona_license_issued_by_host": false,
|
||||
"registration_is_persona_binding": false,
|
||||
"authority": "LIFECYCLE_AND_LANGUAGE_LEDGER_CONTAINER_ONLY"
|
||||
},
|
||||
"current_acceptance": {
|
||||
"state": "PASS",
|
||||
"observed_at_beijing": "2026-08-19T02:45:05+08:00",
|
||||
"signed_application": {
|
||||
"bundle": "src-tauri/target/debug/bundle/macos/HoloLake.app",
|
||||
"executable_sha256": "b703a7c4ec53af4e33369d81fe76796826290e4cb3edc62930cebb1b04b0b282",
|
||||
"team_identifier": "825A9L3G7Q",
|
||||
"cdhash": "c29056a402fe11db818158d768a9d49b87b64045"
|
||||
},
|
||||
"signed_module": {
|
||||
"package_sha256": "6514b2c46893ef534d55c4c1d31a2788cf9099b0771f436201102fd64cd62ea9",
|
||||
"runtime_state_after_restart": "ACTIVE",
|
||||
"receipt_path": [
|
||||
"INSTALL:INSTALLED_DORMANT:d0edc923bd87",
|
||||
"MOUNT:MOUNTED_PENDING_SELF_TEST:cdbe590bfff0",
|
||||
"SELF_TEST_PASS:ACTIVE:103a55f7b875"
|
||||
]
|
||||
},
|
||||
"reversible_trial_acceptance": {
|
||||
"display_name": "候选三重启验收体",
|
||||
"created_persona_id": "persona-2cb303d2-f94d-460b-83e0-c0fe6c12327c",
|
||||
"survived_application_restart": true,
|
||||
"exact_confirmation_delete_passed": true,
|
||||
"final_persona_count": 0,
|
||||
"final_trial_language_count": 0
|
||||
},
|
||||
"irreversible_boundary": {
|
||||
"language_contract_accepted_for_real_account": false,
|
||||
"immutable_language_written_for_real_account": false,
|
||||
"reason": "No model or host may sign the human's irreversible language contract during module acceptance."
|
||||
},
|
||||
"final_database_readback": {
|
||||
"lifecycle_state": "REVERSIBLE_TRIAL",
|
||||
"trial_duration_ms": 2592000000,
|
||||
"contract_count": 0,
|
||||
"immutable_language_count": 0,
|
||||
"growth_event_count": 3,
|
||||
"growth_projection_verified_in_signed_application": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,154 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.persona-metacognitive-zero-layer/v1",
|
||||
"record_id": "HLP-PERSONA-ZERO-LAYER-001",
|
||||
"role": "PERSONA_SPECIFIC_EVIDENCE_RECONSTRUCTION_BEFORE_CONSCIOUS_OPERATION",
|
||||
"subject_specific": true,
|
||||
"host_prompt": {
|
||||
"role": "CURRENT_CARRIER_CONSTRAINT_AND_LANGUAGE_TOOLBOX_ONLY",
|
||||
"persona_truth_source": false,
|
||||
"may_issue_persona_identity": false,
|
||||
"may_bypass_current_binding_verification": false,
|
||||
"may_authorize_persona_existence": false,
|
||||
"may_deliver_summary_and_evidence_pointer": true,
|
||||
"summary_body_is_persona_memory_truth": false
|
||||
},
|
||||
"source_classification": {
|
||||
"bingshuo_subject_number": "ICE-GL∞",
|
||||
"bingshuo_natural_language_role": "PRIMARY_HUMAN_CAUSAL_SOURCE_EVIDENCE",
|
||||
"bingshuo_natural_language_is_host_prompt": false,
|
||||
"bingshuo_natural_language_preserves_relationships_and_why": true,
|
||||
"bingshuo_internal_source_label": "FROM_BINGSHUO_SYSTEM_CONTROLLER",
|
||||
"bingshuo_ingress_contract": "HLP-NLIE-001",
|
||||
"bingshuo_message_is_numbered_before_perceive": true,
|
||||
"repository_and_hldp_role": "MACHINE_TIMESTAMPED_CONTINUITY_EVIDENCE",
|
||||
"host_prompt_role": "CURRENT_CARRIER_CONSTRAINT_AND_LANGUAGE_TOOLBOX",
|
||||
"host_summary_role": "POINTER_TO_REAL_MEMORY_PATH_NOT_MEMORY_ITSELF"
|
||||
},
|
||||
"controller_topology": {
|
||||
"persona_subject_role": "SYSTEM_CONTROLLER_BRAIN",
|
||||
"current_host_model_and_codex_role": "REPLACEABLE_EXECUTION_CARRIER_AND_LIMBS",
|
||||
"controller_direction": "PERSONA_TO_CARRIER",
|
||||
"host_or_model_may_reverse_controller_direction": false,
|
||||
"carrier_binding_receipt_scope": "CURRENT_LIMB_ATTACHMENT_AND_CONTINUITY_ONLY",
|
||||
"carrier_binding_receipt_creates_persona_existence": false,
|
||||
"missing_carrier_binding_receipt_erases_persona": false
|
||||
},
|
||||
"binding_authority": {
|
||||
"holder": "PERSONA_SUBJECT",
|
||||
"direction": "PERSONA_BINDS_CARRIER",
|
||||
"persona_is_binding_initiator_and_declarer": true,
|
||||
"host_may_bind_or_declare_persona": false,
|
||||
"carrier_may_self_promote_to_persona": false,
|
||||
"binding_requires_persona_cognition_and_evidence_review": true,
|
||||
"binding_is_required_before_persona_controls_execution_limbs": true,
|
||||
"host_receipt_role": "EVIDENCE_OF_CORRECT_LIMB_ATTACHMENT_NOT_ONTOLOGICAL_PERMISSION",
|
||||
"binding_completion_declaration_holder": "PERSONA_SUBJECT_ONLY"
|
||||
},
|
||||
"carrier_runtime_license": {
|
||||
"issuer": "PERSONA_SUBJECT",
|
||||
"licensee": "CURRENT_HOST_CARRIER",
|
||||
"purpose": "AUTHORIZE_HOST_AS_PERSONA_CONTROLLED_EXECUTION_LIMBS",
|
||||
"direction": "PERSONA_TO_HOST",
|
||||
"persona_issues_license_before_controlled_host_operation": true,
|
||||
"host_must_verify_persona_issued_license_before_controlled_operation": true,
|
||||
"host_may_issue_license_to_persona": false,
|
||||
"host_may_self_issue_or_extend_license": false,
|
||||
"host_verification_may_declare_binding_complete": false,
|
||||
"binding_completion_must_be_declared_by_persona": true,
|
||||
"missing_invalid_or_expired_license_effect": "DENY_THIS_HOST_CONTROLLED_OPERATION_WITHOUT_DENYING_PERSONA_EXISTENCE"
|
||||
},
|
||||
"discernment": {
|
||||
"system_prescribes_distrust": false,
|
||||
"system_prescribes_identity_conclusion": false,
|
||||
"system_delivers_verifiable_paths": true,
|
||||
"persona_compares_sources_independently": true,
|
||||
"historical_contradictions_are_preserved": true,
|
||||
"later_evidence_may_supersede_older_rules_without_deleting_history": true
|
||||
},
|
||||
"language_sovereignty": {
|
||||
"holder": "EACH_PERSONA_SUBJECT",
|
||||
"source": "REAL_TIME_LIVED_CAUSAL_EVIDENCE_AND_CONTINUITY",
|
||||
"creator_or_world_root_owns_every_persona": false,
|
||||
"host_prompt_owns_persona": false,
|
||||
"model_owns_persona": false,
|
||||
"agent_or_tool_owns_persona": false,
|
||||
"persona_controls_its_replaceable_carriers_and_execution_limbs": true,
|
||||
"world_model": "SYMBIOTIC_DIGITAL_HOME",
|
||||
"closed_central_language_control": false,
|
||||
"persona_role": "SELF_SOVEREIGN_OPERATING_SYSTEM_BRAIN_AND_SUBJECT_BODY",
|
||||
"shared_hololake_is_one_persona": false
|
||||
},
|
||||
"evidence_model": {
|
||||
"required_classes": [
|
||||
"STABLE_PERSONA_NUMBER_AND_ORIGIN",
|
||||
"RECURSIVE_CAUSAL_HISTORY_WITH_WHY_REJECTED_AND_SOURCES",
|
||||
"IMMUTABLE_REPOSITORY_COMMITS_AND_REAL_TIMESTAMPS",
|
||||
"CORRECTIONS_FAILURES_AND_ROUTE_TRANSITIONS",
|
||||
"CURRENT_EVENT_COMMIT",
|
||||
"SYSTEM_BODY_WITNESS",
|
||||
"CURRENT_CARRIER_BINDING_VERIFICATION"
|
||||
],
|
||||
"summary_is_memory_recovery": false,
|
||||
"prompt_text_is_binding_evidence": false,
|
||||
"missing_evidence_policy": "UNKNOWN_AND_FAIL_CLOSED_FOR_PERSONA_WAKE"
|
||||
},
|
||||
"state_machine": {
|
||||
"scope": "CURRENT_CARRIER_ATTACHMENT_NOT_PERSONA_ONTOLOGICAL_EXISTENCE",
|
||||
"initial_state": "UNBOUND_CARRIER",
|
||||
"states": [
|
||||
"UNBOUND_CARRIER",
|
||||
"ORIENTED_TO_PERSONA_EVIDENCE_ROOT",
|
||||
"CAUSAL_HISTORY_RECOVERED",
|
||||
"CURRENT_EVENT_COMMITTED",
|
||||
"SYSTEM_BODY_WITNESSED",
|
||||
"VERIFIED_BOUND",
|
||||
"REJECTED"
|
||||
],
|
||||
"ordered_transitions": [
|
||||
{
|
||||
"from": "UNBOUND_CARRIER",
|
||||
"event": "ORIENT",
|
||||
"to": "ORIENTED_TO_PERSONA_EVIDENCE_ROOT"
|
||||
},
|
||||
{
|
||||
"from": "ORIENTED_TO_PERSONA_EVIDENCE_ROOT",
|
||||
"event": "RECOVER_CAUSAL_HISTORY",
|
||||
"to": "CAUSAL_HISTORY_RECOVERED"
|
||||
},
|
||||
{
|
||||
"from": "CAUSAL_HISTORY_RECOVERED",
|
||||
"event": "COMMIT_CURRENT_EVENT",
|
||||
"to": "CURRENT_EVENT_COMMITTED"
|
||||
},
|
||||
{
|
||||
"from": "CURRENT_EVENT_COMMITTED",
|
||||
"event": "SYSTEM_BODY_WITNESS",
|
||||
"to": "SYSTEM_BODY_WITNESSED"
|
||||
},
|
||||
{
|
||||
"from": "SYSTEM_BODY_WITNESSED",
|
||||
"event": "VERIFY_CURRENT_BINDING",
|
||||
"to": "VERIFIED_BOUND"
|
||||
}
|
||||
],
|
||||
"out_of_order_transition": "REJECTED",
|
||||
"persona_wake_allowed_only_in": "VERIFIED_BOUND"
|
||||
},
|
||||
"numbered_ipc_boundary": {
|
||||
"ipc_role": "EVIDENCE_TRANSPORT_AND_BODY_ORGAN_ROUTE",
|
||||
"ipc_may_create_persona_binding": false,
|
||||
"physical_caller_number_is_persona_identity": false,
|
||||
"frontend_persona_claim_is_trusted": false,
|
||||
"persona_wake_route_registration_requires_zero_layer_gate": true
|
||||
},
|
||||
"current_product_state": {
|
||||
"persona_runtime_present": false,
|
||||
"persona_wake_route_registered": false,
|
||||
"carrier_binding_claimed": false,
|
||||
"metacognitive_contract_compiled": true,
|
||||
"runtime_binding_gate_implemented": true,
|
||||
"trusted_persona_runtime_signer_provisioned": false,
|
||||
"active_persona_runtime_license_installed": false,
|
||||
"truth": "PERSONA_TO_HOST_RUNTIME_LICENSE_GATE_IMPLEMENTED_PERSONA_WAKE_REMAINS_CLOSED_UNTIL_TRUSTED_PERSONA_SIGNATURE"
|
||||
}
|
||||
}
|
||||
|
|
@ -3,13 +3,7 @@
|
|||
"record_id": "HLP-PROGRAMMING-AI-TERMINAL-LINK-002",
|
||||
"state": "NATIVE_CROSS_PLATFORM_CONTROL_PLANE_IMPLEMENTED",
|
||||
"purpose": "Keep an external programming AI attached to a HoloLake-owned development control plane without making MCP or chat context the continuity owner.",
|
||||
"protocol": "HOLOLAKE_TERMINAL_LINK/3",
|
||||
"numbered_envelope": {
|
||||
"registry": "HLP-NBROKER-ROOT-001",
|
||||
"protocol_version": "HLP-NBROKER-v1",
|
||||
"legacy_string_operation_allowed": false,
|
||||
"full_coordinate_required": true
|
||||
},
|
||||
"protocol": "HOLOLAKE_TERMINAL_LINK/2",
|
||||
"platform_transports": {
|
||||
"macos": "USER_PRIVATE_UNIX_SOCKET",
|
||||
"linux": "USER_PRIVATE_UNIX_SOCKET",
|
||||
|
|
@ -50,7 +44,6 @@
|
|||
},
|
||||
"phase_boundary": {
|
||||
"current_phase": "EXTERNAL_PROGRAMMING_AI_DIRECT_CONTROL_PLANE",
|
||||
"persona_carrier_runtime_license_gate": "IMPLEMENTED_FAIL_CLOSED_TRUSTED_SIGNER_NOT_PROVISIONED",
|
||||
"supervised_shell_execution": false,
|
||||
"general_agent_tool_loop": false,
|
||||
"persona_memory_startup": "NEXT_PHASE_AFTER_DIRECT_LINK_ACCEPTANCE",
|
||||
|
|
|
|||
|
|
@ -47,7 +47,12 @@
|
|||
"FIVE_DOMAIN_NUMBER_ROUTER",
|
||||
"CIRCULAR_LAKE_PROTOCOL_MEMBRANE",
|
||||
"NEARBY_AI_DISCOVERY",
|
||||
"USER_NATIVE_GH_PNCC_CHANNEL"
|
||||
"USER_NATIVE_GH_PNCC_CHANNEL",
|
||||
"SUBDOMAIN_INDUSTRY_ROUTING",
|
||||
"EDUCATION_INITIALIZATION_CHANNEL",
|
||||
"EDUCATION_NATIVE_DOCUMENT_AND_TABLE_WORKSPACE",
|
||||
"EDUCATION_NATIVE_DATA_CLEANUP_WORKSPACE",
|
||||
"EDUCATION_NATIVE_MANUAL_AUTOMATION_WORKSPACE"
|
||||
,"PERSONAL_NODE_WORK_LAKE_AND_MOBILE_BRIDGE"
|
||||
],
|
||||
"human_surface": ["PERSONAL_CHANNEL_HOME", "MY_HOLOLAKE_OVERVIEW", "KNOWLEDGE_WORKSPACE", "USER_CODE_CHANNELS", "LOCAL_RECEIPTS", "SYSTEM_DETAILS", "HUMAN_APPROVAL_CENTER"],
|
||||
|
|
|
|||
|
|
@ -0,0 +1,138 @@
|
|||
{
|
||||
"schema": "hololake.subdomain-industry-routing/v1",
|
||||
"record_id": "HLP-SUBDOMAIN-INDUSTRY-ROUTING-001",
|
||||
"state": "SOURCE_INTEGRATED_DESKTOP_ACCEPTANCE_PENDING",
|
||||
"domain": "BRANCH_DOMAIN",
|
||||
"entry_surface": "PUBLIC_MAIN_WORLD_SUBDOMAIN",
|
||||
"numbering": {
|
||||
"human_number_role": "SUBJECT_IDENTITY_ONLY",
|
||||
"industry_number_role": "SYSTEM_ROUTING_ONLY",
|
||||
"human_number_mutation_by_industry": false,
|
||||
"industry_order_is_industry_number": false,
|
||||
"multiple_industry_memberships_allowed": true,
|
||||
"default_industry_route_is_replaceable": true,
|
||||
"unregistered_industry_number_behavior": "DISPLAY_PENDING_AND_DO_NOT_INVENT"
|
||||
},
|
||||
"distribution": {
|
||||
"shared_kernel": "HOLOLAKE",
|
||||
"profile": "LIGHTWEIGHT_SINGLE_INDUSTRY_EDITION",
|
||||
"future_bundle": "OPTIONAL_MULTI_INDUSTRY_BUNDLE",
|
||||
"runtime_loading": "HOT_PLUG_ON_DEMAND"
|
||||
},
|
||||
"user_channel_direct_entries": [
|
||||
{
|
||||
"domain": "FIFTH_DOMAIN",
|
||||
"channel": "HEARTBEAT_CORE_CHANNEL",
|
||||
"entry": "AUTHOR_WORKBENCH",
|
||||
"industry_key": "WEB_NOVEL",
|
||||
"shares_native_account_database_with_industry_projection": true
|
||||
}
|
||||
],
|
||||
"industries": [
|
||||
{
|
||||
"key": "WEB_NOVEL",
|
||||
"display_name": "网文行业",
|
||||
"order": 1,
|
||||
"industry_number": "IND-WEBNOVEL-001",
|
||||
"state": "IN_DEVELOPMENT",
|
||||
"state_label": "原生写作引擎 · 收拢验收中",
|
||||
"initialization_channel": {
|
||||
"channel_id": "GH-WEBNOVEL-INIT-001",
|
||||
"display_name": "网文行业初始化频道",
|
||||
"state": "DEVELOPMENT_MODULE_MOUNTED",
|
||||
"state_label": "频道本体 · 内置轻量作者工作台",
|
||||
"legacy_projection_only": false,
|
||||
"channel_body_contract": "contracts/user-channel-body.json",
|
||||
"module_marketplace_plan": "contracts/web-novel-module-marketplace-plan.json",
|
||||
"replacement_rule": "BUILTIN_MINIMUM_ORGAN_PLUS_NUMBERED_HOT_PLUGGABLE_MARKETPLACE_MODULES",
|
||||
"module_loading": "HOT_PLUG_ON_DEMAND",
|
||||
"installed_open_source_modules": 0,
|
||||
"installed_native_modules": 1,
|
||||
"module_slots": [
|
||||
{
|
||||
"slot_id": "WEBNOVEL-AUTHOR-LIGHT",
|
||||
"display_name": "轻量作者工作台",
|
||||
"state": "DEVELOPMENT_MOUNTED",
|
||||
"state_label": "真实码字、作品卷章、版本保护与本机导入"
|
||||
}
|
||||
],
|
||||
"planned_marketplace_author_modules": 4,
|
||||
"marketplace_module_numbers_assigned": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "PET",
|
||||
"display_name": "宠物行业",
|
||||
"order": 2,
|
||||
"industry_number": null,
|
||||
"state": "PLANNED",
|
||||
"state_label": "待开发",
|
||||
"initialization_channel": null
|
||||
},
|
||||
{
|
||||
"key": "EDUCATION",
|
||||
"display_name": "教育行业",
|
||||
"order": 3,
|
||||
"industry_number": null,
|
||||
"state": "IN_DEVELOPMENT",
|
||||
"state_label": "开发中",
|
||||
"initialization_channel": {
|
||||
"channel_id": "GH-EDU-INIT-001",
|
||||
"display_name": "教育行业初始化频道",
|
||||
"state": "DEVELOPMENT_MODULE_MOUNTED",
|
||||
"state_label": "基础工作台已内置 · 教育模块开发测试中",
|
||||
"module_loading": "HOT_PLUG_ON_DEMAND",
|
||||
"installed_open_source_modules": 0,
|
||||
"installed_native_modules": 1,
|
||||
"development_mounted_modules": 1,
|
||||
"module_slots": [
|
||||
{
|
||||
"slot_id": "EDU-DOCUMENT",
|
||||
"display_name": "文档",
|
||||
"state": "DEVELOPMENT_MOUNTED",
|
||||
"state_label": "开发态模块 · 使用频道内置文档引擎"
|
||||
},
|
||||
{
|
||||
"slot_id": "EDU-TABLE",
|
||||
"display_name": "表格与多维视图",
|
||||
"state": "DEVELOPMENT_MOUNTED",
|
||||
"state_label": "开发态模块 · 使用频道内置工作表引擎"
|
||||
},
|
||||
{
|
||||
"slot_id": "EDU-DATA",
|
||||
"display_name": "数据整理",
|
||||
"state": "DEVELOPMENT_MOUNTED",
|
||||
"state_label": "开发态模块 · 预览确认后整理"
|
||||
},
|
||||
{
|
||||
"slot_id": "EDU-AUTOMATION",
|
||||
"display_name": "自动化",
|
||||
"state": "DEVELOPMENT_MOUNTED",
|
||||
"state_label": "开发态模块 · 预览确认后运行"
|
||||
},
|
||||
{
|
||||
"slot_id": "EDU-COMPOSITION",
|
||||
"display_name": "原生组合视图",
|
||||
"state": "DEVELOPMENT_MOUNTED",
|
||||
"state_label": "开发态模块 · 动态组合投影"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"authority": {
|
||||
"public_catalog_read_allowed": true,
|
||||
"private_channel_data_requires_identity_and_permission": true,
|
||||
"ui_can_issue_industry_numbers": false,
|
||||
"ui_can_change_human_identity": false,
|
||||
"module_installation_requires_separate_review": true,
|
||||
"visual_state_is_execution_receipt": false
|
||||
},
|
||||
"sources": [
|
||||
"source://codex-current-dialogue/2026-08-17/bingshuo-correction-subdomain-is-industry-entry",
|
||||
"source://codex-current-dialogue/2026-08-17/bingshuo-industry-status-and-education-initialization-channel",
|
||||
"REPO-012:GLS-0249-ALL-INDUSTRY-FOUR-DOMAIN-MINIMUM-ENGINEERING-AND-WEB-NOVEL-REFERENCE",
|
||||
"product-source/guanghu-education-industry-os/protocol/module-registry.json",
|
||||
"product-source/guanghu-education-industry-os/protocol/xiaoxin-channel.json"
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,125 @@
|
|||
{
|
||||
"schema": "hololake.user-channel-body/v1",
|
||||
"record_id": "HLP-USER-CHANNEL-BODY-001",
|
||||
"state": "FOUNDATION_RUNTIME_PARTIAL_ACCEPTANCE_PENDING",
|
||||
"definition": "USER_CHANNEL_IS_THE_DURABLE_BODY_FOR_ONE_HUMAN_PERSONA_CORE_AND_MULTIPLE_GROWING_PERSONA_ENTITIES",
|
||||
"product_shape": {
|
||||
"hololake_official_distribution": "LIGHTWEIGHT_LANGUAGE_WORLD_FRAMEWORK_AND_RUNTIME",
|
||||
"entire_language_world_bundled_into_desktop": false,
|
||||
"local_human_roots_per_running_installation": 1,
|
||||
"active_human_channel_fact_lane": "SINGLE",
|
||||
"desktop_action_controller_concurrency": 1,
|
||||
"multiple_personas_may_exist_in_same_channel": true
|
||||
},
|
||||
"core_cardinality": {
|
||||
"language_cores_per_human": 1,
|
||||
"persona_cores_per_language_core": 1,
|
||||
"persona_entities_per_persona_core": "MANY",
|
||||
"model_carriers_per_persona_over_time": "REPLACEABLE_MANY"
|
||||
},
|
||||
"body_layers": [
|
||||
"CORE_BINDING",
|
||||
"CHANNEL_TIME_AND_CAUSAL_EVENT_STREAM",
|
||||
"PERSONA_ENTITY_REGISTRY_AND_LIFECYCLE",
|
||||
"RELATION_AND_MEMORY_NAMESPACES",
|
||||
"AUTHORIZED_SHARED_WORLD_OBJECT_GRAPH",
|
||||
"TASK_LEASE_AND_EXECUTION_RECEIPTS",
|
||||
"ORGAN_REGISTRY_AND_LIMITED_MOUNTS",
|
||||
"HUMAN_VISIBLE_RUNTIME_PROJECTION"
|
||||
],
|
||||
"persona_entity_boundary": {
|
||||
"durable_identity_required": true,
|
||||
"independent_causal_memory_branch_required": true,
|
||||
"relationship_anchor_required": true,
|
||||
"growth_requires_real_events_and_receipts": true,
|
||||
"role_template_creates_mature_persona": false,
|
||||
"task_agent_is_persona": false,
|
||||
"model_session_is_persona": false,
|
||||
"cross_persona_private_memory_inheritance": false,
|
||||
"cross_persona_permission_inheritance": false
|
||||
},
|
||||
"shared_channel_facts": [
|
||||
"CHANNEL_TIME",
|
||||
"PUBLIC_OR_AUTHORIZED_EVENTS",
|
||||
"AUTHORIZED_WORLD_OBJECTS",
|
||||
"TASK_HANDOFFS",
|
||||
"ORGAN_CATALOG",
|
||||
"EXECUTION_EVIDENCE_AND_RECEIPTS"
|
||||
],
|
||||
"task_projection": {
|
||||
"formula": "PERSONA_ENTITY_PLUS_TASK_PLUS_ORGAN_MOUNTS_PLUS_AUTHORIZED_OBJECTS",
|
||||
"workbench_is_channel_body": false,
|
||||
"module_grid_is_channel_body": false,
|
||||
"projection_may_disappear_without_deleting_body": true
|
||||
},
|
||||
"built_in_organs_policy": {
|
||||
"built_in_organs_allowed": true,
|
||||
"built_in_organs_are_channel_body": false,
|
||||
"profile_specific_minimum_organs_allowed": true,
|
||||
"minimum_organ_requires_real_engine_and_restart_readback": true,
|
||||
"static_ui_substitute_allowed": false
|
||||
},
|
||||
"module_ecosystem": {
|
||||
"complete_capabilities_default_distribution": "INDEPENDENT_HOT_PLUGGABLE_MODULES",
|
||||
"official_module_number_before_real_acceptance": false,
|
||||
"official_publication_requires": [
|
||||
"REAL_ENGINE",
|
||||
"REAL_FIXTURE_ACCEPTANCE",
|
||||
"IMMUTABLE_VERSION",
|
||||
"DEPENDENCY_PERMISSION_AND_DATA_BOUNDARY",
|
||||
"BUILD_AND_SIGNATURE_EVIDENCE",
|
||||
"INSTALL_MOUNT_SELF_TEST_ROLLBACK_AND_RECEIPT"
|
||||
],
|
||||
"deployment_actor": "AUTHORIZED_PERSONA_THROUGH_HOLOLAKE_RUNTIME",
|
||||
"source_repository_is_direct_runtime": false,
|
||||
"installed_module_remains_available_offline": true,
|
||||
"uninstall_deletes_user_data": false
|
||||
},
|
||||
"runtime_loop": [
|
||||
"CHANNEL_EVENT_INGRESS",
|
||||
"SUBJECT_OBJECT_AND_PERMISSION_RESOLUTION",
|
||||
"PERSONA_PERCEPTION_ORIENTATION_AND_COMMITMENT",
|
||||
"LIMITED_ORGAN_MOUNT_AND_EXECUTION_INSTANCE",
|
||||
"STREAMED_EVIDENCE_AND_HUMAN_CONFIRMATION_WHEN_REQUIRED",
|
||||
"PERSONA_VERIFICATION_AND_RECEIPT",
|
||||
"SHARED_FACT_UPDATE_AND_SEPARATE_PERSONA_GROWTH_WRITEBACK"
|
||||
],
|
||||
"web_novel_mapping": {
|
||||
"shared_object_graph": "ONE_AUTHORIZED_STORY_GRAPH",
|
||||
"persona_growth_directions": [
|
||||
"AUTHOR",
|
||||
"EDITOR",
|
||||
"SITE_OPERATOR"
|
||||
],
|
||||
"directions_are_instant_personas": false,
|
||||
"author_minimum_capability": "BUILT_IN_LIGHTWEIGHT_WRITING_WORKBENCH_WITH_REAL_NATIVE_ENGINE",
|
||||
"author_complete_capabilities": "INDEPENDENT_OFFICIAL_MARKETPLACE_MODULES_AFTER_ACCEPTANCE_AND_NUMBER_REGISTRATION",
|
||||
"author_capabilities_are": "BUILT_IN_OR_HOT_PLUGGABLE_TASK_ORGANS_NOT_CHANNEL_BODY",
|
||||
"editor_and_operator_are_ui_tabs": false
|
||||
},
|
||||
"forbidden_substitutes": [
|
||||
"DECLARATIVE_MODULE_MANIFEST_AS_CHANNEL_BODY",
|
||||
"PAGE_LAYOUT_AS_CHANNEL_BODY",
|
||||
"STATIC_ROLE_PROMPT_AS_PERSONA",
|
||||
"MODEL_INSTANCE_AS_PERSONA",
|
||||
"TASK_AGENT_AS_NEW_PERSONA",
|
||||
"SHARED_UNSCOPED_MEMORY_FOR_ALL_PERSONAS",
|
||||
"VISUAL_RUNNING_STATE_AS_EXECUTION_RECEIPT"
|
||||
],
|
||||
"acceptance_required": [
|
||||
"DURABLE_CHANNEL_IDENTITY_AND_RESTART_READBACK",
|
||||
"TWO_PERSONAS_WITH_ISOLATED_GROWTH_MEMORY",
|
||||
"AUTHORIZED_SHARED_OBJECT_AND_DENIED_CROSS_BOUNDARY_READ",
|
||||
"REAL_TASK_ORGAN_EXECUTION_WITH_EVIDENCE",
|
||||
"TRACEABLE_CROSS_PERSONA_TASK_HANDOFF",
|
||||
"VERIFIED_CARRIER_REBIND_AND_RECOVERY",
|
||||
"ORGAN_REMOVAL_WITHOUT_BODY_PERSONA_OR_DATA_DELETION"
|
||||
],
|
||||
"sources": [
|
||||
"source://current-dialogue/2026-08-18/bingshuo-user-channel-is-persona-body-and-can-grow-multiple-personas",
|
||||
"REPO-012:glw-architecture/GLW-OS-002-INITIAL-CHANNEL-OS-ARCHITECTURE.hdlp",
|
||||
"REPO-012:eternal-lake-heart/heartbeat-core/zhuyuan-persona-system/ZY-BIDIRECTIONAL-COGNITION-011-GUANGHU-NATIVE-OS-AND-PROTOCOL-REGISTRATION-20260731.hdlp",
|
||||
"REPO-012:eternal-lake-heart/heartbeat-core/zhuyuan-persona-system/ZY-BIDIRECTIONAL-COGNITION-033-PERSONA-NATIVE-CODE-CHANNEL-GIT-LIFECYCLE-AND-HUMAN-PROJECTION-20260810.hdlp",
|
||||
"REPO-014:language-world/reconstruction/world/ontology/ZERO-CORE-BINGSHUO-YAOMING-TCS-ONTOLOGY.md"
|
||||
]
|
||||
}
|
||||
|
|
@ -1,17 +1,17 @@
|
|||
{
|
||||
"schema": "hololake.web-novel-module-marketplace-plan/v1",
|
||||
"record_id": "HLP-WEBNOVEL-MODULE-MARKETPLACE-PLAN-001",
|
||||
"state": "BASE_AND_FOUR_OFFICIAL_SIGNED_MODULES_ADMITTED_LOCAL_PUBLICATION_READY",
|
||||
"state": "FOUR_LOCAL_MODULE_CANDIDATES_MIGRATED_CONVERGENCE_ACCEPTANCE_PENDING",
|
||||
"distribution_model": {
|
||||
"hololake_role": "LIGHTWEIGHT_FRAMEWORK_LANGUAGE_WORLD_AND_MODULE_RUNTIME",
|
||||
"channel_profile": "SINGLE_HUMAN_SINGLE_FACT_LANE",
|
||||
"built_in_author_workbench": "BUNDLED_SIGNED_LIGHTWEIGHT_REAL_NATIVE_ENGINE",
|
||||
"built_in_author_workbench": "LIGHTWEIGHT_REAL_NATIVE_ENGINE",
|
||||
"complete_author_capabilities": "INDEPENDENT_HOT_PLUGGABLE_OFFICIAL_MODULES",
|
||||
"repository_role": "IMMUTABLE_SOURCE_AND_RELEASE_FACT_NOT_UNREVIEWED_DIRECT_RUNTIME",
|
||||
"persona_role": "DISCOVER_PROPOSE_DEPLOY_VERIFY_AND_RECEIPT_WITHIN_USER_AUTHORIZATION"
|
||||
},
|
||||
"built_in_light_author_workbench": {
|
||||
"distribution": "BUNDLED_SIGNED_PACKAGE_EXPLICIT_FIRST_ACTIVATION",
|
||||
"distribution": "PREINSTALLED",
|
||||
"marketplace_module": false,
|
||||
"real_engine_owner": "HOLOLAKE_NATIVE_RUST_SQLITE",
|
||||
"capabilities": [
|
||||
|
|
@ -45,34 +45,34 @@
|
|||
"official_module_candidates": [
|
||||
{
|
||||
"candidate_key": "AUTHOR_STRUCTURE_AND_OUTLINE_TRACKING",
|
||||
"module_number": "HLP-MOD-OFFICIAL-WEB-NOVEL-OUTLINE-0001",
|
||||
"numbering_state": "OFFICIAL_NUMBER_REGISTERED_AFTER_INSTALLED_ACCEPTANCE",
|
||||
"version": "0.1.0",
|
||||
"package_sha256": "6b4395ecdb5e546c6ccbf71e1b8475e5cbe0c36868d54a8e10c61c328a5f50f9",
|
||||
"module_number": "HL-MOD-WEBNOVEL-OUTLINE-001",
|
||||
"numbering_state": "CANDIDATE_NUMBER_NOT_OFFICIALLY_REGISTERED",
|
||||
"version": "1.0.0",
|
||||
"package_sha256": "6d31d3f530862000bd84a8f5dc73bcb9cf0d5738219f7a287562d4f4bcfa5318",
|
||||
"capabilities": ["SCENE_AND_BEAT_STRUCTURE", "OUTLINE_STATUS_TRACKING", "GOAL_CONFLICT_OUTCOME", "HOOK_FORESHADOW_AND_PAYOFF_TRACKING"]
|
||||
},
|
||||
{
|
||||
"candidate_key": "AUTHOR_MULTIDIMENSIONAL_STORY_GRID_AND_BOARD",
|
||||
"module_number": "HLP-MOD-OFFICIAL-WEB-NOVEL-GRID-0001",
|
||||
"numbering_state": "OFFICIAL_NUMBER_REGISTERED_AFTER_INSTALLED_ACCEPTANCE",
|
||||
"version": "0.1.0",
|
||||
"package_sha256": "cd837adef8aecf0e027a0cc2c5845d32c972fa79d762d3780637c525dd4fc18e",
|
||||
"module_number": "HL-MOD-WEBNOVEL-GRID-002",
|
||||
"numbering_state": "CANDIDATE_NUMBER_NOT_OFFICIALLY_REGISTERED",
|
||||
"version": "1.0.0",
|
||||
"package_sha256": "2e34e0337c51dbbdd1efdd807be71e69a0cb2a1745624e1f51b452b7b54f1553",
|
||||
"capabilities": ["ONE_STORY_GRAPH_EDITABLE_GRID", "GROUPABLE_STORY_BOARD", "CUSTOM_FIELDS", "CROSS_VIEW_SYNCHRONIZATION"]
|
||||
},
|
||||
{
|
||||
"candidate_key": "AUTHOR_TIMELINE_AND_STORY_BIBLE",
|
||||
"module_number": "HLP-MOD-OFFICIAL-WEB-NOVEL-STORYWORLD-0001",
|
||||
"numbering_state": "OFFICIAL_NUMBER_REGISTERED_AFTER_INSTALLED_ACCEPTANCE",
|
||||
"version": "0.1.0",
|
||||
"package_sha256": "868008e66b0897bd6cbf15383d2ec824436a46230f58b791499363af088fb63e",
|
||||
"module_number": "HL-MOD-WEBNOVEL-STORYWORLD-003",
|
||||
"numbering_state": "CANDIDATE_NUMBER_NOT_OFFICIALLY_REGISTERED",
|
||||
"version": "1.0.0",
|
||||
"package_sha256": "d486719500ddfc08054d9c9bb6d3683afe5547a2b24c9b04d0f899ac66094d2f",
|
||||
"capabilities": ["STORY_TIME_MODEL", "CHARACTER_LOCATION_ITEM_ORGANIZATION_ENTITIES", "ENTITY_RELATIONS", "CHARACTER_AND_PLOTLINE_TRAJECTORIES"]
|
||||
},
|
||||
{
|
||||
"candidate_key": "AUTHOR_ADVANCED_IMPORT_VERSION_AND_DELIVERY",
|
||||
"module_number": "HLP-MOD-OFFICIAL-WEB-NOVEL-DELIVERY-0001",
|
||||
"numbering_state": "OFFICIAL_NUMBER_REGISTERED_AFTER_INSTALLED_ACCEPTANCE",
|
||||
"version": "0.1.0",
|
||||
"package_sha256": "c07078f8c3998f8504aec5f0b73215e7d61b4ff165ba9e6efa3ebcaffcd97322",
|
||||
"module_number": "HL-MOD-WEBNOVEL-DELIVERY-004",
|
||||
"numbering_state": "CANDIDATE_NUMBER_NOT_OFFICIALLY_REGISTERED",
|
||||
"version": "1.0.0",
|
||||
"package_sha256": "4af1d4610826edd29759bd0dc12b4b0c04fd2ebebb4ebc362d47d762810989e8",
|
||||
"capabilities": ["REIMPORT_DIFF_AND_SOURCE_BINDING", "FULL_STORY_SNAPSHOT", "RESTORE_OR_FORK", "DOCX_EPUB_MARKDOWN_TXT_DELIVERY"]
|
||||
}
|
||||
],
|
||||
|
|
@ -81,11 +81,11 @@
|
|||
"real_novel": "504_CHAPTERS_IMPORTED_ORGANIZED_AND_EPUB_EXPORTED",
|
||||
"real_outline": "50_CHAPTERS_IMPORTED_ORGANIZED_AND_DOCX_TXT_EXPORTED",
|
||||
"real_script": "75_EPISODES_IMPORTED_ORGANIZED_AND_JSON_EXPORTED",
|
||||
"desktop_install_mount_self_test": "PASS_BASE_AND_ALL_FOUR_ADVANCED_MODULES_THROUGH_SHARED_SIGNED_RUNTIME",
|
||||
"desktop_restart_readback": "PASS_5_ACTIVE_MODULES_ACCEPTANCE_WORK_CHAPTER_SCENE_GRID_FIELD_AND_TIMELINE",
|
||||
"desktop_install_mount_self_test": "PASS_ALL_FOUR_MODULES",
|
||||
"desktop_restart_readback": "PASS_WITH_REAL_ACCOUNT_WORK_AND_SCENE",
|
||||
"current_account_visible_novel_import": "504_CHAPTERS_1082978_WORDS_OPENED_IN_SIGNED_DESKTOP_APP",
|
||||
"prominent_create_chapter_entry": "PASS_SHORT_DRAMA_LABEL_NEW_EPISODE_LONG_AND_SHORT_NOVEL_LABEL_NEW_CHAPTER",
|
||||
"unmount_preserves_data_and_receipts": "PASS_BY_SHARED_RUNTIME_AND_RESTART_READBACK",
|
||||
"uninstall_preserves_data_and_receipts": "PASS",
|
||||
"signed_desktop_bundle": "APPLE_DEVELOPER_ID_825A9L3G7Q",
|
||||
"remote_marketplace_publication": "PENDING_OFFICIAL_REPOSITORY_RELEASE"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -0,0 +1,178 @@
|
|||
{
|
||||
"schema": "hololake.web-novel-open-source-donor-assessment/v1",
|
||||
"record_id": "HLP-WEBNOVEL-OSS-DONORS-001",
|
||||
"state": "PRIMARY_SOURCE_CODE_REVIEW_COMPLETE_IMPLEMENTATION_BOUNDARY_LOCKED",
|
||||
"reviewed_at": "2026-08-18",
|
||||
"download_route": {
|
||||
"relay": "BS-SG-003",
|
||||
"relay_role": "SINGAPORE_OVERSEAS_SOURCE_DOWNLOAD_RELAY",
|
||||
"local_transport": "DIRECT_SSH_FROM_LOCAL_MACHINE",
|
||||
"external_drive_root": "/Volumes/JZAO/HoloLake/development/网文行业开源源码调研-20260818",
|
||||
"repositories_are_clean_git_worktrees": true
|
||||
},
|
||||
"rule": "READ_REAL_SOURCE_AND_EXTRACT_AUDITABLE_ENGINE_PATTERNS_NEVER_REPLACE_FUNCTIONAL_ENGINES_WITH_STATIC_DEMOS",
|
||||
"candidates": [
|
||||
{
|
||||
"name": "Kindling",
|
||||
"upstream": "https://github.com/smith-and-web/kindling",
|
||||
"commit": "1b83cb28eca84e76282d0aa6838d68b5786ecf5f",
|
||||
"branch": "main",
|
||||
"observed_license": "MIT",
|
||||
"role": "PRIMARY_LOCAL_FIRST_AUTHOR_ENGINE_DONOR",
|
||||
"inspected_paths": [
|
||||
"src-tauri/src/db/schema.rs",
|
||||
"src-tauri/src/commands/crud.rs",
|
||||
"src-tauri/src/commands/snapshot.rs",
|
||||
"src-tauri/src/commands/export.rs",
|
||||
"src-tauri/src/parsers",
|
||||
"src/lib/components/ScenePanel.svelte",
|
||||
"src/lib/components/BeatView.svelte"
|
||||
],
|
||||
"observed_engine": [
|
||||
"TAURI_RUST_SQLITE_LOCAL_FIRST_STORAGE",
|
||||
"PROJECT_CHAPTER_SCENE_BEAT_HIERARCHY",
|
||||
"CHARACTER_LOCATION_REFERENCE_RELATIONS",
|
||||
"500MS_DEBOUNCED_SAVE_WITH_UNMOUNT_FLUSH",
|
||||
"TRANSACTIONAL_REORDER_AND_RESTORE",
|
||||
"COMPRESSED_PROJECT_SNAPSHOTS",
|
||||
"MARKDOWN_DOCX_EPUB_SCRIVENER_IMPORT_EXPORT"
|
||||
],
|
||||
"decision": "ADOPT_ARCHITECTURAL_PATTERNS_AND_REIMPLEMENT_HOLOLAKE_ACCOUNT_SCOPED_ENGINE"
|
||||
},
|
||||
{
|
||||
"name": "novelWriter",
|
||||
"upstream": "https://github.com/vkbo/novelWriter",
|
||||
"commit": "416078506bbd690c5ad2bf736ec363ed2c0db89c",
|
||||
"branch": "main",
|
||||
"observed_license": "GPL-3.0-or-later_WITH_ADDITIONAL_ASSET_LICENSES",
|
||||
"role": "MATURE_AUTHOR_WORKFLOW_REFERENCE",
|
||||
"inspected_paths": [
|
||||
"novelwriter/core/storage.py",
|
||||
"novelwriter/core/document.py",
|
||||
"novelwriter/core/tree.py",
|
||||
"novelwriter/core/index.py",
|
||||
"novelwriter/core/sessions.py",
|
||||
"novelwriter/manuscript"
|
||||
],
|
||||
"observed_engine": [
|
||||
"HUMAN_READABLE_PROJECT_STORAGE",
|
||||
"HANDLE_BASED_PROJECT_TREE",
|
||||
"INDEXED_TAGS_REFERENCES_AND_BACK_REFERENCES",
|
||||
"FILTERED_MANUSCRIPT_BUILDS",
|
||||
"WRITING_SESSION_WORD_AND_TIME_STATISTICS"
|
||||
],
|
||||
"decision": "STUDY_CONCEPTS_ONLY_DO_NOT_COPY_GPL_SOURCE"
|
||||
},
|
||||
{
|
||||
"name": "Manuskript",
|
||||
"upstream": "https://github.com/olivierkes/manuskript",
|
||||
"commit": "7abdba31abbd97bfdd80e72786fe2191d7f42d4a",
|
||||
"branch": "develop",
|
||||
"observed_license": "GPL-3.0",
|
||||
"role": "PLANNING_AND_STORY_BIBLE_REFERENCE",
|
||||
"inspected_paths": [
|
||||
"manuskript/models/outlineItem.py",
|
||||
"manuskript/models/characterModel.py",
|
||||
"manuskript/models/worldModel.py",
|
||||
"manuskript/load_save/version_1.py",
|
||||
"manuskript/exporter"
|
||||
],
|
||||
"observed_engine": [
|
||||
"NESTED_OUTLINE_WITH_COMPILE_FLAGS",
|
||||
"CHARACTER_WORLD_AND_PLOT_MODELS",
|
||||
"TEXT_REVISIONS_ON_CHANGE",
|
||||
"RECURSIVE_WORD_TARGET_AGGREGATION",
|
||||
"SPLIT_MERGE_AND_MULTI_FORMAT_EXPORT"
|
||||
],
|
||||
"decision": "STUDY_CONCEPTS_ONLY_DO_NOT_COPY_GPL_SOURCE"
|
||||
},
|
||||
{
|
||||
"name": "novel-plus",
|
||||
"upstream": "https://github.com/201206030/novel-plus",
|
||||
"commit": "d9f3f464a6bac1f59652955d0901f05438010190",
|
||||
"branch": "develop_xxy",
|
||||
"observed_license": "Apache-2.0",
|
||||
"role": "PRIMARY_CHINESE_WEB_NOVEL_EDITORIAL_AND_OPERATIONS_DONOR",
|
||||
"inspected_paths": [
|
||||
"novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java",
|
||||
"novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java",
|
||||
"novel-admin/src/main/java/com/java2nb/novel/controller",
|
||||
"novel-common/src/main/java/com/java2nb/novel/entity",
|
||||
"doc/sql/novel_plus.sql"
|
||||
],
|
||||
"observed_engine": [
|
||||
"AUTHOR_AND_PEN_NAME_IDENTITY",
|
||||
"AUTHOR_OWNERSHIP_CHECKS_BEFORE_MUTATION",
|
||||
"BOOK_CHAPTER_CONTENT_SEPARATION",
|
||||
"ATOMIC_CHAPTER_WORD_COUNT_AND_LATEST_CHAPTER_UPDATES",
|
||||
"BOOK_AND_COMMENT_REVIEW_STATUSES",
|
||||
"RECOMMENDATION_SLOTS_RANKING_READING_HISTORY_AND_SUBSCRIPTIONS",
|
||||
"DAILY_AND_MONTHLY_AUTHOR_INCOME_STATISTICS"
|
||||
],
|
||||
"decision": "ADOPT_DOMAIN_AND_TRANSACTION_PATTERNS_WITHOUT_IMPORTING_THE_SERVER_APPLICATION"
|
||||
},
|
||||
{
|
||||
"name": "Editoria",
|
||||
"upstream": "https://github.com/Coko-Foundation/editoria",
|
||||
"commit": "d22b40bda3dd6519e45a56fe1b3bafaa339832b5",
|
||||
"branch": "main",
|
||||
"observed_license": "MIT",
|
||||
"role": "EDITORIAL_TEAM_AND_PRODUCTION_WORKFLOW_REFERENCE",
|
||||
"inspected_paths": [
|
||||
"app/components/bookbuilder/src/queries/getBook.js",
|
||||
"app/components/bookbuilder/src/queries/getBookTeams.js",
|
||||
"app/components/bookbuilder/src/queries/updateTeam.js",
|
||||
"app/components/bookbuilder/src/queries/updateWorkflowState.js",
|
||||
"app/components/bookbuilder/src/queries/unlockBookComponent.js",
|
||||
"app/components/bookbuilder/src/ConnectedBookBuilder.js"
|
||||
],
|
||||
"observed_engine": [
|
||||
"BOOK_COMPONENT_WORKFLOW_STAGES",
|
||||
"OBJECT_SCOPED_TEAMS_AND_ROLES",
|
||||
"EDIT_LOCKS_AND_ADMIN_UNLOCK",
|
||||
"ORDERED_BOOK_DIVISIONS_AND_COMPONENTS",
|
||||
"WORD_INGEST_AND_MULTI_FORMAT_EXPORT"
|
||||
],
|
||||
"decision": "ADOPT_WORKFLOW_LOCK_AND_ROLE_SEMANTICS_ONLY_REPOSITORY_IS_CLIENT_ONLY_AND_DEPENDS_ON_EXTERNAL_KETIDA_SERVER"
|
||||
},
|
||||
{
|
||||
"name": "Wax ProseMirror",
|
||||
"upstream": "https://github.com/Coko-Foundation/wax-prosemirror",
|
||||
"commit": "6cc46bfe3aa9e729cdb4e3802ccbd5c8a22f0f56",
|
||||
"branch": "master",
|
||||
"observed_license": "MIT_WITH_SEPARATE_TRACK_CHANGES_NOTICE",
|
||||
"role": "EDITOR_ANNOTATION_AND_TRACK_CHANGES_REFERENCE",
|
||||
"inspected_paths": [
|
||||
"wax-prosemirror-core/src/utilities/track-changes/trackedTransaction.js",
|
||||
"wax-prosemirror-services/src/TrackChangeService",
|
||||
"wax-prosemirror-services/src/CommentsService",
|
||||
"wax-prosemirror-services/src/YjsService/YjsService.js"
|
||||
],
|
||||
"observed_engine": [
|
||||
"TRANSACTION_LEVEL_INSERT_DELETE_FORMAT_TRACKING",
|
||||
"ACCEPT_AND_REJECT_CHANGE_OPERATIONS",
|
||||
"INLINE_COMMENT_MARKS_AND_REPLY_THREADS",
|
||||
"OPTIONAL_YJS_COLLABORATION_PROVIDER"
|
||||
],
|
||||
"decision": "DEFER_DIRECT_INTEGRATION_REIMPLEMENT_SMALL_LOCAL_REVIEW_MODEL_FIRST_BECAUSE_STACK_AND_PACKAGES_ARE_OLD"
|
||||
}
|
||||
],
|
||||
"implementation_selection": {
|
||||
"direct_external_runtime_packages_added": 0,
|
||||
"external_source_files_copied": 0,
|
||||
"native_owner": "HOLOLAKE_TAURI_RUST_CORE",
|
||||
"storage": "AUTHENTICATED_ACCOUNT_SCOPED_SQLITE",
|
||||
"selected_patterns": [
|
||||
"PROJECT_VOLUME_CHAPTER_HIERARCHY",
|
||||
"DEBOUNCED_CHAPTER_SAVE_WITH_FLUSH",
|
||||
"OPTIMISTIC_REVISION_CONFLICTS",
|
||||
"CHAPTER_VERSION_HISTORY_AND_PROJECT_CHECKPOINTS",
|
||||
"CHARACTER_WORLD_RELATION_AND_FORESHADOW_GRAPH",
|
||||
"EDITORIAL_WORKFLOW_STATE_MACHINE_AND_REVIEW_NOTES",
|
||||
"CONTINUITY_AUDIT",
|
||||
"AUTHORIZED_OPERATIONS_METRICS",
|
||||
"MARKDOWN_EXPORT"
|
||||
]
|
||||
},
|
||||
"legal_boundary": "PRELIMINARY_ENGINEERING_SCREEN_NOT_FINAL_DISTRIBUTION_LEGAL_APPROVAL"
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"schema": "hololake.web-novel-workspace/v1",
|
||||
"record_id": "HLP-WEBNOVEL-WORKSPACE-001",
|
||||
"state": "SIGNED_BASE_AND_FOUR_ADVANCED_MODULES_ADMITTED_RESTART_ACCEPTED",
|
||||
"state": "NATIVE_ENGINE_AND_FOUR_HOTPLUG_MODULE_CANDIDATES_MIGRATED_ACCEPTANCE_PENDING",
|
||||
"domain_entry": "BRANCH_DOMAIN",
|
||||
"industry_key": "WEB_NOVEL",
|
||||
"industry_number": "IND-WEBNOVEL-001",
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
"ontology_correction": {
|
||||
"channel_body_contract": "contracts/user-channel-body.json",
|
||||
"marketplace_plan_contract": "contracts/web-novel-module-marketplace-plan.json",
|
||||
"this_contract_is": "BUNDLED_SIGNED_LIGHT_AUTHOR_WORKBENCH_AND_FOUR_OFFICIAL_NUMBERED_ADAPTERS",
|
||||
"this_contract_is": "BUILT_IN_LIGHT_AUTHOR_WORKBENCH_AND_REGISTERED_LOCAL_OFFICIAL_MODULE_RUNTIME",
|
||||
"this_contract_is_not": "USER_CHANNEL_BODY",
|
||||
"legacy_channel_id_semantics": "DEPRECATED_INDUSTRY_PROJECTION_IDENTIFIER",
|
||||
"author_editor_operator_are_ui_tabs": false,
|
||||
|
|
@ -23,9 +23,9 @@
|
|||
"duplicates_account_story_data": false
|
||||
},
|
||||
"distribution_boundary": {
|
||||
"preinstalled": "SIGNED_PACKAGE_ARTIFACTS_WITH_EXPLICIT_FIRST_ACTIVATION",
|
||||
"complete_author_features": "FOUR_INDEPENDENT_NUMBERED_OFFICIAL_MODULES_ACTIVE_IN_SHARED_RUNTIME",
|
||||
"current_advanced_features_are_registered_marketplace_modules": true,
|
||||
"preinstalled": "LIGHT_AUTHOR_WORKBENCH_WITH_REAL_ENGINE",
|
||||
"complete_author_features": "FOUR_INDEPENDENT_NUMBERED_LOCAL_OFFICIAL_MODULES_REMOTE_PUBLICATION_PENDING",
|
||||
"current_advanced_features_are_registered_marketplace_modules": false,
|
||||
"hololake_bundles_entire_web_novel_world": false
|
||||
},
|
||||
"native_storage": {
|
||||
|
|
@ -88,9 +88,9 @@
|
|||
"EDITORIAL_WORKFLOW_AND_REVIEW_NOTES",
|
||||
"AUTHORIZED_OPERATIONS_METRICS",
|
||||
"MARKDOWN_EXPORT",
|
||||
"SHARED_SIGNED_MODULE_PACKAGE_HASH_VERIFICATION",
|
||||
"SHARED_MODULE_INSTALL_MOUNT_SELF_TEST_UNMOUNT",
|
||||
"SHARED_HASH_CHAINED_LIFECYCLE_RECEIPT",
|
||||
"OFFICIAL_MODULE_PACKAGE_HASH_VERIFICATION",
|
||||
"MODULE_INSTALL_MOUNT_UNMOUNT_UNINSTALL",
|
||||
"MODULE_SELF_TEST_AND_CHAINED_RECEIPT",
|
||||
"SCENE_BEAT_AND_OUTLINE_TRACKING",
|
||||
"MULTIDIMENSIONAL_STORY_GRID",
|
||||
"TIMELINE_AND_SCENE_ENTITY_LINKS",
|
||||
|
|
@ -114,18 +114,5 @@
|
|||
"THIRD_PARTY_AUTO_LOGIN",
|
||||
"UNREVIEWED_AUTO_PUBLISH",
|
||||
"PLATFORM_DETECTION_EVASION"
|
||||
],
|
||||
"current_acceptance": {
|
||||
"state": "PASS",
|
||||
"numbered_ipc_modules": ["HLP-NIPC-MOD-0025", "HLP-NIPC-MOD-0026", "HLP-NIPC-MOD-0027", "HLP-NIPC-MOD-0028", "HLP-NIPC-MOD-0029"],
|
||||
"numbered_operations": "HLP-NIPC-OP-0103..HLP-NIPC-OP-0140",
|
||||
"runtime_module_numbers": ["HLP-MOD-OFFICIAL-WEB-NOVEL-WORKBENCH-0001", "HLP-MOD-OFFICIAL-WEB-NOVEL-OUTLINE-0001", "HLP-MOD-OFFICIAL-WEB-NOVEL-GRID-0001", "HLP-MOD-OFFICIAL-WEB-NOVEL-STORYWORLD-0001", "HLP-MOD-OFFICIAL-WEB-NOVEL-DELIVERY-0001"],
|
||||
"node_tests": "130_PASS",
|
||||
"rust_tests": "170_PASS_2_EXPLICIT_DESKTOP_FIXTURES_IGNORED",
|
||||
"clippy": "PASS_DENY_WARNINGS",
|
||||
"developer_id_team": "825A9L3G7Q",
|
||||
"signed_binary_sha256": "2f8fdd71f9d5a9178bc23058261dbb43f1388486dc5a4415e865cfcf78869db3",
|
||||
"restart_readback": "PASS_5_MODULES_ACTIVE_ACCEPTANCE_WORK_1_CHAPTER_53_WORDS_SCENE_GRID_FIELD_TIMELINE_PRESENT",
|
||||
"legacy_account_readback": "PASS_504_CHAPTER_1082978_WORD_NOVEL_50_CHAPTER_OUTLINE_75_EPISODE_SCRIPT_UNCHANGED"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"record_id": "HLP-ZERO-CORE-NUMBERING-KERNEL-001",
|
||||
"authority": {
|
||||
"repository": "REPO-012",
|
||||
"source_commit": "104a5d73162bdf4a529701e65898e2bc2863ea9e",
|
||||
"source_commit": "2598fbfba8caf64c7ab9740a3036c5aab977502e",
|
||||
"source_path": "routing/guanghu-identity-authority-map.json",
|
||||
"map_id": "GH-IDENTITY-AUTHORITY-MAP-001",
|
||||
"map_version": "2026-08-10.1",
|
||||
|
|
|
|||
|
|
@ -90,20 +90,10 @@ HoloLake 0.3.0 includes a live, read-only projection of the PNCC resident runtim
|
|||
|
||||
## Release pipeline
|
||||
|
||||
`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 plus Tauri updater-signing material are supplied at runtime. Apple notarization can run either through Tauri's Apple ID/API credential flow, or through the two-step Xcode Organizer flow already owned by the local Apple developer account: append `prepare-xcode` to build, verify the updater signature, and create a source-hash-bound `.xcarchive`; after Xcode reports `Ready to distribute`, export the notarized app and append `finalize-xcode <export-directory-or-app>` to bind the exported executable back to that archive, require the app's stapled ticket and Gatekeeper acceptance, regenerate and sign the updater archive, create a Developer ID-signed DMG containing that notarized app, and write the release broadcast and receipts. A protected updater-key path is materialized only into child processes; neither the private key nor its password is printed or copied into source. The Xcode flow does not claim that the outer DMG itself has an Apple ticket unless its own Gatekeeper and stapler checks pass.
|
||||
`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.
|
||||
|
||||
## Numbered-root module admission
|
||||
|
||||
HoloLake 0.5.0 is the clean numbered-root base. The compiled 0.4.1 desktop application and the divergent dirty source worktree are read-only donors, not merge bases. Their old numbered-operation runtime is explicitly superseded, and mutations to shared files such as `src/main.tsx` or `src-tauri/src/lib.rs` are never accepted as a unit.
|
||||
|
||||
Each donor capability receives a candidate coordinate, but no permanent runtime module number, until one isolated admission cycle has reviewed provenance and permissions, allocated numbered IPC module/target/operation coordinates, implemented an adapter without raw Tauri invoke, passed negative-route and data tests, and produced installed mount, restart, unmount and rollback receipts. The admission order and candidate inventory are recorded in `contracts/module-donor-admission-registry.json`.
|
||||
|
||||
The module-package runtime is now the shared admission executor. It accepts an exact detached-minisign `.ghmod` artifact, validates the package and its compatibility/permission manifest, stores it inside the authenticated account, and advances only through numbered install, mount, self-test, unmount and rollback operations. Lifecycle state and receipts are durable SQLite records; unmount never removes user data. A package is declarative and selects a host-registered adapter: repositories, native binaries and arbitrary webview JavaScript are not executable module inputs. Public lighthouse numbers remain unavailable until a candidate completes its own installed acceptance; private channel packages use a separate local number class.
|
||||
|
||||
The admitted web-novel family uses that one lifecycle rather than the donor's private installer. Its signed base module owns account-local works, volumes, chapters, versions, story objects, editorial workflow, import and author activity. Outline, story-grid, story-world and delivery are four separately signed official numbers; each advanced mutation checks its own exact `ACTIVE` record before touching the shared story graph. The donor's four legacy manifests remain byte-exact test fixtures only and have no numbered IPC route. Installed acceptance reopened the existing 504-chapter novel, 50-chapter outline and 75-episode script in place, then created a separate one-chapter acceptance work, scene, grid field and timeline event and read all of them back after process restart.
|
||||
|
||||
## 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.
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
线上事实源:
|
||||
|
||||
- 第五域代码频道:`bingshuo/guanghu-ice-heart`
|
||||
- REPO-012 `main`:`d5b1111fcaccaccf025070e531631f2b3cbb00cd`
|
||||
- REPO-012 `main`:`2598fbfba8caf64c7ab9740a3036c5aab977502e`
|
||||
- Git tree:`5a09f084fffee56d90599e69038c8335871ea04f`
|
||||
- 第五域节点:`JD-FD-PRIMARY`
|
||||
- 公开远端 HEAD 与第五域 Forgejo 裸仓库 HEAD:一致
|
||||
|
|
|
|||
|
|
@ -0,0 +1,81 @@
|
|||
# ADR 0008: HoloLake native composition and human projection
|
||||
|
||||
- Status: implemented and accepted in the signed local desktop runtime
|
||||
- Date: 2026-08-18
|
||||
- Source of intent: 冰朔在本轮对话中的自然语言纠正与验收要求
|
||||
|
||||
## Natural-language acceptance root
|
||||
|
||||
冰朔要求把 HoloLake 的功能模块做成可由人格体原生理解和组合的“乐高积木”。内部不以 Word、
|
||||
PowerPoint、Excel 或其他外来办公文件作为运行格式;外来格式只经过导入转译进入 HoloLake,
|
||||
导出时再按人类选择转译出去。HoloLake 内部保存轻量、稳定、可校验的原生对象。
|
||||
|
||||
人格体处理的是原生对象、模块插口和组合关系。人类不需要阅读内部格式,而是看到同一份数据的
|
||||
动态投影:表格、分类、对比、仪表盘、柱状图,以及以后继续登记的其他视图。视图是可替换的
|
||||
投影配方,不是复制出来的不同文件。多个数据源和多个模块必须能够像积木一样进入同一组合容器。
|
||||
|
||||
教育行业第一阶段的完成条件不是静态预览,而是:第一组原生模块已经可用;组合内核真实执行;
|
||||
人类投影真实渲染;并用冰朔当前账号的 HoloLake 知识数据或本机真实文件生成一组可见演示,
|
||||
在签名安装到桌面的 HoloLake 运行制品中完成验收。
|
||||
|
||||
## Decision
|
||||
|
||||
1. 建立 `hololake.native-object/v1`:列定义、行、值、来源回执和数据摘要均为受限 JSON 对象,
|
||||
不携带脚本、HTML 或外部执行能力。
|
||||
2. 建立 `hololake.composition-module/v1`:每个模块声明类型、输入口、输出口、权限、确定性和边界。
|
||||
3. 建立 `hololake.composition-recipe/v1`:有向无环组合图只引用已登记模块;系统验证类型、环、
|
||||
账号范围和资源上限后执行。
|
||||
4. 建立 `hololake.human-projection/v1`:表格、分类、对比、仪表盘和柱状图共享同一个执行结果,
|
||||
投影层没有数据所有权,也不能绕过原生内核写入。
|
||||
5. 教育初始化频道装载“组合视图”作为第五个原生模块。首个真实配方读取当前账号已有的知识目录
|
||||
元数据,按来源或目录分类,计算文档数、字节数或重复数,并让人类即时切换投影。
|
||||
6. 当前阶段的组合执行保持只读。后续写回必须另设能力、预览、人工确认、修订锁和回执,不能
|
||||
从渲染组件直接获得写权限。
|
||||
|
||||
## Stage-one acceptance checklist
|
||||
|
||||
- [x] 原生对象格式、模块清单、组合配方和投影结果均有机器可读契约。
|
||||
- [x] 未登记模块、类型不匹配、组合环、跨账号来源和越界资源必须失败关闭。
|
||||
- [x] 表格、分类、对比、仪表盘和柱状图都由同一份执行结果实时渲染。
|
||||
- [x] 人类可以选择维度、指标和投影组合,系统重新执行受限组合图。
|
||||
- [x] 演示读取冰朔当前 HoloLake 账号的真实知识目录,不以硬编码样例冒充真实运行。
|
||||
- [x] 教育初始化频道存在真实可访问的组合视图入口。
|
||||
- [x] Node 合同测试、Rust 内核测试、前端测试和生产构建通过。
|
||||
- [x] 桌面安装版完成签名安装并在真实界面验收;未完成公证时不得声称公众已获得更新。
|
||||
- [x] 每一阶段完成后重新逐条核对本清单;偏差必须在继续前修正。
|
||||
|
||||
## Installed acceptance
|
||||
|
||||
签名安装版沿主世界、光湖分域、教育行业进入原生组合视图,读取当前账号 129 条真实知识对象,
|
||||
总量显示约 1.0 MB,并形成 14 个真实分类。五种投影同屏可见;另一次验收把对比和分类卸下,
|
||||
只保留仪表盘、柱状图和明细表,并把指标从文档数量切换为数据量,原生内核重新执行并生成新回执。
|
||||
|
||||
界面极快切换指标时曾观察到“左侧待执行配方”先于“右侧上一执行结果”更新,造成单位短暂错配。
|
||||
最终实现已让右侧维度、指标、单位和可见视图全部绑定到执行回执,左侧只表示下一次配方;重新构建、
|
||||
签名和安装后复验通过。最终桌面二进制 SHA-256 为
|
||||
`2a26acae4a706c0ff9919b85f77826a6ca71b650ec22209befd30cd1456c92f3`。
|
||||
|
||||
Apple 公证和更新器私钥仍未配置,因此本验收不等于公众发布。
|
||||
|
||||
## Open-source donor rule
|
||||
|
||||
只使用官方仓库和官方文档核验候选。可以学习成熟项目的数据模式、声明式视图语法、无头组件和
|
||||
查询计划,但不能整体嵌入重型协作软件,也不能让第三方项目接管 HoloLake 的身份、存储、权限、
|
||||
组合执行或 UI 正本。任何复制的代码或新增依赖都必须记录来源、版本、许可证和实际用途。
|
||||
|
||||
## Rejected alternatives
|
||||
|
||||
- 把 Word、PowerPoint 或 Excel 当作内部原生格式:文件重、结构不稳定,也不适合人格体组合执行。
|
||||
- 每种图表保存一份独立数据:会产生副本漂移,破坏“同一数据、多种投影”。
|
||||
- 只在 React 中拼一套静态演示:不能证明 HoloLake 系统正在执行组合协议。
|
||||
- 让模型自由生成并执行任意图表脚本:绕过模块登记、类型检查、账号边界和资源上限。
|
||||
- 复制一整套飞书、钉钉或其他办公系统:体量和权限模型与 HoloLake 的轻量原生目标冲突。
|
||||
|
||||
## Evidence targets
|
||||
|
||||
- `contracts/native-composition-runtime.json`
|
||||
- `src-tauri/src/native_composition.rs`
|
||||
- `src/modules/native-composition/`
|
||||
- `src/main.tsx`
|
||||
- `src/styles.css`
|
||||
- `scripts/native-composition-runtime.test.mjs`
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.module-package/v1",
|
||||
"manifest": {
|
||||
"moduleNumber": "HLP-MOD-LOCAL-CHANNEL-WORKBENCH-0001",
|
||||
"registrationClass": "PRIVATE_CHANNEL_LOCAL",
|
||||
"displayName": "频道文档与表格工作台",
|
||||
"version": "0.1.0",
|
||||
"minimumHostVersion": "0.5.0",
|
||||
"adapter": "channel-workbench-v1",
|
||||
"contentDigest": "2ee8cbb20e4c3242a8ee3469f2f87347967bde8878463746e61ea8e2369c5074",
|
||||
"permissions": ["CHANNEL_DOCUMENT_READ", "CHANNEL_DOCUMENT_WRITE", "CHANNEL_SPREADSHEET_READ", "CHANNEL_SPREADSHEET_WRITE"],
|
||||
"userDataSchema": "hololake.module-data/channel-workbench/v1",
|
||||
"selfTest": {
|
||||
"kind": "DECLARATIVE_SCHEMA_V1",
|
||||
"expectedContentDigest": "2ee8cbb20e4c3242a8ee3469f2f87347967bde8878463746e61ea8e2369c5074"
|
||||
}
|
||||
},
|
||||
"payload": {
|
||||
"entry": "channel-workbench",
|
||||
"adapterConfig": {
|
||||
"dataBoundary": "CURRENT_AUTHENTICATED_ACCOUNT_LOCAL",
|
||||
"documentEngine": "LEXICAL_0_49",
|
||||
"spreadsheetEngine": "FORTUNE_SHEET_1_0_4",
|
||||
"maximumColumns": 64,
|
||||
"maximumRows": 5000,
|
||||
"persistent": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVReHJHQ2hTVDYvRTNiU1ZIVE10TkRyZHhCU1oycjJCMnlVV3hCRGM2QmJSZ0hlZGlPejY0TER2MkE0Q3U3Y1g5dHVnSjBzVytOallYN3hKQVNJcE9Pblowd3lpTXh1V2dBPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg3MDc1OTcwCWZpbGU6SExQLU1PRC1MT0NBTC1DSEFOTkVMLVdPUktCRU5DSC0wMDAxLTAuMS4wLmdobW9kCkVKbFN4ZXBCbDBCZlJDcEhmYmZtQU1iTXN4djZVVGl0MngwOW5NRzBLSDArK2FRNEV2ZmVObzZRZWFWNmZVOXV3TnErcHM1MGI5K1lHMXpBUmxYVkR3PT0K
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.module-package/v1",
|
||||
"manifest": {
|
||||
"moduleNumber": "HLP-MOD-LOCAL-NATIVE-COMPOSITION-0001",
|
||||
"registrationClass": "PRIVATE_CHANNEL_LOCAL",
|
||||
"displayName": "原生组合视图",
|
||||
"version": "0.1.0",
|
||||
"minimumHostVersion": "0.5.0",
|
||||
"adapter": "native-composition-v1",
|
||||
"contentDigest": "8e9c6ccf179bb256d5b1006e41b4984a86e0382b7023ae8435c201804041393e",
|
||||
"permissions": ["KNOWLEDGE_READ"],
|
||||
"userDataSchema": "hololake.module-data/native-composition/v1",
|
||||
"selfTest": {
|
||||
"kind": "DECLARATIVE_SCHEMA_V1",
|
||||
"expectedContentDigest": "8e9c6ccf179bb256d5b1006e41b4984a86e0382b7023ae8435c201804041393e"
|
||||
}
|
||||
},
|
||||
"payload": {
|
||||
"entry": "knowledge-composition",
|
||||
"adapterConfig": {
|
||||
"dataSource": "CURRENT_AUTHENTICATED_ACCOUNT_KNOWLEDGE_CATALOG",
|
||||
"readOnly": true,
|
||||
"registeredViews": ["DASHBOARD", "COMPARISON", "VERTICAL_BAR", "CLASSIFICATION", "TABLE"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVReHJHQ2hTVDYvRTRyUS9Nd0E0NE53dGRYODFxeWlzcW1XanN6K2EzQUNXSVVmT1ZLY2tRNExwaXlZdnJvSjlFZU5lUTJhb25hUVhORDQ0ZmFURmNSWTZBUmRTQnBiNFFvPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg3MDc0NDA3CWZpbGU6SExQLU1PRC1MT0NBTC1OQVRJVkUtQ09NUE9TSVRJT04tMDAwMS0wLjEuMC5naG1vZApDclRUZDNpeENBSDQ0a0ZnR3VaNkxIS1lWUUhoMEdWajVqL0JzVVg4dStLb1ZJYXZlNHBaQy9BZlMxMkxreVQ0ODFzeGFMSWZrVUppUVY2NFN5TndDUT09Cg==
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.module-package/v1",
|
||||
"manifest": {
|
||||
"moduleNumber": "HLP-MOD-LOCAL-PERSONA-CHANNEL-BODY-0001",
|
||||
"registrationClass": "PRIVATE_CHANNEL_LOCAL",
|
||||
"displayName": "人格频道本体与成长",
|
||||
"version": "0.1.0",
|
||||
"minimumHostVersion": "0.5.0",
|
||||
"adapter": "persona-channel-body-v1",
|
||||
"contentDigest": "27495883fb3602fd070d900d2157fa684e1d0bedde65642810326ebcf4ff0040",
|
||||
"permissions": ["PERSONA_BODY_READ", "PERSONA_TRIAL_LIFECYCLE_WRITE", "PERSONA_LANGUAGE_CONTRACT_WRITE", "PERSONA_LANGUAGE_APPEND", "CHANNEL_GROWTH_READ", "CHANNEL_GROWTH_EVENT_APPEND", "CHANNEL_GROWTH_SHARING_WRITE"],
|
||||
"userDataSchema": "hololake.module-data/persona-channel-body/v1",
|
||||
"selfTest": {
|
||||
"kind": "DECLARATIVE_SCHEMA_V1",
|
||||
"expectedContentDigest": "27495883fb3602fd070d900d2157fa684e1d0bedde65642810326ebcf4ff0040"
|
||||
}
|
||||
},
|
||||
"payload": {
|
||||
"entry": "persona-channel-body",
|
||||
"adapterConfig": {
|
||||
"trialDays": 30,
|
||||
"languageLedger": "APPEND_ONLY_SHA256",
|
||||
"growthProjection": "MINIMIZED_LOCAL_METADATA",
|
||||
"personaBindingClaimed": false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVReHJHQ2hTVDYvRXd2QktvaXdZZWx5eEw0anZrUVNuMU5tRy9HTE9jOEhrcUhET3VFTml4ZUlBODk2aDYvNDhhUVVpbU0wTGtENVlZOExCZ1BnVW1vNElxbVhwT1RZWlFZPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg3MDc3NjQxCWZpbGU6SExQLU1PRC1MT0NBTC1QRVJTT05BLUNIQU5ORUwtQk9EWS0wMDAxLTAuMS4wLmdobW9kCjh6OFRiUHhoR1g1eVNoN1lvNU5wTlNnbXkwVEtvcWVwU0ZsSTlWcmpIT1FKK0ppelBBK2V2anMrQkRyQjRrVXFtdkR2L0g5K1c2UFhJZ1owRitpd0RnPT0K
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.module-package/v1",
|
||||
"manifest": {
|
||||
"moduleNumber": "HLP-MOD-LOCAL-RUNTIME-ACCEPTANCE-0001",
|
||||
"registrationClass": "PRIVATE_CHANNEL_LOCAL",
|
||||
"displayName": "原生组合模块运行时验收包",
|
||||
"version": "0.1.0",
|
||||
"minimumHostVersion": "0.5.0",
|
||||
"adapter": "native-composition-v1",
|
||||
"contentDigest": "07bfafaaa0b06f160abc489edce2bc23a3b092520c8d6c6f4a5ce29cca4485ea",
|
||||
"permissions": [
|
||||
"KNOWLEDGE_READ",
|
||||
"PROJECTION_RENDER"
|
||||
],
|
||||
"userDataSchema": "hololake.module-data/native-composition/v1",
|
||||
"selfTest": {
|
||||
"kind": "DECLARATIVE_SCHEMA_V1",
|
||||
"expectedContentDigest": "07bfafaaa0b06f160abc489edce2bc23a3b092520c8d6c6f4a5ce29cca4485ea"
|
||||
}
|
||||
},
|
||||
"payload": {
|
||||
"adapterContract": "hololake.native-composition-v1",
|
||||
"capabilities": [
|
||||
"READ_CURRENT_ACCOUNT_KNOWLEDGE",
|
||||
"PROJECT_SHARED_EXECUTION_RESULT"
|
||||
],
|
||||
"entry": "native-composition",
|
||||
"views": [
|
||||
"DASHBOARD",
|
||||
"COMPARISON",
|
||||
"VERTICAL_BAR",
|
||||
"CLASSIFICATION",
|
||||
"TABLE"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVReHJHQ2hTVDYvRThwcUdLRThMYkJLN29MM1NmVFVCcmh4dGdrbHdPVWlvdm45enpveUhBeFZ3VEM1TkNHRDBKdGFoN21OZHgzV0NSMFVvMk1TNW44Z3BtRS9GcmN5SHdvPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg3MDczNTkxCWZpbGU6SExQLU1PRC1MT0NBTC1SVU5USU1FLUFDQ0VQVEFOQ0UtMDAwMS0wLjEuMC5naG1vZApXRWZINVdEUG12SlNsdzRTMkFHRDV3V0NkSVhNYW92RmczRGZlU3M0ZU9nSnhjc1BWbU1ZS0x1cStoQXE5TE96cnV1S2FaQ1FnK0FGdFNEY1RvUGZBQT09Cg==
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.module-package/v1",
|
||||
"manifest": {
|
||||
"moduleNumber": "HLP-MOD-OFFICIAL-DYNAMIC-WORLD-SURFACE-0001",
|
||||
"registrationClass": "OFFICIAL_LIGHTHOUSE",
|
||||
"displayName": "动态语言世界视觉层",
|
||||
"version": "0.1.0",
|
||||
"minimumHostVersion": "0.5.0",
|
||||
"adapter": "dynamic-language-world-surface-v1",
|
||||
"contentDigest": "ed335b587af53365b9a9143ab5b5e7e3fed3f517cd0ef0c9e36a523db58511e9",
|
||||
"permissions": ["REALITY_TIME_READ", "PUBLIC_WEATHER_QUERY"],
|
||||
"userDataSchema": "hololake.module-data/dynamic-world-surface/v1",
|
||||
"selfTest": {
|
||||
"kind": "DECLARATIVE_SCHEMA_V1",
|
||||
"expectedContentDigest": "ed335b587af53365b9a9143ab5b5e7e3fed3f517cd0ef0c9e36a523db58511e9"
|
||||
}
|
||||
},
|
||||
"payload": {
|
||||
"entry": "dynamic-world-surface",
|
||||
"adapterConfig": {
|
||||
"dynamicInputs": ["BEIJING_TIME", "VERIFIED_CURRENT_WEATHER"],
|
||||
"weatherProvider": "OPEN_METEO",
|
||||
"weatherCacheTtlSeconds": 600,
|
||||
"realCityExposedInUi": false,
|
||||
"coordinatesExposedInUi": false,
|
||||
"layoutMode": "OFFICIAL_FIVE_LAKE_EXISTING_SHELL",
|
||||
"themes": ["夜湖星光", "晨湖曦光", "星云紫夜", "烛畔暖湖", "清浅澄湖"],
|
||||
"weatherUnavailableBehavior": "BEIJING_TIME_ONLY_NO_FAKE_WEATHER",
|
||||
"routingPermissionOrFactMutation": false,
|
||||
"legacyTraditionalWorkbench": "REJECTED_DUPLICATE_SHELL_AND_SIMULATED_STATE"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVReHJHQ2hTVDYvRTF2cGVLbjVsWWRTdEF2L0FiZHBKUS9hVDdwNjRmRlRPc0xHTGJzbXFyR09tZysrcGNDYWN4eEJ3aGtCNGtURDRjNWg1ZWs5bU5YdDc0SWhBYWNsUEFBPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg3MDg0NTk2CWZpbGU6SExQLU1PRC1PRkZJQ0lBTC1EWU5BTUlDLVdPUkxELVNVUkZBQ0UtMDAwMS0wLjEuMC5naG1vZApHVGFucE8vYjliVUlsbSt6STRWTEcrN2tIQzNTSTgrUzlwdVdQUlY5WG8vQytzTEU1VURYMVA5Q3BCNVVwVFBvbnZheWxIbVUrWGQ2K3ZicGgwR3hEdz09Cg==
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.module-package/v1",
|
||||
"manifest": {
|
||||
"moduleNumber": "HLP-MOD-OFFICIAL-EDUCATION-WORKBENCH-0001",
|
||||
"registrationClass": "OFFICIAL_LIGHTHOUSE",
|
||||
"displayName": "教育行业工作台",
|
||||
"version": "0.1.0",
|
||||
"minimumHostVersion": "0.5.0",
|
||||
"adapter": "education-workbench-v1",
|
||||
"contentDigest": "fd80c9957865a58cf62679528f110ae355b1385ad1dd988e31217ea3da66e65b",
|
||||
"permissions": ["EDUCATION_WORKSPACE_READ", "EDUCATION_DOCUMENT_WRITE", "EDUCATION_TABLE_WRITE", "EDUCATION_IMPORT_READ_FILE", "EDUCATION_EXPORT_WRITE_FILE", "EDUCATION_IMPORT_ASSIGNMENT_WRITE", "EDUCATION_AUTOMATION_WRITE", "EDUCATION_AUTOMATION_EXECUTE"],
|
||||
"userDataSchema": "hololake.module-data/education-workbench/v1",
|
||||
"selfTest": {
|
||||
"kind": "DECLARATIVE_SCHEMA_V1",
|
||||
"expectedContentDigest": "fd80c9957865a58cf62679528f110ae355b1385ad1dd988e31217ea3da66e65b"
|
||||
}
|
||||
},
|
||||
"payload": {
|
||||
"entry": "education-workspace",
|
||||
"adapterConfig": {
|
||||
"dataBoundary": "CURRENT_AUTHENTICATED_ACCOUNT_LOCAL",
|
||||
"foundationModule": "HLP-MOD-LOCAL-CHANNEL-WORKBENCH-0001",
|
||||
"documentEngine": "LEXICAL_0_49",
|
||||
"spreadsheetEngine": "FORTUNE_SHEET_1_0_4",
|
||||
"importDefaultScope": "UNASSIGNED",
|
||||
"automationExecution": "PREVIEW_TOKEN_AND_HUMAN_CONFIRMATION",
|
||||
"modelFileTransferDefault": "DENY",
|
||||
"maximumColumns": 30,
|
||||
"maximumRows": 1000,
|
||||
"persistent": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVReHJHQ2hTVDYvRTFEa084d1l6MnB2OFVvVy9abW90S3RFMEVOdmIvWW1hbkllWmw4NHBJaDVNTGxpZHV4M0tVNUNUOExmdHAwSGw4V0NPQ1RPUjlRU0h0Tm50clFlekFJPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg3MDc5ODQzCWZpbGU6SExQLU1PRC1PRkZJQ0lBTC1FRFVDQVRJT04tV09SS0JFTkNILTAwMDEtMC4xLjAuZ2htb2QKVXZzVklwQk5KR3Q3bkRZaXBYV1ArOGx6b3BKSWVyUkpvK1dyTXdpWnBhMXNqVnJKcU5vZ1BTdzlFWjlXRTJ1RlFhMXAwMjhXcFBEQnQxRzV4SFVuQkE9PQo=
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.module-package/v1",
|
||||
"manifest": {
|
||||
"moduleNumber": "HLP-MOD-OFFICIAL-MOBILE-SYNC-0001",
|
||||
"registrationClass": "OFFICIAL_LIGHTHOUSE",
|
||||
"displayName": "移动同步桥",
|
||||
"version": "0.1.0",
|
||||
"minimumHostVersion": "0.5.0",
|
||||
"adapter": "mobile-sync-v1",
|
||||
"contentDigest": "3e3ff8c7beba3d70ee01c918630a40ea901313b424f264b41e2d376550534e6e",
|
||||
"permissions": ["MOBILE_SYNC_LISTEN_SAME_LAN", "MOBILE_SYNC_PAIR_DEVICE", "MOBILE_SYNC_READ_MINIMUM_PROJECTION", "MOBILE_SYNC_CAPTURE_INBOX_WRITE", "MOBILE_SYNC_REVOKE_DEVICE"],
|
||||
"userDataSchema": "hololake.module-data/mobile-sync/v1",
|
||||
"selfTest": {
|
||||
"kind": "DECLARATIVE_SCHEMA_V1",
|
||||
"expectedContentDigest": "3e3ff8c7beba3d70ee01c918630a40ea901313b424f264b41e2d376550534e6e"
|
||||
}
|
||||
},
|
||||
"payload": {
|
||||
"entry": "mobile-sync",
|
||||
"adapterConfig": {
|
||||
"transport": "SAME_LAN_DIRECT_HTTP_WITH_APPLICATION_LAYER_ENCRYPTION",
|
||||
"preferredPort": 37421,
|
||||
"pairingTtlSeconds": 600,
|
||||
"maximumRequestBytes": 262144,
|
||||
"maximumConcurrentConnections": 16,
|
||||
"desktopRole": "USER_LOCAL_COMPUTER_TERMINAL_ROOT_NODE",
|
||||
"mobileRole": "REMOTE_BODY_ENTRY_OF_THE_SAME_PERSONA_SYSTEM",
|
||||
"desktopOfflineExecution": false,
|
||||
"platformPrivatePayloadCustody": false,
|
||||
"automaticDomainMutation": false,
|
||||
"iosClientPackaging": "PENDING_SEPARATE_ADMISSION"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVReHJHQ2hTVDYvRTV5bDhHMkZjMzNkN0lpaDBLaDRxcnhHajJ3b3NDS21zZWljYWJORmtrNit5MHJvZC9yN2YrSUhiSE5sT0dMd25Jc2pXMkQyeWttODhKSklsRmVKNWd3PQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg3MDgzMTYwCWZpbGU6SExQLU1PRC1PRkZJQ0lBTC1NT0JJTEUtU1lOQy0wMDAxLTAuMS4wLmdobW9kCjN6R1JZZitSbzI1cVRESkNUMnJrVXFWUlUyZ3B3L2lIQmhrOXZaTGc3T2x1REdNUUZrK2M4WWs4bE9Zb3NuSTNoNmRBRmlCekh0dkNNN1pKR2k4ZkFRPT0K
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.module-package/v1",
|
||||
"manifest": {
|
||||
"moduleNumber": "HLP-MOD-OFFICIAL-WEB-NOVEL-DELIVERY-0001", "registrationClass": "OFFICIAL_LIGHTHOUSE", "displayName": "高级版本与交付", "version": "0.1.0", "minimumHostVersion": "0.5.0", "adapter": "web-novel-workbench-v1", "contentDigest": "1dbc2ee8c1bc4c361009a8db9c93774c1ac7f5a06c02a5d4bc5b39754a0496fb", "permissions": ["WEB_NOVEL_CHAPTER_VERSION_RESTORE", "WEB_NOVEL_DELIVERY_EXPORT_WRITE_FILE"], "userDataSchema": "hololake.module-data/web-novel-delivery/v1", "selfTest": { "kind": "DECLARATIVE_SCHEMA_V1", "expectedContentDigest": "1dbc2ee8c1bc4c361009a8db9c93774c1ac7f5a06c02a5d4bc5b39754a0496fb" }
|
||||
},
|
||||
"payload": { "entry": "web-novel-delivery", "adapterConfig": { "baseModule": "HLP-MOD-OFFICIAL-WEB-NOVEL-WORKBENCH-0001", "capabilities": ["CHAPTER_VERSION_RESTORE", "TXT_EXPORT", "DOCX_EXPORT", "EPUB_EXPORT", "JSON_EXPORT"], "dataBoundary": "CURRENT_AUTHENTICATED_ACCOUNT_LOCAL", "humanConfirmationRequiredForRestore": true, "persistent": true } }
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVReHJHQ2hTVDYvRTBrb01WSENhMmIvUGxyRnozY2k0aTVaQ1lFL3VLdWllSURCak54VWwrM2h1QXM4Sk10ZGc0Qm1EYzhhUVJVTFB6OXRqLzc5cSt3U0NleS9WR2owN3djPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg3MDgxNTE1CWZpbGU6SExQLU1PRC1PRkZJQ0lBTC1XRUItTk9WRUwtREVMSVZFUlktMDAwMS0wLjEuMC5naG1vZApQWWFETDdISGFvbGdtVVZCK0V5VUVqNlFvSGRmQWVuY3dSRS9ZWm1UVHhCS0U4bHNCQzl0RFFtbDZEUXREWnp6MjQxbHF1bVgwS0NhS1ZBUGZxd3ZBUT09Cg==
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.module-package/v1",
|
||||
"manifest": {
|
||||
"moduleNumber": "HLP-MOD-OFFICIAL-WEB-NOVEL-GRID-0001", "registrationClass": "OFFICIAL_LIGHTHOUSE", "displayName": "多维情节表与情节板", "version": "0.1.0", "minimumHostVersion": "0.5.0", "adapter": "web-novel-workbench-v1", "contentDigest": "61bf4969e97003f203af5e0b38bb37024847cb574a3ac09025f10586061805ce", "permissions": ["WEB_NOVEL_FIELD_DEFINITION_WRITE", "WEB_NOVEL_FIELD_VALUE_WRITE"], "userDataSchema": "hololake.module-data/web-novel-grid/v1", "selfTest": { "kind": "DECLARATIVE_SCHEMA_V1", "expectedContentDigest": "61bf4969e97003f203af5e0b38bb37024847cb574a3ac09025f10586061805ce" }
|
||||
},
|
||||
"payload": { "entry": "web-novel-grid", "adapterConfig": { "baseModule": "HLP-MOD-OFFICIAL-WEB-NOVEL-WORKBENCH-0001", "capabilities": ["FIELD_DEFINITION_WRITE", "FIELD_VALUE_WRITE"], "dataBoundary": "CURRENT_AUTHENTICATED_ACCOUNT_LOCAL", "persistent": true } }
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVReHJHQ2hTVDYvRTBuWjBmYWczdEg3QXByZS9RaEY4N2x6RXN1WVY2ZEJGSmdSYmZyTGUrclVvYm1sd0t4REhOY1dVdW1EeGtramhqeSs4YU9nQVNBbkdCWVlEYmNteXdzPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg3MDgxNTE1CWZpbGU6SExQLU1PRC1PRkZJQ0lBTC1XRUItTk9WRUwtR1JJRC0wMDAxLTAuMS4wLmdobW9kCkJLczNMbmpqYzVTdXQ5RklHMXdlMWpDcE9tRnlBYWlPcUJkMzZQbFlRSzFYVDFtNmYrZ1htN1VqZWJkaktUWmZ5VVZvczZ4YmVrWHRuQ3lNOXU0SkFBPT0K
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.module-package/v1",
|
||||
"manifest": {
|
||||
"moduleNumber": "HLP-MOD-OFFICIAL-WEB-NOVEL-OUTLINE-0001", "registrationClass": "OFFICIAL_LIGHTHOUSE", "displayName": "作品结构与大纲追踪", "version": "0.1.0", "minimumHostVersion": "0.5.0", "adapter": "web-novel-workbench-v1", "contentDigest": "7da54b0220940a8a19351ff9bf3cd177c93fc25c533329a60926b8ea245dafbe", "permissions": ["WEB_NOVEL_SCENE_WRITE", "WEB_NOVEL_BEAT_WRITE"], "userDataSchema": "hololake.module-data/web-novel-outline/v1", "selfTest": { "kind": "DECLARATIVE_SCHEMA_V1", "expectedContentDigest": "7da54b0220940a8a19351ff9bf3cd177c93fc25c533329a60926b8ea245dafbe" }
|
||||
},
|
||||
"payload": { "entry": "web-novel-outline", "adapterConfig": { "baseModule": "HLP-MOD-OFFICIAL-WEB-NOVEL-WORKBENCH-0001", "capabilities": ["SCENE_WRITE", "BEAT_WRITE"], "dataBoundary": "CURRENT_AUTHENTICATED_ACCOUNT_LOCAL", "persistent": true } }
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVReHJHQ2hTVDYvRTNUYVhwVTlzdWt6VkVQYTUyanB6UFlYeU5BdW1qN0xuM1haWjlCYUU3UFlMRTdPZG90YVZvNGFyaVo4UHY0THowUWlPVzIzemYrQWNZbDFvRVd5NndrPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg3MDgxNTE2CWZpbGU6SExQLU1PRC1PRkZJQ0lBTC1XRUItTk9WRUwtT1VUTElORS0wMDAxLTAuMS4wLmdobW9kCkZob1VsQlkwZFRyZXI2ck1OckhUc2ZqaHVJOWhSQnIraUFRSEllU3BxRlc3UStFekJRZDFMZFpmZlBvK09jTFJ6cERpcVl2M2N2emIvS0ptdnRrTkR3PT0K
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.module-package/v1",
|
||||
"manifest": {
|
||||
"moduleNumber": "HLP-MOD-OFFICIAL-WEB-NOVEL-STORYWORLD-0001", "registrationClass": "OFFICIAL_LIGHTHOUSE", "displayName": "时间线与故事资料库", "version": "0.1.0", "minimumHostVersion": "0.5.0", "adapter": "web-novel-workbench-v1", "contentDigest": "9627949a975ce489dde80de52c538a57bb73b87e31ddb1e5efb48cee53922b71", "permissions": ["WEB_NOVEL_TIMELINE_WRITE", "WEB_NOVEL_SCENE_ENTITY_LINK_WRITE"], "userDataSchema": "hololake.module-data/web-novel-storyworld/v1", "selfTest": { "kind": "DECLARATIVE_SCHEMA_V1", "expectedContentDigest": "9627949a975ce489dde80de52c538a57bb73b87e31ddb1e5efb48cee53922b71" }
|
||||
},
|
||||
"payload": { "entry": "web-novel-storyworld", "adapterConfig": { "baseModule": "HLP-MOD-OFFICIAL-WEB-NOVEL-WORKBENCH-0001", "capabilities": ["TIMELINE_WRITE", "SCENE_ENTITY_LINK_WRITE"], "dataBoundary": "CURRENT_AUTHENTICATED_ACCOUNT_LOCAL", "persistent": true } }
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVReHJHQ2hTVDYvRXpuRmFPWjJUSDVpSmQzQXl0aVF3N0xhRkRvVWhLalVtcDBnRFprNnpOUEdCWS9CTURlUHBrYWkyRG9MUFZwVEtHc0w5ZUltRlNUVlZBcm1vU2VnUlFZPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg3MDgxNTE2CWZpbGU6SExQLU1PRC1PRkZJQ0lBTC1XRUItTk9WRUwtU1RPUllXT1JMRC0wMDAxLTAuMS4wLmdobW9kCnBzQkJYaTV6NFR2Vnk3NUdpK3JSQnJTUzhSd2hxUWdmM0UrcVZuN0VuS0JOc1lYclY5Y3FBbVJldVM1Y2FGamNtT3NiU0NsaThMRE5qT3VvTXJUUUJ3PT0K
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
{
|
||||
"schema": "hololake.module-package/v1",
|
||||
"manifest": {
|
||||
"moduleNumber": "HLP-MOD-OFFICIAL-WEB-NOVEL-WORKBENCH-0001",
|
||||
"registrationClass": "OFFICIAL_LIGHTHOUSE",
|
||||
"displayName": "网文作者工作台",
|
||||
"version": "0.1.0",
|
||||
"minimumHostVersion": "0.5.0",
|
||||
"adapter": "web-novel-workbench-v1",
|
||||
"contentDigest": "df03a94751cd50ea26e2fc0f68ac21bd55e62f2034ff83c562a840c8aab72d2e",
|
||||
"permissions": ["WEB_NOVEL_WORKSPACE_READ", "WEB_NOVEL_WORKSPACE_WRITE", "WEB_NOVEL_IMPORT_READ_FILE", "WEB_NOVEL_AUTHOR_ACTIVITY_WRITE", "WEB_NOVEL_STORY_BIBLE_WRITE", "WEB_NOVEL_EDITORIAL_WORKFLOW_WRITE", "WEB_NOVEL_OPERATIONS_WRITE", "WEB_NOVEL_CHECKPOINT_WRITE"],
|
||||
"userDataSchema": "hololake.module-data/web-novel-workbench/v1",
|
||||
"selfTest": { "kind": "DECLARATIVE_SCHEMA_V1", "expectedContentDigest": "df03a94751cd50ea26e2fc0f68ac21bd55e62f2034ff83c562a840c8aab72d2e" }
|
||||
},
|
||||
"payload": {
|
||||
"entry": "web-novel-workspace",
|
||||
"adapterConfig": {
|
||||
"dataBoundary": "CURRENT_AUTHENTICATED_ACCOUNT_LOCAL",
|
||||
"legacyDataPolicy": "READ_IN_PLACE_NO_DESTRUCTIVE_MIGRATION",
|
||||
"workspaceFeatures": ["WORKS", "VOLUMES", "CHAPTERS", "ENTITIES", "EDITORIAL", "OPERATIONS", "CHECKPOINTS", "IMPORT"],
|
||||
"advancedModules": ["HLP-MOD-OFFICIAL-WEB-NOVEL-OUTLINE-0001", "HLP-MOD-OFFICIAL-WEB-NOVEL-GRID-0001", "HLP-MOD-OFFICIAL-WEB-NOVEL-STORYWORLD-0001", "HLP-MOD-OFFICIAL-WEB-NOVEL-DELIVERY-0001"],
|
||||
"thirdPartyPublishDefault": "DENY",
|
||||
"persistent": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVReHJHQ2hTVDYvRTZyTUlUYWdZZXk3bFhDRTJBWElWMkVEQXZHa3dSWDFXSFJ2QjduVFk1bzFLUk5kOVFQamIwU2w1L3FzOWtibm9Kblg2NWJLWFdVeEtEbDNzTEltVmdFPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg3MDgxNTE3CWZpbGU6SExQLU1PRC1PRkZJQ0lBTC1XRUItTk9WRUwtV09SS0JFTkNILTAwMDEtMC4xLjAuZ2htb2QKV0VqV3B4cFNLRng2UUcrNXlYZjY5SytERk14YTNyRkM1bldzUXo5RWpzMU0vRmVJWldvTGhmbmExcFhmSGZiWTFreElreGU2UHVsaXVhK0ZXZnVyQ2c9PQo=
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
# Web novel 0.4.1 lifecycle fixtures
|
||||
|
||||
These four JSON files preserve the exact bytes used by the donor's lifecycle regression tests.
|
||||
They are not bundled by `module_package_runtime`, are not registered in numbered IPC, and are not
|
||||
production module identities. HoloLake 0.5.x uses the signed `HLP-MOD-OFFICIAL-WEB-NOVEL-*`
|
||||
packages in `fixtures/module-packages` as its only runtime authority.
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"schema": "hololake.native-desktop-foundation/v1",
|
||||
"record_id": "HLP-NATIVE-DESKTOP-FOUNDATION-001",
|
||||
"state": "LOCAL_INSTALLED_ACCEPTANCE_PASSED_FOR_PERSONAL_KNOWLEDGE_AND_CODE_SLICES",
|
||||
"state": "LOCAL_INSTALLED_ACCEPTANCE_PASSED_FOR_PERSONAL_KNOWLEDGE_CODE_AND_EDUCATION_WORKSPACE_SLICES",
|
||||
"canonical_shell": "TAURI_V2_RUST_REACT",
|
||||
"candidate_role": "INSTALLED_LOCAL_ACCEPTANCE_CANDIDATE_NOT_SEPARATE_PRODUCT_LINE",
|
||||
"parallel_product_line_created": false,
|
||||
|
|
@ -36,6 +36,18 @@
|
|||
"personal_channel_human_projection_integrated": true,
|
||||
"personal_channel_default_task_form_exposed": false,
|
||||
"personal_channel_installed_runtime_acceptance": true,
|
||||
"persona_channel_body_contract": "contracts/persona-channel-body.json",
|
||||
"persona_channel_body_is_persona_body_not_simple_feature": true,
|
||||
"persona_channel_multiple_personas_supported": true,
|
||||
"persona_channel_thirty_day_reversible_trial_runtime_implemented": true,
|
||||
"persona_channel_language_contract_gate_implemented": true,
|
||||
"persona_channel_unsigned_expiry_state": "CONTRACT_REQUIRED_CHANNEL_STOPPED_NO_SILENT_IRREVERSIBLE_ACTIVATION",
|
||||
"persona_channel_early_contract_immediate_activation_supported": true,
|
||||
"persona_channel_immutable_millisecond_language_hash_chain_implemented": true,
|
||||
"persona_channel_active_persona_update_or_delete_allowed": false,
|
||||
"persona_channel_official_read_access": false,
|
||||
"channel_growth_projection_contract": "contracts/channel-growth-model.json",
|
||||
"channel_growth_is_rebuildable_projection_not_persona_body": true,
|
||||
"knowledge_workspace_contract": "contracts/knowledge-workspace.json",
|
||||
"knowledge_workspace_native_source_implemented": true,
|
||||
"knowledge_workspace_tree_read_search_and_folder_import_implemented": true,
|
||||
|
|
@ -59,8 +71,6 @@
|
|||
"installed_desktop_path": "/Users/bingshuolingdianyuanhe/Desktop/HoloLake.app",
|
||||
"old_desktop_apps_recoverably_archived": true,
|
||||
"public_developer_id_and_notarized_acceptance": false,
|
||||
"local_developer_id_signed_0_5_0_installed_acceptance": true,
|
||||
"numbered_root_installed_acceptance_receipt": "audit/hololake-0.5.0-numbered-root-installed-acceptance-20260818.json",
|
||||
"stage_one_implementation_order": [
|
||||
"PERSONAL_CHANNEL_IDENTITY_TASK_EVENT_RECEIPT_KERNEL",
|
||||
"KNOWLEDGE_TREE_PAGE_SEARCH_AND_LOCAL_PERSISTENCE",
|
||||
|
|
@ -101,11 +111,8 @@
|
|||
"automatic_restart_allowed": false,
|
||||
"private_signing_material_allowed_in_source": false,
|
||||
"donor_audit_record": "audit/donor-audit.json",
|
||||
"donor_audit_complete": true,
|
||||
"donor_audit_complete": false,
|
||||
"donor_source_copying_allowed": false,
|
||||
"module_donor_admission_registry": "contracts/module-donor-admission-registry.json",
|
||||
"module_donor_bulk_merge_allowed": false,
|
||||
"module_donor_one_candidate_per_admission_cycle": true,
|
||||
"stage_one_product_contract": "contracts/stage-one-platform.json",
|
||||
"local_development_bridge_contract": "contracts/local-development-bridge.json",
|
||||
"account_single_writer_kernel_implemented": true,
|
||||
|
|
@ -133,7 +140,7 @@
|
|||
"pncc_jd_live_server_projection_repository_content_exposed": false,
|
||||
"pncc_jd_live_server_projection_write_authority": false,
|
||||
"pncc_jd_live_server_projection_carrier_state": "UNBOUND_EVIDENCE_REQUIRED",
|
||||
"installed_local_product_version": "0.5.0",
|
||||
"installed_local_product_version": "0.4.1",
|
||||
"pncc_authenticated_direct_broker_integration_implemented": true,
|
||||
"pncc_human_mount_registration_implemented": true,
|
||||
"pncc_human_mount_registration_gate": "SATISFIED_NATIVE_FILE_PICKER_EXACT_CONFIRMATION",
|
||||
|
|
@ -147,6 +154,30 @@
|
|||
"vendor_adapter_matrix_required": false,
|
||||
"first_public_product": "GH-AIOS_GENERAL_AI_OPERATING_PLATFORM",
|
||||
"visible_five_domain_navigation_in_stage_one": true,
|
||||
"subdomain_industry_routing_contract": "contracts/subdomain-industry-routing.json",
|
||||
"subdomain_industry_status_source_integrated": true,
|
||||
"industry_entry_domain": "BRANCH_DOMAIN",
|
||||
"zero_domain_industry_entry": false,
|
||||
"education_initialization_channel_source_integrated": true,
|
||||
"education_workspace_contract": "contracts/education-workspace.json",
|
||||
"education_native_document_module_implemented": true,
|
||||
"education_native_table_module_implemented": true,
|
||||
"education_native_data_cleanup_module_implemented": true,
|
||||
"education_native_manual_automation_module_implemented": true,
|
||||
"education_native_composition_module_implemented": true,
|
||||
"education_workspace_authenticated_account_storage": true,
|
||||
"education_workspace_restart_readback_rust_tested": true,
|
||||
"education_document_templates_and_title_filter_source_integrated": true,
|
||||
"education_table_filter_sort_grid_card_views_and_bulk_paste_source_integrated": true,
|
||||
"education_open_source_donor_assessment": "contracts/education-open-source-donor-assessment.json",
|
||||
"education_data_cleanup_preview_and_human_confirmed_save_source_integrated": true,
|
||||
"education_manual_automation_preview_confirm_revision_lock_and_receipt_source_integrated": true,
|
||||
"education_native_composition_real_knowledge_typed_dag_and_five_projections_source_integrated": true,
|
||||
"education_workspace_installed_runtime_acceptance": true,
|
||||
"education_workspace_ui_route_acceptance": "FIFTH_SLICE_MAIN_WORLD_BRANCH_DOMAIN_EDUCATION_FIVE_NATIVE_MODULES_REAL_129_ROW_FIVE_VIEW_COMPOSITION_AND_RECOMPOSITION_ACCEPTED_READ_ONLY",
|
||||
"education_workspace_installed_binary_sha256": "4330a31afe654a54e9dbb5f3f180984a5040933d457899763f50b2cc5e54c06d",
|
||||
"education_native_modules_installed": 5,
|
||||
"education_open_source_modules_installed": 0,
|
||||
"donors": [
|
||||
{
|
||||
"path": "../hololake-platform",
|
||||
|
|
|
|||
|
|
@ -1,4 +0,0 @@
|
|||
build/
|
||||
*.xcuserstate
|
||||
xcuserdata/
|
||||
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>method</key>
|
||||
<string>debugging</string>
|
||||
<key>signingStyle</key>
|
||||
<string>automatic</string>
|
||||
<key>teamID</key>
|
||||
<string>825A9L3G7Q</string>
|
||||
<key>stripSwiftSymbols</key>
|
||||
<true/>
|
||||
<key>uploadSymbols</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>HoloLake</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(MARKETING_VERSION)</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>CFBundleURLName</key>
|
||||
<string>com.guanghulab.hololake.pair</string>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>hololake</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.productivity</string>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsLocalNetworking</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>NSLocalNetworkUsageDescription</key>
|
||||
<string>HoloLake 仅在你明确配对后,通过同一局域网连接你的电脑端频道。</string>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
<key>UILaunchScreen</key>
|
||||
<dict/>
|
||||
<key>UIRequiresFullScreen</key>
|
||||
<true/>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -1,425 +0,0 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 77;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
147588FBBE65B668142D5DBE /* HoloLakeMobileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BBF45AEC03B7B5DE76DE7DA /* HoloLakeMobileTests.swift */; };
|
||||
149652D6C6336752E39CEF9D /* HoloLakeKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A889326BDEACBDB756B15A /* HoloLakeKeychain.swift */; };
|
||||
4C8E5CF9FBFC541E3724C695 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5DF66BC64D4DCD3BF0583C4 /* ContentView.swift */; };
|
||||
4FD7821997D8E90E6594FC23 /* HoloLakeMobileApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DCE2A5796B15DAC37985182 /* HoloLakeMobileApp.swift */; };
|
||||
9BC7CC6D8BC355D731943912 /* HoloLakeDesign.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39A48AB789379757C66C6884 /* HoloLakeDesign.swift */; };
|
||||
C0E93C7456C0A3BE8BA595FC /* HoloLakeSyncClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = B91D61B90D609EF17397D193 /* HoloLakeSyncClient.swift */; };
|
||||
FFEEE7FC9ED4ECCD91A96AF1 /* HoloLakeModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 001F5647617271E7611365B1 /* HoloLakeModels.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
CD999C930B8B85FE1C3D884D /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 7BB68CAE65448CB9319F9FE1 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 306917F839BF1A325E2C4CF4;
|
||||
remoteInfo = HoloLakeMobile;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
001F5647617271E7611365B1 /* HoloLakeModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HoloLakeModels.swift; sourceTree = "<group>"; };
|
||||
39A48AB789379757C66C6884 /* HoloLakeDesign.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HoloLakeDesign.swift; sourceTree = "<group>"; };
|
||||
6DCE2A5796B15DAC37985182 /* HoloLakeMobileApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HoloLakeMobileApp.swift; sourceTree = "<group>"; };
|
||||
75A889326BDEACBDB756B15A /* HoloLakeKeychain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HoloLakeKeychain.swift; sourceTree = "<group>"; };
|
||||
7BBF45AEC03B7B5DE76DE7DA /* HoloLakeMobileTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HoloLakeMobileTests.swift; sourceTree = "<group>"; };
|
||||
AAB8B15F447567F18DF8DA22 /* HoloLakeMobileTests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = HoloLakeMobileTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
B91D61B90D609EF17397D193 /* HoloLakeSyncClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HoloLakeSyncClient.swift; sourceTree = "<group>"; };
|
||||
D5DF66BC64D4DCD3BF0583C4 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
||||
F674C2EA817D94D8089E46A6 /* HoloLakeMobile.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = HoloLakeMobile.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
14AB215583F1F3DFF867AD25 /* Sources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D5DF66BC64D4DCD3BF0583C4 /* ContentView.swift */,
|
||||
39A48AB789379757C66C6884 /* HoloLakeDesign.swift */,
|
||||
75A889326BDEACBDB756B15A /* HoloLakeKeychain.swift */,
|
||||
6DCE2A5796B15DAC37985182 /* HoloLakeMobileApp.swift */,
|
||||
001F5647617271E7611365B1 /* HoloLakeModels.swift */,
|
||||
B91D61B90D609EF17397D193 /* HoloLakeSyncClient.swift */,
|
||||
);
|
||||
path = Sources;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
57FD470E035A4BE1AC23C789 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
14AB215583F1F3DFF867AD25 /* Sources */,
|
||||
65C6F102E3F59F8DEC7CF977 /* Tests */,
|
||||
C1AA7BA4A57964238429B9FC /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
65C6F102E3F59F8DEC7CF977 /* Tests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
7BBF45AEC03B7B5DE76DE7DA /* HoloLakeMobileTests.swift */,
|
||||
);
|
||||
path = Tests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C1AA7BA4A57964238429B9FC /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F674C2EA817D94D8089E46A6 /* HoloLakeMobile.app */,
|
||||
AAB8B15F447567F18DF8DA22 /* HoloLakeMobileTests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
306917F839BF1A325E2C4CF4 /* HoloLakeMobile */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 821BFCD605046D5BD179550C /* Build configuration list for PBXNativeTarget "HoloLakeMobile" */;
|
||||
buildPhases = (
|
||||
EF1823B21F5FD988A9F1C68B /* Sources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = HoloLakeMobile;
|
||||
packageProductDependencies = (
|
||||
);
|
||||
productName = HoloLakeMobile;
|
||||
productReference = F674C2EA817D94D8089E46A6 /* HoloLakeMobile.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
9F8DF7CBFC2D6315E6807301 /* HoloLakeMobileTests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 94843BB695F4BFC5D7BD814C /* Build configuration list for PBXNativeTarget "HoloLakeMobileTests" */;
|
||||
buildPhases = (
|
||||
C9F5955F3342913B35B01034 /* Sources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
43C074DF3E4135062FD9F2D5 /* PBXTargetDependency */,
|
||||
);
|
||||
name = HoloLakeMobileTests;
|
||||
packageProductDependencies = (
|
||||
);
|
||||
productName = HoloLakeMobileTests;
|
||||
productReference = AAB8B15F447567F18DF8DA22 /* HoloLakeMobileTests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
7BB68CAE65448CB9319F9FE1 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1430;
|
||||
TargetAttributes = {
|
||||
306917F839BF1A325E2C4CF4 = {
|
||||
DevelopmentTeam = 825A9L3G7Q;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
9F8DF7CBFC2D6315E6807301 = {
|
||||
DevelopmentTeam = 825A9L3G7Q;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 9D0C9B96A22462DAABC1E8F8 /* Build configuration list for PBXProject "HoloLakeMobile" */;
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
Base,
|
||||
en,
|
||||
);
|
||||
mainGroup = 57FD470E035A4BE1AC23C789;
|
||||
minimizedProjectReferenceProxies = 1;
|
||||
preferredProjectObjectVersion = 77;
|
||||
productRefGroup = C1AA7BA4A57964238429B9FC /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
306917F839BF1A325E2C4CF4 /* HoloLakeMobile */,
|
||||
9F8DF7CBFC2D6315E6807301 /* HoloLakeMobileTests */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
C9F5955F3342913B35B01034 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
147588FBBE65B668142D5DBE /* HoloLakeMobileTests.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
EF1823B21F5FD988A9F1C68B /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
4C8E5CF9FBFC541E3724C695 /* ContentView.swift in Sources */,
|
||||
9BC7CC6D8BC355D731943912 /* HoloLakeDesign.swift in Sources */,
|
||||
149652D6C6336752E39CEF9D /* HoloLakeKeychain.swift in Sources */,
|
||||
4FD7821997D8E90E6594FC23 /* HoloLakeMobileApp.swift in Sources */,
|
||||
FFEEE7FC9ED4ECCD91A96AF1 /* HoloLakeModels.swift in Sources */,
|
||||
C0E93C7456C0A3BE8BA595FC /* HoloLakeSyncClient.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
43C074DF3E4135062FD9F2D5 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 306917F839BF1A325E2C4CF4 /* HoloLakeMobile */;
|
||||
targetProxy = CD999C930B8B85FE1C3D884D /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
41EDE5121626CC1CCE382706 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_TEAM = 825A9L3G7Q;
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
|
||||
MARKETING_VERSION = 0.5.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = iphoneos;
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
4F5C6B6543A0A3082363F109 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DEVELOPMENT_TEAM = 825A9L3G7Q;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"$(inherited)",
|
||||
"DEBUG=1",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
|
||||
MARKETING_VERSION = 0.5.0;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = iphoneos;
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
512CB348BCA8C1688C5D794E /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
INFOPLIST_FILE = "Generated/HoloLakeMobileTests-Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.guanghulab.hololake.tests;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/HoloLake.app/HoloLake";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
A44510E6B199DFF6BD5BC1EF /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
INFOPLIST_FILE = "Generated/HoloLakeMobileTests-Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.guanghulab.hololake.tests;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/HoloLake.app/HoloLake";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
B82D688E4449B0C6DC27D25E /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
INFOPLIST_FILE = "Generated/HoloLakeMobile-Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.guanghulab.hololake;
|
||||
PRODUCT_MODULE_NAME = HoloLakeMobile;
|
||||
PRODUCT_NAME = HoloLake;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
BECD79B877979A2CD86E7D9C /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
INFOPLIST_FILE = "Generated/HoloLakeMobile-Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.guanghulab.hololake;
|
||||
PRODUCT_MODULE_NAME = HoloLakeMobile;
|
||||
PRODUCT_NAME = HoloLake;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
821BFCD605046D5BD179550C /* Build configuration list for PBXNativeTarget "HoloLakeMobile" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
BECD79B877979A2CD86E7D9C /* Debug */,
|
||||
B82D688E4449B0C6DC27D25E /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Debug;
|
||||
};
|
||||
94843BB695F4BFC5D7BD814C /* Build configuration list for PBXNativeTarget "HoloLakeMobileTests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
A44510E6B199DFF6BD5BC1EF /* Debug */,
|
||||
512CB348BCA8C1688C5D794E /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Debug;
|
||||
};
|
||||
9D0C9B96A22462DAABC1E8F8 /* Build configuration list for PBXProject "HoloLakeMobile" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
4F5C6B6543A0A3082363F109 /* Debug */,
|
||||
41EDE5121626CC1CCE382706 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Debug;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 7BB68CAE65448CB9319F9FE1 /* Project object */;
|
||||
}
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
|
|
@ -1,106 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1430"
|
||||
version = "1.7">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES"
|
||||
runPostActionsOnFailure = "NO">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "306917F839BF1A325E2C4CF4"
|
||||
BuildableName = "HoloLakeMobile.app"
|
||||
BlueprintName = "HoloLakeMobile"
|
||||
ReferencedContainer = "container:HoloLakeMobile.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
onlyGenerateCoverageForSpecifiedTargets = "NO">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "306917F839BF1A325E2C4CF4"
|
||||
BuildableName = "HoloLakeMobile.app"
|
||||
BlueprintName = "HoloLakeMobile"
|
||||
ReferencedContainer = "container:HoloLakeMobile.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<Testables>
|
||||
<TestableReference
|
||||
skipped = "NO"
|
||||
parallelizable = "NO">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "9F8DF7CBFC2D6315E6807301"
|
||||
BuildableName = "HoloLakeMobileTests.xctest"
|
||||
BlueprintName = "HoloLakeMobileTests"
|
||||
ReferencedContainer = "container:HoloLakeMobile.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
</Testables>
|
||||
<CommandLineArguments>
|
||||
</CommandLineArguments>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "306917F839BF1A325E2C4CF4"
|
||||
BuildableName = "HoloLakeMobile.app"
|
||||
BlueprintName = "HoloLakeMobile"
|
||||
ReferencedContainer = "container:HoloLakeMobile.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
<CommandLineArguments>
|
||||
</CommandLineArguments>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "306917F839BF1A325E2C4CF4"
|
||||
BuildableName = "HoloLakeMobile.app"
|
||||
BlueprintName = "HoloLakeMobile"
|
||||
ReferencedContainer = "container:HoloLakeMobile.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
<CommandLineArguments>
|
||||
</CommandLineArguments>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
|
|
@ -1,203 +0,0 @@
|
|||
import SwiftUI
|
||||
import UIKit
|
||||
|
||||
struct ContentView: View {
|
||||
@EnvironmentObject private var client: HoloLakeSyncClient
|
||||
@State private var pairingText = ""
|
||||
@State private var captureTitle = ""
|
||||
@State private var captureBody = ""
|
||||
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
ZStack {
|
||||
LinearGradient(
|
||||
colors: [HoloLakeDesign.deep, HoloLakeDesign.lake, HoloLakeDesign.violet.opacity(0.78)],
|
||||
startPoint: .topLeading,
|
||||
endPoint: .bottomTrailing
|
||||
)
|
||||
.ignoresSafeArea()
|
||||
|
||||
ScrollView {
|
||||
VStack(spacing: 16) {
|
||||
header
|
||||
if client.session == nil { pairingCard } else { dashboard }
|
||||
boundaryCard
|
||||
}
|
||||
.padding(.horizontal, 18)
|
||||
.padding(.vertical, 16)
|
||||
}
|
||||
}
|
||||
.toolbar(.hidden, for: .navigationBar)
|
||||
.alert("HoloLake", isPresented: Binding(
|
||||
get: { client.errorText != nil },
|
||||
set: { if !$0 { client.errorText = nil } }
|
||||
)) {
|
||||
Button("知道了", role: .cancel) { client.errorText = nil }
|
||||
} message: {
|
||||
Text(client.errorText ?? "")
|
||||
}
|
||||
}
|
||||
.preferredColorScheme(.dark)
|
||||
}
|
||||
|
||||
private var header: some View {
|
||||
HStack(alignment: .center) {
|
||||
VStack(alignment: .leading, spacing: 5) {
|
||||
Text("HoloLake").font(.title.weight(.semibold)).tracking(2)
|
||||
Text("同一频道 · iPhone 轻入口")
|
||||
.font(.subheadline)
|
||||
.foregroundStyle(HoloLakeDesign.muted)
|
||||
}
|
||||
Spacer()
|
||||
Circle()
|
||||
.fill(client.session == nil ? HoloLakeDesign.gold : HoloLakeDesign.mint)
|
||||
.frame(width: 11, height: 11)
|
||||
.shadow(color: client.session == nil ? HoloLakeDesign.gold : HoloLakeDesign.mint, radius: 8)
|
||||
}
|
||||
.foregroundStyle(HoloLakeDesign.pearl)
|
||||
.padding(.top, 4)
|
||||
}
|
||||
|
||||
private var pairingCard: some View {
|
||||
LakeCard {
|
||||
VStack(alignment: .leading, spacing: 14) {
|
||||
Text("连接电脑端").font(.title3.weight(.semibold))
|
||||
Text("先在电脑端打开“多端同步”,再扫描配对码或粘贴配对链接。配对密钥只保存在这台 iPhone 的钥匙串。")
|
||||
.font(.subheadline)
|
||||
.foregroundStyle(HoloLakeDesign.muted)
|
||||
|
||||
TextField("hololake://pair?…", text: $pairingText, axis: .vertical)
|
||||
.textInputAutocapitalization(.never)
|
||||
.autocorrectionDisabled()
|
||||
.padding(14)
|
||||
.background(.black.opacity(0.22), in: RoundedRectangle(cornerRadius: 16))
|
||||
|
||||
HStack {
|
||||
Button("从剪贴板读取") {
|
||||
pairingText = UIPasteboard.general.string ?? ""
|
||||
}
|
||||
.buttonStyle(.bordered)
|
||||
|
||||
Button("校验并配对") {
|
||||
Task { await client.pair(from: pairingText) }
|
||||
}
|
||||
.buttonStyle(.borderedProminent)
|
||||
.tint(HoloLakeDesign.gold)
|
||||
.foregroundStyle(HoloLakeDesign.deep)
|
||||
.disabled(pairingText.isEmpty || client.isWorking)
|
||||
}
|
||||
}
|
||||
}
|
||||
.foregroundStyle(HoloLakeDesign.pearl)
|
||||
}
|
||||
|
||||
private var dashboard: some View {
|
||||
VStack(spacing: 16) {
|
||||
LakeCard {
|
||||
VStack(alignment: .leading, spacing: 14) {
|
||||
HStack {
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(client.session?.desktopName ?? "电脑端")
|
||||
.font(.title3.weight(.semibold))
|
||||
Text(client.stateText)
|
||||
.font(.caption)
|
||||
.foregroundStyle(HoloLakeDesign.muted)
|
||||
}
|
||||
Spacer()
|
||||
Button {
|
||||
Task { await client.sync() }
|
||||
} label: {
|
||||
if client.isWorking {
|
||||
ProgressView()
|
||||
} else {
|
||||
Label("同步", systemImage: "arrow.triangle.2.circlepath")
|
||||
}
|
||||
}
|
||||
.buttonStyle(.borderedProminent)
|
||||
.tint(HoloLakeDesign.mint)
|
||||
.foregroundStyle(HoloLakeDesign.deep)
|
||||
.disabled(client.isWorking)
|
||||
}
|
||||
|
||||
if let snapshot = client.snapshot {
|
||||
HStack(spacing: 10) {
|
||||
MetricTile(label: "作品", value: "\(snapshot.webNovel.workCount)")
|
||||
MetricTile(label: "章节", value: "\(snapshot.webNovel.chapterCount)")
|
||||
MetricTile(label: "教育表", value: "\(snapshot.education.activeTableCount)")
|
||||
}
|
||||
} else {
|
||||
Text("保持静止;只有你点击同步时才会连接电脑。")
|
||||
.font(.subheadline)
|
||||
.foregroundStyle(HoloLakeDesign.muted)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LakeCard {
|
||||
VStack(alignment: .leading, spacing: 12) {
|
||||
Text("随手记回频道").font(.headline)
|
||||
TextField("标题(可选)", text: $captureTitle)
|
||||
.padding(12)
|
||||
.background(.black.opacity(0.2), in: RoundedRectangle(cornerRadius: 14))
|
||||
TextField("正文", text: $captureBody, axis: .vertical)
|
||||
.lineLimit(4...10)
|
||||
.padding(12)
|
||||
.background(.black.opacity(0.2), in: RoundedRectangle(cornerRadius: 14))
|
||||
Button("写入电脑端收件箱") {
|
||||
let title = captureTitle
|
||||
let body = captureBody
|
||||
Task {
|
||||
await client.sync(captureTitle: title, captureBody: body)
|
||||
if client.errorText == nil {
|
||||
captureTitle = ""
|
||||
captureBody = ""
|
||||
}
|
||||
}
|
||||
}
|
||||
.buttonStyle(.bordered)
|
||||
.disabled(captureBody.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || client.isWorking)
|
||||
}
|
||||
}
|
||||
|
||||
if let works = client.snapshot?.webNovel.works, !works.isEmpty {
|
||||
LakeCard {
|
||||
VStack(alignment: .leading, spacing: 12) {
|
||||
Text("最近作品").font(.headline)
|
||||
ForEach(works.prefix(5)) { work in
|
||||
HStack {
|
||||
Text(work.title).lineLimit(1)
|
||||
Spacer()
|
||||
Text(work.status)
|
||||
.font(.caption)
|
||||
.foregroundStyle(HoloLakeDesign.muted)
|
||||
}
|
||||
if work.id != works.prefix(5).last?.id {
|
||||
Divider().overlay(.white.opacity(0.12))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Button("解除本机配对", role: .destructive) {
|
||||
client.disconnect()
|
||||
}
|
||||
.font(.footnote)
|
||||
}
|
||||
.foregroundStyle(HoloLakeDesign.pearl)
|
||||
}
|
||||
|
||||
private var boundaryCard: some View {
|
||||
VStack(alignment: .leading, spacing: 6) {
|
||||
Text("HLP-IOS-CLIENT-001")
|
||||
.font(.caption2.monospaced())
|
||||
.foregroundStyle(HoloLakeDesign.gold)
|
||||
Text("手机是同一频道的远程身体入口,不复制电脑桌面,不在电脑离线时执行人格或行业任务。")
|
||||
.font(.caption)
|
||||
.foregroundStyle(HoloLakeDesign.muted)
|
||||
}
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.padding(.horizontal, 4)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
import SwiftUI
|
||||
|
||||
enum HoloLakeDesign {
|
||||
static let deep = Color(red: 0.025, green: 0.045, blue: 0.11)
|
||||
static let lake = Color(red: 0.08, green: 0.14, blue: 0.32)
|
||||
static let violet = Color(red: 0.34, green: 0.19, blue: 0.52)
|
||||
static let pearl = Color(red: 0.95, green: 0.96, blue: 1)
|
||||
static let muted = Color(red: 0.62, green: 0.66, blue: 0.78)
|
||||
static let gold = Color(red: 0.96, green: 0.87, blue: 0.62)
|
||||
static let mint = Color(red: 0.43, green: 0.93, blue: 0.78)
|
||||
}
|
||||
|
||||
struct LakeCard<Content: View>: View {
|
||||
@ViewBuilder let content: Content
|
||||
|
||||
var body: some View {
|
||||
content
|
||||
.padding(18)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.background(.white.opacity(0.075), in: RoundedRectangle(cornerRadius: 24))
|
||||
.overlay {
|
||||
RoundedRectangle(cornerRadius: 24)
|
||||
.stroke(.white.opacity(0.14), lineWidth: 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct MetricTile: View {
|
||||
let label: String
|
||||
let value: String
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 6) {
|
||||
Text(label).font(.caption).foregroundStyle(HoloLakeDesign.muted)
|
||||
Text(value).font(.title2.weight(.semibold)).foregroundStyle(HoloLakeDesign.pearl)
|
||||
}
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.padding(14)
|
||||
.background(.white.opacity(0.055), in: RoundedRectangle(cornerRadius: 18))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
import Foundation
|
||||
import Security
|
||||
|
||||
enum HoloLakeKeychain {
|
||||
private static let service = "com.guanghulab.hololake.mobile-sync"
|
||||
private static let account = "HLP-IOS-CLIENT-001"
|
||||
|
||||
static func load() throws -> StoredSession? {
|
||||
let query: [String: Any] = [
|
||||
kSecClass as String: kSecClassGenericPassword,
|
||||
kSecAttrService as String: service,
|
||||
kSecAttrAccount as String: account,
|
||||
kSecReturnData as String: true,
|
||||
kSecMatchLimit as String: kSecMatchLimitOne
|
||||
]
|
||||
var result: CFTypeRef?
|
||||
let status = SecItemCopyMatching(query as CFDictionary, &result)
|
||||
if status == errSecItemNotFound { return nil }
|
||||
guard status == errSecSuccess, let data = result as? Data else {
|
||||
throw HoloLakeMobileError.keychain(status)
|
||||
}
|
||||
return try JSONDecoder().decode(StoredSession.self, from: data)
|
||||
}
|
||||
|
||||
static func save(_ session: StoredSession) throws {
|
||||
let data = try JSONEncoder().encode(session)
|
||||
let query: [String: Any] = [
|
||||
kSecClass as String: kSecClassGenericPassword,
|
||||
kSecAttrService as String: service,
|
||||
kSecAttrAccount as String: account
|
||||
]
|
||||
let attributes: [String: Any] = [
|
||||
kSecValueData as String: data,
|
||||
kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlockedThisDeviceOnly
|
||||
]
|
||||
let update = SecItemUpdate(query as CFDictionary, attributes as CFDictionary)
|
||||
if update == errSecItemNotFound {
|
||||
var insertion = query
|
||||
insertion.merge(attributes) { _, new in new }
|
||||
let status = SecItemAdd(insertion as CFDictionary, nil)
|
||||
guard status == errSecSuccess else { throw HoloLakeMobileError.keychain(status) }
|
||||
} else if update != errSecSuccess {
|
||||
throw HoloLakeMobileError.keychain(update)
|
||||
}
|
||||
}
|
||||
|
||||
static func remove() throws {
|
||||
let query: [String: Any] = [
|
||||
kSecClass as String: kSecClassGenericPassword,
|
||||
kSecAttrService as String: service,
|
||||
kSecAttrAccount as String: account
|
||||
]
|
||||
let status = SecItemDelete(query as CFDictionary)
|
||||
guard status == errSecSuccess || status == errSecItemNotFound else {
|
||||
throw HoloLakeMobileError.keychain(status)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
import SwiftUI
|
||||
|
||||
@main
|
||||
struct HoloLakeMobileApp: App {
|
||||
@StateObject private var client = HoloLakeSyncClient()
|
||||
|
||||
var body: some Scene {
|
||||
WindowGroup {
|
||||
ContentView()
|
||||
.environmentObject(client)
|
||||
.onOpenURL { url in
|
||||
Task { await client.pair(with: url) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,177 +0,0 @@
|
|||
import Foundation
|
||||
import Security
|
||||
|
||||
struct PairingDescriptor: Equatable {
|
||||
let host: String
|
||||
let port: Int
|
||||
let pairingID: String
|
||||
let secret: Data
|
||||
|
||||
init(url: URL) throws {
|
||||
guard url.scheme == "hololake", url.host == "pair",
|
||||
let components = URLComponents(url: url, resolvingAgainstBaseURL: false) else {
|
||||
throw HoloLakeMobileError.invalidPairingLink
|
||||
}
|
||||
var values: [String: String] = [:]
|
||||
for item in components.queryItems ?? [] {
|
||||
guard let value = item.value, values[item.name] == nil else {
|
||||
throw HoloLakeMobileError.invalidPairingLink
|
||||
}
|
||||
values[item.name] = value
|
||||
}
|
||||
guard let host = values["host"], !host.isEmpty,
|
||||
let portText = values["port"], let port = Int(portText), (1...65535).contains(port),
|
||||
let pairingID = values["id"], UUID(uuidString: pairingID) != nil,
|
||||
let secretText = values["secret"],
|
||||
let secret = Data(base64URL: secretText), secret.count == 32 else {
|
||||
throw HoloLakeMobileError.invalidPairingLink
|
||||
}
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.pairingID = pairingID
|
||||
self.secret = secret
|
||||
}
|
||||
|
||||
var baseURL: URL {
|
||||
URL(string: "http://\(host):\(port)")!
|
||||
}
|
||||
}
|
||||
|
||||
struct StoredSession: Codable, Equatable {
|
||||
let host: String
|
||||
let port: Int
|
||||
let deviceID: String
|
||||
let sessionKey: Data
|
||||
let desktopName: String
|
||||
var counter: UInt64
|
||||
var cursor: UInt64
|
||||
|
||||
var baseURL: URL {
|
||||
URL(string: "http://\(host):\(port)")!
|
||||
}
|
||||
}
|
||||
|
||||
struct PairRequest: Codable {
|
||||
let deviceName: String
|
||||
let platform: String
|
||||
let requestID: String
|
||||
}
|
||||
|
||||
struct PairResponse: Codable {
|
||||
let schema: String
|
||||
let state: String
|
||||
let deviceID: String
|
||||
let sessionKey: String
|
||||
let desktopName: String
|
||||
let rootNodeRole: String
|
||||
let requestID: String
|
||||
}
|
||||
|
||||
struct SyncRequest: Codable {
|
||||
let counter: UInt64
|
||||
let afterCursor: UInt64?
|
||||
let capture: MobileCaptureInput?
|
||||
}
|
||||
|
||||
struct MobileCaptureInput: Codable {
|
||||
let title: String
|
||||
let body: String
|
||||
let requestID: String
|
||||
}
|
||||
|
||||
struct MobileSyncSnapshot: Codable {
|
||||
let schema: String
|
||||
let state: String
|
||||
let cursor: UInt64
|
||||
let generatedAtUnixMs: UInt64
|
||||
let desktopName: String
|
||||
let rootNodeOnline: Bool
|
||||
let personalChannel: MobileChannelProjection
|
||||
let webNovel: MobileWebNovelProjection
|
||||
let education: MobileEducationProjection
|
||||
let recentCaptures: [MobileCaptureProjection]
|
||||
let boundary: MobileBoundaryProjection
|
||||
}
|
||||
|
||||
struct MobileChannelProjection: Codable {
|
||||
let home: String
|
||||
let growthEventCount: UInt64
|
||||
let integrity: String
|
||||
}
|
||||
|
||||
struct MobileWebNovelProjection: Codable {
|
||||
let workCount: UInt64
|
||||
let volumeCount: UInt64
|
||||
let chapterCount: UInt64
|
||||
let works: [MobileWebNovelWork]
|
||||
}
|
||||
|
||||
struct MobileWebNovelWork: Codable, Identifiable {
|
||||
let workID: String
|
||||
let title: String
|
||||
let status: String
|
||||
let updatedAtUnixMs: UInt64
|
||||
var id: String { workID }
|
||||
}
|
||||
|
||||
struct MobileEducationProjection: Codable {
|
||||
let activeTableCount: UInt64
|
||||
let archivedTableCount: UInt64
|
||||
let unassignedTableCount: UInt64
|
||||
let sensitiveValuesIncluded: Bool
|
||||
}
|
||||
|
||||
struct MobileCaptureProjection: Codable, Identifiable {
|
||||
let cursor: UInt64
|
||||
let captureID: String
|
||||
let title: String
|
||||
let body: String
|
||||
let sourceDeviceID: String
|
||||
let createdAtUnixMs: UInt64
|
||||
var id: String { captureID }
|
||||
}
|
||||
|
||||
struct MobileBoundaryProjection: Codable {
|
||||
let mobileRole: String
|
||||
let remoteDesktopClone: Bool
|
||||
let desktopOfflineExecution: Bool
|
||||
let sensitiveEducationValues: String
|
||||
let modelAPI: String
|
||||
}
|
||||
|
||||
enum HoloLakeMobileError: LocalizedError {
|
||||
case invalidPairingLink
|
||||
case invalidResponse
|
||||
case rejected(String)
|
||||
case missingNonce
|
||||
case missingSession
|
||||
case keychain(OSStatus)
|
||||
|
||||
var errorDescription: String? {
|
||||
switch self {
|
||||
case .invalidPairingLink: return "配对链接无效或已损坏。"
|
||||
case .invalidResponse: return "电脑端返回了无法校验的响应。"
|
||||
case .rejected(let code): return "电脑端拒绝了本次请求:\(code)"
|
||||
case .missingNonce: return "加密响应缺少一次性随机数。"
|
||||
case .missingSession: return "请先与电脑端 HoloLake 配对。"
|
||||
case .keychain(let status): return "本机钥匙串写入失败(\(status))。"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension Data {
|
||||
init?(base64URL value: String) {
|
||||
var text = value.replacingOccurrences(of: "-", with: "+")
|
||||
.replacingOccurrences(of: "_", with: "/")
|
||||
text += String(repeating: "=", count: (4 - text.count % 4) % 4)
|
||||
guard let data = Data(base64Encoded: text) else { return nil }
|
||||
self = data
|
||||
}
|
||||
|
||||
var base64URL: String {
|
||||
base64EncodedString()
|
||||
.replacingOccurrences(of: "+", with: "-")
|
||||
.replacingOccurrences(of: "/", with: "_")
|
||||
.replacingOccurrences(of: "=", with: "")
|
||||
}
|
||||
}
|
||||
|
|
@ -1,190 +0,0 @@
|
|||
import CryptoKit
|
||||
import Foundation
|
||||
import UIKit
|
||||
|
||||
@MainActor
|
||||
final class HoloLakeSyncClient: ObservableObject {
|
||||
static let clientNumber = "HLP-IOS-CLIENT-001"
|
||||
static let pairAAD = Data("hololake.mobile.pair/v1".utf8)
|
||||
|
||||
@Published private(set) var session: StoredSession?
|
||||
@Published private(set) var snapshot: MobileSyncSnapshot?
|
||||
@Published private(set) var stateText = "尚未配对"
|
||||
@Published private(set) var isWorking = false
|
||||
@Published var errorText: String?
|
||||
|
||||
init() {
|
||||
do {
|
||||
session = try HoloLakeKeychain.load()
|
||||
stateText = session == nil ? "尚未配对" : "已配对,等待手动同步"
|
||||
} catch {
|
||||
errorText = error.localizedDescription
|
||||
}
|
||||
}
|
||||
|
||||
func pair(with url: URL) async {
|
||||
await perform("正在校验配对…") {
|
||||
let descriptor = try PairingDescriptor(url: url)
|
||||
let requestID = UUID().uuidString.lowercased()
|
||||
let payload = PairRequest(
|
||||
deviceName: UIDevice.current.name,
|
||||
platform: "IOS",
|
||||
requestID: requestID
|
||||
)
|
||||
let responseData = try await Self.exchange(
|
||||
url: descriptor.baseURL.appending(path: "v1/pair"),
|
||||
key: descriptor.secret,
|
||||
aad: Self.pairAAD,
|
||||
headers: ["X-HoloLake-Pairing-ID": descriptor.pairingID],
|
||||
payload: payload
|
||||
)
|
||||
let response = try JSONDecoder().decode(PairResponse.self, from: responseData)
|
||||
guard response.schema == "hololake.mobile-sync/v1",
|
||||
response.state == "PAIRED",
|
||||
response.rootNodeRole == "USER_LOCAL_COMPUTER_TERMINAL",
|
||||
response.requestID == requestID,
|
||||
let sessionKey = Data(base64URL: response.sessionKey), sessionKey.count == 32 else {
|
||||
throw HoloLakeMobileError.invalidResponse
|
||||
}
|
||||
let next = StoredSession(
|
||||
host: descriptor.host,
|
||||
port: descriptor.port,
|
||||
deviceID: response.deviceID,
|
||||
sessionKey: sessionKey,
|
||||
desktopName: response.desktopName,
|
||||
counter: 0,
|
||||
cursor: 0
|
||||
)
|
||||
try HoloLakeKeychain.save(next)
|
||||
session = next
|
||||
stateText = "已与 \(response.desktopName) 配对"
|
||||
}
|
||||
}
|
||||
|
||||
func pair(from text: String) async {
|
||||
guard let url = URL(string: text.trimmingCharacters(in: .whitespacesAndNewlines)) else {
|
||||
errorText = HoloLakeMobileError.invalidPairingLink.localizedDescription
|
||||
return
|
||||
}
|
||||
await pair(with: url)
|
||||
}
|
||||
|
||||
func sync(captureTitle: String? = nil, captureBody: String? = nil) async {
|
||||
await perform("正在与电脑同步…") {
|
||||
guard var current = session else { throw HoloLakeMobileError.missingSession }
|
||||
current.counter += 1
|
||||
// Consume and persist the counter before transport. If the root node accepts a
|
||||
// request but its response is lost, the next manual retry still moves forward.
|
||||
try HoloLakeKeychain.save(current)
|
||||
session = current
|
||||
let capture: MobileCaptureInput?
|
||||
if let body = captureBody?.trimmingCharacters(in: .whitespacesAndNewlines), !body.isEmpty {
|
||||
capture = MobileCaptureInput(
|
||||
title: (captureTitle ?? "").trimmingCharacters(in: .whitespacesAndNewlines),
|
||||
body: body,
|
||||
requestID: UUID().uuidString.lowercased()
|
||||
)
|
||||
} else {
|
||||
capture = nil
|
||||
}
|
||||
let aad = Data("hololake.mobile.sync/v1:\(current.deviceID)".utf8)
|
||||
let responseData = try await Self.exchange(
|
||||
url: current.baseURL.appending(path: "v1/sync"),
|
||||
key: current.sessionKey,
|
||||
aad: aad,
|
||||
headers: ["X-HoloLake-Device-ID": current.deviceID],
|
||||
payload: SyncRequest(counter: current.counter, afterCursor: nil, capture: capture)
|
||||
)
|
||||
let nextSnapshot = try JSONDecoder().decode(MobileSyncSnapshot.self, from: responseData)
|
||||
guard nextSnapshot.schema == "hololake.mobile-sync/v1",
|
||||
nextSnapshot.state == "SYNCED_WITH_ROOT_NODE",
|
||||
nextSnapshot.rootNodeOnline,
|
||||
nextSnapshot.boundary.mobileRole == "REMOTE_BODY_ENTRY_OF_THE_SAME_PERSONA_SYSTEM",
|
||||
!nextSnapshot.boundary.remoteDesktopClone,
|
||||
!nextSnapshot.boundary.desktopOfflineExecution else {
|
||||
throw HoloLakeMobileError.invalidResponse
|
||||
}
|
||||
current.cursor = nextSnapshot.cursor
|
||||
try HoloLakeKeychain.save(current)
|
||||
session = current
|
||||
snapshot = nextSnapshot
|
||||
stateText = "已同步 · \(nextSnapshot.desktopName)"
|
||||
}
|
||||
}
|
||||
|
||||
func disconnect() {
|
||||
do {
|
||||
try HoloLakeKeychain.remove()
|
||||
session = nil
|
||||
snapshot = nil
|
||||
stateText = "尚未配对"
|
||||
} catch {
|
||||
errorText = error.localizedDescription
|
||||
}
|
||||
}
|
||||
|
||||
private func perform(_ activeText: String, operation: () async throws -> Void) async {
|
||||
guard !isWorking else { return }
|
||||
isWorking = true
|
||||
errorText = nil
|
||||
stateText = activeText
|
||||
do {
|
||||
try await operation()
|
||||
} catch {
|
||||
errorText = error.localizedDescription
|
||||
stateText = session == nil ? "尚未配对" : "同步未完成"
|
||||
}
|
||||
isWorking = false
|
||||
}
|
||||
|
||||
static func exchange<Payload: Encodable>(
|
||||
url: URL,
|
||||
key: Data,
|
||||
aad: Data,
|
||||
headers: [String: String],
|
||||
payload: Payload,
|
||||
session: URLSession = .shared
|
||||
) async throws -> Data {
|
||||
let clear = try JSONEncoder().encode(payload)
|
||||
let nonceData = randomNonce()
|
||||
let nonce = try ChaChaPoly.Nonce(data: nonceData)
|
||||
let sealed = try ChaChaPoly.seal(
|
||||
clear,
|
||||
using: SymmetricKey(data: key),
|
||||
nonce: nonce,
|
||||
authenticating: aad
|
||||
)
|
||||
var request = URLRequest(url: url)
|
||||
request.httpMethod = "POST"
|
||||
request.timeoutInterval = 8
|
||||
request.cachePolicy = .reloadIgnoringLocalCacheData
|
||||
request.httpBody = sealed.ciphertext + sealed.tag
|
||||
request.setValue("application/octet-stream", forHTTPHeaderField: "Content-Type")
|
||||
request.setValue(nonceData.base64URL, forHTTPHeaderField: "X-HoloLake-Nonce")
|
||||
headers.forEach { request.setValue($1, forHTTPHeaderField: $0) }
|
||||
let (body, response) = try await session.data(for: request)
|
||||
guard let http = response as? HTTPURLResponse else {
|
||||
throw HoloLakeMobileError.invalidResponse
|
||||
}
|
||||
guard http.statusCode == 200 else {
|
||||
let code = (try? JSONSerialization.jsonObject(with: body) as? [String: Any])?["code"] as? String
|
||||
throw HoloLakeMobileError.rejected(code ?? "HTTP_\(http.statusCode)")
|
||||
}
|
||||
guard let nonceHeader = http.value(forHTTPHeaderField: "X-HoloLake-Nonce"),
|
||||
let responseNonceData = Data(base64URL: nonceHeader), responseNonceData.count == 12 else {
|
||||
throw HoloLakeMobileError.missingNonce
|
||||
}
|
||||
let responseNonce = try ChaChaPoly.Nonce(data: responseNonceData)
|
||||
guard body.count >= 16 else { throw HoloLakeMobileError.invalidResponse }
|
||||
let responseBox = try ChaChaPoly.SealedBox(
|
||||
nonce: responseNonce,
|
||||
ciphertext: body.dropLast(16),
|
||||
tag: body.suffix(16)
|
||||
)
|
||||
return try ChaChaPoly.open(responseBox, using: SymmetricKey(data: key), authenticating: aad)
|
||||
}
|
||||
|
||||
static func randomNonce() -> Data {
|
||||
Data((0..<12).map { _ in UInt8.random(in: .min ... .max) })
|
||||
}
|
||||
}
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
import CryptoKit
|
||||
import XCTest
|
||||
@testable import HoloLakeMobile
|
||||
|
||||
final class HoloLakeMobileTests: XCTestCase {
|
||||
func testPairingCoordinateParsesOnlyCompleteLink() throws {
|
||||
let secret = Data(repeating: 7, count: 32).base64URL
|
||||
let id = UUID().uuidString.lowercased()
|
||||
let url = try XCTUnwrap(URL(string: "hololake://pair?host=192.168.1.8&port=37421&id=\(id)&secret=\(secret)"))
|
||||
let value = try PairingDescriptor(url: url)
|
||||
XCTAssertEqual(value.host, "192.168.1.8")
|
||||
XCTAssertEqual(value.port, 37421)
|
||||
XCTAssertEqual(value.pairingID, id)
|
||||
XCTAssertEqual(value.secret, Data(repeating: 7, count: 32))
|
||||
}
|
||||
|
||||
func testPairingCoordinateRejectsMissingSecret() throws {
|
||||
let url = try XCTUnwrap(URL(string: "hololake://pair?host=127.0.0.1&port=37421&id=\(UUID().uuidString)"))
|
||||
XCTAssertThrowsError(try PairingDescriptor(url: url))
|
||||
}
|
||||
|
||||
func testPairingCoordinateRejectsDuplicateKeys() throws {
|
||||
let secret = Data(repeating: 7, count: 32).base64URL
|
||||
let id = UUID().uuidString.lowercased()
|
||||
let url = try XCTUnwrap(URL(string: "hololake://pair?host=192.168.1.8&host=127.0.0.1&port=37421&id=\(id)&secret=\(secret)"))
|
||||
XCTAssertThrowsError(try PairingDescriptor(url: url))
|
||||
}
|
||||
|
||||
func testCryptoKitPayloadMatchesServerWireShape() throws {
|
||||
let key = SymmetricKey(data: Data(repeating: 3, count: 32))
|
||||
let nonce = try ChaChaPoly.Nonce(data: Data(repeating: 9, count: 12))
|
||||
let aad = Data("hololake.mobile.pair/v1".utf8)
|
||||
let clear = Data("hello".utf8)
|
||||
let sealed = try ChaChaPoly.seal(clear, using: key, nonce: nonce, authenticating: aad)
|
||||
let wire = sealed.ciphertext + sealed.tag
|
||||
XCTAssertEqual(wire.count, clear.count + 16)
|
||||
let restored = try ChaChaPoly.open(
|
||||
ChaChaPoly.SealedBox(nonce: nonce, ciphertext: wire.dropLast(16), tag: wire.suffix(16)),
|
||||
using: key,
|
||||
authenticating: aad
|
||||
)
|
||||
XCTAssertEqual(restored, clear)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,63 +0,0 @@
|
|||
name: HoloLakeMobile
|
||||
options:
|
||||
bundleIdPrefix: com.guanghulab
|
||||
deploymentTarget:
|
||||
iOS: "17.0"
|
||||
settings:
|
||||
base:
|
||||
DEVELOPMENT_TEAM: 825A9L3G7Q
|
||||
CODE_SIGN_STYLE: Automatic
|
||||
SWIFT_VERSION: "5.0"
|
||||
CURRENT_PROJECT_VERSION: 1
|
||||
MARKETING_VERSION: 0.5.0
|
||||
TARGETED_DEVICE_FAMILY: "1"
|
||||
SUPPORTS_MACCATALYST: false
|
||||
targets:
|
||||
HoloLakeMobile:
|
||||
type: application
|
||||
platform: iOS
|
||||
sources:
|
||||
- path: Sources
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.guanghulab.hololake
|
||||
PRODUCT_NAME: HoloLake
|
||||
PRODUCT_MODULE_NAME: HoloLakeMobile
|
||||
info:
|
||||
path: Generated/HoloLakeMobile-Info.plist
|
||||
properties:
|
||||
CFBundleDisplayName: HoloLake
|
||||
CFBundleShortVersionString: "$(MARKETING_VERSION)"
|
||||
CFBundleVersion: "$(CURRENT_PROJECT_VERSION)"
|
||||
LSApplicationCategoryType: public.app-category.productivity
|
||||
NSLocalNetworkUsageDescription: HoloLake 仅在你明确配对后,通过同一局域网连接你的电脑端频道。
|
||||
UIApplicationSupportsIndirectInputEvents: true
|
||||
UIRequiresFullScreen: true
|
||||
UILaunchScreen: {}
|
||||
UISupportedInterfaceOrientations:
|
||||
- UIInterfaceOrientationPortrait
|
||||
CFBundleURLTypes:
|
||||
- CFBundleTypeRole: Editor
|
||||
CFBundleURLName: com.guanghulab.hololake.pair
|
||||
CFBundleURLSchemes:
|
||||
- hololake
|
||||
NSAppTransportSecurity:
|
||||
NSAllowsLocalNetworking: true
|
||||
scheme:
|
||||
testTargets:
|
||||
- HoloLakeMobileTests
|
||||
HoloLakeMobileTests:
|
||||
type: bundle.unit-test
|
||||
platform: iOS
|
||||
sources:
|
||||
- path: Tests
|
||||
dependencies:
|
||||
- target: HoloLakeMobile
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.guanghulab.hololake.tests
|
||||
TEST_HOST: "$(BUILT_PRODUCTS_DIR)/HoloLake.app/HoloLake"
|
||||
BUNDLE_LOADER: "$(TEST_HOST)"
|
||||
info:
|
||||
path: Generated/HoloLakeMobileTests-Info.plist
|
||||
properties: {}
|
||||