docs(hololake): publish 0.7.1 causal closeout

This commit is contained in:
冰朔 2026-08-09 10:59:41 +08:00
commit bb96d5eb89
2 changed files with 321 additions and 0 deletions

View file

@ -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"
}

View file

@ -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` 安全提示块;
- 表格单元格 `<br>` 换行;
- 宽表在正文内部横向滚动;
- 屏蔽任意原始 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.1Apple 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都不能把本轮记录报告为已经发布。