Skip to content

v0.3.4 — 截断误删防护(birthtime 判定)· 环境变量只记录不污染宿主

Choose a tag to compare

@G57651 G57651 released this 06 Oct 09:55
· 17 commits to main since this release

🛡 v0.3.4:修复两个高危隐形问题(截断误删防护 + 环境变量不再污染宿主)

1. 基线截断可能误删既有文件 —— 已修复

工作区文件数超过 trackingMaxFiles(默认 5000)时基线会被截断;未被基线收录的既有文件在首次 diff 时会被误判为「会话新建」——删除会话时可能把它们一起删掉(你的 default-workspace 已触发截断条件)。

修复:用 birthtime 二次判定(扫描时已记录;无 birthtime 的文件系统回退 mtime)——早于会话开始的文件一律静默收养为既有资源:不写 Journal、不出现在资源视图、绝不被清理移除。会话若修改/删除了这类文件,回滚时跳过并如实报告 preexisting-unbaselined(原内容未被快照,无法恢复)。状态刷新时保留血统标记,before 侧全程可追溯。

真机截断场景实测(基线强行截断到 1 个文件):两个既有文件全部保留 ✅,同时会话真新建的文件仍被正常清理 ✅——安全与核心功能同时成立。

2. 环境变量解析会真实污染宿主进程 —— 已修复

旧行为把解析出的 export FOO=bar 写进宿主进程 env——一条会话命令(如 export PATH=...、NODE_OPTIONS=...)会真实影响 harness 之后启动的所有子进程。

修复:只记录、绝不改写宿主 env;并把 PATH / NODE_OPTIONS / NODE_PATH / LD_* / DYLD_* / HOME / TMPDIR / SHELL / IFS / DSH_HOME 等运行性变量直接排除出跟踪。清理阶段的 env 恢复对「宿主从未改变过」的变量是刻意的 no-op。

3. 附带修复

session-manage.js 资源清理异常处理器引用了不在作用域的 logger——会把真实清理错误掩盖成 logger is not defined(本轮回归首次触发暴露,已修)。

验证

  • 离线:smoke-lifecycle 181 项断言(新增收养/保留/新建照常清理/PATH 排除/宿主 env 不被改写),连跑三轮全绿;smoke-host 66 项通过;
  • 真机(隔离宿主 + 真实 agent 回合):驱动 29/29、agent 回合端到端 8/8、截断场景 5/5。

升级

从 0.3.x 直接升级,无迁移。更新后在 Plugins 面板重载插件(或重启 Harness)。