feat(v0.1): add per-session RWO PVC foundation for true session state persistence

PR A for #770: docs + migration 007 + RBAC + types foundation.

- 新增 failureKind session-store-evicted,用于区分 PVC 缺失与真协议错误
- 新增 migration 007_v01_session_state_storage:sessions 表增加 storage_* 列 + 索引
- mgr SA RBAC 增量:persistentvolumeclaims: [create, get, list, watch, delete]
- 6 份 SPEC 升级(runtime-assembly / hwlab-manual-dispatch / backend-codex T7b / agentrun-runner / agentrun-mgr / services)
- 显式禁止:fake app-server mock、replacement threadId、runner 启动后 copy/restore、idleTimeoutMs 拉永驻
- selftest 断言更新到 007_v01_session_state_storage

后续 PR B/C 在此基础上接入 mgr 端 PVC 生命周期 + runner 端 mount + backend 端 observability。
This commit is contained in:
Codex
2026-06-03 18:45:13 +08:00
parent cb93992b1c
commit 87beb00bdb
10 changed files with 153 additions and 1 deletions
+13
View File
@@ -90,6 +90,19 @@ Runner inbound API 只允许本地或私有诊断,不作为业务客户端入
| Tenant policy boundary | Run schema 合同 | 保留,P0 | 作为 `Run` 的必填字段和最小校验存在,不做独立 policy enginetenant 的业务授权仍由 UniDesk/HWLAB 判定。 | 并入 `spec-v01-agentrun-mgr.md` |
| Observability | 最小事件/日志合同 | 保留,P1 子项 | 作为 manager/runner 的 event、terminal status、failureKind、logPath 和 redaction 最小合同,不拆独立观测系统。 | 并入 `spec-v01-agentrun-mgr.md``spec-v01-agentrun-runner.md` |
| `agentrun-scheduler` | 长驻调度器 | Deferred | M1-M3 稳定后再实现自动 pending scan、capacity selection 和 runner Job 创建。 | `spec-v01-scheduler.md` |
### v0.1.1 Session state 持久化
`v0.1``P1 SessionRef 持久化` 已从「metadata-only」升级为「per-session RWO PVC 直接挂载」:
- `agentrun-mgr`:负责 session 创建时同步创建 PVC`POST /api/v1/sessions`)、删 PVC`DELETE /api/v1/sessions/:id/storage`)、runner 上报摘要(`POST /api/v1/sessions/:id/storage/refresh`)、GC 循环、运行前 PVC 存在性检查。
- `agentrun-runner`Job manifest 渲染 `agentrun-sessions` PVC volume,把 PVC 直接挂到 `${CODEX_HOME}/<codex_rollout_subdir>`env 透传 PVC name / namespace / mount path / codex rollout subdir。
- `codex-app-server-stdio` backend:在 `initialize` 之后 emit `codex-rollout-storage-mounted` 事件;`AGENTRUN_SESSION_PVC_NAME` 已设 + `thread/resume` 返回 `no rollout found` 时升级为 `session-store-evicted`
- 接受方(HWLAB Cloud Web Workbench):收到 `session-store-evicted` 时走 reset UX**不**写入 fake 续接。
Manager SA RBAC 增量:`persistentvolumeclaims: [create, get, list, watch, delete]`。Runner SA 不需新增 PVC 相关权限(挂载走 Pod spec)。PVC storage class / size / 命名规则由 env 收敛(`AGENTRUN_SESSION_STORAGE_CLASS``AGENTRUN_SESSION_STORAGE_SIZE`)。
禁止路径:fake app-server mock 通过;强制重发同 sessionId 同 threadId 蒙混;`thread/resume:no rollout found` 改写为 `thread/start` + replacement threadIdPR #78 已否决);`idleTimeoutMs` 拉成永驻当成本特性;runner Job 启动后再做 copy/restore(撤掉的路径,禁止复活)。
| AgentRun Queue | 系统能力 | 新增,P0 规格 | 直接吸收 UniDesk Code Queue 的队列能力;第一版只做 RESTful API、CLI 和轻量轮询,不做 Event/OA/integrations,不迁移历史数据。 | `spec-v01-queue.md` |
| 多 backend 路由 | 系统能力 | Deferred | `v0.1` 不做跨 backend kind 的自动路由和调度;仅支持同一 Codex stdio backend kind 下的 `codex`/`deepseek`/`minimax-m3` profile 手动选择。旧 MiniMax/OpenCode 直连路线不进入 Queue 首版。 | 后续版本 spec |
| UI | 前端 | Deferred | `v0.1` 不要求独立 UIUniDesk/HWLAB canary 可通过 CLI/API 验证。 | 后续版本 spec |