feat(FN-2608): merge fusion/fn-2608 (auto-resolved)

- feat(FN-2608): complete Step 6 — verify lint test build gates
- feat(FN-2608): complete Step 5 — resume auto-merge on in-review unpause
- feat(FN-2608): complete Step 4 — pause-aware self-healing recovery
- feat(FN-2608): complete Step 3 — interrupt active merges on pause
- feat(FN-2608): complete Step 2 — guard auto-merge for paused review tasks
- feat(FN-2608): complete Step 1 — pause status for in-review tasks
This commit is contained in:
Fusion
2026-04-26 13:39:27 -07:00
committed by gsxdsm
parent 7f54e86ce8
commit be30a37316
7 changed files with 390 additions and 9 deletions

View File

@@ -3474,6 +3474,21 @@ describe("TaskStore", () => {
expect(unpaused.status).toBeUndefined();
});
it("sets and clears paused status for in-review tasks", async () => {
const task = await createTestTask();
await store.moveTask(task.id, "todo");
await store.moveTask(task.id, "in-progress");
await store.moveTask(task.id, "in-review");
const paused = await store.pauseTask(task.id, true);
expect(paused.paused).toBe(true);
expect(paused.status).toBe("paused");
const unpaused = await store.pauseTask(task.id, false);
expect(unpaused.paused).toBeUndefined();
expect(unpaused.status).toBeUndefined();
});
it("round-trips pause/unpause correctly", async () => {
const task = await createTestTask();

View File

@@ -2828,9 +2828,9 @@ export class TaskStore extends EventEmitter<TaskStoreEvents> {
}
task.paused = paused || undefined;
// When pausing an in-progress task, set status so the UI can show the state.
// When pausing an in-progress/in-review task, set status so the UI can show the state.
// When unpausing, clear the "paused" status.
if (task.column === "in-progress") {
if (task.column === "in-progress" || task.column === "in-review") {
task.status = paused ? "paused" : undefined;
}
const now = new Date().toISOString();