From c50a5b9914a8e866ed4fd584f46c31381de311f4 Mon Sep 17 00:00:00 2001 From: ymq Date: Sat, 22 Aug 2026 08:16:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20load=5Fskill=20=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E5=BD=92=E4=B8=80=E5=8C=96=20role=EF=BC=88=E8=A3=B8=E5=90=8D?= =?UTF-8?q?=20qc/pm=20=E2=86=92=20agent.qc/agent.pm=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:qc_review_run/pm_review_run 调用 _load_skill_by_name 传裸名 'qc'/'pm', get_merged(role='qc') 加载不到 roles/agent.qc/ 目录,导致 QC 审查 design 时 load_skill(review-design) 失败 → 退回 3 次达上限 → 任务 waiting → 项目 paused。 修复:_load_skill_by_name 内部 _normalize_role(role),覆盖所有调用点。 --- pipeline_service/agent_loop.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pipeline_service/agent_loop.py b/pipeline_service/agent_loop.py index 1e34f90..8694be4 100644 --- a/pipeline_service/agent_loop.py +++ b/pipeline_service/agent_loop.py @@ -1096,6 +1096,7 @@ async def _load_skill_by_name(sor, project_id, role, org_id, name, file_path=Non - 不带 file_path:返回技能 SKILL.md 全文 + 关联文件清单(references/scripts/templates/assets)。 - 带 file_path:返回 skill 目录下对应子文件内容(仅限 references/scripts/templates/assets)。 """ + role = _normalize_role(role) # 归一化:裸名 'qc'/'pm' → 'agent.qc'/'agent.pm',否则加载不到角色技能目录 name = (name or '').strip() if not name: return 'FAIL: 需要技能名称'