hololake-system-architecture/product-source/hololake-desktop/hololake-era-0.7.1-development-causal-chain.md

278 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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都不能把本轮记录报告为已经发布。