fix: 回退任务链 pm_assigned 污染 + 模块级判断改 previous_role + start_fix 放宽 open
三处根因修复(hrs6 回退重做任务 approve 后链断的完整根因链):
1. _rollback_task_chain 创建回退任务时 new_params.pop('pm_assigned'):
回退重做任务继承 target_task 的 pm_assigned=True,approve 后命中
「模块级 develop 跳过 deploy_test」分支,任务链断在 approved。
与 _create_next_task 的 pop 对齐(两处同源,回退路径漏了)。
2. 模块级 develop 判断从 pm_assigned 改为 previous_role 为空:
pm_assigned 会被 design 任务污染(design 也是 PM create_tasks 派发、
带 pm_assigned=True,派生的应用级 develop 继承后被误判模块级)。
previous_role 才是可靠信号:模块级(PM 直接派发)= 空,
应用级(design 派生/回退重做)= agent.design。
3. start_fix 放宽 from 状态 [confirmed] → [confirmed, open]:
PM review_rollback 回退 develop 时不走 confirm_bug,bug 停在 open,
start_fix 只认 confirmed 导致 develop 修完代码无法 fix_bug,
bug 永远 open、闭环断在 fixed 环节。
This commit is contained in:
parent
e3301f5ed9
commit
8d3dd7c980
@ -859,6 +859,10 @@ async def _rollback_task_chain(sor, project_id, task_id, rollback_role, comment)
|
||||
except (json.JSONDecodeError, TypeError):
|
||||
tp = {}
|
||||
new_params = {**tp, 'rollback_from': task_id, 'rollback_comment': comment}
|
||||
# 清 pm_assigned:回退重做任务是系统重建的任务(非 PM 按模块清单派发),继承 target_task 的
|
||||
# pm_assigned 会污染——若 target 是应用级 develop(历史脏数据带 pm_assigned=True),approve 后被
|
||||
# 「模块级 develop → 跳过 deploy_test」误判,任务链断在 approved。与 _create_next_task 的 pop 对齐。
|
||||
new_params.pop('pm_assigned', None)
|
||||
if prev_task:
|
||||
new_params['previous_task_id'] = getattr(prev_task, 'id', '')
|
||||
new_params['previous_role'] = _normalize_role(getattr(prev_task, 'role', ''))
|
||||
@ -1795,7 +1799,11 @@ async def pm_review_run(project_id, agent_id=None, model_name=None):
|
||||
_tp = json.loads(getattr(task, 'params', '{}') or '{}')
|
||||
except Exception:
|
||||
_tp = {}
|
||||
if task_role == 'agent.develop' and _tp.get('pm_assigned'):
|
||||
# 模块级 develop = PM 用 create_tasks 直接派发(previous_role 为空);应用级 develop =
|
||||
# 系统派生/回退重做(previous_role=agent.design)。用 previous_role 区分而非 pm_assigned——
|
||||
# pm_assigned 会被 design 任务污染(design 也是 PM create_tasks 派发、带 pm_assigned=True,
|
||||
# 派生的应用级 develop 曾因此误判为「模块级」跳过 deploy_test)。
|
||||
if task_role == 'agent.develop' and not _tp.get('previous_role'):
|
||||
logger.info(f"模块级 develop approved,跳过 deploy_test(部署以应用为单位): {task_id}")
|
||||
return {"status": "approved", "task_id": task_id, "comment": comment,
|
||||
"next_role": "", "skip_next": "module_not_deployed_independently"}
|
||||
|
||||
@ -127,8 +127,13 @@ async def confirm_bug(bug_id, iteration_id, who=None, agent_id=None):
|
||||
|
||||
|
||||
async def start_fix(bug_id, iteration_id, assignee_id="", who=None, agent_id=None):
|
||||
"""开始修复:confirmed → fixing(记录处理人)。"""
|
||||
return await _transition(bug_id, iteration_id, [S_CONFIRMED], S_FIXING, 'start_fix',
|
||||
"""开始修复:confirmed/open → fixing(记录处理人)。
|
||||
|
||||
from 允许 open:PM review_rollback 回退 develop 处理部署/功能 Bug 时,走的是「回退重做」任务链
|
||||
(隐含确认缺陷有效),不经过 confirm_bug,bug 停在 open。若 start_fix 只认 confirmed,
|
||||
develop 在回退重做任务里修完缺陷后无法 start_fix→fix_bug,bug 永远 open、闭环断在 fixed 环节。
|
||||
"""
|
||||
return await _transition(bug_id, iteration_id, [S_CONFIRMED, S_OPEN], S_FIXING, 'start_fix',
|
||||
extra_updates={"assignee_id": assignee_id or ''},
|
||||
who=who, agent_id=agent_id)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user