Repository navigation
v0.3.4 — 截断误删防护(birthtime 判定)· 环境变量只记录不污染宿主
🛡 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-lifecycle181 项断言(新增收养/保留/新建照常清理/PATH 排除/宿主 env 不被改写),连跑三轮全绿;smoke-host66 项通过; - 真机(隔离宿主 + 真实 agent 回合):驱动 29/29、agent 回合端到端 8/8、截断场景 5/5。
升级
从 0.3.x 直接升级,无迁移。更新后在 Plugins 面板重载插件(或重启 Harness)。