Files
Agent-System/.doc/ops/short-term/2026-09-25-t20-b5-chat-observability.md
T

2.1 KiB
Raw Blame History

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
internal/ctxmgr
internal/chat
chat+ctxmgr done pending not_required pending not_requested

T20 B5:chat 回合补偿可观测与孤儿扫描

用户目标与授权

  • 来源:planned-tasks-closeout-plan-2026-09-25 P6 批次;设计 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 条),本批未做——依赖真实失败注入数据。