merge: 合并失败补救完成后自动收口原任务 [tsk_BagzbKZNAHXV]
手工解决 src/api/server.ts 冲突(keep-both):main 的 cleanupTaskRunArtifacts(合并后回收 run 目录)与分支的 findMergeOriginTask/remediateOrigin(补救任务合并成功后自动把原任务标 done)互补,均保留;ensureMergeRemediationTask 调用补 conflictFiles。其余文件(store.ts/types.ts/merge.ts/web/test)自动合并。typecheck + 183 测试全绿。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+11
-1
@@ -325,7 +325,8 @@ export function buildServer(opts: ApiOptions): FastifyInstance {
|
||||
if (!mr.ok) {
|
||||
// 自动合并失败(多为冲突)→ 建/复用最高优先级补救任务来完成合并,原任务留在审核闸
|
||||
const rem = store.ensureMergeRemediationTask(task.id, {
|
||||
branch, targetBranch: project.defaultBranch, conflictError: mr.error ?? '未知冲突',
|
||||
branch, targetBranch: project.defaultBranch,
|
||||
conflictError: mr.error ?? '未知冲突', conflictFiles: mr.conflictFiles,
|
||||
});
|
||||
throw new StoreError(`合并失败:${mr.error}(原任务保留在审核闸;已建最高优先级补救任务 ${rem.id}「${rem.title}」来完成合并)`);
|
||||
}
|
||||
@@ -337,6 +338,15 @@ export function buildServer(opts: ApiOptions): FastifyInstance {
|
||||
// 任务此刻已 done(终态),cleanupTaskRunArtifacts 内部据此放行;同步删(纯本地 fs,快)。
|
||||
const reclaimed = cleanupTaskRunArtifacts(store, id, app.log);
|
||||
if (reclaimed) app.log.info(`任务 ${id} 合并后回收 ${reclaimed} 个 run 工作目录`);
|
||||
// 补救完成自动收口:若本任务是某原任务的「合并冲突补救」任务,合并成功后把原任务也标 done
|
||||
const origin = store.findMergeOriginTask(id);
|
||||
if (origin) {
|
||||
try {
|
||||
store.remediateOrigin(origin.id, id, mr.mergeCommit);
|
||||
} catch (e) {
|
||||
app.log.error(`补救任务 ${id} 合并后收口原任务 ${origin.id} 失败(不影响本任务结果):${(e as Error).message}`);
|
||||
}
|
||||
}
|
||||
// 异步回收:执行 worktree + 已合并的任务分支(失败只记日志,不影响响应)
|
||||
void (async () => {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user