Repository navigation
复用项目任务,完善冲突取回与自动测试及未推送状态 - #6
Conversation
[High impact] The PR changes project-task and Git behavior across several common plugin workflows. 合并前应补齐冲突任务的会话编号,否则正常测试回报可能始终无法保存。 FindingsFix with agent prompt### Issue 1
plugin/conflict-service.js:26
如果 `agent.errand` 先返回 `jobId`,随后由 `queryErrand` 返回 `sessionId`,冲突记录就始终缺少会话编号。`conflict-read` 只保存任务状态,没有补存 `reply.sessionId`,而这里要求会话编号完全匹配。因此,原任务的所有测试回报都会被拒绝,Stash 协助也无法正常确认测试通过。请像 `project-sidebar.js` 一样,从查询回执补存会话编号。
### Issue 2
plugin/conflict-service.js:30-31
这里读取的 `diagnosis-status` 没有返回 `pendingGit`,所以未完成 Git 操作的检查永远不生效。项目仍有 `MERGE_HEAD`、正在 rebase 或存在未合并文件时,只要任务回报零退出码且没有插件写锁,就会保存并显示测试通过。`verifyTests` 也依赖同一个缺失字段。后续解除限制仍会被另一道检查拦住,但页面已经显示了错误状态。请让这条只读状态路径返回真实的 `pendingGit`,并用真实 Git 状态补充回归测试。
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
|
| async function handle(method,params,source) { | ||
| if(method==='conflict-tests-report') { | ||
| const data=await store.read(),sessionId=source.sessionContext?.session_id; | ||
| const entry=Object.entries(data.conflictRepairsByDirectory||{}).find(([,item])=>item.id===params.recordId&&item.sessionId===sessionId); |
There was a problem hiding this comment.
如果 agent.errand 先返回 jobId,随后由 queryErrand 返回 sessionId,冲突记录就始终缺少会话编号。conflict-read 只保存任务状态,没有补存 reply.sessionId,而这里要求会话编号完全匹配。因此,原任务的所有测试回报都会被拒绝,Stash 协助也无法正常确认测试通过。请像 project-sidebar.js 一样,从查询回执补存会话编号。
Prompt To Fix With AI
This is a comment left during a code review.
Path: plugin/conflict-service.js
Line: 26
Comment:
**原任务的测试回报被拒绝**
如果 `agent.errand` 先返回 `jobId`,随后由 `queryErrand` 返回 `sessionId`,冲突记录就始终缺少会话编号。`conflict-read` 只保存任务状态,没有补存 `reply.sessionId`,而这里要求会话编号完全匹配。因此,原任务的所有测试回报都会被拒绝,Stash 协助也无法正常确认测试通过。请像 `project-sidebar.js` 一样,从查询回执补存会话编号。
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.| const actual=await git(record.directory,{action:'diagnosis-status'}); | ||
| if(actual.pendingGit||actual.operationLocked||!actual.fingerprint)fail('TESTS_UNVERIFIED','项目仍有未结束操作或状态无法核对,请先完成合并再测试。'); |
There was a problem hiding this comment.
这里读取的 diagnosis-status 没有返回 pendingGit,所以未完成 Git 操作的检查永远不生效。项目仍有 MERGE_HEAD、正在 rebase 或存在未合并文件时,只要任务回报零退出码且没有插件写锁,就会保存并显示测试通过。verifyTests 也依赖同一个缺失字段。后续解除限制仍会被另一道检查拦住,但页面已经显示了错误状态。请让这条只读状态路径返回真实的 pendingGit,并用真实 Git 状态补充回归测试。
Prompt To Fix With AI
This is a comment left during a code review.
Path: plugin/conflict-service.js
Line: 30-31
Comment:
**合并未结束却显示通过**
这里读取的 `diagnosis-status` 没有返回 `pendingGit`,所以未完成 Git 操作的检查永远不生效。项目仍有 `MERGE_HEAD`、正在 rebase 或存在未合并文件时,只要任务回报零退出码且没有插件写锁,就会保存并显示测试通过。`verifyTests` 也依赖同一个缺失字段。后续解除限制仍会被另一道检查拦住,但页面已经显示了错误状态。请让这条只读状态路径返回真实的 `pendingGit`,并用真实 Git 状态补充回归测试。
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
同一执行项目的冲突修复、UE 更新和高级工作流复用一个项目处理任务;各请求独立记录,未知请求不重放。UE 磁盘预检自动读取和估算,不要求用户手填容量上限。README 记录完整冲突流程及分阶段恢复合并内容的交接。
日常工作页显示当前分支、“已提交、未推送”数量及提交清单,即使工作区干净也提示未上传提交。基于本机远端缓存判断,分别显示领先/落后和待核对,不自动联网或推送。
Stash 支持条目、文件清单、本地/服务器最新版本对比、安全取回。真实隔离预检、文件/索引备份、固定条目标识、持久回执保护完整取回。冲突时可在同一项目任务协助合并并取回全部文件,保留双方文本、原有修改、暂存状态和原 Stash;二进制和语义取舍先询问。检查只读,不重新 apply 或自动更新。任务结束仍保持写入保护,核对后才解除;取消须匹配未改动指纹。
冲突修复先列出真实冲突清单(编号、相对路径、类型、原因、双方来源及建议),再由用户逐文件选择建议合并、保留本地、保留另一方、逐段决定或暂不处理。文本先预览再确认写入;二进制只给适用选项。选择按文件生效,最多三个独立文件一轮,不默认批量覆盖;内容或版本变化重新确认。暂不处理继续待解决,覆盖隔离预检冲突而不把整条 Stash 当成冲突。清单与选择由原项目 AI 任务展示,不新增窗口,缺选择框时用编号等待回答。
新增完整预览与重选:逐段决定后展示完整候选和相对本地差异,MD 给可读预览,长文件不得截断冒充全文;确认写入前可返回段落、撤销本轮选择或取消,源版本/选择变化后重新预览确认。实际写入前保存本轮逐文件原内容/索引及备份,写后记录摘要;撤销写入仅恢复用户确认的本轮文件,遇后续改动或缺快照先停下核对,不重置整库或整个索引。撤销/重写使测试回报回到 pending,再次完成后重测。
支持在原 AI 任务选择多份文件采用同一方案;使用真实可用的多选工具,缺多选时用稳定编号选集合。先列范围、数量、来源和逐项影响,逐文件预览确认才批量写入;二进制排除文本合并,失败停止剩余项并说明已写/未写与备份。此为 AI 工作流指令,未内置逐段编辑器或一键撤销执行器,真实交互待安装后验收。
新增合并后自动测试:任务读取项目规则、测试脚本和 CI,最终合并内容恢复后实际运行适用测试,再通过 report_conflict_tests 记录命令、退出码、摘要。按 Host 注入会话及处理编号核对回报,不受当前界面切换项目影响。测试回报为空、失败或缺少退出码不能 passed;任务结束本身不代表测试通过,测试后 Git 指纹变化要求重测。恢复卡显示待验证/运行中/通过/失败/无法运行及命令详情。Stash 完成确认要求测试通过;保留未改动取消及明确的人工解除入口,人工解除不会标记测试通过或取回完成。插件记录的是 Agent 执行回报,不是 Host 对进程的独立认证;更新中途解除限制只是交接,最终内容恢复后才测试。
不修改 Cindy 源码,不自动提交/上传用户项目或新增窗口。独立应用尚未接入 AI 修复/自动测试;旧任务不自动应用新指令。
验证:新增冲突服务/测试回报定向 14 项通过,覆盖通过/失败/缺少退出码/无入口、会话与编号归属、切换项目、状态变化失效、人工解除和防重放。浏览器使用正式 UI、真实 Git/Node worker 和配置控制器,真实执行成功及故意失败命令,验证未测和失败不能确认取回,测试通过后才确认;模拟的是 AI 派发/回报传输,真实模型待安装后验收。320/860 明暗模式、原更新恢复及实际 Electron IPC/Stash 取回回归通过。
Windows 完整 Node 回归仍为原有 23 项平台夹具失败,失败项集合未增加;本机发布脚本测试受 Windows shell/hook 夹具限制,不能算通过,完整结果以当前提交 CI 为准。仓库/语法检查通过,Forge 0.2.34 包的 66 个生产文件与源码逐字节一致。
当前提交 fe8d997(0.2.34)已推送,云端 214/214 项 Node 测试、29 项发布测试、三平台核心及全部 CodeQL 检查通过。保持草稿,仅上传 feat/reuse-project-task;未合并 main、未安装、未发布 Release。