English
macOS 原生客户端目标
日期:2026-10-22。状态:目标已提出;架构决定见 ADR 0012,已接受工程实施。apps/macos 已有可运行原型,各平台正式发布的仍是 Electron。
继续实施 Goal(2026-10-22)
独立复验入口:候选版验收清单,包含当前产物、隔离启动、A–F 证据矩阵及尚未通过的系统/发布门槛。以下按批次保留历史进展;早期的“未实现”和旧测试计数不代表当前状态。
交付一个可供维护者日常使用和独立验收的 Craft Hub macOS 原生候选版:在现有 SwiftUI、WKWebView 和共享 TypeScript sidecar 上补齐宿主能力、实时同步、高频原生页面与系统入口,完成数据迁移和分发所需的工程实现,并提供 Release App、测试结果、性能对比和迁移回退演练记录。
本 Goal 的工程交付与下文“切换完成”分别验收。连续两周日用需要维护者的实际记录;正式签名、公证需要可用的发布身份;发布和替换默认安装需要明确授权。缺少这些条件时,继续完成可独立验证的实现,并如实保留待验收项,不能把本地构建通过写成正式切换完成。
实施顺序与阶段验收
| 阶段 | 实施内容 | 验收条件 |
|---|---|---|
| A:复核基线与 M0 | 审查已有未提交改动;按当前接口重新盘点 Electron、原生端和浏览器的桥接能力,建立带版本号的合同;收敛 ADR 的最低系统、Node、应用身份和数据隔离决定;补齐 Node 范围、共享查找样例及 Swift/Node CI | 每项桥接能力都有实现方、支持状态和验证方法;已实现的命令面板、快速记录与恢复流程有回归证据;M0 未决项有明确决定或具体阻塞,满足原 ADR 的阶段门槛后再推进 |
| B:日用功能与同步 | 补齐编辑器、终端、Codex 启动、设置文件、主题和语言同步;连接公共事件流,更新项目、命令面板、环境和软件观察结果;处理重连、取消订阅与旧连接事件 | 原生端与网页状态一致;运行时重启后恢复订阅且不重复处理事件;已配置的工具能够打开,失败可诊断;所有项目命令仍进入现有审阅与信任流程 |
| C:高频原生页面与入口 | 原生今日重点、项目列表、菜单栏入口;补齐窗口状态、键盘与焦点、文件夹拖放、深链接、通知和 App Intents;保留命令面板与快速记录的既有行为 | 查看今日重点、查找和添加项目、快速记录及菜单栏浏览使用原生 UI;系统入口只导航或填充待确认内容;逐项记录下文交互和无障碍验收结果 |
| D:能力对齐与无 Node 启动 | 原生设置、软件中心和环境页补齐现有管理流程;支持实际使用的声明式插件块,未迁移块保留网页回退;补齐宿主扩展、个人云及安全存储适配;实现用户触发的登录 shell PATH 回退、私有 Node 下载校验和升级 | 功能对齐清单无未说明的缺口;无 Node、路径失效、架构不符与下载失败可恢复;原生 UI 不复制运行时业务规则;插件与账户授权边界有覆盖 |
| E:迁移与分发候选 | 实现数据备份、迁移预检、互斥、幂等迁移与回退;完成密钥迁移、应用身份、单实例和 URL scheme 交接;准备签名、公证、原生更新与发布流水线 | 使用临时数据完成迁移、重复迁移、失败回退和双宿主竞争演练;产出可启动的 Release App;发布流程可 dry run,缺失的发布凭据和真实分发验证明确列出 |
| F:综合验收与交接 | 跑仓库检查、Swift 测试、真实 App 关键路径、生命周期和性能对比;更新本计划、ADR 和原生 README;提供日用及正式切换清单 | 工程验收证据可复现;失败、跳过与人工待验收项逐项可见;维护者可开始日用,并能按记录完成正式发布和切换 |
阶段内按“实现一条用户流程 → 自动化验证 → Release App 实测 → 更新证据”推进。已有命令面板和快速记录作为回归基线;只有发现缺口时才修改。每轮先检查工作区,保留现有未提交改动;需要分支隔离时从当前工作状态承接,避免从旧主线丢失原生实现。
验证与持续记录
工程收尾(2026-10-24):新候选通过完整仓库检查、2402 项 TypeScript(3 项跳过)、251 项 Swift(1 项可选网络跳过)、Release 构建和七项包内专项。维护者确认可处理系统验证后,XCTest 已完成插件安装/移除确认、取消/Escape、权限变化重新审阅、诊断详情与处理跳转及修复后刷新:1 项端到端测试、13 个检查点通过,7 张窗口截图核对完成。初始化/脚本失败记录保留,产品代码未改;各会话临时进程已清理,日用与另行要求保留的体验实例持续运行。A–F 工程交付达到完成标准;外部条件、发布待办及未通过的完整系统验收分列在 工程收尾记录,不代表正式切换完成。
- 测试统计口径更正(2026-10-23):早期 Vitest 全仓运行同时发现
.claude/worktrees下两个旧 checkout,因此下文早期的约 6000 项计数包含重复和旧版本测试,不能视作当前 checkout 的独立覆盖量。现已在保留 Vitest 默认排除项的基础上排除.claude/worktrees与.codex/worktrees;后续使用本 checkout 的计数,历史日志保留并以此说明其范围。 - 运行时行为变更补充发现、信任和执行测试;Swift 覆盖事件流重连、面板与窗口生命周期、Node 查找及迁移失败恢复。测试使用 fixture 和临时数据目录。
- 每次工程交接运行
pnpm lint、pnpm typecheck、pnpm test --run、pnpm build和swift test --package-path apps/macos;pnpm lint包含公共边界检查。原生候选交付另构建pnpm build:macos并实测 Release App。 - 性能对比使用同一台机器、相同功能范围的 Electron 与原生 Release 构建,记录启动、面板响应、页面切换、内存及包体积;私有 Node 单列。表中速度目标仍是待基线校准的提议值。
- 验收记录写明构建来源、命令、结果、实测场景、遗留项和下一步。引用前轮结果时注明来源,不把历史通过当作当前工作区的验证。
- 先在临时数据中完成迁移与回退,并生成可审阅的真实迁移预检;实际操作遵循已有授权。替换现用安装、不可逆迁移或公开发布缺少授权时,在具体方案与产物可审阅后请求所需授权。凭据留在本机安全存储或 CI secrets。
E/F 阶段成对候选整理(2026-10-23):handoff-20261023-candidate/ 保留当前原生的逐文件相同副本与同源码重新打包的 arm64 Electron;原生 9 个、Electron 18 个 Mach-O 均含 arm64,签名校验通过,211 个网页产物匹配。原生七项包内专项、Electron 身份源/启动器/后端和解包运行时管理专项通过。身份源首次 45 秒超时、最小预览及完整复跑通过的记录全部保留,原因未定,没有放宽超时。测量器补充 CFFIXED_USER_HOME 后,两端交替各三次:外壳回调中位数 239.07/369 ms,完整网页 1293.18/1092 ms,footprint 合计 274.54/393.63 MiB,六次采样完整且清理无残留。详见性能记录;不把内部回调当作首帧、SIGTERM 当作菜单退出,也未完成全部系统 UI 或正式切换。
成对候选交接检查:298 个文件、2402 项 TypeScript 通过、3 项跳过;Swift 243 项通过、1 项官方网络下载跳过;lint/公共边界、typecheck、Swift 格式和工作区构建通过。提供 11,788,468 字节的原生 review ZIP,解压后签名与全部 778 个文件内容均核对一致;未重新构建产品、替换安装、迁移真实资料或发布。归档摘要、首次失败与复验日志见候选清单。
C 阶段通知错误恢复(2026-10-23):真实设置页暴露授权失败仅显示英文系统错误码,已增加中英文权限/重试说明、等待系统操作时的进度提示和保留错误域/编号的系统日志。三个隔离授权测试覆盖拒绝、异常、重试、保存/恢复、关闭及重复点击;全仓 2402 项 TypeScript 与 246 项 Swift 通过,分别跳过 3/1 项,构建、格式、包内管理与单实例均通过。新 Release 的失败提示、英文重试及正常退出重启已走查并归档。2026-10-24 按维护者明确授权,在系统设置中将标准入口旧包副本的通知开关由关闭改为开启;随后系统授权成功,App 内开启状态重启后保留。夹具先验证未信任执行拦截,再明确授予信任执行安全输出任务,点击前恢复未信任。维护者明确允许 XCTest 后,标准入口旧成对 Release 副本通过完成通知卡片、默认点击及“查看项目”按钮验收;截图确认对应项目,API 复核信任未改变且没有额外执行,累计 7 条夹具运行记录。失败/超时记录保留,所有临时宿主、sidecar 和测试运行器已清理,日用原生 App 保持运行;失败通知、其他通知场景和最终新包等待提示仍待实机验收。最新产物和摘要见候选验收清单,既有性能记录未归到此新二进制。
D 阶段私有 Node 恢复补验(2026-10-23):当前原生产品代码通过恢复确认与 Escape、24.22.1→24.18.0 的下次启动切换、上一版本文件暂不可用时保留回执和进程、修复后重新审阅及切回 24.22.1。两份 Node 均由生产安装/校验/预检代码从官方归档准备,产品 pin 未变;三个会话正常退出,Node 原文件摘要保持。证据见候选清单。身份源首次超时的五次新路径/签名预览复验均通过,仍未复现或确定根因,没有宣称修复。
D 阶段插件详情 XCTest 补验(2026-10-24):维护者明确授权后,复用既有 arm64 Links Test Release 副本,实际打开“原生验收插件”详情;截图确认中文 README、commands 权限及包名/来源/版本,Escape 后截图及 XCTest 断言确认返回列表且 sheet 已关闭。一个 UI 测试通过,产品二进制及插件声明未改;临时 App、sidecar 和运行器全部退出,日用原生 App 保持运行。首次应用定位和侧栏 AX 定位失败的记录保留;本轮不代表最新包、安装确认或完整辅助功能验收。详见插件详情复验。
D 阶段插件安装链路补验(2026-10-23):当前包内运行时通过隔离 HTTPS 目录及 npm 仓库,验证依赖升级并增加权限后拒绝旧计划、损坏归档拒绝及恢复后真实安装;无项目或命令执行。原生目录已截图,但简短 README 的详情仍复现电脑控制服务断言,安装计划确认没有计为 UI 通过。产品代码未变,三个测试进程已清理;证据与剩余门槛见候选清单。
D 阶段无 Node 引导补验(2026-10-23):当前 arm64 置顶候选的相同产品代码通过空搜索路径、无效文件拒绝、显式登录 PATH、保存与重启、失效路径回退、设置文件选择下次生效及前台 Escape 取消。夹具登录文件只执行一次,交互文件没有执行;四轮正常退出无宿主/sidecar 残留。证据与 HOME/PATH 隔离修正见独立验收清单。原包 9 个 Mach-O 仍均含 arm64;本轮仅新增验收记录,没有重跑未变化产品代码的全量测试或重建原包。私有版本回滚 UI、插件详情工具崩溃及系统/发布门槛继续保留。
C 阶段系统入口实测(2026-10-23):Shortcuts 能识别两个 App Intents,但本机系统拒绝无 Team ID 的 ad hoc 副本;使用本地 Apple Development 签名后,动作成功进入原生处理。冷启动进一步发现根视图尚未出现时导航连接未建立,现把主窗口、设置和系统动作连接上移到场景初始化。隔离实测覆盖项目筛选与首尾空格处理、快速记录保存禁用及 Escape、冷启动、关闭主窗口后重开、设置与命令面板回归。证据及签名边界见独立验收清单;Spotlight 和正式签名分发仍待验收。
A 阶段的桥接、Node 兼容合同、隔离数据策略和格式检查已落地,最低系统与候选应用身份已记录为实施决定。启动性能已得到本机 Release 基线;Instruments 首帧/拖动帧时间、macOS 15 实机及托管 CI 仍待验证。按 ADR 的工程阶段规则继续 B:公共事件流与日用宿主能力。工程 Goal 以 A–F 的实现和可执行验证交付为准,两周日用和正式切换保持单独验收。
Goal 创建时的基线复核(2026-10-22):当前分支 feat/liquid-glass-app-icon,包含已有未提交原生实现。pnpm lint、pnpm typecheck、pnpm build、pnpm test --run(739 个文件,6026 项通过、9 项跳过)及 swift test --package-path apps/macos(25 项通过)均通过。构建仍有网页 chunk 大小提示。本次仅补充执行计划并复核自动化基线,未重新构建或实测原生 Release App;下文真实 App 验收记录来自前轮工作。
M0 第一轮实施验证(2026-10-22,基于当前未提交工作区):
| 验证 | 结果 |
|---|---|
| 公共边界、lint、typecheck、工作区 build | 全部通过;网页 chunk 大小提示仍存在 |
Node 24.18.0:pnpm test --run | 743 个文件,6069 项通过、9 项跳过 |
Node 22.23.1 / 26.0.0:用对应 Node 运行 Vitest 的 packages/craft-hub/test apps/desktop/test --maxWorkers=4 | 各 331 个文件,2629 项通过、9 项跳过;26.0.0 从官方发行目录下载至临时目录并核验 SHA-256,未替换用户 Node |
swift test --package-path apps/macos | 35 项通过,包含共享 Node 样例;计数包含当前工作区的原生更新测试 |
pnpm build:macos | Release App 构建通过,包内 sidecar 启动检查通过 |
codesign --verify --deep --strict 'apps/macos/build/Craft Hub Prototype.app' | 本地 ad hoc 签名校验通过,未做本轮正式签名或公证 |
三个 Node 版本分别启动包内 Contents/Resources/app/apps/desktop/dist/sidecar.mjs | 各用独立临时 CRAFT_HUB_SIDECAR_DIR;v1 握手、bearer 鉴权的 GET /api/projects、关闭父管道后正常退出全部通过 |
这一轮未重新走查真实 App 的完整键盘、辅助功能和日用流程。新增 CI 配置及桥接清单通过本地检查,尚无本轮托管 CI 运行结果;其余 M0 项与 A–F 后续阶段继续未完成。
M0 第二轮(2026-10-22):Node 版本/架构探测、进程组清理、输出上限、失效路径诊断与 Swift 格式检查已完成。Swift 测试共 44 项(两份测试产品),启用真实 Node 的全量运行通过;22.23.1 和 26.0.0 也分别通过真实探测。新增计时后的桥接/网页合同 8 项、typecheck、Swift 测试、Release 构建及签名校验通过;真实 Node 专项默认跳过,CI/本机可用 CRAFT_HUB_TEST_NODE 启用。
启动基线与口径见原生性能记录。隔离验收副本确认失效 Node 的原因与回退版本可见;⌘K 搜索、Esc/重开焦点、环境与软件页面切换正常;快速记录在无账户的临时数据中打开而未授权或写远端。通过应用菜单正常退出后,验收 App 及其 Node 子进程均已退出。退出检查时,其他已安装的原生 App 与 Electron 仍在运行。最低系统、完整辅助功能与持续日用尚未验收。
B 阶段事件同步(2026-10-22):已接入同源 bearer SSE,包含有界消息、禁止重定向、1–30 秒重连、旧连接隔离、150 ms 合并、重连快照与加载期间二次刷新。项目注册/移除/排序/信任变化新增 project-catalog-change,同时刷新网页目录。当前 pnpm lint、pnpm typecheck、pnpm test --run(745 个文件,6072 项通过、9 项跳过)、pnpm build、Swift 测试(53 项,启用真实 Node)、Release 构建与签名检查通过。真实 socket 测试确认流式接收、取消关闭连接及不跟随同源重定向。
真实 Release 副本:注册专用临时项目,命令面板保持 event-fixture: 查询;修改 fixture 后,结果自动从 before-sync 更新为 after-sync。终止该副本的 sidecar 后自动恢复,再次修改后自动显示 after-reconnect,查询与焦点保留;旧进程已退出,项目始终 untrusted,没有运行命令。正常退出验收副本后,其 App 和恢复后的 sidecar 均已退出,退出检查时,其他已安装的原生 App 与 Electron 仍在运行。这是事件同步批次的证据;B 阶段日用宿主入口的后续记录如下。
B 阶段日用宿主接口(2026-10-22,验证进行中):编辑器、终端、项目/工作区、来源文件、Codex 交接和设置文件已抽成 Electron 与 sidecar 共享服务;原生注入合同已接入。测试覆盖未信任项目、实际 AgentTaskManager 的信任拒绝、符号链接/路径越界、工作区成员、任务释放与剪贴板失败中止。macOS opener 改为等待系统退出状态并返回失败。主题和中英语言读取运行时设置,原生菜单、侧栏、面板使用可观察的共享状态;SSE、启动和重连读取快照,旧请求有代际隔离。Swift 全量 56 项通过(真实 Node 专项本轮默认跳过);TypeScript 定向合同通过。该批次 pnpm lint、pnpm typecheck、pnpm test --run(746 个文件、6088 项通过、9 项跳过)、pnpm build、Release 构建与签名校验通过。真实 Release 副本启动后验收工具报告 Mac 锁屏,待用户解锁补测;此条不视为阶段完成。
C 阶段进行中(2026-10-22):原生项目表格包含搜索、选择文件夹和拖放注册、发现诊断、信任状态及查看项目入口;项目仍进入网页能力审阅。侧栏和 Dock 文件夹入口复用注册流程,启动前收到的文件夹排队等待运行时,连续导入串行处理。菜单栏可查看今日重点、最近打开的项目并唤起快速记录。
今日重点的来源选择、个人账号筛选、日期/优先级排序和 AI 候选选择由网页抽到共享 TypeScript 模块;新增只读 /api/workbench/today 返回有界快照、失败/未连接状态及完整性,不自动授权、分页或分析。原生首页复用该快照,AI 由按钮触发,换账号、重连或刷新后的旧分析不得覆盖新数据。集成写入完成或失败后广播 integration-change,原生与网页清除旧快照;网页当前仍在写入时延后外部刷新,避免打断本地完成操作。该批次 Swift 63 项通过(含真实 Node 24 探测),TypeScript 定向 218 项通过;工作区 build、lint、typecheck 和全仓测试(747 个文件、6096 项通过、9 项跳过)全部通过。真实 App 项目/首页/菜单栏、拖放与键盘走查受锁屏影响尚待完成;下方继续记录系统入口批次。
C 阶段系统入口及原生设置首批(2026-10-22,验证进行中):补齐按 profile 保存主窗口几何、移除显示器后的可见区域恢复、全屏保留正常几何;原生项目/软件搜索支持 ⌘F,Dock 菜单提供最近项目、命令面板与快速记录。候选版只注册 craft-hub-native:,复用现有严格解析器与项目引用校验;原生注入层支持启动队列、一次消费、独立回调、取消订阅及过期请求隔离。未接管公开 scheme,个人云回调仍明确拒绝。
App Intents 提供带名称/路径筛选的“打开项目”和恢复草稿的“打开快速记录”,只交接到原生 UI。构建已提取、校验并打包系统元数据;对应 Release App 构建通过。新增原生设置使用运行时 revision 更新主题/语言,保留完整设置入口;选择 Node 下次启动生效。后台任务完成通知默认关闭,用户在设置中启用才请求系统权限;首次/重连快照不重放历史通知,通知只打开项目。最新 Swift 73 项通过(含真实 Node 24),共享链接/桥接定向 85 项通过;新增设置/通知后的 lint、公共边界、typecheck、工作区 build、全仓测试(748 个文件、6103 项通过、9 项跳过)、Release 构建及 ad hoc 签名校验均通过。Shortcuts/Spotlight 调用、通知按钮、多显示器/全屏、完整键盘与辅助功能仍须真实系统验收,本条不标记 C/D 阶段完成。
D 阶段插件管理与诊断中心(2026-10-23,工程验证通过、系统 UI 待验收):两页已进入原生侧栏和 ⌘F 搜索。插件页提供发现、已安装、来源、宿主组件四个分区,覆盖版本详情、权限与依赖确认、README 文本、启停、回滚、保留数据的移除、本地目录链接/重读、来源预览/添加/刷新/移除以及更新结果。运行时新增只读 GET /api/marketplace/overview;网页与原生复用同一版本选择及操作状态规则。原生安装携带完整 reviewedPlan,运行时在下载前拒绝已变化的计划;取消预览和切换运行时不得恢复旧确认。原生宿主组件接口只接受独立 bearer,拒绝网页 cookie,仍只允许切换随应用分发的可选组件。外部可执行扩展的注册/移除仍是明确缺口。
诊断页展示当前 Node 路径/版本、错误和警告、诊断来源状态、文件位置及处理入口;未完成/失败/跳过的报告不能显示“全部通过”。共享事件使可见页面刷新;项目处理入口仍进入审阅,不授予信任、不执行命令。D 阶段的登录 PATH 回退也已实现:只在无兼容 Node 时用户点击才运行 zsh/bash 非交互登录文件,5 秒/64 KiB 边界,检查兼容性和架构后保存;正常启动不执行启动文件。私有 Node 下载仍待实现。
本批次验证:pnpm lint(含公共边界)、pnpm typecheck、pnpm build、pnpm test --run(749 个文件,6108 项通过、9 项跳过)、Swift 84 项(含真实 Node 24)、pnpm lint:macos、Release 构建与 ad hoc 签名通过。包内 sidecar 在临时 profile 中通过插件概览、诊断、宿主组件 API 及原生/网页凭据隔离检查,关闭父管道后正常退出,测试目录清理完成。首次并行运行 typecheck/build 时输出目录被重新生成导致文件暂缺,待 build 完成后 typecheck 通过;新增 Node 显示的 Swift 类型错误已修复并重跑通过。未启动远端授权或修改正式 profile。2026-10-23 的 UI 工具仍报告锁屏,以下待补:
- 插件发现/已安装/来源/组件切换及 ⌘F;长标题、深浅色、空列表和错误状态。
- 安装计划取消/确认、嵌套详情弹层关闭/焦点恢复;临时本地插件的启停、重读、解除链接;来源表单变更后预览失效。
- 诊断级别/文本筛选、来源展开与各类处理跳转;无结果与不完整报告;VoiceOver 顺序。
- 运行时重启后旧请求和确认不复活;外部网页中的插件详情/来源导入仍保留现有网页交接,尚未全部改为原生入口。
以上不是 D/F 整阶段完成;软件/环境管理、声明式业务块、云与安全存储、迁移与分发验收继续按 Goal 推进。
D 阶段无 Node 引导(2026-10-23):引导页和设置页提供用户确认后的私有 Node 下载、取消及上一版本恢复。固定 Node 24.22.1 Darwin arm64/x64 地址,同时核对编译内置 hash 与官方 SHA-256 清单;拒绝重定向并限制传输大小和时长。校验、路径检查、版本/架构探测之后,使用临时 HOME/profile 启动实际包内 sidecar,通过 v1 握手并正常关闭后才原子切换。下载失败、损坏包、取消和预检失败不改变旧选择;内核锁防止并发安装。已有本机 Node 优先,当前运行时不中断,旧私有版本保留。损坏状态文件保留并报告,自动修复及旧版本自动清理尚未提供。
真实 arm64 官方下载及包内 sidecar 预检通过;新下载的 Node 24.22.1 执行全仓测试:749 个文件、6108 项通过、9 项跳过。pnpm lint、pnpm typecheck、pnpm build、pnpm lint:macos、Release 构建和 ad hoc 签名通过。Swift 两份产品共 94 项,93 项通过、网络测试默认跳过;该网络测试另行启用后通过。覆盖错误校验、失败保留、安装互斥、选择优先级、原子切换/回退和进程组取消。下载包 50.60 MiB,完整私有安装 199.39 MiB,详见体积记录及引导维护指南。x64 实测、macOS 15、无 Node 引导界面和设置中的下载/回退操作仍待系统验收;未修改用户 Node、PATH 或正式 profile。
插件入口补充(2026-10-23):经过共享解析器校验的“打开插件管理”和“导入来源”桌面链接现已进入原生页。来源链接只填表,不请求远端目录或写入来源;预览与添加仍需用户触发。原生已消费的链接不再派发给网页,延迟返回的旧来源不覆盖新来源;插件操作进行中拒绝新来源交接。来源草稿提升到应用模型,切换分区及运行时重连保留输入,审批状态仍清除。网页内部的插件详情路由暂时保留网页实现。
该补充的桥接/导航定向 10 项通过;全仓 749 个文件、6109 项通过、9 项跳过;Swift 96 项中 95 项通过、官方网络下载测试跳过(同日另行启用通过)。lint、公共边界、typecheck 和 Swift 格式检查通过。最终 Release 重建及 ad hoc 签名通过;包内 sidecar 使用已下载的 Node 24.22.1,在临时 profile 中通过插件概览、诊断、宿主组件和空项目目录的 200 响应检查,未认证的原生请求被拒绝,关闭父管道后 exit 0。临时检查脚本最初把项目响应误认为裸数组,按现有 { projects, diagnostics } 合同修正后重跑通过;未改动项目 API。UI 工具再次确认系统锁屏;系统链接唤起、表单焦点与原生页面实际视觉仍待解锁验收。
D 阶段软件管理(2026-10-23):原生软件页新增目录、安装记录、来源三个分区。支持单项及同来源批量选择(最多 50 项)、安装计划/前提审阅、明确确认、进度/文本日志、取消和未完成项重新审阅。原生只回传 planId 和 confirmed: true,运行时及可信适配器继续拥有安装规则、执行和持久化。安装结果不明时保留不确定状态,关闭弹层也不能直接重发;必须读取新的安装记录再恢复审阅。页面可见时每 1.5 秒观察活动安装,旧记录响应不能覆盖较新的安装/取消回执。
软件来源支持线上仓库、本地目录绑定、分支和清单路径、预览保存、刷新/移除及手动/间隔/每日刷新策略。修改表单立即废弃旧预览,保存只发送运行时预览 token;移除和刷新设置绑定用户审阅时的 revision。发生冲突后可重新载入并保留设置草稿。列表读取落后于写入回执时不会覆盖新状态。来源清单不会因此获得软件执行权限,移除保留仓库文件和已安装软件。运行时更换时清除审批并停止旧观察。
退出和原生更新/重启预检补查软件安装记录及配置源连接。无法读取可管理来源的记录不能视作空闲;正在提交或结果不明的原生写入也不能直接重启。退出仍保留用户明确中断的选择。该检查尚不替代 E 阶段双宿主互斥和迁移排他协议。
本批次 pnpm lint(含公共边界)、pnpm typecheck、pnpm test --run(749 个文件、6109 项通过、9 项跳过)、pnpm build、pnpm lint:macos、Swift(107 项中 106 项通过,官方 Node 网络测试跳过;真实 Node 24.18.0 探测启用)、Release 构建和 ad hoc 签名校验通过。新增测试覆盖安装确认、前提阻止、结果不明时恢复、旧记录竞争、来源审批失效、revision 冲突和重启保护。实际包内 sidecar 使用临时 Git 仓库与隔离 profile,完成来源预览/保存/刷新/移除;旧预览和旧 revision 返回 409,含 throw 的目录文件被静态解析而非执行,移除后仓库保留,项目登记仍为空,关闭父管道后 exit 0,临时目录清理完成。未在真实系统上安装软件。
系统 UI 验收继续待解锁:批量选择、计划弹层取消/焦点、安装进度/取消、来源编辑器/目录选择器与刷新策略表单。当前尚未原生化的软件收藏、环境方案及配置源连接/配置恢复继续推进;插件业务块、云与安全存储、E/F 的其余验收也保持未完成。
D 阶段环境方案与配置源连接(2026-10-23):原生开发环境页增加“本机工具 / 环境方案 / 配置源连接”分区。环境方案支持软件及已纳管配置选择、按 revision 保存、系统文件面板导入/导出、导入前 JSON 审阅与替换确认、已保存方案检查和前置步骤。导入原始字段交给共享运行时严格校验,不通过 Swift 解码丢弃未知字段;导入和保存只改变便携引用,不安装软件、不写配置文件。重新读取保留本地选择,冲突后须明确采用最新版本或恢复已保存选择。检查结果和前置步骤必须属于同一方案 revision;未知、来源变化和不可用状态保持区别。复制指导命令不执行、不标记完成。方案入口 /environment/setup 已进入原生页。
配置源使用已有提供方的 HTTPS 仓库连接 API,提供进度、临时认证与取消。密码字段只保留于当前表单,提交和离开时清空;原生模型不存凭据,不展示可能含凭据的传输错误。绑定阶段不可取消;不明确的写入结果须先刷新再操作,旧读取不得覆盖较新的认证或取消回执。页面可见时每秒观察活动/待确认连接,切走或重连停止旧观察。连接只准备配置来源,实际差异预览和确认应用仍由共享网页流程承担,下个批次继续原生化。
本批次工作区 lint/公共边界、typecheck、build、全仓测试(749 个文件、6109 项通过、9 项跳过)、Swift 格式检查通过。Swift 共 117 项,116 项通过,官方 Node 下载网络测试默认跳过;真实 Node 24.18.0 探测启用。覆盖冲突草稿、导入未知字段与大小边界、revision 匹配、变更中重读、迟到请求、认证目标、错误脱敏、绑定不可取消和退出保护。Release 构建和独立 ad hoc 签名校验通过。实际包内 sidecar 在隔离 HOME/profile 中完成方案保存、导入、检查与前置步骤读取;旧 revision 返回 409,未知导入字段及非 HTTPS 配置源返回 400,拒绝后没有连接任务或配置变更。保存文件权限为 0600,方案与引导 revision 一致,目录来源没有获得安装权限,项目登记为空,关闭父管道后 exit 0,临时目录已清理。测试脚本最初遗漏 sidecar 的 runtime 子目录,修正测试定位后完整重跑通过;产品数据路径未改动。Release 包体积 33.88 MiB(34696 KiB)。
真实 UI 仍待解锁走查:方案选择/导入确认、文件面板、前置命令复制、配置源认证表单清理与焦点、错误后的重新读取和 VoiceOver。软件收藏、配置预览/应用、插件业务块、云与密钥迁移、E/F 其余工程和验收继续保留在活动 Goal 中。
D 阶段配置审阅与恢复(2026-10-23):开发环境增加“配置审阅”原生页,从公共集成声明解析全局配置块与 action ID。支持提供方选择、搜索/类型/状态筛选、归属及来源说明、脱敏差异、来源/本机/字段合并决策、计划审阅与确认应用、历史及恢复、仓库拉取/提交/发布审阅和只读 Skills 审计。环境方案中的配置链接可定位到原生提供方及具体配置项;项目级块、配置源注册表编辑和加密备份目标管理仍回退网页。可写展示由共享 TypeScript 按归属与提供方身份统一派生;Swift 不读取或写入配置文件,不复制执行规则。
应用和恢复只发送审阅的 plan ID,Git 操作携带仓库 revision、已选路径/说明或待推送提交审阅结果。切换运行时或提供方/配置失效清除旧审批;迟到的预览不能复活。普通写入事件不丢弃刚产生的不可变计划,提供方执行时仍重新验证。操作支持状态控制入口;未知或不支持的审计/历史不能显示成功。写入结果不明确时必须先读取历史/仓库状态,待处理及结果不明的操作参与退出/重启检查。
本批次 pnpm lint(含公共边界)、pnpm typecheck、pnpm test --run(750 个文件、6111 项通过、9 项跳过)、pnpm build、pnpm lint:macos 通过。Swift 共 124 项,123 项通过,官方 Node 网络下载测试默认跳过;启用真实 Node 24.18.0 探测。验证中发现私有 Node 锁在并发派生进程时可能暂被继承:已改为显式解锁再关闭描述符,并用保留重复描述符的确定性测试覆盖。Release 构建和独立 ad hoc 签名通过,包体积 35.20 MiB(36048 KiB)。
新增可复现命令 pnpm test:macos-configuration:真实包内 sidecar 在临时 HOME/profile/Git fixture 中确认发现和预览不写文件,缺确认返回 409,旧计划拒绝,正常应用及恢复成功,后续独立编辑保留;即使重写相同字节也不能绕过 revision 恢复保护。项目登记为空,关闭父管道后 exit 0,临时数据清理完成。验证脚本修正了 macOS 临时路径规范化,以及“重写相同字节即等于原 revision”的错误假设;未放宽产品恢复检查,未写真实配置或执行远端 Git 操作。
UI 工具再次确认系统仍锁屏。配置差异布局、字段选择、应用/恢复/Git 审阅弹层取消和焦点、键盘操作及 VoiceOver 待解锁验收。当前剩余工程包括配置注册表/加密备份目标、软件收藏、声明式业务块、云与安全存储、E/F 的迁移及分发验收,Goal 保持活动。
D 阶段配置登记与加密备份(2026-10-23):原生“来源与备份”页支持本地 Git 配置源登记/编辑/启停/移除、备份目标预留及绑定、口令变量名与来源选择、来源归属冲突审阅。登记操作先冻结单项变更和 registry revision,再明确确认;刷新保留草稿,冲突须主动从最新记录重新编辑,旧审批不能重放。结果不明的登记写入需要重新读取兼容注册表,不能只靠配置历史解除保护。移除登记保留仓库及归档文件。
个人/工作备份的来源范围由共享 TypeScript 派生,网页复用同一 helper。备份保存和恢复通过 backup-preview 生成计划,应用只传 plan ID;替换其他设备修改的归档须单独选择。预留目标及外部应用管理的目标没有备份执行入口。恢复只写配置源,应用到 HOME 为独立审阅步骤。提供方继续校验身份、来源归属、内容范围、路径、归档及 revision。
本轮发现旧打包版本不支持这些接口,已将 Workstation 固定到公开提交 3eb0053288dc183c4e094b5e4b3ed4e486b89c53,并核对实际包内版本。原生启动仅接受由密钥管理器提供的 CRAFT_HUB_BACKUP_KEY_ 专用变量;表单只保存名称。sidecar 在组合运行时前从通用环境取走这些值,仅向配置提供方子进程注入;软件、项目和 Agent 子进程不继承。现有其他变量名须更新引用或由提供方自行配置。未增加口令持久化、密码表单或自动 Keychain/密钥管理器集成;后者继续属于 D/E 剩余工程。
本批次 lint/公共边界(绕过缓存)、typecheck、工作区 build、Swift 格式检查通过;全仓 750 个文件,6113 项通过、9 项跳过。Swift 130 项中 129 项通过,官方 Node 网络下载测试默认跳过,启用真实 Node 24.18.0。新增测试覆盖冻结登记审批、旧 revision/审批拒绝、草稿保留、登记未知结果恢复、共享来源范围、预留/外部目标、备份替换和口令仅传给配置子进程。首轮同时运行 build/test 导致包输出竞争,构建完成后全量重跑通过;新增宿主代码的 lint 导入/返回类型问题已修复,最终无缓存检查通过。
最终 Release 构建与独立 ad hoc 签名通过,体积 35.73 MiB(36588 KiB)。pnpm test:macos-configuration 对实际包内 sidecar 验证登记/停用/移除、旧 revision、跨内容范围拒绝、预留目标和未解决归属拒绝、加密保存及仅恢复配置源;调用真实已安装的 secret scanner。其他设备改动的归档须明确审阅替换,篡改归档拒绝;登记权限 0600,不包含口令,移除登记保留文件。随机测试口令不输出,HOME 配置未被备份恢复覆盖,项目登记为空,关闭父管道后 exit 0,临时目录已清理。fixture 最初创建了竞争来源,已先验证拒绝再停用该来源完成成功路径,没有放宽提供方边界。最终产物在口令隔离改动后重新验证。
系统仍锁屏,来源/目标表单、目录面板、归属及备份审阅、焦点/键盘/VoiceOver 待真实验收。软件收藏、项目级配置与声明式业务块、云及安全存储适配、数据迁移与 E/F 其余验收仍未完成,Goal 继续活动。
D 阶段软件收藏与诊断刷新(2026-10-23):原生软件目录可添加收藏,“常用工具”页支持分组搜索、打开、官网/下载/仓库链接及确认移除。数据与个人工作台共用;共享 TypeScript 负责网站归一化、下载变体匹配、收藏元数据与固定启动预设。添加只传目录来源/软件 ID、语言及 settings revision;移除只传已保存的工具 ID 和审阅 revision。保留项目置顶与任务显示偏好,最多 100 项,旧 revision 拒绝。写入结果不明需重新读取,写入前或期间启动的旧读取不能覆盖保存回执。
原生打开入口仅接收工具 ID,sidecar 重新读取已保存配置并调用 Electron 共用的启动服务。入口要求独立 bearer,拒绝网页 cookie、query 及客户端 URL/启动参数覆盖。诊断刷新失败或数据失效时保留旧检查明细,但标为上次结果并隐藏“未发现问题”;成功重读后才能恢复当前结论。
本批次工作区 lint/公共边界、typecheck、build、全仓测试(751 个文件、6117 项通过、9 项跳过)与 Swift 格式检查通过。Swift 两份产品共 135 项,134 项通过,官方网络下载测试默认跳过;真实 Node 24.18.0 探测通过。实际包内 sidecar 在临时 HOME/profile 验证收藏增删、去重、旧 revision、拒绝任意启动内容、原生认证及原有配置/备份流程,项目保持为空,父管道关闭后 exit 0,临时目录清理完成。未打开或安装软件,未改变正式收藏。Release 与包体积记录见原生 README 和性能记录。
本轮 UI 工具确认系统仍锁屏,插件/诊断及收藏的实际布局、键盘/焦点与 VoiceOver 待解锁验收。自定义工具编辑、项目级配置与其他声明式业务块、云及安全存储、数据迁移和 E/F 其余工程继续保留在活动 Goal 中。
D 阶段声明式插件工作台(2026-10-23):侧栏工作台与命令面板的集成页面入口已接入 SwiftUI,支持已解析声明中的连接状态、实体列表/搜索、原文链接、详情、已加载内容筛选及分页。只自动调用声明为无需确认的读取;配置管理块的全局入口复用现有原生配置页面。其他业务块明确保留完整页面入口。
新增可选 presentation=workbench-v1 响应封装,不改变原动作 API 的默认结果、项目解析、信任或确认检查。实体键、未完成状态与个人归属由共享 TypeScript 计算,Vue 复用同一未完成判断。分页按完整身份合并,账号变更清除旧页和进行中的旧读取,重复游标停止并显示部分覆盖;搜索条件随下一页保留。缓存、失效与覆盖范围未知均明确显示。
Codex 配置开关支持全局/项目作用域、启停和恢复继承。原生审阅冻结实体 revision、作用域、值和 action ID;请求额外绑定 operation/effect,运行时在操作声明变化时要求重新审阅。未信任项目仍由运行时拒绝修改。取消、失效、换作用域和重连清除旧审批;写入结果不明确须重新读取,退出/重启检查包含这些操作。网页回退保留明确作用域;已移除的显式项目不能被静默替换为全局或网页当前选中的项目。集成网页仍归属工作台侧栏,工具栏可返回原生页。
工作区 lint/公共边界、typecheck、build、Swift 格式检查通过;全仓 753 个文件、6121 项通过、9 项跳过。Swift 共 142 项,141 项通过,官方网络下载测试默认跳过,真实 Node 24.18.0 探测通过。测试覆盖只读发现、操作确认、项目信任、旧操作审阅拒绝、跨账号分页、重复游标、搜索延续、未知写入恢复、迟到响应和网页作用域回退。包内实测发现 Codex 读取器缺少图形应用环境下的 CLI 查找路径,已补齐用户 Applications、.local/bin、Homebrew 和 /usr/local/bin,不执行登录 shell;Windows/Linux 保持原有 PATH 回退。
最终 Release 构建和独立 ad hoc 签名校验通过,包体积 36.98 MiB(37872 KiB)。以 CRAFT_HUB_TEST_CODEX 指向已安装 CLI,在临时 HOME 的 .local/bin 建立测试链接后,实际包内 sidecar 通过真实 Codex 配置预览:返回完整实体身份,不授予开关权限,fixture TOML 保持不变。未支持的结果明确返回 unsupported,错误的操作审阅返回 409;收藏、配置应用/恢复、登记和加密备份回归也通过。项目登记为空,关闭父管道后 exit 0,临时目录已清理;未修改真实 Codex 配置、账号授权或已安装插件。
连接授权、通用动作表单、资源浏览器、项目级配置管理块、任务详情/状态修改/交接及组合工作台仍使用完整网页。原生列表筛选尚未同步网页保存的账号偏好。上述缺口及云/安全存储、迁移、E/F 余项继续属于活动 Goal;系统锁屏仍阻止真实布局、键盘焦点和 VoiceOver 验收。
D 阶段原生资源浏览(2026-10-23):声明式 resource-browser 已支持原生目录链接、实体、文档、对照文本、复制和系统“另存为”。共享呈现合同增加 resources 结果,资源实体复用运行时身份去重;默认 API 响应不变。仅声明为无需确认的 resources.read 可读取,请求仍绑定审阅 operation/effect 且不附确认授权。表单、项目导入建议和 Agent 提示只作说明,修改、执行、导入及交接保留完整工作台入口。
每个成功读取的资源保存自己的输入和项目作用域,刷新、返回及资源首页各自保持对应作用域;跨项目失败保留上次成功的页面并标记过期,不能把失败目标当作当前页。账号变化清除内容、导航历史和旧请求,事件失效、上下文切换与运行时替换均拒绝迟到结果。资源文档以普通文本显示,文件导出仅建议文件名末段并由系统保存面板选定位置。
本批次 lint/公共边界(无缓存)、typecheck、工作区 build 与 Swift 格式检查通过;全仓 753 个文件、6122 项通过、9 项跳过。Swift 共 145 项,144 项通过,官方 Node 网络下载默认跳过,真实 Node 24.18.0 检查通过。测试覆盖未信任项目只读访问、错误操作审阅拒绝、文档惰性呈现、跨项目刷新/返回、失败导航、账号变化和迟到响应。资源类型封装的 TypeScript 推断错误已修正并通过最终类型检查及专项回归。
最终 Release 构建和独立 ad hoc 签名校验通过,包体积 37.32 MiB(38216 KiB)。实际包内 sidecar 的临时 HOME/profile 验证再次通过真实 Codex 预览、收藏、配置审阅/恢复及登记/加密备份,项目登记为空、关闭父管道后 exit 0 并清理临时目录。资源专属行为通过真实运行时 HTTP fixture 与 Swift 模型验证;包内回归及编译成功不能替代尚未执行的资源 UI 走查。
本批次 UI 工具再次确认系统锁屏,实际资源布局、文本选择、保存面板、键盘焦点和 VoiceOver 待验收。资源当前手动刷新,网页回退保留作用域但从工作台首页进入;资源表单和交接仍未原生化。连接授权、通用动作表单、项目级配置、云/安全存储与迁移/分发等既有缺口保持在活动 Goal 中。
D 阶段原生连接管理(2026-10-23):已支持插件提供的文本/密码连接表单、原生确认、设备登录码、OAuth 跳转、授权轮询、账号和新增权限状态。确认冻结表单输入、项目作用域和公共连接 revision;运行时重新读取账号、权限与当前表单,并核对 method/字段后才调用连接更新。reviewedConnection 是可选合同,既有动作响应及确认规则保持兼容。密码默认值不进入原生呈现,密码在审阅中隐藏,取消、失效及提交后清空;含凭据操作的异常只显示固定提示,不输出提供方原始错误。
只有明确提交后的有效 HTTPS 授权结果会打开浏览器;状态读取或恢复不会自动跳转。轮询每两秒读取状态,设备码遵守来源有效期且最多等待 15 分钟,OAuth 最多 10 分钟;完成、到期、关闭、运行时替换、插件声明失效或用户暂停会停止。已有只读连接不会被误判成新增权限授权已完成。迟到授权响应不能在插件变更或页面关闭后打开浏览器。写入结果不明不会自动重试,需重新读取或由用户在来源核对后明确结束;后者仍要求刷新才能再次提交,避免提供方已移除时困在无法关闭的弹层。待定写入参与退出和重启检查。
本批次 lint/公共边界(无缓存)、typecheck、工作区 build、Swift 格式检查通过;全仓 754 个文件、6124 项通过、9 项跳过。Swift 共 150 项,149 项通过,官方 Node 下载测试默认跳过,真实 Node 24.18.0 检查启用。覆盖发现不调用连接、确认及旧账号/表单拒绝、项目作用域保持、密码不预填/不回显/清空、取消和重复确认、未知结果恢复、权限等待/过期/暂停、插件失效及迟到 OAuth。首次编译的错误变量遮蔽和格式检查发现的过长注释已修正,最终检查通过。
最终 Release 构建及独立 ad hoc 签名校验通过,包体积 37.80 MiB(38712 KiB)。pnpm test:macos-configuration 在临时 profile 启用自带 To Do 声明,保持账号连接禁用;实际包内状态返回原生审阅 revision 与连接表单,缺确认、未知 method 和旧 revision 均返回 409。没有登录或连接器请求,没有产生连接配置文件。真实 Codex fixture 预览及原有收藏、配置/登记/加密备份回归也通过,项目登记为空,sidecar 正常 exit 0,临时目录清理完成。
系统锁屏仍阻止真实 SecureField、审阅焦点、浏览器授权返回及 VoiceOver 验收;未执行真实账号授权。通用动作和资源表单、任务详情/状态/交接、项目级配置、云/安全存储与迁移/分发等后续工程继续保留在活动 Goal 中。
D 阶段原生动作与资源表单(2026-10-23):声明式动作表单及资源页表单已支持 SwiftUI 文本、多行文档、数值、字符串列表、选项与复选框。Vue 和原生 API 共用字段转换函数,Swift 仅提交原始字符串;必填项、数值、选项及未知字段由共享运行时校验。准备阶段只读取声明、资源表单和连接身份,不调用待提交动作;确认展示转换后的固定输入和项目作用域。
新增全局/项目级表单 prepare、execute、discard 合同。审阅仅驻留内存,有十分钟有效期、单条/总字节及数量上限,关闭运行时清理。执行先消费审阅,再检查当前提供方、动作/字段、资源表单和账号;不接受客户端覆盖 action 或冻结输入。重复及并发提交只能调用一次,取消、过期、账号或定义变化均拒绝;项目始终通过原有信任检查。未知写入不自动重试,需明确核对来源;来源在提交期间失效时仅确认已收到回执,不恢复旧账号的结果内容。待定写入纳入退出和重启检查。
同时修正原生 URL 路径编码:保留 ASCII URL unreserved 字符,避免将插件 ID、项目 UUID 的连字符编码成原始服务端路由不能匹配的 %2D。真实 loopback HTTP 测试检查发出的请求行,并保留路径分隔符编码及点路径拒绝;仅检查 Foundation 解码后的 URL.path 无法覆盖此缺陷。
本批次 lint/公共边界、typecheck、工作区 build、Swift 格式检查通过。全仓 756 个文件、6130 项测试通过、9 项跳过;Swift 共 158 项,157 项通过,官方 Node 网络下载默认跳过,真实 Node 24.18.0 探测通过。新增覆盖全部字段类型、只读发现/准备、取消与重复提交、冻结输入、项目隔离与信任、资源定义/账号变化、过期、未知结果和迟到回执;既有插件管理和诊断中心测试也通过。
最终 Release 构建、独立 ad hoc 签名验证通过,包体积 38.50 MiB(39424 KiB)。实际包内 sidecar 在临时 HOME/profile 验证表单路由、未知审阅/选择器、输入覆盖拒绝、取消及认证;自带声明没有通用表单 fixture,成功提交路径由真实运行时 HTTP fixture 与 Swift 模型测试验证。原有 To Do 禁用状态、真实 Codex 预览、收藏、配置应用/恢复、登记及加密备份回归通过。无登录或连接器请求,未改变正式用户数据,项目登记为空,sidecar exit 0,临时目录已清理。
UI 工具再次确认 Mac 锁屏,插件管理、诊断及表单的真实布局、键盘焦点、中文输入与 VoiceOver 尚未验收。项目级配置管理、任务详情/状态/交接、保存筛选偏好、云/安全存储及迁移/分发等仍在活动 Goal 中;本批次不代表原生化整体完成。
E 阶段离线资料迁移首批(2026-10-23):共享运行时新增只读预检、固定 revision 的暂存复制、源数据快照、旧候选备份、幂等回执、保留后续编辑的回退和中断恢复。JSONC 注释原样保留,项目 trust 不变,已知插件安装路径随资料根迁移;浏览器会话不复制。未分类文件、无效配置、未完成运行、待重试的原生记录和加密设备身份均阻止应用。密钥转移尚未实现,不能通过删除身份文件绕过。
Electron、原生辅助进程、HTTP 宿主与 CLI 持有共享资料锁,迁移要求源/目标的独占锁;停止进程后由内核释放。锁位置在 macOS 上独立于 HOME/TMPDIR,修正了 GUI 与隔离辅助进程临时目录不同导致锁互不可见的问题。CLI 另检查旧版 App 进程,要求显式确认旧 CLI 也已退出;整个迁移期间须保持宿主关闭。此实现是离线迁移保护,不代表单实例、启动期 UI 写入协调或公开 scheme 交接完成。
本批次 lint/公共边界、typecheck、工作区 build 与 Swift 格式检查通过;全仓 757 个文件、6138 项测试通过、9 项跳过。Swift 共 158 项,157 项通过,官方 Node 下载默认跳过,真实 Node 24.18.0 探测启用。迁移测试覆盖只读发现、不执行命令或改变信任、旧审阅拒绝、跨环境锁竞争、进程强制退出后锁释放、安装前后崩溃恢复、无效日志和保留编辑回退。测试发现的 CLI 插件初始化版本选项误判及服务启动失败重复关闭已修正,全仓回归通过。
Release 构建与独立 ad hoc 签名验证通过,包体积 38.50 MiB(39428 KiB)。新增 pnpm test:macos-migration 用实际包内 CLI 生成只读预检,经公共运行时 API 对临时数据复制及重复应用,再启动实际包内辅助进程验证未信任项目、设置、插件概览和诊断 API。进程存活时迁移被拒绝,退出后锁可重获,回退恢复旧候选并保留后续编辑;源数据哈希不变,无命令/Agent 执行,进程 exit 0,临时目录已清理。现有实际 Codex、禁用连接、收藏、配置审阅/恢复及加密备份演练也通过。
真实资料仅执行只读预检,私有报告保存在忽略的 apps/macos/build/migration-preflight-20261023-final.json。当前 38 项阻塞中,37 项为缺少迁移策略的历史条目,1 项为未完成运行;无配置语法阻塞。未迁移、修复或删除真实资料。详见 迁移与恢复说明。密钥与个人云、单实例/深链接、剩余原生功能及分发验收继续属于活动 Goal;锁屏下无法补做真实插件/诊断 UI 走查,未标记 E/F 或整体完成。
E 阶段原生单实例与完整资料生命周期(2026-10-23):原生 App 在初始化工作台、草稿、Node 安装器及更新服务前取得资料根锁;同一规范化目录只允许一个主实例,独立验收目录继续并行。重复进程不打开资料、不启动辅助进程,通过同用户 Unix socket 转交激活、文件/桌面 URL、项目查找或快速记录导航,收到确认并清空迟到事件后退出。版本、字节数、URL/查询长度、并发连接和待处理队列均有上限,近期请求 ID 去重;内容不落盘、不进入遥测。原有运行时链接解析、项目信任和命令审阅规则保持不变。
Swift 与 Node 共用规范化路径及 SQLite 锁合同;资料根在无 Node、安装 Node、重启辅助进程和退出期间持续受保护。辅助进程在建目录和加载插件前持有根锁并独占 runtime/config,防止主进程崩溃后旧辅助进程尚未退出就启动第二个写入者。原生启动会检查残留辅助进程,失败时不打开资料并显示重新启动说明。既有 Electron/CLI 共享客户端行为保留;活动原生资料的直接 CLI 访问受到独占保护,正常 HTTP API 可继续使用。旧候选版本不具备此协议,复用其资料前须关闭;公开 scheme/default host 尚未交接。
本批次全仓 758 个文件、6139 项测试通过、9 项跳过;lint/公共边界、typecheck、工作区 build 通过。Swift 共 163 项,162 项通过、可选官方 Node 下载跳过,真实 Node 24.18.0 互操作测试启用;Swift 格式检查最终通过。覆盖不同临时目录的跨语言锁、关闭一个 SQLite 连接后仍保持另一个连接的锁、启动前迁移拒绝、同目录排他/不同目录并行、迟到观察、重复请求、队列边界和无效跨进程消息。Swift SceneBuilder 不支持动态场景分支的问题已改为场景内内容/菜单门控;UUID 大小写差异仅影响测试断言,已归一比较。
最终 Release 构建和独立 ad hoc 签名验证通过,包体积 38.70 MiB(39624 KiB)。pnpm test:macos-instance 使用不同应用身份的真实 Release 副本及临时资料,通过重复可执行文件启动、Launch Services 文件夹转交、未信任项目登记及深链接选中原生插件页;确认单一主实例和辅助进程。强制结束主进程后辅助进程退出且锁释放;迁移期间不创建资料目录,独立存活的辅助进程也阻止新宿主打开原生资料。移除本轮进程和临时偏好/资料,未替换安装、切换默认 scheme、迁移真实资料或授权账号。包内迁移/回退、Codex 预览、禁用连接、收藏、配置及加密备份回归均通过。
该进程与路由验收不替代窗口视觉、键盘、中文输入及 VoiceOver 检查。完整机制与复现见 实例生命周期;密钥/个人云、公开链接交接、真实资料阻塞、剩余功能和正式分发验收继续属于活动 Goal。
D/E 阶段安全存储与私有通道基础(2026-10-23):新增 Swift Keychain 设备身份存储,按规范化 profile、云 API 与网页 origin 隔离;使用既有 Ed25519 PKCS#8/SPKI 格式,校验公私钥匹配。自动读取不弹系统授权,不可用时不生成替代身份或明文文件;注册与删除核对完整旧身份,避免相同密钥的后续注册被旧请求删除。此阶段使用支持本地/ad hoc 构建的文件型 Keychain,正式签名升级及系统授权行为仍待验收。
私有管道定义四个固定 vault 操作、版本/UUID/严格字段、16 KiB 帧和八个并发上限;Swift 解码器保留第一行 v1 握手,后续消息不得替换连接。未知版本/字段、超时、断管与替换密钥关闭通道;写入结果不明不自动重试。错误仅返回固定代码,身份描述脱敏。上述基础尚未接入 RuntimeSidecar/sidecar 主入口、个人云控制器或原生账户 UI;四个云桥接方法及云回调继续标为缺失,没有开启远程执行或迁移真实密钥。后续必须补齐进程代际、非阻塞写管道与断管处理,以及原生授权和过期/取消检查再启用个人云。详见 安全存储与私有通道。
本批次 lint/公共边界、typecheck、工作区 build 与 Swift 格式检查通过;全仓 759 个文件、6155 项测试通过、9 项跳过。Swift 共 171 项,170 项通过、可选官方 Node 下载跳过,真实 Node 24.18.0 互操作启用。新测试使用独立临时 Keychain,覆盖锁定拒绝、旧身份保护、私钥格式以及真实 Node 子进程的 load/create/register/load/clear/load;身份仅经私有管道传递,profile 目录始终不存在,测试结束移除自身 Keychain 和进程。最初 fixture 初始化捕获未完成的 self 导致编译失败,已修复并通过完整重跑。插件管理与诊断中心的既有回归通过;系统 UI 工具仍报告锁屏,视觉、键盘/输入法、焦点和 VoiceOver 验收仍未完成。
最终 Release 重建与独立 ad hoc 签名验证通过,包体积 38.82 MiB(39756 KiB)。实际包内单实例/Launch Services、迁移/回退和配置/Codex/收藏/加密备份演练均通过;插件链接选中原生页、项目保持 untrusted、测试进程正常清理。Keychain 搜索列表中无本批次临时 fixture 残留。未修改真实资料、账户或默认宿主,未补测 UI 性能;安全存储的应用接线、个人云和密钥迁移以及其他 A–F 缺口继续属于活动 Goal。
D/E 阶段个人云生命周期与执行复核(2026-10-23):接入前检查发现,旧云流程没有在用户确认后完整核对过期、取消和脚本变化,且迟到的网络/存储回执可能恢复已断开的连接。共享控制器现已串行处理账户变更,断开时立即使旧会话失效并等待已开始的密钥写入/同步,再撤销和清除实际完成的身份;未读到或读取失败的 vault 不再被当作空身份报告断开,重新读取失败时保留错误;退出返回可等待的清理 Promise,Electron 已接入。连接等待十分钟后失效,回调严格限定 scheme/host/path/参数并在采用前消费;网络请求限制十五秒和 8 MiB 响应、禁止重定向,错误不回显上游正文或回调内容。
远程审阅包含命令、工作目录、脚本及有效期;共享运行时提供可选的冻结审阅校验,在生成进程前重新发现命令并核对最新 trust、项目路径、输入、取消和时间。后续前置步骤也核对取消/过期。确认期间修改脚本或撤销信任、取消后的迟到确认均不执行;完成回执丢失不会重复进入运行时。此校验不声称对任意外部文件编辑提供原子快照。发现仍只读,新项目仍 untrusted,执行继续使用结构化 command/args 和既有运行时。
本批次 lint/公共边界、typecheck、工作区 build、Swift 格式检查通过;全仓 763 个文件、6206 项测试通过、9 项跳过。Swift 共 171 项,170 项通过,官方 Node 网络下载默认跳过,真实 Node 24.18.0 启用。真实 Swift 私有管道 + 临时 Keychain + Node 控制器/运行时 + 本地云替身已完成采用签名、请求签名、连接/同步/断开和未信任远程请求拒绝;不弹浏览器、不授权真实账号、不产生运行记录,普通 profile 文件无私钥或设备身份文件。另有真实 HTTP 重定向拒绝与挂起响应取消、存储/同步晚回执、关闭等待、脚本/输入/trust/期限变更、回执丢失去重等覆盖。最初测试使用 /var 临时路径与规范化项目路径比较导致失败,已改为使用运行时返回的项目路径,未放宽生产校验。
上述组合演练使用构建后的工作区模块;原生 App 的管道读写接线、账户设置、回调路由和批准界面仍未接通,个人云未在候选版启用。系统 UI 工具仍报告锁屏,插件/诊断等真实布局、键盘/焦点和 VoiceOver 验收继续待补。密钥迁移、其余原生功能及 E/F 分发验收等完整 Goal 范围保持不变。
D 阶段插件管理与诊断 UI 补齐(2026-10-23):更新检查弹窗提前展示进度,失败清空旧候选;插件/来源事件使检查失效,应用后重新检查才能重试,运行时断开后旧请求不能重新打开弹窗。宿主组件读取使用独立请求代际,较早的 GET 不再覆盖启停回执。网页插件详情路由进入原生详情并保持带 scope 的包名,切走页面或重连后取消迟到导航。诊断页增加来源筛选、组合搜索、清除筛选、分组数量和空/跳过报告说明;来源消失时恢复全部来源。
新增 pnpm test:macos-management,使用候选版包内 sidecar 与临时 HOME/profile 验证本地插件链接、README、启停、损坏诊断的原生处理目标、修复和取消链接;源文件保留、项目仍 untrusted、运行记录为零,匿名请求及网页 cookie 不能访问原生组件接口。使用和系统验收清单见原生管理指南。新增 8 项 Swift 回归,全量共 179 项,178 项通过、官方 Node 下载默认跳过;真实 Node 24.18.0 启用。全仓 763 个文件、6206 项测试通过、9 项跳过。工作区 build、lint/公共边界、typecheck 与 Swift 格式检查通过。验证脚本首轮缺少 fixture manifest 的必填 ID、引用了未公开导出的类型,已按现有合同修正;未放宽运行时校验。
最终 Release 重建和独立 ad hoc 签名校验通过,包体积 38.92 MiB(39852 KiB)。同一产物的 test:macos-management、test:macos-instance、test:macos-migration 和 test:macos-configuration 全部通过,各演练使用隔离资料并完成清理;未修改已安装 App、真实账号或正式 profile。
Mac 当前仍锁屏,真实原生页面的布局、键盘焦点和 VoiceOver 尚未验收。外部代码扩展仍只读展示,完整 Goal 的个人云接线、密钥迁移和 E/F 发布验证范围保持未完成。
D/E 阶段个人云应用接线(2026-10-23):RuntimeSidecar 已连接 v1 握手之后的私有 vault 消息,按 profile 和规范化云 origin 建立 Keychain scope;写管道使用独立 actor、非阻塞描述符、两秒截止和描述符级 SIGPIPE 抑制。停止/重启等待已开始的存储操作,旧进程不再取得新通道。sidecar 在握手后启动共享云控制器,退出时取消和等待账户/同步清理。未配置云地址时保持关闭。
原生设置现可查看连接/设备状态、连接、同步、断开并审阅远程请求。审阅展示具体程序、逐项参数、工作目录、前置步骤、环境变量名、项目脚本和过期时间;默认取消,批准无 Return 快捷键。进程内批准队列有数量/大小上限,取消、过期或退出后不能重放,HTTP 仅接受原生 bearer。四个云兼容桥接方法只返回状态或发起账户操作,不向网页暴露批准或密钥。云回调在进入网页 inbox 前截获;连接请求未返回时收到的回调等待该请求完成,重连后旧回调失效。
云网页的登录回调白名单补上候选版专用 craft-hub-native://cloud/connect,登录后重新校验 sessionStorage 中的目标。此网页改动尚未部署,真实登录验收需要服务端配套页面;本批次没有真实账号授权、原资料迁移或公开发布。个人云应用接线已取代前文的基础阶段缺口;Electron 密钥认证转移、真实 Keychain/浏览器 UI、正式签名升级和其他 A–F 项目继续保留。
本批次工作区 build、lint/公共边界、typecheck(含云网页)及 Swift 格式检查通过。全仓 765 个文件、6214 项测试通过、9 项跳过;Swift 共 186 项,185 项通过、可选官方 Node 下载跳过。真实 Node 24.18.0 和包内 sidecar 专项已启用:隔离 Keychain 与本地云替身通过生产私有管道完成已注册身份读取、签名同步、断开撤销和清理;这项演练不覆盖真实浏览器登录或远程命令执行。批准队列、原生 HTTP 权限及运行前审阅一致性由独立回归测试覆盖。
最终 Release 构建及独立 ad hoc 签名校验通过,包体积 39.32 MiB(40260 KiB)。同一产物的插件/诊断管理、单实例/Launch Services、离线迁移/回退及配置/Codex/收藏/加密备份四组演练全部通过。插件演练保留本地源文件,项目始终 untrusted、运行记录为零;各验证器清理自身进程和临时资料。系统 UI 工具再次确认 Mac 锁屏,页面布局、键盘焦点、输入法和 VoiceOver 仍待解锁后验收,Goal 保持进行中。
E 阶段设备身份转移核心(2026-10-23):Electron vault 增加不解密的公开元数据审阅和定向加密转移接口,检查源文件摘要、规范路径、设备公钥及配置的云 origin,解密后再次核对源文件。共享合同使用两分钟有效期、临时 X25519 密钥、HKDF-SHA256 与 AES-256-GCM,将源、目标、云地址、设备、公钥、接收密钥和截止时间全部绑定;Swift 接收器验证后只消费一次,失败也不能复用。源文件读取拒绝链接、特殊文件、超限或损坏记录,FIFO 不会阻塞等待;普通 Electron 读取也校验 Ed25519 密钥匹配并隐藏底层错误。
原生 Keychain 增加独立暂存事务,只接受空目标;暂存及准备激活期间阻止账户读取和变更,重启后继续保留阻塞。事务提交须由协调器在资料日志完成后解除保留;此前可回退至空目标,遇到其他事务或后来出现的不同身份则保留现场并拒绝覆盖。Node 子进程与 Swift 的跨语言演练使用临时 Keychain 和仅在子进程内持有私钥的 OS 替身,验证中文路径、原密文保留、接收后暂存/提交及无私钥文件。真实 Electron safeStorage 授权、受审阅的宿主交接和资料/身份日志协调尚未接入;离线迁移对加密身份的阻塞保持有效,本条不视为完整迁移完成。协议、回退边界及后续接线顺序见设备身份转移说明。
该批次最终工作区 build、lint/公共边界、typecheck、Swift 格式检查通过;全仓 765 个文件、6218 项通过、9 项跳过。Swift 共 190 项,189 项通过、可选官方 Node 下载跳过,真实 Node 转移与包内云专项启用。Release 重建、独立 ad hoc 签名和实际包内云签名同步/撤销、单实例/Launch Services、插件/诊断管理回归通过;包体积 39.43 MiB(40380 KiB)。隔离项目保持 untrusted、零执行,临时 Keychain 搜索项无残留。未转移真实密钥、修改正式资料或发布候选版;真实 UI、完整身份迁移协调和其余 A–F 验收继续保留。
D 阶段插件管理与诊断桌面交互补齐(2026-10-23):插件的发现与已安装列表增加系统行选择、双击详情、右键复制包名、底部数量与详情操作;首次加载、未安装、无匹配和读取失败提供对应提示与恢复入口,刷新失败保留目录并标记过期。插件、已安装与来源搜索统一去掉首尾空白。诊断列表增加行选择及原生详情弹窗,展示完整消息、文件行列、代码、来源说明和检查时间,支持复制单条诊断和处理跳转。复制内容保留过期说明;刷新同步同一 ID 的详情,问题消失或断开后关闭详情,筛选隐藏选中项后清除列表选择。
本批次工作区 build、lint/公共边界、typecheck、Swift 格式检查通过;全仓 767 个文件、6225 项通过、9 项跳过。Swift 共 192 项,191 项通过、可选官方 Node 下载跳过(包内云测试另行启用运行)。Release 构建、独立 ad hoc 签名校验、包内插件/诊断管理、单实例、迁移/回退和云签名同步/撤销通过,包体积 39.73 MiB(40684 KiB)。真实 Electron 源端只读预检演练亦通过,未访问安全存储或改变源身份。Mac 仍锁定,新增选择、双击、弹窗焦点、窗口布局和 VoiceOver 不能宣称已通过真实 UI 验收;外部代码扩展安装流程与其余 A–F 项继续保留。交互与复现见原生管理说明。
D 阶段外部宿主扩展原生操作闭环(2026-10-23):宿主组件页支持系统 JSON 文件选择、原生信任审阅、登记、启停和移除。审阅显示真实模块路径与被替换的登记,只读取有界声明,不导入模块或修改应用身份。侧车提供独立 bearer 接口,拒绝网页 cookie;审阅最多八份、五分钟有效且只消费一次。保存前重新读取声明和解析路径,并在共享运行时串行写入时比较已有登记;变化、取消、过期或不确定结果都须重新审阅。登记只在下次重启加载代码,不改变项目信任;移除保留本地源文件和数据。随应用提供的组件 ID 不可被外部登记覆盖,旧冲突登记仍可停用和移除以恢复。信任针对模块位置及其后续本地修改,不宣称固定代码摘要或沙箱。
新增 pnpm test:macos-host-extensions 使用包内 sidecar、专用代码 fixture 和隔离 profile,完成四次启动、三次重启,证明确认前不写入/执行、登记后当次不执行、重启后加载、停用及移除后的重启不加载;过期登记写入和网页凭据拒绝,项目始终 untrusted、运行记录为空。原生状态独立管理加载与审阅代际,取消/断开后的迟到预览会撤销,确认失败不能重用旧批准。已有 Electron 声明读取提取为共享纯读取模块。修正原生构建为包含 desktop/web 工作区依赖闭包,CI 在构建后启用 Swift/Node 及包内云专项,再运行两组管理验收;托管 CI 尚未实际运行。
本批次工作区 build、lint/公共边界、typecheck、Swift 格式检查通过;最终全仓 768 个文件、6232 项通过、9 项跳过;Swift 共 195 项,194 项通过、可选官方 Node 下载跳过,真实 Node 与包内云专项启用。首次全仓检查发现 Electron 的 strip-only 入口不支持新代码中的 TypeScript 参数属性,改为显式字段后定向及全仓重跑通过。Release 构建及独立 ad hoc 签名通过,包体积 40.01 MiB(40972 KiB);外部扩展、声明式插件/诊断、单实例/Launch Services 和真实 Electron 启动回归通过。临时 Keychain 搜索项无残留,未修改正式资料、登记用户扩展或发布应用。Mac 仍锁定,原生文件选择/信任弹窗的视觉、焦点和 VoiceOver 仍待系统验收;设备身份迁移协调及其余 A–F 项继续推进。
E 阶段迁移阻塞标记持久化(2026-10-23):修正阻塞标记仅保存在临时目录的问题。权威副本现位于 OS 账户的持久化目录,Swift/Node 使用相同的账户主目录和规范化路径,调用方的 HOME/TMPDIR 不改变标记位置。保留原有 SQLite 锁文件及旧位置标记以兼容现有协议;设置时先持久化权威副本,清除时最后移除权威副本,所有变更要求真实排他租约和匹配事务。任一副本损坏或事务所有者冲突均拒绝打开,只有同一事务可协调中断的状态切换。资料及 Keychain 的完整事务协调器仍未实现,不开放真实身份迁移。
新增测试覆盖临时标记丢失、双副本冲突/损坏、Node 进程退出及不同 HOME/TMPDIR 下的 Swift 启动阻止。实际 Release 副本亦验证无旧标记时不创建资料或启动 sidecar,匹配恢复后可启动。此演练模拟标记丢失,不宣称完成物理重启或断电验证。全仓 768 个文件、6235 项通过、9 项跳过;Swift 共 196 项,195 项通过、可选官方 Node 下载跳过,真实 Node 与包内云专项启用。workspace build、lint/公共边界、typecheck、Swift 格式、Release 构建及独立 ad hoc 签名通过,包体积仍为 40.01 MiB(40972 KiB)。一次构建与类型检查重叠导致临时声明文件缺失,构建结束后顺序重跑通过。
同一产物的插件/诊断、外部扩展三次重启、单实例/Launch Services、离线迁移/回退和包内云回归通过,隔离项目保持 untrusted、零执行,未迁移正式资料或真实身份。Mac 系统仍锁定,插件和诊断原生 UI 的布局、键盘/输入法、焦点及 VoiceOver 验收保留;Goal 继续进行。
E 阶段资料与 Keychain 事务协调(2026-10-23):共享运行时新增身份参与者合同和持久化提交/回退决定,复用现有资料复制、备份与候选归档流程。原生参与者核对源/目标、云地址、挑战、公钥和设备绑定,能区分空目标、暂存、准备激活和已激活状态;已完成迁移的回退只删除匹配设备,保留后来创建的身份。运行时在任何 Keychain 变更前设置所有持久阻塞标记;未决定的中断回退,已记录提交决定的中断继续提交。成功后保留源端阻塞,解除原生端阻塞,防止兼容宿主同时使用同一身份。回退须审阅当前候选版本,归档后续编辑,并确认原密文仍存在且未变化后才移除原生身份。回执丢失通过重新检查参与者状态恢复;日志只含公开绑定和摘要,不含私钥或转移密文。
新增十四项运行时用例,包括六个真实 Node 进程强制退出位置、暂存/完成/回退回执丢失、来源变化后保留密钥、原生目标原本不存在、过期回退审阅及普通 CLI 无法绕过身份日志。Swift 新增真实 Node 协调器、生产源端加密与隔离 Keychain 联合演练,覆盖提交决定后中断、重建原生 vault、恢复提交以及有后续编辑的资料/身份回退;另验证其他事务和后来设备保留。联合演练使用测试专用私有管道及 OS 加密替身,不视为生产 Electron/native 宿主身份验证或用户授权 UI 已完成。
本批次全仓 769 个文件、6249 项通过、9 项跳过;Swift 共 198 项,197 项通过、可选官方 Node 下载跳过,真实 Node 与包内云专项启用。workspace build、lint/公共边界、typecheck、Swift 格式、Release 构建及独立 ad hoc 签名通过,包体积 40.09 MiB(41052 KiB)。同一产物的声明式插件/诊断、外部扩展重启、单实例/Launch Services 和离线迁移/回退验证通过。下一步仍是生产维护管道、源宿主验证并启动原生接收端、审阅与恢复界面;必须要求源宿主具备持久阻塞协议,公开维护入口继续仅允许 preview。Mac 系统检查仍报告锁屏,真实 UI 验收保留;未转移真实身份、迁移正式资料或发布应用,Goal 继续进行。
E 阶段宿主认证预检(2026-10-23):Electron 维护入口增加只读 recipient-preflight,使用固定系统工具检查源应用与原生接收端的完整签名、同一 Developer ID 团队、应用标识、加固运行时、注入权限和双向迁移合同,不启动所选应用、不解密源身份。Swift 新增 IdentityTransferPeer,通过 Security 读取本进程及实际父进程,验证动态身份与完整资源签名,保留原始父进程对象供安全存储操作前后复核;不接受调用方 PID、Team ID 或环境变量豁免。它是待接入维护接收端的认证基础,不等于生产私有管道或授权 UI 已接通。
查明现有 Workstation 内置调用仍使用 ELECTRON_RUN_AS_NODE,不能直接关闭该 fuse 而破坏无 Node 的 Electron 功能。当前打包不声明 CraftHubIdentityHostSecurityVersion 或接收端操作版本,真实转移保持关闭;必须先替换该固定后端调用并验证 Node 选项/调试入口禁用、ASAR 完整性和普通启动的持久阻塞协议,再发布协调转移能力。真实 ad hoc 伪造身份用例及实际 Electron 不可用预检通过;正向签名工具夹具不代表 Developer ID 父子进程验收。
本批次全仓 770 个文件、6256 项通过、9 项跳过;Swift 共 206 项,205 项通过、可选官方 Node 下载跳过,真实 Node 与包内云专项启用。workspace build、lint/公共边界、typecheck、Swift 格式、Release 构建及独立 ad hoc 签名验证通过,包体积 40.12 MiB(41080 KiB)。插件/诊断管理、外部扩展三次重启、真实 Electron 只读预检及普通启动回归通过;同一产物的单实例/Launch Services、持久阻塞及离线迁移/回退演练通过,隔离项目保持 untrusted、零执行。Mac 仍锁定,真实界面验收保留;未修改真实身份或正式资料,生产宿主启动、维护管道、审阅/恢复 UI 继续实施。
E 阶段 Electron 源宿主加固(2026-10-23):macOS 内置 Workstation 改用签名应用资源中的固定 Node 24.22.1,保持其分离 worker、备份及配置子进程可用;Windows/Linux 保留现有 Electron 后端模式,原生候选继续使用自己的 Node 引导。发行输入固定 arm64/x64 官方归档及 SHA-256,下载有超时和大小上限,核对官方清单及归档后只提取 Node 和许可证,验证架构再原子放入构建目录。macOS Electron 打包在签名前禁用 RunAsNode、Node 环境选项及调试参数 fuse,启用 ASAR 完整性和仅从 ASAR 加载,并在最终二进制读回校验。此改动不发布完整迁移安全版本标记,生产交接仍关闭。
新增 pnpm test:desktop-backend <Electron.app>,对实际包内 Node 验证嵌套进程、能力/配置/软件目录,以及明确不安装任何软件的分离 worker;终端 PATH 没有 Node,临时配置文件不变。篡改副本的 ASAR 后重新 ad hoc 签名,再启动并要求明确的 ASAR integrity 拒绝,避免把系统签名错误或超时误算成通过。test:macos-identity-source <Electron.app> 在同一最终包验证 Node/preload/inspector 注入无效、只读预检拒绝不合格接收端及普通启动;未访问真实安全存储。两项已接入发行 CI,但尚未运行托管 CI 或 Developer ID 正向交接。隔离构建的显式 adHoc 选项不会选择或保存本机正式签名身份。
最终本 checkout 的 285 个文件、2291 项 TypeScript 测试通过、3 项跳过;Swift 共 206 项,205 项通过、可选官方下载跳过,真实 Node 与包内云专项启用。工作区 build、lint/公共边界、typecheck、Swift 格式、原生 Release 构建及两份 App 的独立签名校验通过。最终原生包内插件/诊断及外部扩展三次重启演练通过,项目始终 untrusted、运行记录为零。原生包仍为 40.12 MiB(41080 KiB);Electron arm64 包为 496.59 MiB(508504 KiB),其中独立 Node 资源占 116.35 MiB(119140 KiB),不计入原生候选体积。系统仍锁屏,真实布局、焦点、输入法及 VoiceOver 保持待验收;生产接收端启动、维护管道、迁移审阅/恢复界面继续实施。
E 阶段原生身份维护接收端(2026-10-23):CraftHubMain 在 SwiftUI/AppDelegate 创建前分流固定维护模式,避免普通宿主先获取资料锁而与迁移协调器竞争。真实入口只接受管道/套接字,首先用 Security 认证自身及实际源父进程,并在每次操作前后复核;没有测试签名、调用方 PID 或 Keychain 覆盖参数。协议绑定单一事务的规范资料路径、云 origin、设备及公开摘要,严格校验字段、顺序 ID、帧大小及空闲超时;准备、恢复、状态读取及 Keychain 参与者操作复用已有核心。EOF、异常、取消或回执不明仅销毁临时接收密钥,不猜测提交/回退决定或删除持久预约。资料锁、持久阻塞和日志决策仍由共享运行时拥有。
原有真实 Node/隔离 Keychain 协调演练现通过生产接收协议引擎完成准备、暂存、提交决定后中断、重建会话恢复及保留后续编辑的回退;仅测试注入认证回调,不宣称真实 Developer ID 交接成功。新增七项 Swift 测试覆盖入口分流、认证前后边界、重放/未知字段/绑定变化拒绝、碎片/超限/停滞输入、失败退休及管道关闭。pnpm test:macos-identity-recipient 对实际 Release App 传入未认证父进程和错误参数,在协调器持有排他锁时要求立即拒绝、无握手/接收密钥、无资料创建或普通启动记录;已加入原生 CI,托管结果仍待验证。
本 checkout 285 个文件、2291 项 TypeScript 测试通过、3 项跳过;Swift 共 213 项,212 项通过、可选官方下载跳过,真实 Node 与实际包内云专项启用。workspace build、lint/公共边界、typecheck、Swift 格式、Release 构建及独立 ad hoc 签名通过,原生包为 40.19 MiB(41156 KiB)。同一 App 的普通单实例/Launch Services、深链接原生插件页、强退清理、持久迁移阻塞、插件/诊断及外部扩展重启回归通过。实际系统仍锁屏,UI 焦点、输入法、布局及 VoiceOver 未补验。源端必须认证实际运行的接收进程并绑定私有通道;文件路径预检或握手 JSON 本身不能作接收身份凭据。源端启动器与审阅/恢复 UI 尚未接通,不发布完整迁移能力标记,不迁移真实身份,Goal 继续进行。
E 阶段源端进程管理基础(2026-10-23):macOS Electron 包内新增约 104 KiB 的固定 Node-API 模块,由本地 SDK 按目标架构编译并随应用签名。模块核对自身、目标 bundle、同团队 Developer ID、完整资源签名、注入权限及双向发行合同;用固定参数、最小环境和仅显式继承的标准管道创建暂停子进程,再从内核取得实际子进程代码对象核对后恢复。句柄只管理自己创建且尚未回收的进程,封装有界 IO、关闭和回收;JavaScript 不能指定 PID、团队、任意参数或测试签名策略。真实 Electron 只读维护入口加载该模块验证 ABI,但不启动接收端。
独立 fixture 已验证暂停时检查、拒绝后的清理、文件描述符隔离、真实 Security 进程查询及退出回收;实际 Electron 包内 Node 加载与拒绝、真实 Electron 预检/普通启动、后端分离 worker 和 ASAR 完整性演练通过。这些证据不等同于 Developer ID 正向身份迁移。暂停创建不能认证管道消息:同账号其他进程可发送 SIGCONT。下一步必须接入双方代码要求约束的 XPC 消息,并核对连接进程与所拥有子进程一致,再接源端封装及审阅/恢复 UI;完整转移标记继续关闭。详见进程与消息边界。
D 阶段插件确认生命周期修复(2026-10-23):将移除插件、回滚和移除来源从视图局部状态移至运行时连接所属模型。重连、相关目录事件、强制读取、切换分区和离开页面清除未提交确认;旧按钮或已排队但连接/目录变更的操作不能发送写入。确认同步消费一次,回执不明后须重新读取目录并重新审阅,移除继续保留用户数据和本地源文件。新增模型回归覆盖三类操作的取消、替换、迟到确认、未知结果和重新审阅成功。另将维护管道测试的正常分片读取与短空闲超时分开,修复全套并行运行时 100 毫秒调度窗口导致的误报;生产超时未改变。
本批次最终验证:本 checkout 285 个文件、2291 项 TypeScript 测试通过、3 项跳过;Swift 共 216 项,215 项通过、可选官方下载跳过,真实 Node 与包内云专项启用。workspace build、lint/公共边界、typecheck、Swift 格式、原生 Release 构建和两份 App 独立 ad hoc 签名通过。新原生包为 40.20 MiB(41168 KiB),Electron arm64 包为 496.69 MiB(508612 KiB)。最终原生包的声明式插件/诊断、外部扩展三次重启、单实例/Launch Services、持久阻塞与未认证身份接收拒绝全部通过;临时项目保持 untrusted、零执行,正式资料和已安装应用未改变。新增正向模型 fixture 起初缺少来源删除回执的 deleted 字段,修正 fixture 后全套重跑通过,未放宽产品解析。Mac 仍锁屏,实际布局、焦点、输入法和 VoiceOver 待补;XPC 身份通道、审阅/恢复与其余 A–F 验收继续留在活动 Goal 中。
E 阶段原生接收端逐消息认证(2026-10-23):实测匿名 NSXPCListenerEndpoint 不能经普通管道安全归档,临时 bootstrap_create_service 也不受本机支持,因此以有内核审计尾部的 Mach 消息替代上一批设想的 XPC 端点管道传递。新增共享 C 传输边界及 Swift 接收循环:管道只接收随机临时服务地址并监测父进程存活,身份消息改走 Mach;每条消息核对内核令牌的实际父 PID、固定 Developer ID 要求、完整资源签名及原代码摘要,并固定首个成功令牌。通道握手只发协议标记和私有回复端口,不生成转移密钥;收到经过认证的源消息后才进入已有事务协议。原生普通启动与共享运行时的业务所有权不变。
真实子进程演练覆盖 64 KiB 消息、伪造 payload PID 的转发子进程、同 PID exec 后的旧令牌拒绝、错误版本/复杂描述符/超限帧、队列满与失效目标的端口引用清理,以及销毁端口后临时名称消失。测试发现并修复发送超时的 pseudo-receive 额外引用;接收端也保留确认关闭后的成功状态,避免父管道随即关闭被误报为失败。Swift 回归覆盖认证前不返回协议就绪或密钥、逐操作认证、父管道 EOF 和无换行的多余输入立即关闭。测试认证回调仅来自独立夹具,真实 App 无覆盖参数。临时 rendezvous 仍依赖公开但已弃用的 bootstrap_register,不安装 LaunchAgent;macOS 15 兼容验收保留。
源端 Node-API 模块尚未接入这条消息通道。后续必须由它创建并持有源接收端口,在自己的收件端验证来自确切受管子进程的内核令牌和代码身份,再持有该消息携带的回复权;先完成双向就绪,才接受原生接收请求并接协调器的封装、审阅及恢复。普通管道内容仍不能作为密钥接收者凭证,完整转移发行标记保持关闭,未迁移真实身份。协议与复现见原生消息认证。
本批次最终验证:workspace build、lint/公共边界、typecheck、Swift 格式和本 checkout 全仓测试通过(285 个文件、2291 项通过、3 项跳过);Swift 共 219 项,218 项通过、可选官方下载跳过,真实 Node 与实际包内云专项启用。原生 Release 重建、独立 ad hoc 签名以及最终 App 的未认证身份接收拒绝、单实例/Launch Services、插件/诊断和外部扩展重启演练通过。包体积 40.24 MiB(41204 KiB);C 通道在 -Wall -Wextra -Werror 下编译并完成真实进程演练,临时端口名称和文件清理完成。Mac 再次确认仍锁屏,布局、键盘焦点、输入法和 VoiceOver 仍待验收。未修改正式资料、转移真实密钥或发布应用,Goal 继续推进源端通道和审阅/恢复工程。
E 阶段源端认证通道与客户端(2026-10-23):Electron Node-API 模块现已链接同一 C 传输层,持有自己的临时 Mach 收件端口,并在解析回复或接受回复权之前核对确切受管子进程的内核审计令牌、固定 Developer ID 要求、完整资源签名和最初选定的代码摘要。首条令牌固定至会话结束,双向就绪后才允许完整事务帧;stdio 只传地址和父进程存活信号,不再向 JavaScript 暴露普通管道回复。握手、认证或帧错误会销毁临时端口并退役受管子进程。生产导出没有 PID、团队、任意环境或测试认证覆盖参数。
新增 TypeScript 源客户端只从固定启动器获取通道,检查准确回复形状、连续请求编号、来源/目标/云端绑定、接收请求有效期、单一在途操作和 64 次上限。启动等待 10 秒,每次回复等待 120 秒;取消、超时和不明回执只关闭临时会话,保留已有协调器与 Keychain 的持久恢复决策。真实子进程夹具覆盖两阶段握手、64 KiB 帧、伪造 stdout、就绪前后转发、同 PID exec、额外回复权、错误标记、认证丢失和临时名称清理;25 项 TypeScript 协议测试覆盖范围、序号、恢复、取消与边界。全仓检查发现参数属性不受 Electron 的 strip-only 开发加载器支持,改为显式字段后兼容检查通过。
源通道和客户端已具备工程实现,但尚未接到源宿主的协调器、审阅及恢复入口;真实 Developer ID 双宿主正向交接仍待具备凭据后的验收。完整身份转移发行标记和公开封装操作保持关闭,没有迁移真实密钥。下一步将客户端接入共享迁移协调器,以明确审阅和可恢复回执收束用户流程;插件与诊断的 UI 验收仍受锁屏影响。见源端通道合同。
本批次最终验证:workspace build、lint/公共边界、typecheck、Swift 格式和全仓测试通过(本 checkout 286 个文件、2316 项通过、3 项跳过);Swift 219 项中 218 项通过,可选官方下载跳过,真实 Node 与实际包内云专项启用。原生 Release 和 Electron arm64 验收包均重建并通过独立 ad hoc 签名验证。原生包 41204 KiB(40.24 MiB),Electron 包 508636 KiB(496.71 MiB),其中源端模块与许可证目录 128 KiB。最终 App 的未认证接收拒绝、单实例/Launch Services、插件/诊断、扩展三次重启,以及 Electron 原生模块 ABI、预检/普通启动、注入拒绝、后端 worker 和 ASAR 破坏副本演练均通过。测试使用隔离资料,源身份与已安装应用未修改。Mac 仍锁屏,未新增布局、输入法、VoiceOver、启动或内存性能验收;Goal 保持活动。
E 阶段源宿主协调与原生审阅(2026-10-23):私有 Electron 维护入口已连接共享资料协调器与认证接收客户端,支持声明式迁移、恢复和回退。源目录与云范围由源宿主确定;完整签名/发行合同预检先于原生系统审阅,取消为默认,操作还须勾选两个普通宿主和旧 CLI 已退出。可另存仅含公开元数据的私有报告,不覆盖已有文件。接收请求在同意后才生成;启动器重新检查已审阅的双端代码摘要。已知宿主检查只排除真实维护源进程和它拥有的接收子进程,不停止其他进程。共享协调器持有排他租约与持久阻塞后才封装源身份。
恢复绑定已有事务和接收预留,不重新生成转移密钥;审阅摘要同时覆盖 journal 和目标资料,并在取得排他租约后再次核对。原生结果提示在会话与租约关闭后显示持久结果。隔离测试覆盖取消不写入、审阅对象篡改、资料/身份变化拒绝、暂存或完成回执丢失,以及保留后续编辑的回退。源端声明式维护命令已接通,但普通 App 菜单/引导入口和真实 Developer ID 双宿主正向验收仍待完成,完整转移发行标记继续关闭,离线 CLI 仍拒绝加密身份。见源宿主审阅与恢复合同。
解锁后的实际走查(2026-10-23):在 macOS 26.6.2 上用最新 Release 的独立副本和临时 profile 验证了插件页布局/空态、发现与已安装切换、系统目录选择和本地声明式插件链接、重启后保留、启停、⌘F、中文粘贴搜索/首尾空白、无匹配恢复与列表选择;来源只读预览及取消、宿主组件开关提示与文件选择器取消、窄窗口列表与表单也已验证。损坏夹具在诊断中心显示错误与文件位置,搜索/级别/来源筛选及来源详情正常;暂停测试 sidecar 的真实超时会保留上次结果并标记过期,恢复 sidecar 和修复夹具后可重新检查回到零错误。行内启停和来源/插件操作增加对象名称供无障碍区分。
插件详情会稳定触发电脑控制服务自身崩溃,系统报告为 SkyComputerUseService 的 Array.remove(at:) 断言,App/sidecar 仍在;重启测试副本后可继续普通页面走查。这不是锁屏。详情/确认弹窗、安装计划变更、诊断处理跳转、组合输入和 VoiceOver 保留待验收;详见原生管理验收记录。
同次解锁回归发现此前文件型 Keychain 的自动读取仍可能在 SecItemCopyMatching 内等待认证,锁屏环境未暴露该问题。新增共享同步访问边界,保留并恢复交互策略,先读取条目引用并核对实际钥匙串锁状态,再请求数据;锁定时拒绝读取,显式操作不扩大已有交互策略。补充异常后的策略恢复和身份/迁移元数据读取的两秒上限,完整 Swift 回归中两个锁定用例分别约 33/38 毫秒。此验证只使用临时钥匙串,不操作真实账户。
当前自动化结果:本 checkout 288 个文件、2330 项 TypeScript 测试通过、3 项跳过;Swift 共 220 项,219 项通过、可选官方下载跳过,真实 Node 和包内云演练启用。最初解锁后的 Swift 失败已定位修复,不能以此前锁屏下的通过结果代替本轮。workspace build、lint/公共边界、typecheck 和 Swift 格式通过;本批次未迁移真实资料或身份、未替换已安装 App、未发布。
最终产物:原生 Release 和 Electron arm64 均重建并通过独立 ad hoc 签名验证,磁盘占用分别为 41208 KiB(40.24 MiB)和 508652 KiB(496.73 MiB)。最终原生包的插件/诊断、外部扩展三次重启、身份接收拒绝和单实例/Launch Services 演练通过;Electron 包的原生模块 ABI、认证通道、已知宿主排除、预检/维护命令拒绝/普通启动、注入拒绝、后端 worker 和 ASAR 破坏副本验证通过。UI 临时 profile 仅登记本地声明式夹具,运行和代理任务均为零。未重跑首帧、启动或完整内存基准;真实签名交接和上述未完成 UI 项仍保留。
插件/诊断解锁验收补充(2026-10-23):上述真实 UI 走查后补充行内控件的无障碍对象名称,并在重建 Release 副本的 AX 树中确认。workspace build、lint/公共边界、typecheck、Swift 格式及全仓 288 个文件/2330 项 TypeScript 测试通过(3 项跳过);Swift 共 220 项,219 项通过,官方下载可选项跳过,真实 Node 和包内云演练启用。最终原生包的插件/诊断和外部扩展三次重启验证通过,运行记录为零,源文件保留;独立 ad hoc 签名验证通过,包体积 41248 KiB(40.28 MiB)。测试副本正常退出,临时插件清单已恢复有效,实际详情弹窗和输入法/VoiceOver 验收仍按上文保留。
E 阶段普通迁移入口与受保护启动(2026-10-23):macOS Electron 应用菜单新增原生资料迁移入口;进入前和系统确认后均检查活动命令/Agent 任务,并在普通宿主关闭后重启到独立维护模式。向导通过系统选择器选择原生应用及目标/事务目录,完整签名预检先于目标选择和安全存储,随后仍须单独完整审阅。普通启动先读取两个源目录的持久保护记录;已有事务直接进入恢复/回退界面并固定事务,冲突或不可读时保持关闭。启动检查后的竞争仍由运行时排他租约拒绝。当前向导仅覆盖含设备身份的资料,纯数据迁移仍使用离线 CLI;真实 Developer ID 配对验收和完整迁移发行标记仍未启用。
本批次补充入口、取消、活动工作竞争、事务固定、拒绝预检及临时 Chromium profile 清理测试。应用选择器接受文件和目录,由后续预检核对真实应用包及签名;系统选中 .app 后 AX 状态可能短暂报告按钮禁用,最终以画面和实际操作确认。Electron 构建曾遇到官方 Node 下载断连,现对固定摘要归档允许最多三次精确偏移续传,共享十分钟期限;响应范围、长度和最终完整 SHA-256 均须通过,失败阶段不提升为可用运行时。无摘要清单不续传,也不采用第三方镜像。
本 checkout 最终全仓 290 个文件、2354 项测试通过、3 项跳过,修正系统选择器后完整重跑也通过。早先同批次多次运行出现分散的超时及 worker 启动失败,最终连续三次全仓通过,但尚未据此确定早先抖动的根因。workspace build、lint/公共边界、typecheck 和 Swift 格式通过;Swift 本批次共 220 项,219 项通过、可选官方下载跳过,真实 Node 和包内云专项启用。最终原生包内插件/诊断及外部扩展三次重启验证通过,项目仍 untrusted、运行记录为零。
真实迁移入口走查使用最新 Electron Release 的独立 ad hoc 副本和临时资料。菜单 Escape 取消保留工作台;明确进入后普通宿主退出并重启为系统向导。为两个测试根目录设置 pending 保护后,普通启动直接显示固定事务及恢复/回退入口,没有新增 runtime-ready 事件;选择本地开发签名原生包后显示明确拒绝,没有目标目录选择或迁移。退出后事务目录为空,保护记录仍在,随后只在排他恢复租约下清理本次 fixture 的保护;测试进程均已退出,源资料只有运行时设置 schema,没有设备身份、项目运行或代理任务。隔离副本首次改名误改 CFBundleName 导致 Helper 查找失败,修正验收夹具后正常启动,原始产物未受影响。详见普通迁移入口验收。
最终 Electron arm64 产物独立 ad hoc 签名校验通过。实际包的只读身份预览、预检/不合格维护请求拒绝、普通启动与正常关闭、Node/preload/inspector 注入拒绝,以及固定 Node 24.22.1 后端、无安装分离 worker 和 ASAR 篡改副本拒绝验证全部通过。未转移真实密钥、修改正式资料、替换安装或发布应用;生产签名配对和原生详情/输入法/VoiceOver 等未完成系统验收仍独立保留。
F 阶段性能复测与支持状态复核(2026-10-23):对照脚本改用独立 ad hoc 副本和逐次空白 HOME/配置/运行时/浏览器资料,保留原始产物签名和旧报告。内存读取逐进程 physical footprint,并通过可选只读责任 PID 查询纳入属于本次原生宿主的 WebContent、Networking 和 GPU 服务;辅助程序不进入产品。采样前后检查进程身份与集合,任何缺失、警告或归属不明都标记未完成,清理也只操作身份仍匹配的本次进程。
最终轮交替启动各三次,六次采样均完整、无强制结束和残留进程,临时资料及副本已清理。原生侧栏就绪中位数 259 ms、Electron 窗口显示 638 ms,完整网页分别 1378/1202 ms,physical footprint 合计中位数 267.62/413.57 MiB。回调阶段不同,空资料小样本不能替代首帧、长期负载或稳定优势;两轮原始报告及复现方式见性能记录。
桥接清单与 README 修正了个人云、原生外部扩展和迁移入口尚未实现的过时描述;Codex 活动状态/订阅及 Hook 安装/移除仍缺少原生适配,作为具体剩余工程继续保留。14:24 的插件详情重试再次触发电脑控制服务的同一数组断言,App/sidecar 保持运行;已记录并结束测试副本,没有将它算作详情、输入法或 VoiceOver 验收通过。Goal 仍活动,后续继续上述工程缺口与系统验收。
本批次验证:lint/公共边界、typecheck、workspace build、Swift 格式及全仓 291 个文件通过;TypeScript 2357 项通过、3 项跳过。Swift 共 220 项,219 项通过、官方下载可选项跳过,真实 Node 与包内云专项启用。原生 Release 重建、独立 ad hoc 签名及最终包的声明式插件/诊断、外部扩展三次重启验证通过,项目仍 untrusted、运行记录为零、源文件保留。最后重打包的 CDHash 为 3329f5d4c0960c4697e01a250611b965af1336e9;上文基准严格对应报告中此前的被测产物摘要,未将其当作每次重打包的重复实测。全程未操作真实资料、迁移身份或发布应用。
Codex 活动适配的后续实现需处理双宿主归属:现有共享 monitor 将任一 Craft Hub marker 当作已安装,安装/移除也按通用 marker 处理,而回调端点属于各自资料目录。不能仅接上原生桥接就宣称已接收旧 Electron Hook;需要明确检测与审阅接管策略,以及隔离 Hook 文件、订阅释放、关闭清理和两宿主并存的测试。
B/D 阶段 Codex 活动适配(2026-10-23):上述缺口已补齐。四个活动桥接方法、原生设置与网页订阅共用共享 monitor;Hook 按资料桥脚本的准确命令归属,启停经过只读审阅、系统确认和文件状态复核。新标记避免被旧 Electron 的通用移除逻辑删除,其他宿主和用户配置保留;协作宿主使用内核文件锁串行写入。网页 cookie 仅可读取和订阅,修改必须经 Swift 与独立 bearer,取消或连接替换不能提交旧审阅。完整合同和边界见原生活动指南。
真实 Release 副本在隔离资料中通过启用/停用审阅 Escape、回车不提交、明确启停、开始/停止事件的会话数 1/0、重启后识别配置,以及其他宿主四个 Hook 和自定义元数据保留。修复了 NSAlert.window 初始化覆盖 Escape 的问题。启动工具覆盖 HOME 的问题由仅用于夹具的固定环境启动器隔离;最初指向真实配置的审阅已取消,没有写入。两次正常退出确认测试 App、sidecar 和接收端点清理;没有运行项目命令或真实 Codex 会话。
本批次 workspace build、lint/公共边界、typecheck、Swift 格式、293 个文件的 TypeScript 测试通过(2368 项通过、3 项跳过)。最终 Swift 共 225 项,224 项通过、官方网络下载可选项跳过,真实 Node 和包内云专项启用。与 UI 启动并行的一次 Swift 运行出现六项探测夹具超时;随后八项相关测试单独通过,结束 UI 后完整回归通过,尚未确定最初时序抖动的根因,未放宽产品期限。原生 Release 构建、独立 ad hoc 签名和最终包内插件/诊断/Codex 活动验证通过;外部扩展三次重启验证也通过。新 Electron 包尚未重新打包,现有 Electron 适配由共享代码构建和合同测试覆盖。
Goal 继续保持活动。插件详情弹层仍受电脑控制服务断言影响,输入法、VoiceOver、最低系统、托管 CI、真实 Developer ID 双宿主交接及两周日用仍按原验收清单保留;本轮未替换安装、迁移真实资料或发布应用。
E 阶段普通资料系统向导(2026-10-23):源宿主菜单新增不含设备身份的资料复制、恢复和回退入口,复用共享运行时的预检、排他租约、归档及回执。源路径由宿主固定,用户只选择候选目录或事务;审阅可另存私有报告,确认还须单独声明日用宿主和旧 CLI 已退出。此路径不访问 vault 或加载身份启动器;带身份文件、身份事务和持久身份保护继续走原有认证流程。恢复审阅覆盖 journal、候选、旧资料和暂存目录及其存在性,取得租约后重新比对;写入后异常保留可定位的事务,即使自动恢复已完成也不以不明回执宣称成功。
真实 Electron Release 副本通过菜单、普通资料入口、系统目录选择、完整审阅和 0600 报告保存。其他已安装宿主仍在运行时,即使测试中确认,复制也在创建事务前被拒绝;目标内容未变,项目仍 untrusted,没有运行或 Agent 任务。工具在观察重启间隙时额外拉起了一份普通测试进程,已关闭它并重新连接实际维护进程,未据此判定产品重启失败。测试副本及临时接收器均已退出,真实资料和已安装宿主未改动。成功复制、重复调用、恢复与保留后续编辑的回退由实际运行时及包内演练通过;完整 GUI 成功路径仍待两个日用宿主退出后补验。
本批次 workspace build、lint/公共边界、typecheck、Swift 格式通过;295 个文件的 TypeScript 测试共 2388 项通过、3 项跳过。Swift 共 225 项,224 项通过、官方网络下载可选项跳过,真实 Node 和新包内云专项启用。原生 Release 与 Electron arm64 均重建并完成 ad hoc 签名;最终包内迁移、插件/诊断/Codex 活动、外部扩展三次重启演练通过。未发布、迁移真实身份或切换默认宿主。公共 URL 默认宿主交接仍有工程缺口,Goal 保持活动,详见普通资料向导。
E 阶段公开链接交接(2026-10-23):原生设置新增默认应用的只读状态,以及独立发布能力启用后的审阅、切换和回退。确认后取得账户级排他租约,重新核对默认应用、包元数据和恢复记录;先落盘私有回退信息,再调用 NSWorkspace,并以实际系统查询确认结果。重复操作、取消、应用更新、其他应用接管和系统拒绝均有覆盖;失败保留记录;回退前若检测到第三个应用已接管,则拒绝覆盖。macOS Electron 启动不再主动调用默认协议设置器,其他平台保持原逻辑。
普通构建和现有发布流水线继续不声明公开 scheme;CRAFT_HUB_NATIVE_PUBLIC_LINKS=true 必须与已验证的签名发布配置配套,不能通过启动环境或偏好启用。真实 Launch Services 演练使用构建目录中的两个独立 ad hoc 测试 App 和随机私有 scheme,完成切换、重读及回退,前后确认公开 craft-hub: 仍归原 Electron。初始临时目录夹具被系统标记为 launch-disabled,移到构建目录后通过,未放宽生产验证。发布开关、真实公共链接投递及用户迁移验收仍分开记录,见默认应用交接。
本批次 295 个 TypeScript 文件共 2389 项通过、3 项跳过;Swift 共 234 项,233 项通过、官方网络下载可选项跳过,真实 Node、包内云和私有 scheme 系统专项启用。workspace build、lint/公共边界、typecheck、Swift 格式均通过。原生和配套 Electron 候选包已最终构建并通过独立签名检查;最终包内插件、诊断、Codex 活动以及资料迁移/回退复验通过,项目保持 untrusted 且无命令执行。新增设置页的真实界面走查因验收工具再次报告锁屏而待补,已请求手动解锁,未把单元测试记为界面验收。
E/F 阶段真实预检与独立交接(2026-10-23):对照 Chromium 的文件常量、SQLite 存储和 macOS 原子写入实现,补充 DIPS、SharedStorage、WebStorage、DevToolsActivePort、浏览器性能报告数据库及两个既有网络状态文件的精确临时命名规则。仅把这些浏览器状态留在源端,不复制到 WebKit,也不删除或读取其内容。近似名称、业务资料、备份和未完成的运行时 JSON 写入仍阻塞;运行时及包内迁移演练验证源保留、未信任状态和零执行。
真实资料只执行新的只读预检,本次观察到阻塞由 38 项降到 9 项(8 项未分类资料/备份,1 项未完成运行)。私有报告为忽略目录中的 migration-preflight-20261023-browser-policy.json;未迁移、修复或删除真实数据。新增独立验收清单,将 A–F 能力、证据入口、隔离启动和系统/发布待验收项集中列出;性能记录明确限定于实际被测摘要,不能冒充后续构建的结果。
本批次 295 个 TypeScript 文件共 2391 项通过、3 项跳过;Swift 共 234 项,233 项通过、官方网络下载可选项跳过,真实 Node、包内云和私有 scheme 系统专项启用。workspace build、lint/公共边界、typecheck、Swift 格式通过;原生与配套 Electron arm64 候选包已重建并通过独立签名检查;摘要及日志保存在忽略目录 apps/macos/build/acceptance-20261023-browser-policy/。最新包内迁移预检、复制、恢复、回退及浏览器状态不转移验证通过。系统仍锁屏,前一轮解锁请求仍待回应;没有把模型或包内 API 测试当作新增界面验收,Goal 保持活动。
D/E/F 阶段候选复验(2026-10-23):解锁后继续使用最新候选的独立副本,确认插件更新无更新状态与 Escape、系统目录链接与重启保留、诊断错误及修复后的清除;公开链接设置只读显示实际默认 App、发布能力限制与刷新按钮,没有接管操作。插件详情及诊断处理入口仍使电脑控制服务自身崩溃,16:56、16:59 的报告均为 SkyComputerUseService 的 SIGTRAP / Array.remove(at:);App 和 sidecar 保持存活,详情与跳转不计作通过。已请求人工补验详情和 Escape,没有继续反复重试。
同一产物的配置管理、宿主扩展、单实例、身份接收入口、原生身份启动器及 Sparkle 工具复验通过,日志加入既有候选记录。配置项首次因隔离环境找不到真实 Codex CLI 失败;指定 CRAFT_HUB_TEST_CODEX 后通过,并在独立验收命令中补齐此前遗漏的前提。没有放宽产品边界或用替身跳过真实 app-server 验证。Goal 的系统与分发待验收项继续按独立清单保留。
F 阶段当前产物性能复验(2026-10-23):对最终原生与 Electron 包交替启动各三次,独立身份、空资料与云关闭,未清理系统缓存。六次 footprint 采样均完整、进程归属稳定,退出无强制兜底或残留。外壳回调中位数原生 213 ms / Electron 567 ms,网页就绪 1190 / 1064 ms,逐进程 physical footprint 合计中位数 264.58 / 379.24 MiB。外壳不是同一绘制阶段,内存不是全系统去重 RAM,不据此认定交互目标达成。当前摘要与原始数据见性能记录。
随后用 Instruments App Launch 模板分别采集 10 秒。原生导出 108.96 ms 的 Initial Frame Rendering 区间;Electron 生命周期存在不可用 duration,缺少有限的对应帧区间。两份 trace 均报告采样周期绑定警告、record 返回 54,CPU 样本不用于结论。采集和导出产物、失败/警告及隔离进程清理写入独立报告并关联候选验收,首帧同口径、面板与拖动帧时间仍保留待验收;未修改正式安装、资料或发布状态。
A/D 阶段架构与无 Node 实测(2026-10-23):原生构建器显式指定与 Node 一致的 Swift 架构并校验最终 Mach-O,App Intents 只读取当前 Release 对应架构常量。x64 Node 构建下发现 Xcode 默认仍可能编译 arm64;修复后两种 App 及其 keytar/PTY 均为正确架构。独立输出保留旧性能被测产物,新包摘要在 acceptance-20261023-architecture/artifacts-final.json,不沿用旧性能数值。
x64 真实下载发现首次 Node 探测超过 3 秒,移到最终目录后再次出现首次启动开销。私有安装现先把校验后的文件放入未选择的版本目录,在最终路径以 30 秒上限完成版本/架构及包内 sidecar 预检,随后才激活;普通搜索上限不变。慢启动与最终路径回归通过。Rosetta 真实空资料引导完成取消、官方下载、自动启动、诊断、正常退出和重启恢复;设置下载不打断原有运行时。最终副本与原产物的 __TEXT 节及运行时匹配,未修改日用安装、PATH 或资料。
本批次工作区 lint/公共边界、typecheck、build、Swift 格式通过;TypeScript 296 个文件、2393 项通过、3 项跳过;arm64 Swift 234 项通过、官方网络下载 1 项跳过,真实 Node、包内云及私有 scheme 专项启用。两种原生 Release 与签名检查、两端最终包的插件/诊断、单实例和身份接收拒绝验证通过。x64 Swift 测试因 Xcode 的 arm64 加载器无法打开 x64 测试包而未执行;最低系统、真实 Intel、详情人工复验和正式分发仍按独立清单保留。
C/F 阶段当前候选交互复验(2026-10-23):最新 arm64 独立副本通过命令面板搜索焦点、Escape/重开、回车进入诊断、插件/诊断 ⌘F 与侧栏上下键切换;快速记录本地草稿跨收起和正常退出重启恢复。单显示器系统菜单进入/退出全屏并恢复窗口布局已检查;键盘全屏组合键未确认生效,未把中文粘贴当作组合输入或 AX 标签当作 VoiceOver。未连接账户、保存远端待办或执行项目命令,测试宿主与 sidecar 正常退出。
同一候选的面板和页面固定事件中位数约为 19 / 21 / 27 ms,计时从应用处理入口到 displayIfNeeded / onAppear,不证明硬件按键到屏幕首帧。与 Electron 重新交替启动各三次,全部 footprint 采样完整、归属稳定、退出无强制兜底或残留。外壳回调中位数 235 / 605 ms,网页就绪 1231 / 1112 ms,逐进程 footprint 合计 267.15 / 385.04 MiB;统计口径与局限见性能记录。本批次仅补验及同步文档,未重建或更改产品代码;原始记录在 interaction-20261023-candidate/ 和 performance-20261023-architecture/,均绑定当前产物。
A/F 阶段当前候选 Node 矩阵复验(2026-10-23):在未重建的架构修复 arm64 App 上补验 Node 22.23.1 与 26.0.0。每个版本的运行时/宿主 147 个文件、1155 项通过、3 项跳过;Swift 各 234 项通过、1 项官方网络下载跳过,真实 Node、包内云和私有 scheme 系统专项启用。两版本的包内插件/诊断、宿主扩展、配置、资料迁移/回退和单实例均通过。Node 26 缓存归档重新对照官方 SHA-256 清单,并验证可执行文件与归档成员一致后使用;未更改用户 Node 或 PATH。精确版本、产物摘要和日志见 compatibility-20261023-final/,Node 24.18.0 的全仓及构建证据沿用架构修复批次。
原生 CI 从单一运行时扩为 22/24/26:构建工具保持仓库固定版本,构建后切换运行时,以显式 Node 执行验证器,并补入迁移与单实例检查。配置检查不等于托管执行成功;详情人工核对、完整输入法/辅助功能、最低系统及正式分发条件继续在独立清单中保留。
身份接收拒绝、原生身份启动器进程所有权/消息认证夹具也在 Node 22/26 下通过。更新验证器补齐候选路径参数,避免默认目录中的旧包混入证据;指定当前 arm64 包后,两版本均通过 Sparkle 框架加载、签名归档/feed 与篡改拒绝。最终 lint/公共边界、typecheck 和差异检查通过,App 签名及三个核心文件摘要与架构批次一致。本轮没有产品代码改动,未重复构建或把先前全仓结果记成本轮重跑。
B/C/F 阶段设置与系统入口补验(2026-10-23):当前 arm64 候选的前台快速记录快捷键、原生设置 ⌘, 与关闭设置 ⌘W 通过。仅修改隔离资料的语言/主题后,原生设置、侧栏、应用菜单与网页回退均同步为英文/浅色;正常退出重启后仍保留,随后通过原生控件恢复中文/跟随系统。两个会话的宿主/sidecar 正常退出,27 个 __TEXT 节和包内运行时与原候选匹配。证据在 system-entry-20261023-candidate/report.json;没有产品代码改动,自动化回归沿用架构和 Node 矩阵批次。
Dock 绑定超时,读取无主窗 App 会重新打开主窗;向访达投递全局快捷键后没有候选唤起事件,不能确定工具投递与系统行为的边界。完整键盘焦点、菜单栏/Dock 及后台快捷键继续未验收,没有停止日用实例或改系统键盘偏好来绕过条件。详情人工核对及其他外部验收门槛不变。
F 阶段 Electron 交互计时接线(2026-10-23):显式性能会话启用固定字段的本地采样;命令面板从打开状态变更计至搜索框确实获得焦点,页面从路由守卫计至目标组件 mounted/updated 与 Vue flush。取消单独记录,队列有界,宿主过滤字段和数值后写出;不新增 IPC 能力,不记录路由、搜索文本或账户内容。正常浏览器未启用时不读时钟。模型/真实组件测试覆盖首次与重开焦点、导航完成和取消、重复完成与队列上限。具体口径见性能记录,还没有新增真实 Electron 交互样本,不能宣布对比完成。
维护者要求再次代查插件详情后,18:49 的电脑控制服务仍在 Array.remove(at:) 崩溃,截图和重连失败,App 与 sidecar 存活。安装版及验收副本的组件扫描均包含 arm64;先前 x64/Rosetta 兼容测试是 Intel 支持结束提示的可能来源,历史通知未精确归因。自动化继续执行,详情与 Escape 仍待验收,记录见 interaction-trace-20261023-final/。
本批次 lint/公共边界、typecheck、build、Swift 格式检查通过;全仓 298 个文件、2400 项通过、3 项跳过。首轮 Git 集成有一项 5 秒超时,单项复测及两 worker 全仓复测通过,保留两轮日志。Swift 共 235 项,其中 234 项通过、官方网络下载 1 项跳过,真实 Node、包内云和私有 scheme 专项启用。两端新的 arm64 App 独立输出并通过完整签名和组件架构检查;原生包内管理与单实例演练通过。原生 CDHash 为 31d6e9dabec076b141230b53ce3e33aadb235330,Electron 为 49db29a2f775b281ad19460fbd0523055d0c5e35。新包不沿用旧包的性能结果,未替换日用安装或完成 GUI 验收。
F 阶段双端实际交互补验(2026-10-23):沿用上一批新候选,没有重建或改产品代码。独立空资料副本的主程序 __TEXT 节与原包匹配。Electron 七次面板、四次页面事件已采到,全部原始结果保留;早期工具对后台弹层读取滞后,显式激活后确认文本输入与 Escape,一次外部窗口变化后重新观察再继续。原生三次面板输入/关闭与侧栏路径复验通过;工具页沿用网页回退,没有原生出现事件,其余三个页面正常配对。两端终点不同,内部回调中位数不等于同口径首帧,详见性能记录。
新副本通过正常退出,宿主、已记录辅助进程及可归属本次的 WebKit 服务均无残留,没有强制清理;已安装应用和真实资料未改。记录为 interaction-samples-20261023/report.json。自动化结果仍准确引用上一批匹配产物的日志,不将这次 UI 走查写作再次运行全仓测试。详情弹窗、完整辅助功能和系统/发布门槛未因此完成。
B/C/F 阶段自定义快捷键补齐(2026-10-23):原生菜单读取运行时 workbench.shortcuts,同步面板绑定及已配置项目能力。只读发现后才生成能力菜单;点击仅进入审阅页,断线、目录失效和项目移除清除入口,旧响应无法恢复。跨端夹具与 Swift 测试覆盖键值、重复/无效绑定、缓存及晚到响应。隔离 Release 副本实际验证初始绑定、运行中热更新、旧绑定解除、正常重启与清空后恢复默认;通过当前包 API 复核仍为 untrusted、零运行记录。
新候选为 shortcuts-20261023-candidate/native/Craft Hub Prototype.app,包内 9 个 Mach-O 均包含 arm64,UI 副本的 27 个主程序代码节及 App Intents 元数据与原包匹配。全仓 TypeScript 2401 项通过、3 项跳过;Swift 239 项通过、1 项官方网络下载跳过。lint/公共边界、typecheck、Swift 格式、两级构建及包内插件/诊断管理、单实例验证通过。两次 GUI 会话正常退出,无测试进程残留。具体入口见独立验收清单;置顶结果排序、详情弹窗、完整辅助功能及系统/发布门槛继续保留,未将旧包性能或 App Intents 系统调用结果归于新包。
B/C/F 阶段置顶能力排序与通知(2026-10-23):原生面板读取共享运行时的置顶快照,在搜索相关度相同的结果中优先显示置顶项,并提供可见图标和无障碍标签。API 写入成功后发布既有能力变更事件,网页和原生端复用现有订阅;读取/失败写入不广播,信任和执行边界保持。模型覆盖失效刷新、查询/选中身份保留、读取失败和旧连接晚到响应,当前包管理脚本增加置顶读写、事件及恢复验证。
隔离 Release 实测默认置顶优先、精确与前缀匹配优先、键盘进入审阅、网页取消/重新置顶、刷新及退出重启。两个 GUI 会话正常退出;只读 API 再确认项目 untrusted、零运行记录。新候选为 palette-pins-20261023-candidate/native/Craft Hub Prototype.app,9 个 Mach-O 均含 arm64,UI 副本代码节和元数据匹配。TypeScript 2402 项通过、3 项跳过,Swift 243 项通过、1 项官方网络下载跳过;一次既有 Node 清理夹具失败后定向和完整复验通过,保留日志,未放宽测试。lint/公共边界、typecheck、Swift 格式、构建、包内管理和单实例均通过。实测范围说明见独立验收清单。未重新采样性能或打包 Electron;不将旧包证据记作新包验证,系统/发布及剩余 UI 门槛仍按原范围验收。
D 阶段工具页面原生迁移(2026-10-25):/tools 接入 SwiftUI 收藏列表和编辑器,支持搜索、分组、新增、编辑、顺序调整、移除及固定应用打开方式。软件中心继续负责目录、检测与安装,两页共享收藏;官网下载与源码入口采用带提示的图标按钮。工具页读取缓存目录,不触发软件检测;编辑以原 revision 更新工具数组,保留其他首页偏好和未确认草稿。具体合同与本机走查范围见原生常用工具。
D 阶段网站导航原生迁移(2026-10-25):复用启用插件的声明式导航 API,以原生列表展示来源分组、链接说明与图标,支持关键词搜索、⌘F、刷新和插件管理入口。/navigation 与 /tools 在原生子页之间切换,并在重启后恢复。插件或语言变化重读快照;刷新失败禁用旧链接;请求代次隔离旧连接与过期语言结果。网站打开保持用户主动点击和无凭据 HTTPS 边界。详见原生工具与导航。
当前实现(2026-10-25)
已完成 SwiftUI 侧栏、工具栏、菜单和 WKWebView 宿主,共用 TypeScript 宿主后端。原生开发环境页可检查工具状态、版本、路径与当前 Node,并管理环境方案、前置检查和配置源连接;原生软件中心支持目录搜索、检测筛选、打开应用、收藏添加/分组查看/移除、安装计划审阅、安装记录和仓库来源管理。配置差异、应用/恢复、仓库操作审阅及 Skills 审计已接入原生页;配置源登记、归属选择与加密备份目标也已有原生审阅;常用工具列表、自定义编辑与网站导航已原生化,项目级配置块仍有网页回退,工具栏可返回原生列表。
原生请求使用父进程管道下发的独立、仅存内存的 API token;网页继续使用单次引导和会话 cookie。启动有超时与握手大小限制,旧进程回调隔离,崩溃后最多自动恢复两次。./script/build_and_run.sh --verify 和 Codex Run 按钮共用构建启动流程。
这些实现尚不代表 M0 全部决策或 M1 日用验收完成。当前原型最低 macOS 15、独立应用身份和数据目录;正式迁移、签名、公证与默认宿主切换仍待完成。命令面板和快速记录已接入独立原生面板;公共事件流已接入原生观察状态与打开的命令面板。
原生环境/软件页前一轮验证:pnpm lint、pnpm typecheck、pnpm test --run(6019 项通过,9 项跳过)、pnpm build 和 Swift 测试(13 项)通过。Release .app 已实测环境检查、软件搜索与未检测到筛选、打开已安装应用、进入完整管理页与返回列表、辅助进程崩溃后恢复到原生页面。正常退出和强制退出后均确认原辅助进程退出;这只是本轮本机验证,尚未完成持续日用和性能验收。
本轮新增:⌘K 原生命令面板可筛选页面、项目、命令和技能,支持插件页面及键盘选择;选中命令仅进入现有详情页。⇧⌘Space 原生快速记录复用运行时的日期解析、AI 理解、To Do 连接与幂等创建。草稿和请求 ID 在本机原子持久化,损坏文件须先备份再恢复,主窗口关闭与辅助进程重连不销毁草稿。系统输入法组词期间的方向键和回车交给输入法处理。
原生面板验证进度:pnpm lint、pnpm typecheck、pnpm build 和 Release .app 构建通过;Swift 测试 25 项通过,全量 TypeScript 测试 6026 项通过、9 项跳过。已在真实 App 验证 ⌘K 搜索、方向键/回车跳转、⇧⌘Space 打开并直接输入、中文日期/重要标记解析、手工标题/备注在关闭重开后保留,以及启用自带 To Do 插件并重启运行时后保留完整草稿。
实测修复:相同输入在失焦时重复提交不再重置已核对的草稿;首次打开输入框延后到窗口建立后聚焦;主场景改为固定值 WindowGroup,防止关闭主窗口退出进程;同一运行时内复用临时网页会话,避免重开窗口出现访问拒绝。已在真实 App 确认关闭主窗口后进程仍在,重新打开的网页正常加载。插件管理只允许切换随 App 提供的可选插件,不开放任意模块加载;重启会拒绝中断正在运行的命令、Agent 任务和快速记录保存。
独占验收补充:用户授权 To Do 新增后,用原生面板的 ⌘Return 创建一条无截止日期、无提醒、非重要的“Craft Hub 原生验收”,保存回执出现且输入清空;经命令面板进入 To Do 页面,在“任务”列表筛选回读到唯一一条记录。测试待办保留,未完成或删除。随后使用另一份仅存本机的草稿,分别强制终止辅助进程、强制退出整个 App;重新连接或启动后,原文、标题、列表、日期、重要/提醒标记和手工备注全部保留,旧辅助进程已退出。恢复验收用本地草稿已清空。
通过原生目录选择器添加 examples/sample-project 后,⌘K 搜索 Sample:hello 并回车,只打开命令审阅页,显示实际命令与工作目录,保留“检查信任并运行”入口且无执行输出;项目仍未信任。主窗口关闭后,用户在其他 App 中实际按 ⇧⌘Space,确认快速记录弹出并能直接输入;验收工具随后确认该面板,再按 ⌘K 搜索项目命令,成功重开主窗口并定位到 hello 审阅页,网页会话有效。上述检查不代表下方持续日用或性能验收完成。
目标
让 macOS 原生客户端成为维护者日常使用的主力宿主。打开 Craft Hub、找到项目、记下一件事、启动工具,这几件最常做的事要和系统自带应用一样顺手;运行时、项目信任与执行边界保持不变。
切换完成同时满足以下三条:
- 维护者连续两周只用原生版作为日常宿主,没有因为缺少功能或体验问题退回 Electron。
- 下文的交互验收全部通过,未通过项有书面豁免理由。
- macOS 上默认安装和打开的是原生版,Electron 版只作备用。
交互验收
速度目标在维护者的 Apple 芯片 Mac 上测量 release 构建。下表数值是提议值;M0 先测出 Electron 版基线,M1 测出原生版首个数据后再修订。
| 场景 | 目标 | 测量方式 |
|---|---|---|
| 冷启动到窗口可交互 | ≤ 1 s 出现可点击的原生侧栏,包含查找 Node 的时间;运行时未就绪时显示原生占位,不出现空白窗口 | os_signpost 加 Instruments |
| 应用已运行时按 ⌘K | ≤ 100 ms 出现命令面板首帧 | XCTest 性能测试 |
| 应用在后台时用全局快捷键打开快速记录 | ≤ 150 ms 出现面板,光标已在输入框 | signpost 加手动复核 |
| 在命令面板里输入 | 每次按键在同一帧内更新本地结果;远端结果不阻塞输入 | Instruments 帧时间 |
| 侧栏切换页面 | ≤ 100 ms 出现目标页结构,数据随后填充 | signpost |
| 拖动改变窗口大小 | 内容不滞后、不露白边 | 录屏逐帧检查 |
系统行为一致
系统入口
可靠性与安全
准备工作(M0)
开始写 Swift 之前先完成这些。M0 期间 Electron 版照常发布。
里程碑
| 里程碑 | 对应 ADR 阶段 | 完成标志 | 目标日期 |
|---|---|---|---|
| M0 准备 | 阶段 0 | 上一节全部勾选,Electron 跑在共享宿主后端上 | 待定 |
| M1 原生外壳 | 阶段 1 | 原生侧栏、工具栏和菜单加 WKWebView 内容区,维护者日用一周;首批速度数据入表 | 待定 |
| M2 高频入口 | 阶段 2 | 命令面板、快速记录、今日重点、项目列表和菜单栏入口原生化;达成“切换完成” | 待定 |
| M3 对齐与分发 | 阶段 3 | 签名、公证、自动更新、密钥迁移完成;停止发布 macOS 的 Electron 版 | 待定 |
原生更新已接入 Sparkle 2,包含独立菜单与设置、签名和公证打包、Ed25519 更新包与 feed 校验,以及独立 Alpha 发布工作流。发布凭据已配置,公网 Alpha 6 → Alpha 7 更新、运行命令时取消重启、稍后提醒、跳过版本和应用范围的检查阶段离线恢复已验收;见验收记录。最低系统、持续日用及完整迁移等验收仍未完成,M3 尚未完成;见原生发布指南。
退出条件: M1 结束时,以下任一项无法在一个迭代内解决,就暂停原生路线,回到“Electron 加 CSS”的改进方向,并在 ADR 0012 记录原因:
- 冷启动明显慢于 Electron 基线。
- 运行时辅助进程无法稳定退出,或在支持的 Node 版本上表现不一致。
- 原生外壳和网页内容之间的接缝严重影响日用。
不在本目标内
- Windows、Linux 的原生化;这两个平台继续用 Electron。
- 用 Swift 重写运行时。
- 新业务功能。原生版先追平现有功能再扩展。
- 让快捷指令、通知或菜单栏直接执行项目命令或授予信任。