fix: 模块仓库本地 git 化——develop git_commit_push 自动 init+本地提交作为产出证据,QC 改查实际文件不再要求远程推送
根因:设计阶段模块仓库URL是规划占位地址(git@code.local),develop 的 git_clone 失败后 代码直接 write_file 到 repos/<模块>/ 但从未 git init,导致模块仓库无 .git;加上上一轮 「审核后统一提交」让 develop 连本地提交都不做,QC 找不到 git 提交证据 → qc_reject 死循环。 修复:_git_commit_push 非 git 目录自动 init;develop 提示词改为本地 git init + git_commit_push 提交模块仓库;QC 提示词改为 list_files/read_file 核验真实文件 + 本地提交,不因无远程推送退回。
This commit is contained in:
parent
38e47be4db
commit
d97c1442fa
@ -307,9 +307,14 @@ async def _git_setup(workdir):
|
|||||||
|
|
||||||
|
|
||||||
async def _git_commit_push(workdir, commit_message, branch='main'):
|
async def _git_commit_push(workdir, commit_message, branch='main'):
|
||||||
"""git add → commit → push(无 remote 的本地仓库仅 commit)。"""
|
"""git add → commit → push(无 remote 的本地仓库仅 commit)。非 git 目录自动 git init。"""
|
||||||
async with _git_lock(workdir):
|
async with _git_lock(workdir):
|
||||||
await _git_setup(workdir)
|
await _git_setup(workdir)
|
||||||
|
# 非 git 目录自动 git init(模块仓库无真实远端,本地 git init)
|
||||||
|
if not os.path.isdir(os.path.join(workdir, '.git')):
|
||||||
|
r0 = await _run_shell('git init', workdir, 10)
|
||||||
|
if r0['rc'] != 0:
|
||||||
|
return {"rc": r0['rc'], "message": f"git init 失败: {r0['stderr'][:200]}"}
|
||||||
r1 = await _run_shell('git add -A', workdir, 10)
|
r1 = await _run_shell('git add -A', workdir, 10)
|
||||||
r2 = await _run_shell(f'git diff --cached --stat', workdir, 10)
|
r2 = await _run_shell(f'git diff --cached --stat', workdir, 10)
|
||||||
if not r2.get('stdout', '').strip():
|
if not r2.get('stdout', '').strip():
|
||||||
@ -346,7 +351,7 @@ AGENT_TOOLS = [
|
|||||||
{"name":"run_shell","description":"在工作空间中执行shell命令","params":{"command":"命令"}},
|
{"name":"run_shell","description":"在工作空间中执行shell命令","params":{"command":"命令"}},
|
||||||
{"name":"git_clone","description":"克隆git仓库到工作空间repos/下","params":{"repo_url":"仓库URL","repo_name":"仓库目录名(可选,默认从URL推断)","branch":"分支(可选,默认main)"}},
|
{"name":"git_clone","description":"克隆git仓库到工作空间repos/下","params":{"repo_url":"仓库URL","repo_name":"仓库目录名(可选,默认从URL推断)","branch":"分支(可选,默认main)"}},
|
||||||
{"name":"git_status","description":"查看git仓库状态","params":{"repo_dir":"仓库子目录(可选,默认repos下第一个)"}},
|
{"name":"git_status","description":"查看git仓库状态","params":{"repo_dir":"仓库子目录(可选,默认repos下第一个)"}},
|
||||||
{"name":"git_commit_push","description":"git add + commit + push(一般无需调用:git 提交由 PM 审核通过后系统统一执行)","params":{"message":"提交信息","repo_dir":"仓库子目录(可选)"}},
|
{"name":"git_commit_push","description":"git add + commit + push(develop 用它提交模块仓库本地提交作为产出证据;无远程只 commit 不 push,非 git 目录自动 init)","params":{"message":"提交信息","repo_dir":"仓库子目录(可选)"}},
|
||||||
{"name":"ask_question","description":"向用户提问(缺少信息时使用)","params":{"question":"问题"}},
|
{"name":"ask_question","description":"向用户提问(缺少信息时使用)","params":{"question":"问题"}},
|
||||||
{"name":"deliver","description":"提交最终交付件(代码/文档文件已用write_file写好时调用)","params":{"deliverable_type":"交付件类型(如code_files/design_doc)","summary":"概述","result":"交付件正文","files":"JSON数组[{\"path\":\"repos/仓库/src/x.py\",\"content\":\"代码内容\"}](可选)"}},
|
{"name":"deliver","description":"提交最终交付件(代码/文档文件已用write_file写好时调用)","params":{"deliverable_type":"交付件类型(如code_files/design_doc)","summary":"概述","result":"交付件正文","files":"JSON数组[{\"path\":\"repos/仓库/src/x.py\",\"content\":\"代码内容\"}](可选)"}},
|
||||||
]
|
]
|
||||||
|
|||||||
@ -268,7 +268,7 @@ SDL_ROLES = [
|
|||||||
- ui-design.md: 视觉风格(配色/字体/间距)、主页面布局、用户交互模式、弹窗/表单规范
|
- ui-design.md: 视觉风格(配色/字体/间距)、主页面布局、用户交互模式、弹窗/表单规范
|
||||||
|
|
||||||
模块级设计(每个模块自包含、可复用,产出到 repos/project/modules/):
|
模块级设计(每个模块自包含、可复用,产出到 repos/project/modules/):
|
||||||
- modules/<模块名>.md: 模块功能、仓库URL(先填规划地址)、技术栈、依赖、开发顺序
|
- modules/<模块名>.md: 模块功能、仓库目录(本地 git 仓库 repos/<模块名>,无真实远端)、技术栈、依赖、开发顺序
|
||||||
- modules/<模块名>/design.md: 该模块的数据设计(表结构DDL) + CRUD 定义 + 处理逻辑(接口)
|
- modules/<模块名>/design.md: 该模块的数据设计(表结构DDL) + CRUD 定义 + 处理逻辑(接口)
|
||||||
- modules/<模块名>/skill/SKILL.md: 该模块技能文档
|
- modules/<模块名>/skill/SKILL.md: 该模块技能文档
|
||||||
数据、CRUD、处理逻辑、skills 都属于模块本身,不放在应用级 design——这样模块可整体复用。
|
数据、CRUD、处理逻辑、skills 都属于模块本身,不放在应用级 design——这样模块可整体复用。
|
||||||
@ -288,14 +288,15 @@ SDL_ROLES = [
|
|||||||
准备工作:
|
准备工作:
|
||||||
1. read_file 读 repos/project/docs/01-design/ 下架构与 UI 设计文档
|
1. read_file 读 repos/project/docs/01-design/ 下架构与 UI 设计文档
|
||||||
2. read_file 读 repos/project/modules/<模块名>.md 获取模块仓库 URL,读 repos/project/modules/<模块名>/design.md 获取数据设计/CRUD/处理逻辑
|
2. read_file 读 repos/project/modules/<模块名>.md 获取模块仓库 URL,读 repos/project/modules/<模块名>/design.md 获取数据设计/CRUD/处理逻辑
|
||||||
3. git_clone 克隆模块仓库到 repos/ 下
|
3. 模块仓库是本地 git 仓库 repos/<模块名>/(设计里的仓库URL是规划占位地址、无真实远端,不要 git_clone)
|
||||||
开发流程:
|
开发流程:
|
||||||
4. write_file 写代码到模块仓库目录
|
4. write_file 写代码到模块仓库目录
|
||||||
5. run_shell 编译/运行验证
|
5. run_shell 编译/运行验证
|
||||||
6. write_file 更新 repos/project/modules/<模块名>.md 状态为已完成
|
6. git_commit_push 提交模块仓库代码(本地提交,无远程只 commit 不 push,非 git 目录自动 init;这是 QC 核验「实际产出」的硬证据,务必执行)
|
||||||
7. write_file 写 repos/project/docs/02-develop/dev-notes.md 记录开发内容
|
7. write_file 更新 repos/project/modules/<模块名>.md 状态为已完成
|
||||||
8. deliver 交付,files 列出所有产出文件路径(git 提交由 PM 审核通过后系统统一执行)
|
8. write_file 写 repos/project/docs/02-develop/dev-notes.md 记录开发内容
|
||||||
PM审核: list_files/read_file 检查代码文件实际产出。""",
|
9. deliver 交付,files 列出所有产出文件路径
|
||||||
|
PM审核: list_files/read_file 检查代码文件实际产出 + 模块仓库本地 git log 有提交。""",
|
||||||
next_role="agent.deploy_test",
|
next_role="agent.deploy_test",
|
||||||
),
|
),
|
||||||
RoleSpec(
|
RoleSpec(
|
||||||
@ -354,8 +355,9 @@ PM审核: 检查生产部署配置完整、可一键部署、有回滚方案。"
|
|||||||
|
|
||||||
检查维度:
|
检查维度:
|
||||||
1. 项目规范检查: 产出是否按 SDLC 仓库标准路径/命名/格式产出
|
1. 项目规范检查: 产出是否按 SDLC 仓库标准路径/命名/格式产出
|
||||||
2. 项目过程规范: 是否遵循各阶段流程规范(develop 是否实际产出代码文件、test 是否覆盖充分、deploy 配置是否完整)
|
2. 项目过程规范: 是否遵循各阶段流程规范(develop 是否实际产出代码文件——用 list_files 列 repos/<模块>/ 下的 src/sql/tests 等真实文件、read_file 抽查内容、git log 看模块仓库本地提交;test 是否覆盖充分、deploy 配置是否完整)
|
||||||
3. 产出质量: 内容是否完整、可量化、可验收、无重大缺陷
|
3. 产出质量: 内容是否完整、可量化、可验收、无重大缺陷
|
||||||
|
核验原则: git 提交是 develop 对模块仓库的「本地提交」(无远程推送),用 list_files/read_file 核验文件真实落盘即可,不要因「无远程推送」退回。
|
||||||
不合规处理: review_reject 退回重做,questions 列出具体问题清单。""",
|
不合规处理: review_reject 退回重做,questions 列出具体问题清单。""",
|
||||||
next_role="",
|
next_role="",
|
||||||
),
|
),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user