diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f400cf..6633718 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -481,3 +481,6 @@ - 全局 `AI 视频 / 实拍剪辑` 主按钮也已经切到 direct-execute,会直接承接最近可派生任务,不再优先打开旧表单。 - 全局 `写复盘` 旧入口现在也会优先围绕最近已完成任务 direct-execute;只有当前项目还没有可承接任务时,才回退到手工复盘表单。 - 全局 `生成文案` 旧入口也已经做成相同分流:优先围绕最近完成任务直接生成,只有没有可承接任务时才回退到旧文案表单。 +# 2026-04-05 + +- review: `任务详情 -> 写复盘` 旧入口改成 direct-execute,带 `source_job_id` 直接生成复盘草稿,不再优先打开旧复盘表单。 diff --git a/web/storyforge-web-v4/assets/app.js b/web/storyforge-web-v4/assets/app.js index a63d1b4..aa744a5 100644 --- a/web/storyforge-web-v4/assets/app.js +++ b/web/storyforge-web-v4/assets/app.js @@ -12434,6 +12434,14 @@ document.addEventListener("click", async (event) => { } if (name === "open-review-from-job") { const jobId = action.dataset.jobId || ""; + if (jobId) { + await runDirectWorkbenchAction("review-draft", { + busyLabel: "正在生成复盘草稿...", + errorTitle: "生成复盘草稿失败", + payload: { source_job_id: jobId } + }); + return; + } const fromDashboard = safeArray(appState.dashboard?.recent_jobs).find((item) => item.id === jobId) || null; const fromDetail = appState.lastJobDetail?.job?.id === jobId ? appState.lastJobDetail.job : null; openReviewAction({ diff --git a/web/storyforge-web-v4/tests/workbench-pages.test.mjs b/web/storyforge-web-v4/tests/workbench-pages.test.mjs index a62a42e..a29ed56 100644 --- a/web/storyforge-web-v4/tests/workbench-pages.test.mjs +++ b/web/storyforge-web-v4/tests/workbench-pages.test.mjs @@ -1037,6 +1037,8 @@ test("playbook and review high-frequency actions now reuse direct execute handle assert.match(clickActions, /name === "open-generate-copy"[\s\S]*const fallbackJob = getLatestCompletedProjectJob\(\)/); assert.match(clickActions, /name === "open-generate-copy"[\s\S]*runDirectWorkbenchAction\("generate-copy"/); assert.match(clickActions, /name === "open-generate-copy"[\s\S]*openGenerateCopyAction\(\)/); + assert.match(clickActions, /name === "open-review-from-job"[\s\S]*runDirectWorkbenchAction\("review-draft"/); + assert.match(clickActions, /name === "open-review-from-job"[\s\S]*payload: \{ source_job_id: jobId \}/); }); test("main agent landing notices expose a compact mobile follow-up strip", () => {