Skip to content

v3.9.38

Choose a tag to compare

@github-actions github-actions released this 22 Sep 20:16
· 86 commits to master since this release

v3.9.38

本说明描述实际发布的 v3.9.38,最终 tag 指向 0b78217。发布前 tag 曾指向另外四个提交,
四个都没有产出过发行物:

  • 4e429fa —— 被独立复核否掉。tag 从未以它推送,也从未有 CI 运行在它上面
    (actions/runs?head_sha=4e429fa… 为空)。它今天出现在远端,只是因为后来推送的 master
    以它为祖先,不是当时推送的结果 —— 这两件事容易混,所以分开写。
  • 27170ff —— 推送后触发 Release #186(35773633801),测试失败,发行物作业全部跳过。
  • 1ed5d18 —— 推送后触发 Release #187(35776846089),该轮被取消;同一提交的 CI #854
    因一条测试夹具的时序缺陷失败。
  • d1fc712 —— 只在本地移动过,未推送,无 CI 运行。

0b78217 的 Release #188(35778314521)六项作业成功;GitHub Release 于 2026-09-22 20:16:40
UTC 发布,四项附件已上传。

维护者在发布前移动过 tag,这件事写在这里而不是留给读者去比对 ref;本次独立复核没有移动
tag,也没有执行 push 或发布。以上只陈述远端 ref、CI 运行与发行物的可核事实,不声称此前
推送过的源码从未被任何人取得。既已发布,后续代码修正应使用新的版本与 tag,不覆盖
v3.9.38 的身份。

数据保全:移除破坏性迁移,并以独占创建取得写入资格

旧迁移仅凭 package.json 的 name 不等于当前 stub 就递归删除 src 并覆盖辅助文件,
不能证明这些内容属于代理。omp 移除了该迁移,既有目录的普通调用快照得以保全。
独立复核又发现“检查后被其他进程创建”的窗口:递归 mkdir 不意味着本调用创建了叶目录。
后续修正改为独占创建叶目录,EEXIST 时停止;每个 stub 文件也使用 wx,拒绝覆盖并发创建的文件。
原有快照与全新创建对照保留,新增确定性交错测试覆盖目录争用及文件争用。

升级取舍明确保留: pre-#108 的 my-project 等旧模板不再自动重写。
因此“新目录的 stub 标识正确”不能证明“旧目录已全部清理”。自动清理能力确有回退;
这里优先保全未知来源或人工修改的内容,不把模板名字当成所有权证明。
需要清理时,运维应先停止相关 LS 使用、备份并人工确认该代理专用目录,再选择非破坏性的迁移;
不要递归删除未经确认的 src,也不要直接拿用户真实工程目录替代代理目录。
本轮没有做实际旧版本升级或上游模型行为验收,不宣称恢复了所有旧模板场景。

凭据库:读取必须满足 v1 格式约定的 16 字节 GCM tag

旧读取会接受截短标签。omp 加入编码长度、解码长度与 authTagLength:16 三层约束。
这是本仓库 v1 格式的完整性契约;不是声称 GCM 算法普遍禁止其他标签长度。
独立复核保留正常往返、错主密钥和密文改动对照,并通过普通 JSON、修复包装和正则抢救包装
测试短标签不能返回明文。合法 v1 与等价的大写十六进制标签仍可读取。

scrypt N/r/p、AAD 和记录与邮箱的身份绑定不改。AAD/KDF 迁移仍需 Owner 裁决与版本化证明。
原三条 mutation 的判红数字成立,但不能将“形状错误仍被另一层拒绝”写成“已重新解出密码”;
后续规格补了同时移除固定长度约束的反例,实际验证短标签解密会使回归判红。

扫描器:真实路径命名空间与完整扫描回执

omp 为显式路径、目录遍历、默认 git 输入加入 realpath 边界。稳定路径下的越界链接拒绝成立。
独立复核修正了内部链接指向仓库根时的预先去重漏扫、合法 ..notes 目录的误拒绝、
枚举后无法解析的普通文件被静默丢弃,以及显式文件消失被当成干净扫描的问题。
默认扫描仍允许 Git 所列但工作树已删除的文件;显式输入不能借此静默消失。
默认输入集合仍由 Git 决定,不等于扫描全部 ignored 运行数据。

硬链接的另一个名字可以位于仓库外;realpath 检查的是路径命名空间,不是 inode 的唯一来源。
检查后若存在并发路径替换,单次 realpath/stat/read 不构成抗 TOCTOU 沙箱保证。
不可据此宣称任意本地对抗性文件系统修改都被阻止;UNC、subst、8.3 等组合未做完整矩阵验证。

原“默认 Git 会穿过 junction”的夹具结论属于本机 Windows 行为,不能推广到 POSIX
(POSIX 侧本轮未验证,仍是 UNVERIFIED)。夹具现先把子文件放入临时 Git 索引,
再以链接替换其父目录,不再依赖平台自己的枚举行为;原有发现、拒绝及不回显秘密的断言保留。

历史覆盖:以实际送出的后缀记账,不要求两个预算相同

omp 已为失败 resume 的重建路径更新 historyCoverage,修复了截断后仍报告零丢弃的缺陷。
fresh 路径计入系统提示长度,重建路径仍以零开销起算,保留了原有 prompt 行为。
因此“共用闭包”不等于“任何输入都给出相同覆盖值”。独立复核新增真实客户端、真实编码器和
回环假 LS 的测试,解码 SendUserCascadeMessage 中的实际文本,逐项核对回合后缀与覆盖数字。
另有系统提示导致两路径不同、完整 resume 仅发送新回合的对照。
预算单位、默认上限、C2 回调推进及上游协议行为未在本轮调整。

鉴权:四条代表路由的真实拒绝矩阵

omp 新增的四条 /v1 路由、五种缺失或错误凭据形态的 401 矩阵实际承重。
独立复核禁用外门时,两条真实路由测试失败,旧四条纯函数测试仍通过;
有效 key 到达无账号 503 的对照也确实执行。此证明不等于所有协议、所有路由的完整鉴权矩阵。

工程:baseline 以结构化执行证据判断

s4-r4 的 8→9、think-text-reroute 的 91→95 是正确的实测修正。
但是 omp 新检查的 pass+skipped 算术、忽略退出状态及文本统计规则仍可能吞掉真漂移。
独立复核改为使用 Node 测试事件:校验子进程退出/信号、唯一汇总、逐文件覆盖、计数相加、
fail/cancelled/todo,以及具名的 Windows 机器门禁清单。未知 skip 不得替代通过的断言;
已知 skip 只报告 count-compatible,不冒充执行通过。规格文件自身和工作区未提交变化也纳入选择。
spec pin 从不自动回写,--base 参数被明确消费。

源码中出现 it()/test() 的次数不是执行数下界:注释和条件注册足以推翻该命题。
静态检查保留锚点唯一、规格形状及正整数约束;数值漂移交由门禁实际测量,而不是字符串计数。
原 78 个 Windows 机器跳过项逐测试核对保留,不为“全绿”而改成通过或下调 Unix 的期望值。

明确未修

C2 背压、AAD/KDF 迁移、G-2 SSE 准入、G-4/G-5 诊断保密与保留契约均等待 Owner 裁决。
容量上限与 TTL 不能替代保密性。#250/#258/#272/#273 继续 UNVERIFIED。
实际发行包 smoke、真实上游、完整 Unix 动态 mutation 以及运行时版本矩阵均未由本轮证明。

验证记录及边界

本版最终树实测(npm run gate,含独立复核的修正与随之重锚的锚点):4797 pass / 0 fail /
78 skip,387/387 文件全测量;wire 子进程绑定本版 → 上一个发行版 v3.9.37(c22e0bf),
270 次比较;改动范围内的 1 份 spec 的 baseline 检查 0 漂移、0 不可信(全量 80 份在同一日的
一次更早运行中为 0 漂移、0 不可信)。独立复核在 fd315b9 上跑过 8 份 spec 的 35 条
mutation,全部判红并在精确还原后转绿;本版新增或重锚的 3 条(独占创建的所有权控制、
历史顺序、被 allow-list 修复移动的扩展名锚点)各自单独跑过红绿。78 个 skip 是机器门禁
(POSIX git 夹具 + wire 夹具),不是通过。

omp 原记录同样可复核:4e429fa 的存量 gate 日志为 4761 pass / 0 fail / 78 skip,381/381 文件。
独立复核重新执行原六份规格的 22 个 mutation,全部判红并在精确还原后转绿。
旧说明中的“20 条”不准确;后续复核规格与测试增量应以对应实测回执为准,不把不同快照相加。
后续修正的完整日志、原失败回合、源文件哈希与独立裁决保存在本机
.agent/gpt-review-20260923/。该目录是本地审计物件,不随 fresh clone 或 CI 自动存在。
正式发布验收仍需绑定最终提交、实际基线、平台和发行物,不能由这份说明代替。