fix: 项目输出文件必须落项目空间——项目名缺失时project_dir用project_id兜底,不再落到产线空间根/复盘报告落projects/根

This commit is contained in:
ymq 2026-09-02 11:46:07 +08:00
parent ae213b2f91
commit 77477c6caf

View File

@ -2253,7 +2253,7 @@ async def role_agent_run(project_id, role, agent_id=None, model_name=None):
role_skills = await _build_role_skills_block(sor, project_id, role, org_id)
# 项目目录名(英文 slug,用于 projects/{项目}/ 路径;产出路径以 project-directory-spec 为准)
project_name = await _get_project_name(sor, project_id)
project_dir = os.path.join(space_dir, 'projects', project_name) if project_name else space_dir
project_dir = os.path.join(space_dir, 'projects', project_name) if project_name else os.path.join(space_dir, 'projects', project_id)
# 能力工具上下文(project_id/iteration_id/who/agent_id 自动注入,LLM 不可见)
_iter = None
try:
@ -2782,7 +2782,7 @@ async def pm_review_run(project_id, agent_id=None, model_name=None):
workspace_dir = await _get_workspace_dir(sor, project_id)
space_dir = await _get_space_dir(sor, project_id)
project_name = await _get_project_name(sor, project_id)
project_dir = os.path.join(space_dir, 'projects', project_name) if project_name else space_dir
project_dir = os.path.join(space_dir, 'projects', project_name) if project_name else os.path.join(space_dir, 'projects', project_id)
try:
await sor.sqlExe("COMMIT", {})
@ -3335,7 +3335,7 @@ async def retrospective_run(project_id, agent_id=None, model_name=None):
space_dir = await _get_space_dir(sor, project_id)
project_name = await _get_project_name(sor, project_id)
project_dir = os.path.join(space_dir, 'projects', project_name) if project_name else space_dir
project_dir = os.path.join(space_dir, 'projects', project_name) if project_name else os.path.join(space_dir, 'projects', project_id)
await sor.sqlExe("COMMIT", {})
# 问题素材(代码统一收集,PM 不重复实现查询)
@ -3407,7 +3407,8 @@ async def retrospective_run(project_id, agent_id=None, model_name=None):
# 报告优先取 LLM write_file 已写的完整版(工具轮写盘),deliver 摘要仅作兜底——
# 否则完整报告被摘要覆盖、五段结构丢失。
result_text = deliverable.get("result") or deliverable.get("summary") or ""
report_rel = os.path.join('projects', project_name or '', 'docs', '02-retrospective', 'retrospective.md')
# 输出文件必须在项目空间内:项目名缺失时用 project_id 兜底目录名(不再落 projects/ 根)
report_rel = os.path.join('projects', project_name or project_id, 'docs', '02-retrospective', 'retrospective.md')
report_abs = os.path.join(space_dir, report_rel)
try:
if os.path.isfile(report_abs):