Skip to content

feat(sandbox): 持久化容器生命周期所有权、租约与崩溃恢复 #38

Description

@Qiyuanqiii

Parent: #32

问题概述 / Summary

现有真实 Docker lifecycle foundation 已能创建、启动、等待、终止和清理容器,但所有权仍主要存在于单进程内。需要先建立持久启动意图、generation lease/fencing 与重启协调,才能允许产品层把 Run 绑定到真实容器。

当前基线 / Current baseline

  • 固定 daemon endpoint、真实 create/start/wait、timeout/cancel、TERM/KILL、final inspect、delete/absence 已验证。
  • 当前实现是 package-private、non-authorizing foundation。
  • Docker 可用性不等于产品执行授权。

范围 / Scope

  • 在任何 Docker 外部副作用前持久化 launch intent。
  • 为 Run/Attempt/Container generation 建立 lease、owner 与 fencing token。
  • 定义 created/started/exited/cleaning/cleaned/failed 的幂等转换。
  • 启动时只协调带 Prayu ownership labels 且与持久记录精确匹配的容器。
  • 恢复自然退出、超时、取消、进程崩溃与 daemon 短暂断连。
  • 将协调结果记录为 append-only lifecycle/audit events。

非目标 / Non-goals

  • 本 Issue 不开放 CLI、HTTP、Desktop 或模型执行入口。
  • 不实现日志/Artifact 传输;由同父项其他子 Issue 负责。
  • 不自动接管或删除无法证明属于 Prayu 的容器。

涉及目录 / Affected directories

  • internal/sandbox/
  • internal/runner/
  • internal/application/
  • internal/domain/
  • internal/store/
  • internal/events/
  • docs/adr/
  • 上述目录对应测试文件

依赖 / Dependencies

  • 复用当前真实 Docker lifecycle foundation;不得重写 daemon transport。
  • 后续产品准入 Issue 依赖本 Issue。

验收条件 / Acceptance criteria

  • create 前进程崩溃、create 后/DB commit 前崩溃、start 后崩溃均有可重复恢复测试。
  • 两个 Supervisor 竞争同一 Run 时,只有有效 lease/generation 能产生副作用。
  • 过期 owner 不能提交新状态;fencing 可拒绝陈旧写入。
  • 重启协调不会删除未知、标签不全或指纹不匹配的容器。
  • timeout/cancel/restart 重放保持幂等,最终状态和清理收据唯一。
  • Docker 缺失、daemon 不可达和 inspect 不一致时 fail closed,并返回稳定错误码。
  • go test、race-sensitive 定向测试与 go vet 通过。

安全边界 / Security boundaries

持久记录只是执行意图,不是授权。每次恢复仍必须重新核验 Run、Workspace、权限快照、当前进程 capability 和容器身份。

Activity

  1. added
    enhancementNew feature or request
    help wantedExtra attention is needed
    goPull requests that update go code
    sandboxSandbox, container, and execution isolation
    securitySecurity boundary or high-risk capability
    on Aug 13, 2026
  2. added a commit that references this issue on Aug 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestgoPull requests that update go codehelp wantedExtra attention is neededsandboxSandbox, container, and execution isolationsecuritySecurity boundary or high-risk capability高难度

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions