feat(workspace): 添加会话回收与持久化资源验证入口 - #1372
Conversation
Gundam98
left a comment
There was a problem hiding this comment.
基于 exact HEAD 74ef2d5c4285f52b81f7ca89cfc93229b40928aa 完成首次 Review。结论:需修改。当前有 1 个 P1 阻断项:成功回收后的 closed session 仍可被通用/自动 resume 原地复活,重新产生指向已删除工作区的 active 记录。请修复后在同一 PR 请求复审;本轮不授权合码或发布。
Gundam98
left a comment
There was a problem hiding this comment.
基于 exact HEAD 1caa228601b25f911a76733d60014c5a760cd481 完成复审。结论:通过,无阻断项。
原 P1 已按要求闭环:退役标记与 closed 原子持久化;通用 resume 的首次读取、锁内重读与 store reactivate 均拒绝退役,durable 整行写入也防止旧对象覆盖;restore/registry 排除退役;会话群拒绝后明确回复并直接返回,不会隐式新建。成功回收后的真实 worker/SQLite 重载恢复和真实 daemon 会话群路径均有回归。
独立验证:关键 6 文件 179 项通过;等价完整 build 链路通过;远端 CI run 34681204358 对应该 exact HEAD,9/9 jobs success;agent-task doctor 16 pass / 0 drift / 0 error,工作树 clean。首次交接列明的 006 真实通用 Hook 接入与 legacy strict-discovery 覆盖边界仍然保留,不影响本次 P1 修复结论。
原 P1 线程已回复并解决。当前 HEAD 无需再次复审;若后续 HEAD 变化,需要按新 SHA 重新确认。本 Review 不执行合码或发布。当前 GitHub 连接身份与 PR 作者相同,平台不能形成 self-approval,因此以 COMMENTED review 记录上述工程通过结论。
|
感谢这个 PR,整体设计质量很高。协调器不持 store、只让每条会话自己的在线 owner daemon 执行关闭;路径用段边界 + realpath 归一而不是字符串前缀;发起者持久交接后最后关闭;退役标记与 closed 原子共写且陈旧整行写擦不掉——这几处都考虑得很细。 先说验证情况:本地在最新 下面是建议修改的几点,按优先级排列。 1.
|
工作区目录回收后,相关 Botmux 会话仍可能保留活跃记录和常驻 worker。本变更增加可显式配置的
workspace-recycle入口,在外部生命周期成功事件之后关闭已准备的精确目标,并输出可恢复的逐会话资源回读。workingDir与路径段边界发现跨 Bot、群、话题目标,规范化目录别名;排除外部/共享会话,严格检查 store 覆盖。验证:
bun run build通过;本轮 15 个测试文件共 435 项通过,包含 4 个工作区回收测试文件,以及会话存储/恢复、真实会话群路由和标准关闭回归。隔离真实 worker 连续 3 轮创建 HTTP listener 与 inotify watcher,标准关闭后 PID 消失、活跃注册为 0、关闭历史保留;随后重新读取 SQLite 并调用通用 resume,仍保持 closed / 0 active。会话群测试通过真实finish(succeeded)和真实 daemon 路由验证重启读取后拒绝自动恢复与新建。另覆盖失败写盘、锁等待期间退役、旧对象覆盖及独立关闭后的补记。接入边界:当前使用等价生命周期事件与独立入口验证,实际外部通用 Hook 的时序和失败传播仍需接入后验证。Linux 资源观测有真实进程证据;无法证明所属进程集合的平台或远端残留按 blocker 报告。历史目录缺失仅生成只读候选,不自动清理。详见
docs/workspace-recycle.md。CI:run 34681204358 已完成且 9/9 jobs 通过,包括 3 个完整单元测试分片、Bun 运行时测试、完整构建及 Linux glibc/musl/macOS 二进制验证;对应 HEAD
1caa228601b25f911a76733d60014c5a760cd481。