auto: sync OpenClaw config 2026-09-15 16:13
This commit is contained in:
+27
@@ -0,0 +1,27 @@
|
||||
---
|
||||
name: "session-lifecycle-triage"
|
||||
description: "删除/归档会话失败(did not finish stopping)时,只读定位 placement 键不匹配并走受支持修复路径。"
|
||||
status: proposal
|
||||
version: "v1"
|
||||
date: "2026-09-15T05:29:00.623Z"
|
||||
---
|
||||
|
||||
# 会话删除/归档失败排查(session lifecycle triage)
|
||||
|
||||
用于「删除会话」「归档会话」失败时,只读定位原因并走受支持路径,绝不绕过守卫。
|
||||
|
||||
## 事实基础(OpenClaw 2026.8.1 实测)
|
||||
- 守卫比对 placement 记录的 `sessionId + sessionKey + agentId`;不一致即报 `... cloud worker placement identity changed`,delete/archive 一律失败。
|
||||
- cron 会话的 placement `session_key` 形如 `agent:<agent>:cron:<jobId>:run:<sessionId>`,而会话注册 key 是 `agent:<agent>:cron:<jobId>`。二者后缀不同 → 守卫拒绝 stop。
|
||||
- placement `state=local` 且无 turn claim,说明没有正在跑的工作,此时「等它跑完再删」不会生效。
|
||||
- 外部 `sqlite3` 无法打开活动状态目录下的库(报 `external sqlite3 cannot open databases under the active OpenClaw state directory`)。
|
||||
- 拥有该会话的一次性 cron 作业运行后已自删时,这条 stale placement 行不会被后续 reconcile 自动清理。
|
||||
|
||||
## 步骤
|
||||
1. 先执行 `openclaw sessions delete "<key>" --agent <id> --yes --json`。若报 `did not finish stopping` 或 `cloud worker placement identity changed`,进入下一步。
|
||||
2. 只读查 placement 行:把 `state/openclaw.sqlite`、`openclaw.sqlite-wal`、`openclaw.sqlite-shm` 复制到临时目录(如 `/tmp/olstate-inspect/`),再执行
|
||||
`sqlite3 -readonly <临时副本> "select session_id,agent_id,session_key,state,transition_generation,environment_id,turn_claim_owner from worker_session_placements where session_id='<sessionId>';"`
|
||||
查完立即删除临时副本。**绝不**让 sqlite3 指向活动状态目录。
|
||||
3. 对比 placement 的 `session_key` 与会话注册 key。若为上述 `:run:` 后缀差异,即守卫拒绝原因;同时确认 `state` 与 `turn_claim_owner` 判断有无活跃工作。
|
||||
4. 走受支持修复路径之一:稍后重试;退出 OpenClaw 后在 shell 跑 `openclaw doctor`(受支持修复入口);仍失败则用 `openclaw logs` 加完整报错上报缺陷。**禁止**直接改 `state/openclaw.sqlite` 来绕守卫。
|
||||
5. 若仍删不掉,向用户说明:会话仍可见、不影响其他功能,并列出上面三条路径请其选择,不擅自绕过。
|
||||
Reference in New Issue
Block a user