Skip to content

.refactor-loop 历史生成物与陈旧 worktree 的有界清理机制 #437

@loning

Description

@loning

动机

.refactor-loop/ 的运行生成物与 .worktrees/ 在长跑 dogfood 下无界累积,实测当前单机:

  • .refactor-loop/logs/:333 文件 / 252M(每个 codex 一条,solver/judge/reviewer/fix 数千行)
  • .refactor-loop/prompts/:2726 文件(每 PR/每轮渲染的一次性 prompt)
  • .refactor-loop/runs/:3307 文件(verdict/report/audit artifact)
  • .controller-pending-events.log:38026 行 / 6.6M(append-only 事件日志,可回溯到数周前)
  • .worktrees/:19 个目录(多数为已 merged PR 的陈旧 worktree)

这些是生成物,不是事实源(权威源在 SKILL.md/脚本/测试,历史由 git 保存,见 CLAUDE.md「生成物不当事实源」「历史由 git 保存」)。无清理机制会拖慢 glob/扫描、占盘、并增加误读陈旧 artifact 的风险(本 dogfood 已发生过误删 in-flight log、扫错 runs/ 致 router 误判)。

范围

为 skill-private 运行态生成物 + 陈旧 worktree 设计一套有界保留 / 清理机制:

  • .refactor-loop/logs|prompts|runs 的按保留窗口(age/count)清理。
  • .controller-pending-events.log 等 append-only 事件日志的有界截断(保留近期窗口)。
  • .worktrees/<name> 中已 merged / 无 in-flight codex 的陈旧 worktree 清理(配合 git worktree prune)。

设计约束(安全不变量,需 design-consensus 收敛具体方案)

  1. 绝不删活跃产物:任何仍有 RUNNING codex 的 log / worktree 一律不动;删前必须用 raw ps 确认进程真死(承本 dogfood 误删 in-flight minimal r2 log 教训)。
  2. 绝不删活跃 PR/issue 关联 artifact:保留窗口内 + 与 OPEN PR/issue 关联的 prompt/runs/log 不清。
  3. 事件日志按 retention 截断而非整删:保留近期窗口,且不破坏正在 tail -n 0 -F 的 Monitor bridge。
  4. host-opt-in + daemon-owned:保留窗口经 host.env 注入(缺省 noop/保守);机械、状态确定的清理放后台 daemon(daemon-first)。
  5. narrow allowlist,无 lifecycle authority:只在 skill-private .refactor-loop/ + .worktrees/ 文件面 GC;禁止任何 git commit/push/merge、issue/PR/label 生命周期动作、tag/release;不作为 generic lifecycle actor。
  6. 可验证:behavior test(stub 文件树 + 假进程)断言「活跃产物不删 / 超窗陈旧产物删 / 事件日志截断保留近期 / 已 merged 无 in-flight worktree 清理」;source-regression 锁住保留窗口事实源与 allowlist 字面。

验收

设计落地后:长跑下 .refactor-loop 生成物与 .worktrees 维持有界规模;无活跃产物被误删;事件日志有界且 Monitor 不断流;全套 source-regression + behavior test 绿。

⟦AI:AUTO-LOOP⟧

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions