From 84b2e832137b6de25b4b443c72a46aa4285796f4 Mon Sep 17 00:00:00 2001 From: ymq Date: Sat, 22 Aug 2026 18:38:56 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=88=87=E8=BF=AD=E4=BB=A3=E6=97=B6?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=85=B3=E9=97=AD=E6=97=A7=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=20pending=20=E9=97=AE=E9=A2=98(status=3Danswered)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _cancel_active_tasks 作废任务时,一并把该迭代的 pending 问题置 answered(随迭代作废)。 否则旧迭代问题持续 pending 冒泡、阻塞诊断视图,需手动 SQL 清理。 --- pipeline_service/iteration_capability.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pipeline_service/iteration_capability.py b/pipeline_service/iteration_capability.py index a922c34..11049e2 100644 --- a/pipeline_service/iteration_capability.py +++ b/pipeline_service/iteration_capability.py @@ -197,13 +197,22 @@ async def _active_task_ids(sor, project_id, iteration_name): async def _cancel_active_tasks(sor, project_id, iteration_name): - """作废某迭代内所有活跃任务(非终态 → cancelled + 清 claimed_by)。返回作废数量。""" + """作废某迭代内所有活跃任务(非终态 → cancelled + 清 claimed_by)+ 关闭其 pending 问题。返回作废数量。""" ids = await _active_task_ids(sor, project_id, iteration_name) if ids: in_clause = ",".join(["'" + x.replace("'", "''") + "'" for x in ids]) await sor.sqlExe( f"UPDATE pipeline_tasks SET state='cancelled', claimed_by=NULL, updated_at=NOW() " f"WHERE id IN ({in_clause})", {}) + # 关闭该迭代的 pending 问题(随迭代作废,不再冒泡):问题通过 task_id 关联任务,任务通过 + # params.iteration_id 关联迭代。不关闭则旧迭代问题持续 pending 冒泡、阻塞诊断视图(2026-08 实测)。 + await sor.sqlExe( + "UPDATE pipeline_agent_questions SET status='answered', " + "answer='旧迭代已作废,本问题随迭代关闭', answered_by='system', answer_source='main_agent', updated_at=NOW() " + "WHERE tenant_id=${pid}$ AND status='pending' AND task_id IN (" + "SELECT id FROM pipeline_tasks WHERE tenant_id=${pid}$ " + "AND JSON_UNQUOTE(JSON_EXTRACT(params,'$.iteration_id'))=${iter}$)", + {"pid": project_id, "iter": iteration_name}) return len(ids)