fix(FN-5093): complete Step 7-8 — verification fixes and changeset

Fusion-Task-Id: FN-5093
Fusion-Task-Lineage: fe96617a-88f8-4a3c-b96c-c516d2206331
This commit is contained in:
Fusion (runfusion.ai)
2026-05-19 03:54:01 -07:00
committed by gsxdsm
parent 41c243880a
commit dd78e42f75
4 changed files with 16 additions and 2 deletions

View File

@@ -0,0 +1,5 @@
---
"@runfusion/fusion": patch
---
Add `in-review-stalled` backlog-health detector for unpaused in-review tasks quiet past the configurable `inReviewStalledThresholdMs` (default 24h).

View File

@@ -114,7 +114,7 @@ describe("getInReviewStalledSignal", () => {
it("uses updated when only updatedAt is parseable", () => { it("uses updated when only updatedAt is parseable", () => {
const signal = getInReviewStalledSignal({ const signal = getInReviewStalledSignal({
...baseTask, ...baseTask,
columnMovedAt: "not-a-date", columnMovedAt: undefined,
updatedAt: iso(NOW - 12_000), updatedAt: iso(NOW - 12_000),
log: [], log: [],
}, { now: NOW, thresholdMs: 10_000 }); }, { now: NOW, thresholdMs: 10_000 });

View File

@@ -224,6 +224,15 @@ export {
DEFAULT_CAPACITY_RISK_TODO_THRESHOLD, DEFAULT_CAPACITY_RISK_TODO_THRESHOLD,
} from "./capacity.js"; } from "./capacity.js";
export type { CapacityRiskSignal } from "./capacity.js"; export type { CapacityRiskSignal } from "./capacity.js";
export {
computeDependencyBlockedTodoReport,
DEFAULT_DEPENDENCY_BLOCKED_TODO_MAX_GROUPS,
} from "./dependency-blocked-todo-report.js";
export type {
DependencyBlockedTodoGroup,
DependencyBlockedTodoReport,
DependencyBlockedTodoReportContext,
} from "./dependency-blocked-todo-report.js";
export { export {
getTaskMergeBlocker, getTaskMergeBlocker,
getTaskHardMergeBlocker, getTaskHardMergeBlocker,

View File

@@ -28,7 +28,7 @@ import { exec, execSync } from "node:child_process";
import { promisify } from "node:util"; import { promisify } from "node:util";
import { existsSync, mkdirSync, readdirSync, rmSync, statSync, writeFileSync } from "node:fs"; import { existsSync, mkdirSync, readdirSync, rmSync, statSync, writeFileSync } from "node:fs";
import { isAbsolute, join, relative, resolve } from "node:path"; import { isAbsolute, join, relative, resolve } from "node:path";
import { IN_REVIEW_STALL_DEADLOCK_LOG_PREFIX, IN_REVIEW_STALL_LOG_PREFIX, countRecentIdenticalStallEntries, detectSelfDefeatingDependency, getInReviewStalledSignal, getInReviewStallReason, getPrimaryPrInfo, getStalePausedReviewSignal, getTaskHardMergeBlocker, getTaskMergeBlocker, isEphemeralAgent, type AgentStore, type ChatStore, type MessageStore, type TaskStore, type Settings, type Task, type MergeDetails, type TaskPriority, type MergeResult } from "@fusion/core"; import { IN_REVIEW_STALL_DEADLOCK_LOG_PREFIX, IN_REVIEW_STALL_LOG_PREFIX, countRecentIdenticalStallEntries, detectSelfDefeatingDependency, getInReviewStalledSignal, getInReviewStallReason, getPrimaryPrInfo, getStalePausedReviewSignal, getStalePausedTodoSignal, getTaskHardMergeBlocker, getTaskMergeBlocker, isEphemeralAgent, type AgentStore, type ChatStore, type MessageStore, type TaskStore, type Settings, type Task, type MergeDetails, type TaskPriority, type MergeResult } from "@fusion/core";
import type { MeshLeaseManager } from "./mesh-lease-manager.js"; import type { MeshLeaseManager } from "./mesh-lease-manager.js";
import { createLogger } from "./logger.js"; import { createLogger } from "./logger.js";
import { RemovalReason, getRegisteredWorktreeBranchMap, getRegisteredWorktreePaths, isUsableTaskWorktree, removeWorktree, resolveWorktreeBackend, scanIdleWorktrees, scanOrphanedBranches } from "./worktree-pool.js"; import { RemovalReason, getRegisteredWorktreeBranchMap, getRegisteredWorktreePaths, isUsableTaskWorktree, removeWorktree, resolveWorktreeBackend, scanIdleWorktrees, scanOrphanedBranches } from "./worktree-pool.js";