Skip to content

v1.3.0 — 审计六项 P1 修复与执行正确性

Choose a tag to compare

@cullysu cullysu released this 11 Oct 09:24
· 10 commits to main since this release

v1.3.0 — 审计六项 P1 修复与执行正确性

v1.2.9 独立审计(34 项,含隔离 fixture 与 fake spawn/VM 复现)的六项 P1 与相关 P2 全量落地。审计自带的复现脚本已指向本版源码重跑,四条核心场景全部 PASS(脚本入库为 scripts/verify-audit-fixes.mjs,随门禁保留)。

执行正确性(P1)

  • Cron 预算在每次 settle 释放——运行计数此前只增不减,"最多 2 并发"实际是"每服务生命周期最多 2 次"(审计复现 spawn 1,2,2 后停摆)。另:畸形 daily 时间跳过而非崩溃整个 tick;run-now 返回 accepted/rejected(预算拒绝不再报 ok);cron 子进程纳入服务退出收割。
  • Failover 重发不再发进用户切过去的会话——重发身份的"重锚定"原先发生在第二个定时器内部,等于把用户切换后的 tab 认领为回退自己的 tab、失效检查永远通过。认领现在只发生一次(回退自己打开的 tab),后续检查只校验。

只读导入与弹窗(P1)

  • v1.2.8/v1.2.9 的只读导入修复实际未进发布包(wave-18 补丁批次在一个失败锚点上提前中止,部分写回只留下 submit 守卫)——审计复现"导入后 tabId 不变、importView 未设置"属实。openImported 标志、live 事件隔离、真实会话打开即退出、跨项目点击同步,全部重新落地,并由契约探针与审计复现双验证。
  • 弹窗单次回复:显式点击会先清取消钩子再关闭——此前 OK 会先发 confirmed:false 再发 confirmed:true,同一请求收到两条冲突响应。

数据与供应链(P2)

  • 用量分项与总计一致:provider 行补 cacheWrite、日桶折入 costEst、provider 行不再拿供应商名当模型名估价——"总 $3 / 日 $0"的矛盾消除。
  • Codex 账本:首个累计样本即真实用量(空基线丢掉它——100 只记成 50 的反例),事件按自身时间戳分桶(跨日不再归会话开始日)。
  • 备份:排除密钥时保留脱敏版 models.json(供应商 URL/模型列表不再丢失);导入校验成员级形状([null] 项目、无 time 的 daily 不再通过——后者曾让整个调度 tick 崩溃);rename 前 chmod;压缩输入 128MB 上限;回滚失败如实报告。
  • MCP:传输/超时错误抛进 pi 的失败层(pi-agent-core 契约:fulfilled 即成功,details 只是 UI 元数据);超时发送协议级取消,远端工具不再无人等待地继续产生副作用。
  • readJsonl 的无换行巨行 cap 移到能执行到的位置(旧位置在换行循环体内——无换行洪流永远不会到达)。
  • CI:三个打包 job 现在依赖全部质量门禁(lint+test+e2e);Windows Tauri 构建前刷新 lockfile——被审计的锁就是被构建的锁;契约探针真实进入 e2e job(v1.2.9 的这条声明是假的,本版为真并在 CI 实跑通过)。

文档

README.en/CONTRIBUTING 的 Node 下限修正为 ≥22.19;英文备份文案与脱敏默认对齐;搜索占位文案改为如实的"过滤当前项目会话"。

验证:lint 0、测试 40-40、路由扫描 47 PASS、六探针(ws / failover / ui / chat / contract / audit-fixes)全 PASS;CI 8 job 全绿,打包 job 由全部门禁门入。

代码签名仍等证书账号(唯一用户侧门控)。