2.1 KiB
2.1 KiB
title, task_id, status, created, updated, owner, task_type, policy_revision, branch, worktree, base_dev_sha, write_scope, mutex, review_state, integration_state, deployment, cleanup, remote_sync
| title | task_id | status | created | updated | owner | task_type | policy_revision | branch | worktree | base_dev_sha | write_scope | mutex | review_state | integration_state | deployment | cleanup | remote_sync | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| T20 B5:chat 回合补偿可观测与孤儿扫描 | t20-b5-chat-observability-2026-09-25 | in_progress | 2026-09-25 | 2026-09-25 | Cursor | hardening | AGENTS.md @ 088ff307 |
feature/t20-b5-chat-observability-2026-09-25 | .worktrees/t20-b5-chat-observability-2026-09-25 | 088ff307c0 |
|
chat+ctxmgr | done | pending | not_required | pending | not_requested |
T20 B5:chat 回合补偿可观测与孤儿扫描
用户目标与授权
- 来源:
planned-tasks-closeout-plan-2026-09-25P6 批次;设计 T20 B5。 - 按「本阶段不强制同事务」决策:加固既有补偿 + 补可观测 + 孤儿批量清理。
变更清单
| 项 | 变更 | 文件 |
|---|---|---|
| 补偿可观测 | FailChatTurn/CompleteChatTurn 失败时 slog.ErrorContext 结构化日志(chat_turn_fail_compensation_failed / chat_turn_complete_failed),不再静默 _ = |
internal/ctxmgr/chat_turns.go |
| 孤儿扫描 | 新增 SweepExpiredProcessingTurns(ctx, limit):PG 路径批量 UPDATE ... WHERE status=processing AND lease_expires_at<now()(批上限 + ASC 排序);内存路径同语义;扫到记 chat_turn_sweep_expired_processing WARN |
同上 |
| 周期调度 | Server 启动 startChatTurnSweeper:2 分钟间隔、批 200、单次 30s 超时;Shutdown 关闭 |
internal/server/chat_turn_sweeper.go、internal/server/server.go |
回归测试
TestSweepExpiredProcessingTurns_Memory:过期 processing→failed;fresh/completed 不动;幂等(二次扫描 0)。- 既有
TestAcquireChatTurn_*家族不回归。
边界确认
- 不改
AcquireChatTurn幂等/租约语义(client_turn_id重放仍拒绝双写助手)。 - 「用户消息已写、turn 未绑定」孤儿告警为后续可选项(设计文档 2.3 条),本批未做——依赖真实失败注入数据。