Files
goodbuddy/docs/development/release-preparation-0.15.0.md
T
mesalogo 706726bad6
Cross-platform packages / Validate source (push) Canceled after 0s
Cross-platform packages / Authorize desktop packaging (push) Canceled after 0s
Cross-platform packages / linux arm64 (push) Canceled after 0s
Cross-platform packages / macos arm64 (push) Canceled after 0s
Cross-platform packages / windows arm64 (push) Canceled after 0s
Cross-platform packages / linux x64 (push) Canceled after 0s
Cross-platform packages / macos x64 (push) Canceled after 0s
Cross-platform packages / windows x64 (push) Canceled after 0s
Cross-platform packages / Publish GitHub and OSS release (push) Canceled after 0s
test: wait for completed navigation before opening menus
Require the actual message article to own focus instead of matching body text. Wait for project runtime initialization before opening dismiss-on-blur composer options. Preserve all capture and native command assertions. Complete frozen Linux snapshot: 5371 passed, 51 skipped; focused Windows, typecheck and lint passed.
2026-09-28 03:47:29 +08:00

14 KiB
Raw Blame History

Desktop 与 Agent 0.15.0 发布准备

日期:2026-09-27。候选验证通过,不代表已发布。

范围与批准

  • 用户要求 Desktop 与 GoodBuddy Agent 同步升级至 0.15.0,明确不构建 LoongArch。
  • 源码基线:0f8bf405db7ca21a85cc70009ad083eb837e1e03。
  • Desktop 差异基线为已发布的 v0.13.16,Agent 为 agent-v0.13.4。
  • 准备两个独立标签 v0.15.0 与 agent-v0.15.0;尚未创建或推送。
  • 用户已批准两份完整双语说明,正式正文仅维护在 Desktop 发布资源 的 0.15.0 条目与 Agent 发布资源。 已逐条核对写入文本与批准草案一致,本记录不再复制正文。
  • FEATURES.md 与 FEATURES.zh-CN.md 已核对本轮能力、限制和候选版本。
  • 用户要求两张未跟踪宣传截图保留原位、不提交,打标签前另行处理; 不移动、删除、暂存或更改忽略规则。
  • 2026-09-28 用户更新授权:当前工作区的宣传文档与素材可以一起提交、推送, 后续候选由代理自行审核确认,不再逐次等待用户批准,继续完成双产品正式发布。 三张新增候选图已读取检查,保留原始草稿属性,不冒充正式发布截图或对外媒体发文。 发布说明正文保持不变,releasedAt 更新为实际准备发布日期 2026-09-28。

本地验证

  • npm run typecheck:通过。
  • npm run lint:通过。
  • npm run release:notes:verify:通过。
  • 发布说明相关三个文件定向测试:16 项通过。
  • 首轮 npm test:5,313 通过、79 跳过、4 失败,耗时 697.61 秒。 三项失败来自当时尚未批准写入的 0.15.0 Desktop/Agent 发布说明; 另一项为 magic-notes-layout.electron.test.ts 的布尔断言。 该布局用例单独复验 1 项通过,未修改源码或放宽断言。 单独通过不替代全量结果。
  • 正式说明写入后的最终 npm test:5,317 通过、79 跳过、0 失败, 453 个测试文件通过、11 个跳过,耗时 645.49 秒。随后再次执行完整 npm run typecheck 与 npm run lint,均通过。
  • 最终验证期间出现并行宣传文档编辑及新增 storygraph.png,均不属于本次 发布准备改动,不暂存或覆盖。打标签前仍须处理工作区洁净条件。
  • 修改文档的相对文件链接、版本一致性和 git diff --check 通过。
  • 不运行本地生产构建、打包或安装包启动。准确候选提交须经用户批准, 然后双远端推送、主分支 CI、生产构建、原生发布与公开核验分别进行。

Agent 当前源码实机验证

共享 Linux x64 Host 的 LAN/VPN SSH 端口均可达,实际通过 LAN 与既有固定 Host Key、加密凭据连接。重新捆绑当前源码的 Agent CLI、daemon、model bridge 与 Desktop 适配器,仅上传独立 /root/tmp/gb-lifecycle-* 测试目录,复用已安装且 版本锁未变的 Node/OpenCode/Continue,不替换原安装,不构建正式包。

最终 OpenCode、Continue 各通过一次 Ask 和一次 Execute,无工具请求, 验证回答、后续历史、空闲 Runtime 回收及测试停止后所属进程为 0。 模型请求时读取所属进程的固定遥测字段,确认 DO_NOT_TRACK=1、 OTEL_SDK_DISABLED=true 及三个 exporter 均为 none,不输出整个环境。 这些结果补齐 eb53c82 的 Agent/model bridge 真实链路验证, 但不证明后台没有其他网络流量,也不替代三目标正式包验收。

首轮 Continue 探针沿用了 OpenCode 原生历史持久化假设,未像 Desktop 一样传入 request.history,第二轮历史断言失败;当前 Continue 冷启动源码明确要求传入 保存历史。修正测试输入及会话 ID 断言后通过,未修改产品实现。

有完整计数的实机运行共 8 次真实模型 HTTP 请求:首次 OpenCode 2 次、 首次 Continue 2 次、最终 Continue 2 次、最终 OpenCode 2 次。 此前一次直接启动 Electron 的探针未捕获子进程输出,不能确认是否实际发出请求, 该次上限 2 次,不纳入通过证据;因此不能把 8 次写成本轮精确总数,总量为 8–10 次。 后续均使用等待退出并记录脱敏输出的启动器;本轮探针 Electron 进程已退出。 本地诊断证据在临时 opencode/release-015-host/,不提交脚本、日志或凭据。

首次候选 CI 与测试修正

用户批准的首次候选 5a6ba6c14f5c58f3da5e9afe281b18e0cbdb1ae8 已推送至 origin/main 和 github/main,未创建两个发布标签。

  • Agent CI 36329271991 源码验证及 Linux x64、Linux arm64、Darwin arm64 原生构建全部通过。
  • Desktop CI 36329271967 为 5,342 通过、51 跳过、3 失败。两个 App 长历史场景超过默认 5 秒单用例时限; 会话采集 Electron 场景等待 Escape 返回笔记列表超时。生产构建未运行。
  • 测试修正仅让原生键盘辅助函数显示窗口、获取焦点并等待 document.hasFocus(), 然后发送真实输入;两个长历史场景采用仓库既有的 15 秒单用例时限。 不修改产品实现、不跳过 Linux、不关闭沙箱、不删除或放宽数据和键盘断言。
  • Windows 聚焦复验三个失败场景通过,其中真实 Electron 覆盖完整 502 条历史、 214px 窄栏键盘操作、浅深主题确认按钮、真实 IPC/SQLite 和重开保留。 修正后首次全量复验被中断,不计为通过;随后完整重跑为 5,317 通过、 79 跳过、0 失败,453 个文件通过、11 个跳过,耗时 646.48 秒。 类型检查、lint 和发布说明校验均通过,新候选 Linux CI 仍需独立通过。
  • 本次只改测试和验证文档,不改变 Agent、远程 Runtime 或模型桥; 沿用上方当前源码 Host 验证,不新增真实模型请求。
  • 新提交必须重新取得准确 SHA 批准,原发布说明正文保持不变。

Linux 实机复现与最终同步修正

2026-09-28:第二次批准候选 12594961fe1e814e89f55de1fbfe245310505115 的 Desktop CI 36331853137 为 5,343 通过、51 跳过、2 失败。两个 App 长历史场景已通过; Escape 返回列表仍失败,活动历史迁移这次超过默认 5 秒时限,生产构建仍未执行。

按用户要求直接在共享 Linux x64 Host 测试准确候选源码。使用独立磁盘测试目录、 锁定 Node 24.19.0 和 npm ci,补齐 Xvfb 与匹配的 X server 系统依赖; 没有创建新账号,使用既有非 root 账号运行测试,保留 Electron 沙箱及其标准 helper 权限。 不替换既有 Agent,不修改其安装或工作区,不执行生产构建或打包。

原测试在 Host 上稳定复现:缩窄窗口会按产品既有行为收起工作栏,隐藏面板仍有非零宽度。 诊断显示 Escape 实际发给 aria-expanded=false 的工作栏开关,而不是笔记输入框。 因此仅获取窗口焦点不够;测试改为等待窄视口及响应式渲染完成,按真实按钮打开工作栏, 确认展开状态和目标输入框焦点后再发送键盘输入。临时诊断代码已移除。

迁移测试在 Host 上以原默认时限通过,保留 10,000 条记录、完整迁移、WAL 字节比、 扫描次数与无变化写入断言;仅为这一个大数据场景采用已有的 15 秒单用例时限, 不改数据库实现或全局时限。

  • 最终 Linux Host 完整 npm test:5,345 通过、51 跳过、0 失败, 449 个文件通过、15 个跳过,耗时 751.09 秒。
  • Windows 聚焦回归:3 项通过,包含真实 Electron 和迁移。
  • Windows 完整类型检查、lint、发布说明校验:全部通过。
  • Linux Electron 实测覆盖 502 条历史、218px 窄栏、Escape/Tab/Enter、 浅深主题确认按钮、真实 IPC/SQLite 与重开保留;Windows 对应窄栏为约 214px。
  • 本阶段不新增真实模型请求,不改变产品代码或双语说明。 新候选仍须重新批准 SHA 并通过自己的主分支 CI/生产构建,两个标签仍未创建。

后续 CI 焦点前提与确定性取消验证

b8b6007 的 CI 36335076841 两次执行均为 5,344 通过、51 跳过、1 失败,失败点改为 new title focus, 生产构建没有运行。该次失败未在 Host 的 10 次带诊断复验中重现,其中 5 次限制单 CPU; 移除临时诊断后再测也通过。这些独立结果不替代 CI。

测试原先直到键盘阶段才显示窗口,前面的自动聚焦检查仍在隐藏窗口执行。 现让测试窗口从开始即显示并确认焦点,保留标题自动聚焦原断言; 超时增加实际焦点、标题禁用/可见/隔离状态和保存状态,避免只报告阶段名称。 可见窗口版本在 Host 连续五次聚焦复验通过。

随后 Host 全量出现一个独立的 Continue 取消测试竞争: setTimeout(0) 没有保证取消发生在子进程启动前,空 mock 已被调用。 用例改在既有启动环境回调处精确取消,仍验证回调执行、子进程未启动和临时配置删除, 不更改 Continue 产品实现或取消机制。

  • 最终 Host 完整测试:5,345 通过、51 跳过、0 失败,449 个文件通过、 15 个跳过,耗时 743.34 秒。
  • Windows 可见窗口 Electron 回归及确定性取消回归通过。
  • 完整类型检查、lint 通过;双语说明正文不变,日期调整后另行验证发布资源。
  • 上述均为测试或验证文档调整,不新增真实模型调用,不改变 Agent 发布输入。 正式发布仍要求当前候选自己的 CI/生产构建通过。

完整分支快照重新核对

d9e1e42 的 Desktop CI 36340682594 已通过原生会话采集焦点测试,但为 5,367 通过、51 跳过、4 失败。 核对祖先后确认准备期间另有四个并行提交进入分支: ee1bf8a 输入区控件样式、8e60736 流式会话稳定排序、 f35198d 桌面通知开关、d47f967 监督结果继续讨论。 它们已随用户授权的当前分支推送;前述 Host 的 5,345 项通过使用较早源码快照, 不能作为包含这四项的新候选验证结果。

本轮已重新核对四个提交的实现和文档,补充两份功能矩阵与双语发布说明: 通知开关默认开启且不影响应用内提示;流式更新不改变排序; 监督结果可直接编辑问题并继续讨论,界面不再提供知识实体写回控件。 Agent 产品源码及 Runtime 锁未因这四项改变,Agent CI 36340682607 源码校验和三个原生构建全部通过。

补齐通知默认值的契约 fixture;Obsidian 多次真实子进程调用使用单用例 15 秒时限, 避免前项超时后的在途调用污染下一项取消断言;笔记来源用例按面板查询控件, 并等前次来源操作释放禁用状态后再发起下一次。 这些修正不改变产品实现。Windows 聚焦回归 19 项通过,类型、lint 和说明校验通过。 从 Git tree 1758ff58a6ff33fcf7ddaa3d35dd2fcc57cd1265 导出完整快照, 覆盖 Host 测试源码,而非只同步早期快照中的少数文件。 该完整快照 npm test 为 5,371 通过、51 跳过、0 失败, 451 个文件通过、15 个跳过,耗时 751.42 秒,包含全部四个并行提交。 最终提交前再次核对源码、测试、依赖和发布资源与该已验证 tree 一致, 仅追加本段验证结果;完整候选仍需自己的主分支 CI 与生产构建通过。

完整候选后的焦点同步修正

5cdffee 的 Agent CI 36343184917 三个原生构建和源码校验通过;桌面 CI 36343184916 为 5,369 通过、51 跳过、2 失败,生产构建未执行。 会话采集的焦点等待可被 body 后代文字误满足,菜单随后被真正的消息聚焦关闭; 另一个原生 Runtime 控件用例在启动完成前打开失焦关闭的菜单。 本轮收紧消息焦点的元素断言,并等待项目能力请求及启动渲染后再打开 Runtime 选项。 不重试菜单、不跳过场景、不改产品实现。

完整冻结 tree 2ddc0da69b6bcb42d8272c44dd11e3e6904d0438 在 Host 全量 5,371 通过、51 跳过、0 失败,耗时 748.21 秒。 Windows 原生 Runtime 聚焦用例、类型检查和 lint 通过。 提交仅追加本段记录;仍须等待修正候选的主分支 CI 和生产构建。

数据、兼容与验收边界

Desktop schema 48 新增魔法笔记会话来源元数据。升级前应备份完整用户数据, 包括数据库及相邻 notes/ 目录;旧客户端不能打开升级后的数据库。 本次发布准备不修改数据库迁移实现,也不直接改写用户数据库。

Agent 发布工作流以候选 package.json 设置最低 Desktop 版本,因此 Agent 0.15.0 包要求 Desktop 0.15.0;Node、OpenCode、Continue 锁不变。 Agent 与 Desktop 独立发布,Agent 不替代 Desktop Latest。

原生客户端的远程 coordinator、托管标准 Node 交付整合、Continue/OpenCode Ask 内置 MCP 映射及完整跨平台安装包验收仍有缺口,见 原生客户端进度。 本次说明明确标为本地预览,不将这些未完成部分宣称为已提供能力。