@runfusion/fusion 0.74.0-beta.8 → 0.74.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +28 -12
- package/dist/child-process-worker.js +28 -12
- package/dist/client/.vite/manifest.json +257 -257
- package/dist/client/assets/{AgentDetailView-CnzGIxqj.js → AgentDetailView-DC3B06sE.js} +1 -1
- package/dist/client/assets/{AgentPermissionPolicyEditor-DMnyR96M.js → AgentPermissionPolicyEditor-BtKWfG2h.js} +1 -1
- package/dist/client/assets/{AgentsView-CzFtICwM.js → AgentsView-4DiJ2Htx.js} +3 -3
- package/dist/client/assets/{ChatView-Cs6B3fNf.js → ChatView-1nqZiDRk.js} +1 -1
- package/dist/client/assets/{CommandCenter-DADvho3z.js → CommandCenter-BHZN2tf0.js} +1 -1
- package/dist/client/assets/{DevServerView-Bzrzfs8Z.js → DevServerView-BwPjQxR_.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-rmip5GcI.js → DirectoryPicker-40vH29Sy.js} +1 -1
- package/dist/client/assets/{DocumentsView-BEM4nmJT.js → DocumentsView-DI2mQkGF.js} +1 -1
- package/dist/client/assets/{EvalsView-Du7NaYMJ.js → EvalsView-CTSt1-CF.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-BpIMiZOi.js → ExperimentalAgentOnboardingModal-Z1DJ2xFw.js} +1 -1
- package/dist/client/assets/{GoalsView-BxKRyXM3.js → GoalsView-BNyoKq27.js} +1 -1
- package/dist/client/assets/{InsightsView-Dauq6b3M.js → InsightsView-zSwsbTfk.js} +1 -1
- package/dist/client/assets/{MemoryView-DRD9Xvwx.js → MemoryView-e7R4rcQY.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-DJKE1iAX.js → PiExtensionsManager-DuZzMGuy.js} +1 -1
- package/dist/client/assets/{PluginManager-CScwY-Ib.js → PluginManager--lgPTCei.js} +1 -1
- package/dist/client/assets/{PullRequestView-uAu5_4__.js → PullRequestView-C9KOlfV-.js} +1 -1
- package/dist/client/assets/ReportModal-BiXAfHbg.js +21 -0
- package/dist/client/assets/ReportModal-M3uh98sc.css +1 -0
- package/dist/client/assets/{ResearchView-BX1kGbWP.js → ResearchView-N4N7-_7C.js} +1 -1
- package/dist/client/assets/{SecretsView-U_itETHx.js → SecretsView-GPt8Mw9d.js} +1 -1
- package/dist/client/assets/{SessionTerminal-_b15vcd9.js → SessionTerminal-D2bnTrLK.js} +1 -1
- package/dist/client/assets/{SettingsModal-DpbYR3Co.js → SettingsModal-D42Cph4Z.js} +3 -3
- package/dist/client/assets/{SettingsModal-DkpUKf4k.js → SettingsModal-DLKu3CYU.js} +1 -1
- package/dist/client/assets/{SettingsTextareaRow-Dbv-oqsF.js → SettingsTextareaRow-terwvp1e.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-n_kcJfIP.js → SetupWizardModal-C-ApHZiL.js} +2 -2
- package/dist/client/assets/{SkillsView-Bv2uqBre.js → SkillsView-GYBeq0B-.js} +1 -1
- package/dist/client/assets/{TodoView-y11oUvjw.js → TodoView-_1AmNwaZ.js} +1 -1
- package/dist/client/assets/{WorkflowNodeEditor-DwY4XzNB.js → WorkflowNodeEditor-CYf2R0ap.js} +1 -1
- package/dist/client/assets/{agent-import-generation-B_UNOAWY.js → agent-import-generation-BZPb1nmV.js} +1 -1
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-BpA9_eoq.js → architectureDiagram-3BPJPVTR-C_wwNBnV.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-DFFA8tCG.js → blockDiagram-GPEHLZMM-C7URdbgi.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-Fzhn0dG7.js → c4Diagram-AAUBKEIU-BBc8CXBz.js} +1 -1
- package/dist/client/assets/channel-M95yBImf.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-Bi3oPWBJ.js → chunk-2J33WTMH-KfVf5U4u.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-UmeI_To2.js → chunk-4BX2VUAB-BYzFvVsE.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-BvNWeThd.js → chunk-55IACEB6-B-sxSeny.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-OHmjSQwz.js → chunk-727SXJPM-B0xJsLsd.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-DCi9eQaE.js → chunk-AQP2D5EJ-BQ9rJQCA.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-CelGyE3R.js → chunk-FMBD7UC4-DR-KABew.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-DespM-6E.js → chunk-ND2GUHAM-C6ZnAzm4.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-DLkr_Pz0.js → chunk-QZHKN3VN-zs4tZGnv.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-DU8poSst.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DU8poSst.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-I7MlbwDq.js → cose-bilkent-S5V4N54A-DnljjIm-.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-DRwLRj5m.js → dagre-BM42HDAG-CEX8DHCo.js} +1 -1
- package/dist/client/assets/{dashboard-view-CSxVzmpI.js → dashboard-view-Chxgvuq4.js} +1 -1
- package/dist/client/assets/{dashboard-view-Gb436HIO.js → dashboard-view-DPCI6MD3.js} +1 -1
- package/dist/client/assets/{dashboard-view-CIwO3ODB.js → dashboard-view-D_xtIayp.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-BuWGDbh_.js → diagram-2AECGRRQ-Dl9VFNxu.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-hG6N6ArX.js → diagram-5GNKFQAL-BPvDRIKP.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-BSXKqQJA.js → diagram-KO2AKTUF-c1v9YI9G.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-wNefeM2W.js → diagram-LMA3HP47-ChVDgN1K.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-nA8v_k_H.js → diagram-OG6HWLK6-Cns2RBoA.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-Dwnvvp2x.js → erDiagram-TEJ5UH35-D33nn5Lx.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-FS4W3U0O.js → flowDiagram-I6XJVG4X-BluS50at.js} +1 -1
- package/dist/client/assets/{folder-open-C3GXrzUo.js → folder-open-oeYf8Ijc.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-D95bgKFE.js → ganttDiagram-6RSMTGT7-D78LznXX.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-zqFbK6on.js → gitGraphDiagram-PVQCEYII-Cz-VVeuo.js} +1 -1
- package/dist/client/assets/index-Clr90mLV.js +2675 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-BBELQBNE.js → infoDiagram-5YYISTIA-DW64QGM7.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-bSZkIXd-.js → ishikawaDiagram-YF4QCWOH-zB3QANvt.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-8wIimXRT.js → journeyDiagram-JHISSGLW-nVRvkAiF.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-DMj6kFc5.js → kanban-definition-UN3LZRKU-DIsRSNcB.js} +1 -1
- package/dist/client/assets/{mermaid.core-UDKENpfo.js → mermaid.core-ByWbtMdM.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-CJGH0VYQ.js → mindmap-definition-RKZ34NQL-BbZZGyk5.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-B3cZLcOe.js → pieDiagram-4H26LBE5-xEuGzir-.js} +1 -1
- package/dist/client/assets/{puzzle-D85LM19g.js → puzzle-DfKZ6p_i.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-bR1CBrVi.js → quadrantDiagram-W4KKPZXB-CXU0exeD.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-DnyJ74cE.js → requirementDiagram-4Y6WPE33-xrqjvySl.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-ttv4kq0z.js → sankeyDiagram-5OEKKPKP-B_XL-dlB.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-FiUBFoWw.js → sequenceDiagram-3UESZ5HK-yPNpJSyq.js} +1 -1
- package/dist/client/assets/{shield-alert-D3IVOJV1.js → shield-alert-C0mvrTVY.js} +1 -1
- package/dist/client/assets/{standing-instructions-template-CWY_pFh6.js → standing-instructions-template-BA-Y897i.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-BcsYRB77.js → stateDiagram-AJRCARHV-B3WacriB.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-DsBPFwnG.js → stateDiagram-v2-BHNVJYJU-C2J3lqDw.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-B8rOOxEj.js → timeline-definition-PNZ67QCA-BMDzGW-H.js} +1 -1
- package/dist/client/assets/{upload-WqSaqC__.js → upload-BcE2JLKs.js} +1 -1
- package/dist/client/assets/{users-CPP-3wxQ.js → users-CG9A3bIX.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-CO0LSFj2.js → vennDiagram-CIIHVFJN-C7ZUUi6G.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-QHbclXGi.js → wardley-L42UT6IY-zpz98dmH.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-DAsnTuM9.js → wardleyDiagram-YWT4CUSO-D4TOrUW4.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-BmG5EEoO.js → xychartDiagram-2RQKCTM6-CDfiiyNj.js} +1 -1
- package/dist/client/index.html +3 -2
- package/dist/client/theme-data.css +85 -1
- package/dist/client/version.json +1 -1
- package/dist/extension.js +28 -12
- package/package.json +1 -1
- package/dist/client/assets/ReportModal-Bg-XvWay.css +0 -1
- package/dist/client/assets/ReportModal-nNUcGxYj.js +0 -21
- package/dist/client/assets/channel-C9C9Rxgn.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-BGVE_u03.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BGVE_u03.js +0 -1
- package/dist/client/assets/index-BWRNl9tu.js +0 -2675
package/dist/bin.js
CHANGED
|
@@ -867,6 +867,11 @@ var init_execution_and_ui = __esm({
|
|
|
867
867
|
"dawn",
|
|
868
868
|
// FNXC:DashboardTheming 2026-07-31-21:28: Sage must stay order-synchronized across core, selector metadata, and both first-paint validators so saved preferences survive pre-hydration validation.
|
|
869
869
|
"sage",
|
|
870
|
+
/*
|
|
871
|
+
FNXC:MidnightTheme 2026-08-03-02:05:
|
|
872
|
+
Midnight is a persisted selectable dashboard theme. Keep its id and order synchronized with selector metadata and both web/Electron first-paint validators so saved choices survive before hydration, while shadcn-ember remains the unset default.
|
|
873
|
+
*/
|
|
874
|
+
"midnight",
|
|
870
875
|
// FNXC:DashboardTheming 2026-07-31-20:39: Factory Dark must stay order-synchronized across core, selector metadata, and both first-paint validators so saved preferences survive pre-hydration validation.
|
|
871
876
|
"factory-dark",
|
|
872
877
|
// FNXC:DashboardTheming 2026-07-31-23:51: Factory Light must stay order-synchronized across core, selector metadata, and both first-paint validators so saved preferences survive pre-hydration validation.
|
|
@@ -96698,15 +96703,20 @@ async function updateTaskUnlockedImpl(store, id, updates, runContext) {
|
|
|
96698
96703
|
task.workspaceWorktrees = updates.workspaceWorktrees;
|
|
96699
96704
|
}
|
|
96700
96705
|
let movedToTriage = false;
|
|
96706
|
+
let respecifyFromColumn;
|
|
96707
|
+
let respecifyMoveLanes;
|
|
96701
96708
|
if (updates.dependencies !== void 0) {
|
|
96702
96709
|
const oldDeps = new Set((task.dependencies ?? []).map((dependency) => dependency.trim()).filter(Boolean));
|
|
96703
96710
|
const normalizedDependencies = updates.dependencies.map((dependency) => dependency.trim()).filter(Boolean);
|
|
96704
96711
|
const hasNewDeps = normalizedDependencies.some((d) => !oldDeps.has(d));
|
|
96705
96712
|
task.dependencies = normalizedDependencies;
|
|
96706
|
-
const
|
|
96713
|
+
const respecifyIr = hasNewDeps ? await resolveWorkflowIrForTask(store, id).catch(() => void 0) : void 0;
|
|
96714
|
+
respecifyMoveLanes = toTaskMoveLanes(respecifyIr);
|
|
96715
|
+
const depLanes = respecifyIr ? resolveLifecycleColumns(respecifyIr) : void 0;
|
|
96707
96716
|
const holdLane = depLanes === void 0 ? "todo" : depLanes.hold;
|
|
96708
96717
|
if (hasNewDeps && holdLane !== void 0 && task.column === holdLane) {
|
|
96709
96718
|
const intakeLane = depLanes?.intake;
|
|
96719
|
+
respecifyFromColumn = task.column;
|
|
96710
96720
|
const relocating = intakeLane !== void 0 && intakeLane !== task.column;
|
|
96711
96721
|
if (relocating) {
|
|
96712
96722
|
task.column = intakeLane;
|
|
@@ -97384,10 +97394,15 @@ async function updateTaskUnlockedImpl(store, id, updates, runContext) {
|
|
|
97384
97394
|
storeLog.warn(`[task-detail] failed to sync PROMPT.md heading for ${task.id}: ${err instanceof Error ? err.message : String(err)}`);
|
|
97385
97395
|
}
|
|
97386
97396
|
}
|
|
97387
|
-
if (movedToTriage) {
|
|
97388
|
-
|
|
97389
|
-
store.
|
|
97390
|
-
|
|
97397
|
+
if (movedToTriage && respecifyFromColumn !== void 0 && respecifyFromColumn !== task.column && respecifyMoveLanes) {
|
|
97398
|
+
store.laneCache.set(task.id, respecifyMoveLanes);
|
|
97399
|
+
store.emit("task:moved", {
|
|
97400
|
+
task,
|
|
97401
|
+
from: respecifyFromColumn,
|
|
97402
|
+
to: task.column,
|
|
97403
|
+
source: "engine",
|
|
97404
|
+
lanes: respecifyMoveLanes
|
|
97405
|
+
});
|
|
97391
97406
|
}
|
|
97392
97407
|
store.emitTaskLifecycleEventSafely("task:updated", [task]);
|
|
97393
97408
|
return task;
|
|
@@ -97399,7 +97414,6 @@ var init_task_update = __esm({
|
|
|
97399
97414
|
init_store();
|
|
97400
97415
|
init_workflow_lifecycle_traits();
|
|
97401
97416
|
init_workflow_ir_resolver();
|
|
97402
|
-
init_workflow_lifecycle_traits();
|
|
97403
97417
|
init_errors3();
|
|
97404
97418
|
init_task_fields();
|
|
97405
97419
|
init_builtin_traits();
|
|
@@ -205606,6 +205620,7 @@ var init_self_healing = __esm({
|
|
|
205606
205620
|
}
|
|
205607
205621
|
async reclaimStaleActiveBranches() {
|
|
205608
205622
|
const reclaimArchivedColumns = await resolveProjectColumnsForRoles(this.store, ["archived"]);
|
|
205623
|
+
const reclaimCompleteColumns = await resolveProjectColumnsForRoles(this.store, ["complete"]);
|
|
205609
205624
|
try {
|
|
205610
205625
|
const settings = await this.store.getSettings();
|
|
205611
205626
|
if (settings.globalPause || settings.enginePaused) return 0;
|
|
@@ -205703,10 +205718,12 @@ var init_self_healing = __esm({
|
|
|
205703
205718
|
if (task.worktree && await isUsableTaskWorktree(this.options.rootDir, task.worktree)) continue;
|
|
205704
205719
|
const inspection = await this.inspectOrphanedBranch(branch);
|
|
205705
205720
|
if (!inspection) continue;
|
|
205706
|
-
|
|
205721
|
+
const isCompleteColumn2 = reclaimCompleteColumns.has(task.column);
|
|
205722
|
+
if (inspection.uniqueCommitCount > 0 && !isCompleteColumn2) {
|
|
205707
205723
|
log33.warn(`[recovery] stale-active-branch-rescue-needed ${task.id} branch=${branch} unique=${inspection.uniqueCommitCount} tip=${inspection.tipSha.slice(0, 12)}`);
|
|
205708
205724
|
continue;
|
|
205709
205725
|
}
|
|
205726
|
+
const reclaimReason = inspection.uniqueCommitCount > 0 ? "complete-column-unique-commits-force" : "zero-unique-commits-no-worktree";
|
|
205710
205727
|
await execAsync18(`git branch -D ${JSON.stringify(branch)}`, {
|
|
205711
205728
|
cwd: this.options.rootDir,
|
|
205712
205729
|
timeout: 12e4,
|
|
@@ -205724,7 +205741,7 @@ var init_self_healing = __esm({
|
|
|
205724
205741
|
});
|
|
205725
205742
|
await this.store.logEntry(
|
|
205726
205743
|
task.id,
|
|
205727
|
-
`[recovery] stale-active-branch-reclaim ${task.id} branch=${branch} reason
|
|
205744
|
+
`[recovery] stale-active-branch-reclaim ${task.id} branch=${branch} reason=${reclaimReason}`
|
|
205728
205745
|
);
|
|
205729
205746
|
try {
|
|
205730
205747
|
const auditor = createRunAuditor(this.store, {
|
|
@@ -205742,7 +205759,7 @@ var init_self_healing = __esm({
|
|
|
205742
205759
|
branch,
|
|
205743
205760
|
tipSha: inspection.tipSha,
|
|
205744
205761
|
uniqueCommitCount: inspection.uniqueCommitCount,
|
|
205745
|
-
reason:
|
|
205762
|
+
reason: reclaimReason
|
|
205746
205763
|
}
|
|
205747
205764
|
});
|
|
205748
205765
|
} catch (auditErr) {
|
|
@@ -205789,10 +205806,9 @@ var init_self_healing = __esm({
|
|
|
205789
205806
|
const baseBranch = task.baseBranch || await resolveIntegrationBranch(this.options.rootDir, void 0);
|
|
205790
205807
|
const comparison = await listUniqueBranchCommits(this.options.rootDir, baseBranch, branchName);
|
|
205791
205808
|
if (comparison.commits.length > 0) {
|
|
205792
|
-
log33.
|
|
205793
|
-
`[self-healing] reconcileCompletedTask ${task.id}: branch ${branchName} has ${comparison.commits.length} unique commit(s) vs ${comparison.mainRef};
|
|
205809
|
+
log33.log(
|
|
205810
|
+
`[self-healing] reconcileCompletedTask ${task.id}: branch ${branchName} has ${comparison.commits.length} unique commit(s) vs ${comparison.mainRef}; force-deleting post-completion (squash-safe)`
|
|
205794
205811
|
);
|
|
205795
|
-
return false;
|
|
205796
205812
|
}
|
|
205797
205813
|
try {
|
|
205798
205814
|
await execAsync18(`git branch -D ${shellQuote2(branchName)}`, {
|
|
@@ -865,6 +865,11 @@ var init_execution_and_ui = __esm({
|
|
|
865
865
|
"dawn",
|
|
866
866
|
// FNXC:DashboardTheming 2026-07-31-21:28: Sage must stay order-synchronized across core, selector metadata, and both first-paint validators so saved preferences survive pre-hydration validation.
|
|
867
867
|
"sage",
|
|
868
|
+
/*
|
|
869
|
+
FNXC:MidnightTheme 2026-08-03-02:05:
|
|
870
|
+
Midnight is a persisted selectable dashboard theme. Keep its id and order synchronized with selector metadata and both web/Electron first-paint validators so saved choices survive before hydration, while shadcn-ember remains the unset default.
|
|
871
|
+
*/
|
|
872
|
+
"midnight",
|
|
868
873
|
// FNXC:DashboardTheming 2026-07-31-20:39: Factory Dark must stay order-synchronized across core, selector metadata, and both first-paint validators so saved preferences survive pre-hydration validation.
|
|
869
874
|
"factory-dark",
|
|
870
875
|
// FNXC:DashboardTheming 2026-07-31-23:51: Factory Light must stay order-synchronized across core, selector metadata, and both first-paint validators so saved preferences survive pre-hydration validation.
|
|
@@ -96696,15 +96701,20 @@ async function updateTaskUnlockedImpl(store, id, updates, runContext) {
|
|
|
96696
96701
|
task.workspaceWorktrees = updates.workspaceWorktrees;
|
|
96697
96702
|
}
|
|
96698
96703
|
let movedToTriage = false;
|
|
96704
|
+
let respecifyFromColumn;
|
|
96705
|
+
let respecifyMoveLanes;
|
|
96699
96706
|
if (updates.dependencies !== void 0) {
|
|
96700
96707
|
const oldDeps = new Set((task.dependencies ?? []).map((dependency) => dependency.trim()).filter(Boolean));
|
|
96701
96708
|
const normalizedDependencies = updates.dependencies.map((dependency) => dependency.trim()).filter(Boolean);
|
|
96702
96709
|
const hasNewDeps = normalizedDependencies.some((d) => !oldDeps.has(d));
|
|
96703
96710
|
task.dependencies = normalizedDependencies;
|
|
96704
|
-
const
|
|
96711
|
+
const respecifyIr = hasNewDeps ? await resolveWorkflowIrForTask(store, id).catch(() => void 0) : void 0;
|
|
96712
|
+
respecifyMoveLanes = toTaskMoveLanes(respecifyIr);
|
|
96713
|
+
const depLanes = respecifyIr ? resolveLifecycleColumns(respecifyIr) : void 0;
|
|
96705
96714
|
const holdLane = depLanes === void 0 ? "todo" : depLanes.hold;
|
|
96706
96715
|
if (hasNewDeps && holdLane !== void 0 && task.column === holdLane) {
|
|
96707
96716
|
const intakeLane = depLanes?.intake;
|
|
96717
|
+
respecifyFromColumn = task.column;
|
|
96708
96718
|
const relocating = intakeLane !== void 0 && intakeLane !== task.column;
|
|
96709
96719
|
if (relocating) {
|
|
96710
96720
|
task.column = intakeLane;
|
|
@@ -97382,10 +97392,15 @@ async function updateTaskUnlockedImpl(store, id, updates, runContext) {
|
|
|
97382
97392
|
storeLog.warn(`[task-detail] failed to sync PROMPT.md heading for ${task.id}: ${err instanceof Error ? err.message : String(err)}`);
|
|
97383
97393
|
}
|
|
97384
97394
|
}
|
|
97385
|
-
if (movedToTriage) {
|
|
97386
|
-
|
|
97387
|
-
store.
|
|
97388
|
-
|
|
97395
|
+
if (movedToTriage && respecifyFromColumn !== void 0 && respecifyFromColumn !== task.column && respecifyMoveLanes) {
|
|
97396
|
+
store.laneCache.set(task.id, respecifyMoveLanes);
|
|
97397
|
+
store.emit("task:moved", {
|
|
97398
|
+
task,
|
|
97399
|
+
from: respecifyFromColumn,
|
|
97400
|
+
to: task.column,
|
|
97401
|
+
source: "engine",
|
|
97402
|
+
lanes: respecifyMoveLanes
|
|
97403
|
+
});
|
|
97389
97404
|
}
|
|
97390
97405
|
store.emitTaskLifecycleEventSafely("task:updated", [task]);
|
|
97391
97406
|
return task;
|
|
@@ -97397,7 +97412,6 @@ var init_task_update = __esm({
|
|
|
97397
97412
|
init_store();
|
|
97398
97413
|
init_workflow_lifecycle_traits();
|
|
97399
97414
|
init_workflow_ir_resolver();
|
|
97400
|
-
init_workflow_lifecycle_traits();
|
|
97401
97415
|
init_errors3();
|
|
97402
97416
|
init_task_fields();
|
|
97403
97417
|
init_builtin_traits();
|
|
@@ -209848,6 +209862,7 @@ var SelfHealingManager = class _SelfHealingManager extends SelfHealingGitEvidenc
|
|
|
209848
209862
|
}
|
|
209849
209863
|
async reclaimStaleActiveBranches() {
|
|
209850
209864
|
const reclaimArchivedColumns = await resolveProjectColumnsForRoles(this.store, ["archived"]);
|
|
209865
|
+
const reclaimCompleteColumns = await resolveProjectColumnsForRoles(this.store, ["complete"]);
|
|
209851
209866
|
try {
|
|
209852
209867
|
const settings = await this.store.getSettings();
|
|
209853
209868
|
if (settings.globalPause || settings.enginePaused) return 0;
|
|
@@ -209945,10 +209960,12 @@ var SelfHealingManager = class _SelfHealingManager extends SelfHealingGitEvidenc
|
|
|
209945
209960
|
if (task.worktree && await isUsableTaskWorktree(this.options.rootDir, task.worktree)) continue;
|
|
209946
209961
|
const inspection = await this.inspectOrphanedBranch(branch);
|
|
209947
209962
|
if (!inspection) continue;
|
|
209948
|
-
|
|
209963
|
+
const isCompleteColumn2 = reclaimCompleteColumns.has(task.column);
|
|
209964
|
+
if (inspection.uniqueCommitCount > 0 && !isCompleteColumn2) {
|
|
209949
209965
|
log34.warn(`[recovery] stale-active-branch-rescue-needed ${task.id} branch=${branch} unique=${inspection.uniqueCommitCount} tip=${inspection.tipSha.slice(0, 12)}`);
|
|
209950
209966
|
continue;
|
|
209951
209967
|
}
|
|
209968
|
+
const reclaimReason = inspection.uniqueCommitCount > 0 ? "complete-column-unique-commits-force" : "zero-unique-commits-no-worktree";
|
|
209952
209969
|
await execAsync33(`git branch -D ${JSON.stringify(branch)}`, {
|
|
209953
209970
|
cwd: this.options.rootDir,
|
|
209954
209971
|
timeout: 12e4,
|
|
@@ -209966,7 +209983,7 @@ var SelfHealingManager = class _SelfHealingManager extends SelfHealingGitEvidenc
|
|
|
209966
209983
|
});
|
|
209967
209984
|
await this.store.logEntry(
|
|
209968
209985
|
task.id,
|
|
209969
|
-
`[recovery] stale-active-branch-reclaim ${task.id} branch=${branch} reason
|
|
209986
|
+
`[recovery] stale-active-branch-reclaim ${task.id} branch=${branch} reason=${reclaimReason}`
|
|
209970
209987
|
);
|
|
209971
209988
|
try {
|
|
209972
209989
|
const auditor = createRunAuditor(this.store, {
|
|
@@ -209984,7 +210001,7 @@ var SelfHealingManager = class _SelfHealingManager extends SelfHealingGitEvidenc
|
|
|
209984
210001
|
branch,
|
|
209985
210002
|
tipSha: inspection.tipSha,
|
|
209986
210003
|
uniqueCommitCount: inspection.uniqueCommitCount,
|
|
209987
|
-
reason:
|
|
210004
|
+
reason: reclaimReason
|
|
209988
210005
|
}
|
|
209989
210006
|
});
|
|
209990
210007
|
} catch (auditErr) {
|
|
@@ -210031,10 +210048,9 @@ var SelfHealingManager = class _SelfHealingManager extends SelfHealingGitEvidenc
|
|
|
210031
210048
|
const baseBranch = task.baseBranch || await resolveIntegrationBranch(this.options.rootDir, void 0);
|
|
210032
210049
|
const comparison = await listUniqueBranchCommits(this.options.rootDir, baseBranch, branchName);
|
|
210033
210050
|
if (comparison.commits.length > 0) {
|
|
210034
|
-
log34.
|
|
210035
|
-
`[self-healing] reconcileCompletedTask ${task.id}: branch ${branchName} has ${comparison.commits.length} unique commit(s) vs ${comparison.mainRef};
|
|
210051
|
+
log34.log(
|
|
210052
|
+
`[self-healing] reconcileCompletedTask ${task.id}: branch ${branchName} has ${comparison.commits.length} unique commit(s) vs ${comparison.mainRef}; force-deleting post-completion (squash-safe)`
|
|
210036
210053
|
);
|
|
210037
|
-
return false;
|
|
210038
210054
|
}
|
|
210039
210055
|
try {
|
|
210040
210056
|
await execAsync33(`git branch -D ${shellQuote2(branchName)}`, {
|