Skip to content

v1.2.7 — 停止语义、账本正确性与第十七波收口

Choose a tag to compare

@cullysu cullysu released this 10 Oct 19:42
· 15 commits to main since this release

v1.2.7 — 停止语义、账本正确性与第十七波收口

第十七轮独立评审(v1.2.6,62 项编号评价)中经源码与复现核实的缺陷全量落地。这轮的关键词是把"声称的修复"逐条对齐实现——评审抓到的数处"上轮未兑现",本轮每一项都带实测验证。

停止语义(P1)

  • 回退重发现在是可取消的执行: armed 快照(会话文件、项目、提示词)+ 代次令牌;用户停止、切换 tab、切换项目或更新的回退都会使其失效,且两个定时回调在触发时重新校验(旧实现读活状态,停止后仍会重开会话重发)。
  • 回退打开的新 tab 由回退自己接管(重锚定),不再误判"被别人切换"——chat-e2e 真实浏览器验证了整条链(停止守卫 + 快照 + 重发渲染)。
  • 新会话携带发送前选择的思考等级(WS open 帧带 thinking)。

账本与统计正确性(全部实测复现后修复)

  • 估算费用不再随查询次数增长:usageCache 返回缓存对象,旧的折算直接改写它——同一会话 0.0015→0.003 的翻倍机制(就地修改缓存)移除,折叠改入局部变量。
  • cacheWrite 贯通全部维度:models/providers 分项此前完全没有该字段;日桶补齐 cacheWrite 与按日估算费用。
  • ZCode 账本读真实字段名:rollout 的 cacheReadTokens/cacheWriteTokens 此前被通用递归归零,改为直读。
  • Codex 累计量做差分、按日分桶:token_usage 事件是累计值,旧实现把整文件用量堆在会话开始日(且窗口钳制把老会话的新用量整条丢掉)——现在相邻累计做差、逐条按自身时间戳入桶、窗口外丢弃。

供应商回退(P1,明文 key)

  • 明文 key(models.json 内直接写 key——最常见的用法)现在真的能被 401 冷却:旧实现把冷却写进 $ENV 轮换槽位,明文 key 永远读不到它,链路继续选坏 key;且 providerHasKey 被明文短路。修复 + 成功后解除。
  • failover-e2e 的错误 PASS 条件整改:旧断言把"401 后仍可选"当 PASS——新断言要求 401 后该供应商必须从链上消失、成功后重新可用(本机实测 PASS)。

安全与完整性

  • DOMPurify 3.1.7 → 3.4.16(三项公开公告影响范围);vendored 库进入 SBOM(从 vendor README 版本表读出——npm audit 永远看不到它们,SBOM 现在能看到)。
  • runtime manifest 真正覆盖嵌套依赖:walk 里的旧守卫把每一层嵌套 node_modules 都跳过(12,552 个文件零覆盖,含刚钉住的 undici)——守卫移除后本地实测 13,954 条全覆盖(含 pinned 依赖 268 文件),AppImage 启动验证走通全链。
  • afterPack 找不到布局或缺少外壳文件时抛错(此前静默跳过);壳 manifest 拒绝空文件集(与 runtime manifest 对齐)。
  • 备份导入字段级校验:config.json={} 不再能覆盖有效配置(必须 projects 数组;cron/routing/models 各自门禁)——上轮的"对象即通过"确实是纸面校验。

其它核实修复

  • cron:run-now 消耗当日窗口(手动+到点不再双跑);全局并发预算 2(8 个到期任务不再一次 tick 全启动);UI 新建任务携带当前项目 cwd。
  • readJsonl 的无换行巨行在读取过程中丢弃(旧检查在读完整个文件后才跑,约束为零——评审对,我上轮放错了位置)。
  • MCP 失败现在抛进 pi 的执行层(返回值带 isError detail 仍被 pi 记为成功);lazy 目录带参数名与必填项。

口径留档(评审同意非补丁项)

  • 跨项目面板上下文(#3)、只读导入的执行隔离(#4)、WS 重连补状态(#7):产品专项,按评审建议的优先级排入下轮专项而非补丁轮。
  • 成品安装的 Windows/macOS 启动验收(#56)依赖签名与实机;Tauri 更新链接(#29 已在上轮改系统浏览器)、无头验证边界照旧文档化。

门禁:lint 0、测试 40/40、路由扫描 47 PASS/0 FAIL、ws-probe / failover-e2e(含新明文 key 断言)/ ui-probe / chat-e2e 全 PASS、CI 8 job(AppImage 启动实测 13,954 条 manifest 全链)、manifest 覆盖数与 SBOM 断言实测。