docs/backend-migration/notes/2026-05-07-webui-decouple-doc-review.md
docs/backend-migration/plans/2026-05-07-webui-decouple-electron-design.mddocs/backend-migration/plans/2026-05-07-webui-decouple-team-playbook.mddocs/backend-migration/plans/2026-05-07-m1-monorepo-skeleton.mddocs/backend-migration/plans/2026-05-07-m2-aionrs-cleanup-requirements.mddocs/backend-migration/plans/2026-05-07-m3-web-host-skeleton-requirements.mddocs/backend-migration/plans/2026-05-07-m4-backend-launcher-migration-requirements.mddocs/backend-migration/plans/2026-05-07-m5-static-server-auth-migration-requirements.mddocs/backend-migration/plans/2026-05-07-m6-three-paths-cutover-requirements.mddocs/backend-migration/plans/2026-05-07-m7-prepare-backend-ci-requirements.mddocs/backend-migration/plans/2026-05-07-m8-web-cli-tarball-requirements.mddocs/backend-migration/plans/2026-05-07-m9-install-web-script-requirements.md当前文档组的总体方向是清楚的,分层目标、三条启动路径、里程碑拆分也基本合理。
但存在一批会直接影响执行的关键问题,主要集中在四类:
如果不先修正这些点,后续最容易出现的情况不是“做慢一点”,而是:
install-web.sh 的执行方式与脚本语言冲突现状
curl ... | shcurl ... | sh问题
curl ... | sh 会直接用 /bin/sh 解释脚本,不会走脚本里的 shebang。
如果脚本最终用了 Bash 语法,用户按文档执行会直接失败。
涉及位置
webui-decouple-electron-design.md 第 213、215 行2026-05-07-m9-install-web-script-requirements.md 第 28、43、50 行建议
必须二选一,不要留给 plan-writer 自行决定:
sh 脚本| bash当前更稳妥的做法是直接在 M9 文档里把“脚本语言”和“用户安装命令”一起锁死。
webuiChangePassword 的接口契约没有提前定义现状
webuiChangePassword 保留薄接口,底层改调 web-host authstartWebHost() 和 resetPassword()changePassword() 级别的对外入口问题
这意味着“改密码”这个跨壳能力直到 M6 才会第一次被真正定义。 到那一步如果发现接口不够用,只能临时破坏 M3 的契约冻结原则。
涉及位置
webui-decouple-electron-design.md 第 371-372 行2026-05-07-m3-web-host-skeleton-requirements.md 第 190-191 行2026-05-07-m5-static-server-auth-migration-requirements.md 第 27 行2026-05-07-m6-three-paths-cutover-requirements.md 第 42-43 行建议
在 M3 或 M5 之前就把 auth 的最小公共接口补齐,至少明确下面两种之一:
changePassword(opts): Promise<void>createAuthService(...) 返回 resetPassword / changePassword / verifyPassword重点不是现在就实现,而是要把契约锁住,避免 M6 临时造接口。
binaryResolver 的查找顺序在设计文档和里程碑文档里不一致现状
设计文档已经很明确:
isPackaged: true 时只查 bundled 产物isPackaged: false 时才允许 env / PATH fallback但 M4 和 M7 又把规则写成统一的“bundled -> env -> PATH”。
问题
这不是描述风格不同,而是实际行为不同。 如果按 M4/M7 实现,生产包可能误用用户机器上的旧 backend,直接违背设计文档的安全边界。
涉及位置
webui-decouple-electron-design.md 第 255-269 行2026-05-07-m4-backend-launcher-migration-requirements.md 第 39-40 行2026-05-07-m7-prepare-backend-ci-requirements.md 第 36 行建议
把“生产模式”和“开发模式”两档规则原封不动抄到 M4、M7、M8 中,彻底删除“bundled -> env -> PATH”这种扁平表述。
现状
equivalence.test.ts 同时启动老 webserver 和新 static-server,在两个真实端口上做响应对比问题
执行者会不知道“起真 server”到底算不算越界。 这会直接影响测试实现方式,也会影响 plan-writer 对阶段拆分的判断。
涉及位置
建议
把 M5 测试拆成两层并显式命名:
这样 M5 的执行边界会清楚很多。
现状
.sha256.sha256问题
当前链路只能保证“构建产物存在”,不能保证“用户可通过 release 安装”。 这会导致 M9 的 install 脚本依赖一个并未被上游正式交付的发布契约。
涉及位置
2026-05-07-m8-web-cli-tarball-requirements.md 第 47-48、109-114 行2026-05-07-m9-install-web-script-requirements.md 第 112-115、148 行建议
在 M8 或 M9 里明确新增一条责任,不要悬空:
从里程碑边界看,更推荐方案 A。否则 M9 会同时背安装脚本和发布链收口,职责过重。
restoreDesktopWebUIFromPreferences 的归属不合理现状
web-host 只负责 backend/static/authrestoreDesktopWebUIFromPreferences 放进 packages/web-host/src/auth/config.ts问题
“自动恢复桌面开关状态”本质上是 desktop shell 的启动策略,不是 auth/config 能力。 如果把这部分放进 web-host,shared host 会开始知道桌面专属偏好语义,边界会被污染。
涉及位置
webui-decouple-electron-design.md 第 46-47 行webui-decouple-electron-design.md 第 607 行2026-05-07-m6-three-paths-cutover-requirements.md 第 58 行建议
把职责拆开:
web-host 只提供 config 读写和 host 启停能力packages/desktop/ 保留“是否自动恢复、何时恢复”的编排逻辑也就是说,恢复逻辑应当 调用 web-host,而不是 迁入 web-host。
现状
TeamCreate、Agent、SendMessage 这套 team-mode 工具问题
如果读者不在 Claude team 环境里,playbook 其实不可执行。 同时,“requirements”和“detailed plan”两层文档的关系也没有命名清楚,容易误读。
涉及位置
webui-decouple-team-playbook.md 第 111-118 行webui-decouple-team-playbook.md 第 283-314 行2026-05-07-m2-aionrs-cleanup-requirements.md 第 1-7 行2026-05-07-m8-web-cli-tarball-requirements.md 第 1-8 行建议
建议补两句硬约束:
*-requirements.md 负责“做什么”*-plan.md 负责“怎么做”否则同一个里程碑现在既像“需求说明”,又像“执行计划”,语义会混。
M9 的“做什么”里写了 Windows 安装目录,但“边界”又写本里程碑不覆盖 Windows。
建议
直接删掉做什么里的 Windows 安装目录描述,只保留一句: “Windows 用户本里程碑通过手动解压 zip 使用,不走 install-web.sh。”
--no-pathM9 决策表里说支持 --no-path,但前面的参数列表和验收命令都没有它。
建议
二选一:
--no-path 加到参数支持和验收标准里--no-path不要让实现者自己判断这个参数到底存不存在。
M6 还在写 src/common/platform/register-node.ts,但文档整体上下文已经进入 packages/desktop/ 结构。
建议
在 M6 中统一改成 M1 之后的真实路径,避免执行时 grep 不到文件。
为了尽量少返工,建议按这个顺序修:
具体优先级如下:
install-web.sh 的 sh / bash 口径binaryResolver 的 packaged / dev 两档查找规则webuiChangePassword 的公共接口契约restoreDesktopWebUIFromPreferences 的职责归属--no-path如果目标是最短时间内把这套文档修到“可执行”,可以只做下面这些最小改动:
unit 与 equivalence.sha256完成这几步后,整套文档的执行风险会明显下降。