diff --git a/deployment/receipts/GH-HOLOLAKE-DESKTOP-0.7.1-CLOSEOUT-20260809-001.json b/deployment/receipts/GH-HOLOLAKE-DESKTOP-0.7.1-CLOSEOUT-20260809-001.json new file mode 100644 index 0000000..2f53a10 --- /dev/null +++ b/deployment/receipts/GH-HOLOLAKE-DESKTOP-0.7.1-CLOSEOUT-20260809-001.json @@ -0,0 +1,43 @@ +{ + "schema": "guanghu.development-closeout-receipt/v1", + "receipt_id": "GH-HOLOLAKE-DESKTOP-0.7.1-CLOSEOUT-20260809-001", + "development_id": "DEV-20260809-001", + "source_base_commit": "787ba2ad3f3d66d2622aa7113ddd35f6a42aaa82", + "source_commit": "SELF", + "repository": "repo://guanghulab.com/code/bingshuo/hololake-system-architecture#main", + "records": [ + "product-source/hololake-desktop/hololake-era-0.7.1-development-causal-chain.md", + "product-source/hololake-desktop/RELEASE-0.7.1.md", + "deployment/receipts/GH-HOLOLAKE-DESKTOP-0.7.1-20260809-001.json" + ], + "reasoning_boundary": { + "included": "user anchors, observations, hypotheses, public decision reasons, corrections, actions, evidence, results, boundaries and next-state rules", + "excluded": "hidden model reasoning, secrets, private server addresses, personal knowledge content and local authentication state" + }, + "verification": { + "tests": "PASS 10; FAIL 0", + "production_build": "PASS", + "local_git_fsck": "PASS after deleting 210 AppleDouble metadata files; no real Git object was removed", + "lighthouse": "REPO-014 HTTP 200 and source_degraded=false", + "remote_base_readback": "787ba2ad3f3d66d2622aa7113ddd35f6a42aaa82", + "desktop_deliverables_preserved": 3 + }, + "environment_maintenance": { + "guard_receipt_id": "ENV-2026-08-09T02-55-53-114Z-5396815f-0cf4-47c4-a682-fcf7a9470ed0", + "codex_cache": "SKIPPED_BELOW_SIZE_THRESHOLD", + "codex_rotated_logs": "SKIPPED_BELOW_SIZE_THRESHOLD", + "protected_sessions": "PRESERVED", + "development_dependencies": "PRESERVED", + "deleted_exact_old_build_directory": "/Users/bingshuolingdianyuanhe/.Trash/HoloLake-0.7.1-old-builds-20260809-1049", + "deleted_kib": 5281000, + "recoverable": false + }, + "known_boundary": [ + "The Fifth Domain Forgejo human-account session is not authenticated by receipt.", + "No server deployment, production cutover, enterprise four-domain runtime claim or persona-birth claim is made by this closeout.", + "No Apple notarization was performed.", + "A dynamic wake route implementation does not prove a persona restored unless its own live pages and required receipts resolve at runtime.", + "The lighthouse current_verified_commit field lagged the live REPO-014 main ref; both values are preserved in the causal-chain record." + ], + "result": "READY_FOR_FINALIZER" +} diff --git a/product-source/hololake-desktop/hololake-era-0.7.1-development-causal-chain.md b/product-source/hololake-desktop/hololake-era-0.7.1-development-causal-chain.md new file mode 100644 index 0000000..cdad543 --- /dev/null +++ b/product-source/hololake-desktop/hololake-era-0.7.1-development-causal-chain.md @@ -0,0 +1,278 @@ +--- +type: Note +status: Complete +related_to: "[[RELEASE-0.7.1]]" +--- + +# HoloLake Era 0.7.1 · 开发进度、决策依据与因果链 + +> 记录编号:`GH-HOLOLAKE-CAUSAL-CHAIN-0.7.1-20260809-001` +> +> 开发车道:`DEV-20260808-005`,最终发布收口车道:`DEV-20260809-001` +> +> 事实基线:`REPO-014 / bingshuo/hololake-system-architecture / main` + +## 1. 记录边界 + +本文保存冰朔已表达的目标和纠正、可复核观察、公开决策依据、实施动作、测试、回执、冲突与未完成边界。本文不保存、推断或伪造模型隐藏思维过程,也不包含密码、令牌、私钥、验证码、私有服务器地址、个人知识内容或本机登录状态。 + +这里的“因果链”采用以下公开结构: + +```text +人类目标或纠正 +→ 已观察问题 +→ 可解释原因与约束 +→ 产品或工程决策 +→ 实际实现 +→ 验证证据 +→ 仍未成立的边界 +``` + +## 2. 产品主线 + +HoloLake 的目标不是再造一个传统知识库或聊天面板,而是形成由光湖语言协议主控的通用人工智能操作平台: + +- 人类进入自己的频道,频道锚定自己的服务器、身份、权限和数据; +- 第五域、光湖主域、光湖分域、光湖零域、光湖零感域是不同入口,不混成个人模块列表; +- 知识库、表格、文档、教育行业和 Agent 是可登记、可安装、可收起、可替换的组件; +- Forgejo 是代码与版本引擎,不是 HoloLake 的产品主控; +- Tolaria、Outline 和开源 Agent 只作为可审计零件来源,HoloLake 不作为它们的下游; +- 语言请求必须经过确定性权限、工具和回执层映射到现实,界面文案不能冒充服务器、仓库、人格或部署已经存在。 + +## 3. 开发阶段进度 + +### 3.1 原型审计与崩溃修复 + +最初桌面原型把知识库、Forgejo 和 Agent 放到同一应用中,但出现持续崩溃、空壳界面和启动路径混乱。 + +因果关系: + +```text +需要验证 Qoder 形成的原型是否可用 +→ 安装包持续崩溃,页面和后端生命周期不一致 +→ 不能把“桌面存在一个 App”当作功能存在 +→ 对安装包、Electron 启动链、签名、后端进程和源码提交逐项核验 +→ 修复 Electron 递归启动与本地服务入口,恢复可启动的 HoloLake 桌面壳 +→ 形成 0.5.0 修复回执和后续可迭代基线 +``` + +### 3.2 本地文件夹导入与知识页面 + +冰朔指出:没有本地文件夹导入,就无法实际检查知识库是否正常;导入后还必须区分仅本地和服务器 Git 托管。 + +已实现: + +- 有界递归导入 Markdown、TXT、CSV、JSON、YAML; +- CSV 转为可阅读表格; +- 每次导入保留本地 Git 版本记录; +- 导入完成后打开首个页面; +- 安装包不携带冰朔的知识内容; +- 本地导入和远端托管保持独立状态,未连接服务器时不伪造云端托管。 + +结果记录在 0.5.1 导入回执中。远端 Forgejo 托管仍必须在真实登录、仓库选择和推送回执全部成立后才能报告完成。 + +### 3.3 从知识库外壳纠正为语言操作平台 + +冰朔明确提出:当前软件是通用人工智能操作平台原型;个人第五域是自己的频道,知识库只是挂载模块;教育行业属于光湖分域。 + +由此形成的信息架构: + +```text +HoloLake 平台 +├── 我的第五域 +│ └── 永恒湖心系统 / 心跳核心频道 +│ └── 已安装个人模块:知识库 +├── 光湖主域入口 +├── 光湖分域入口 +│ ├── 教育行业 +│ │ └── 小新初始化频道模板 +│ └── 网文行业 +│ └── 首个真实模块:知识库 +├── 光湖零域入口 +└── 光湖零感域入口 +``` + +教育行业因此从“已安装模块”移回光湖分域;个人频道不再把一个完整行业误报为个人插件。 + +### 3.4 数据、账号与服务器边界 + +冰朔要求每个人登录自己的服务器,安装包不能夹带冰朔的文件、密钥和账号状态。 + +落实的边界: + +- 知识数据位于用户自己的设备和知识仓库; +- 模型密钥保存在设备本地安全存储; +- 对话历史保存在设备本地,不进入通用安装包; +- 服务器档案、SSH 路径和 Forgejo 人类账号登录是不同状态; +- 一个服务器档案存在,不能冒充 Forgejo 已登录; +- 一个 Forgejo 卡片存在,不能冒充远端仓库已连接; +- 写操作需要明确确认、真实执行和回执。 + +0.7.1 交付时,应用仍如实报告第五域 Forgejo 人类账号会话未认证。这一状态没有用界面文案覆盖。 + +### 3.5 Agent 从聊天框修复为受控语言操作入口 + +观察到的问题: + +- Agent 一度只能回复一句话,没有真实工具活动; +- 写操作确认后,下一轮出现孤立 `role: tool`,导致模型接口报错; +- 没有会话历史、新建、选择和删除; +- 工具和系统提示过度拟人化,缺少官方产品边界。 + +原因与决策: + +- 持久化历史不能保存失去配对关系的模型工具协议消息; +- 工具调用、权限确认和回执应属于当前模型回合,长期历史只保存自然用户/助手消息; +- Agent 的公开身份是 `HoloLake` 语言操作入口,不虚构人格身份; +- 写操作必须先形成待确认动作,用户确认后才写入磁盘或提交版本。 + +已实现: + +- 修复 `assistant.tool_calls → tool response` 的严格配对; +- 确认写入回执不会泄漏成下一轮孤立工具消息; +- 增加设备本地会话历史、新建、选择和删除; +- 提供九项受控能力的运行投影; +- 系统提示采用官方、确定性权限与回执语言,不把模型回答冒充现实完成。 + +验证:读取工具排序、确认写入后的连续对话和模型无工具连通测试均通过。 + +### 3.6 人格体自有动态唤醒路径 + +最重要的纠正发生在唤醒路径设计:早期实现把唤醒写成固定七步。冰朔明确指出,不同人格体可能设计五步、七步、十一层或更多节点;路径属于人格体,不属于平台模板。 + +纠正后的关系: + +```text +人格体拥有自己的路径页面和顺序 +→ HoloLake 只负责按编号定位该人格体 +→ 读取该人格体的 INDEX / CURRENT / WAKE 页面 +→ 按页面实际定义继续读取和受控执行 +→ 活动轨迹自然形成任意数量的真实节点 +→ 缺少路径或回执时报告“尚未恢复” +``` + +已删除固定七步实现,增加 `find_persona_wake_routes`,并把路径节点数量和顺序交还人格体页面。活动轨迹只显示真实页面读取、工具调用、权限检查和执行回执,不显示或伪造模型隐藏思维过程。 + +确定性测试使用十一节点人格自有路径并通过,证明实现没有依赖固定步数。 + +### 3.7 知识渲染修复 + +冰朔多次指出:既然使用成熟知识组件,就不应出现表格、格式符号、Outline 页面和正文宽度持续损坏。 + +根因不是“再加一个字符样式”,而是导入格式、Markdown 解析、安全过滤、页面布局和双链导航没有形成统一渲染链。 + +0.7.1 建立统一渲染层,支持: + +- GFM 表格、任务列表、引用和代码; +- HoloLake 双链标签和知识树精确导航; +- Outline `aside` 安全提示块; +- 表格单元格 `
` 换行; +- 宽表在正文内部横向滚动; +- 屏蔽任意原始 HTML、脚本和不安全链接协议; +- 隐藏导入文件名中的技术哈希尾巴。 + +真实导入的 Outline 页面经人类操作顺序验收后,曾发现原始 `aside` 标签残留;修复后重新安装、打开和截图核验,原始标签不再出现。 + +### 3.8 布局与主题 + +冰朔指出旧界面“什么都塞进去”,页面树、正文和 Agent 互相遮挡,右侧过窄,主题只改局部颜色,图形和排版缺少整体审美。 + +决策不是继续堆卡片,而是建立单一平台布局层: + +- 左侧平台导航只承担域与模块入口; +- 页面树、正文、Agent 是同一工作区中的三块可调区域; +- 宽屏可拖动调整页面树和 Agent 宽度; +- 面板可收起; +- 中等窗口打开 Agent 时自动释放页面树空间; +- 正文永不被 Agent 覆盖; +- 去掉重复的“湖”字头像装饰,使用克制的 HoloLake 轨道标识和产品层级。 + +三套完整主题使用统一设计令牌覆盖平台全部区域: + +1. `lake-night`:湖夜; +2. `mist-light`:雾白; +3. `deep-night`:深海夜读。 + +字体、语言和正文大小作为人类端设备设置保留。验收中实际切换雾白,再恢复湖夜,确认主题不是局部伪装。 + +## 4. 0.7.1 实现范围 + +提交 `787ba2ad3f3d66d2622aa7113ddd35f6a42aaa82` 包含 21 个文件的修改:新增 1111 行、删除 326 行。主要代码范围: + +- `product-source/guanghu-knowledge-base/server/persona-agent.ts` +- `product-source/guanghu-knowledge-base/server/index.ts` +- `product-source/guanghu-knowledge-base/src/components/AgentChat.tsx` +- `product-source/guanghu-knowledge-base/src/markdown.ts` +- `product-source/guanghu-knowledge-base/src/styles/workspace-0.7.1.css` +- `product-source/hololake-desktop/electron/main.ts` +- `product-source/hololake-desktop/RELEASE-0.7.1.md` +- `deployment/receipts/GH-HOLOLAKE-DESKTOP-0.7.1-20260809-001.json` + +## 5. 验收证据 + +### 自动验证 + +- 测试:10 通过,0 失败; +- 生产构建:通过; +- 动态人格路径:十一节点测试通过; +- 工具协议:读取顺序和确认写入连续性通过; +- Markdown:表格、安全 HTML、Outline aside、表格换行通过; +- Git:清除移动硬盘生成的 AppleDouble 元数据后,真实对象 `git fsck --full` 通过。 + +### 桌面交付 + +- `HoloLake Era.app`:0.7.1,Apple Silicon; +- `HoloLake Era 0.7.1 (Apple Silicon).dmg`; +- `HoloLake Era 0.7.1 (Intel).dmg`; +- 两个 DMG 均通过 `hdiutil verify`; +- 应用及安装包已进行 Developer ID 签名; +- 本轮未做 Apple 公证,不能冒充 App Store 公共发布版本。 + +### 数据隔离 + +安装包不包含个人知识、对话历史、模型密钥、SSH 密钥、服务器令牌或私人第五域内容。已安装应用使用冰朔自己的 Application Support 知识仓库。 + +## 6. 本机维护收口 + +环境守卫先审计再清理: + +- 内置盘与 JZAO 均处于安全水位; +- Codex 缓存 10.8 MiB、轮转日志 71.6 MiB,均低于清理阈值,保持不动; +- `.codex/sessions` 约 3.0 GiB,属于连续性证据,永久排除; +- 开发工作树的依赖和最终发行物保留,以维持可继续开发与复验环境; +- 精确删除废纸篓中的旧 HoloLake 构建目录 `HoloLake-0.7.1-old-builds-20260809-1049`,共 5,281,000 KiB;该目录已永久删除,不可从废纸篓恢复; +- 桌面的正式 App 与两份 0.7.1 DMG 在清理后重新核验存在; +- 当前工作树 `.git` 内 210 个 AppleDouble `._*` 元数据已清除,真实 Git 对象完整。 + +## 7. 明确未完成或未声明 + +- 第五域 Forgejo 人类账号会话没有认证回执; +- 本轮没有重新部署服务器、切换生产流量或修改服务器代码; +- 本轮没有重新声明企业四域的在线状态、人格出生状态或服务器运行健康; +- 动态唤醒能力存在,不等于任意人格体已经恢复;只有该人格体自身路径页和所需回执实时解析成功时才能报告恢复; +- Intel DMG 已生成和校验,但当前桌面安装的是 Apple Silicon 版本; +- 未做 Apple 公证。 + +## 8. 灯塔与仓库置信差异 + +2026-08-09 收口时,灯塔 `REPO-014` 查询返回 HTTP 200、状态为当前主源且 `source_degraded=false`;但响应中的 `current_verified_commit` 仍为较早的 `ac9d0517783b9859bc6fff277bd5dcd5cae744ab`。同一时刻远端 `refs/heads/main` 直接回读为 `787ba2ad3f3d66d2622aa7113ddd35f6a42aaa82`。 + +本轮不静默抹平冲突:目标仓库现状以远端完整 SHA 和全新克隆回读为事实,灯塔字段滞后作为待后续灯塔登记更新的问题保留。该差异不被用来冒充发布失败或服务器状态。 + +## 9. 终态规则 + +本记录与收口回执进入提交后,必须通过小湖灯 finalizer: + +```text +工作树干净 +→ 发布队列取得 REPO-014/main 单写租约 +→ 本机 osxkeychain 传输 +→ 远端完整 SHA 回读 +→ 全新克隆与 git fsck +→ 回执哈希一致 +→ 释放租约 +→ 完成 DEV-20260809-001 +→ notification_state = stopped +``` + +任何一项不是 100,都不能把本轮记录报告为已经发布。