feat(FN-4398): complete remaining dashboard visibility and docs

Fusion-Task-Id: FN-4398
Fusion-Task-Lineage: 8b898b2e-3468-4fa7-8546-b8f6ba52cf46
This commit is contained in:
Fusion
2026-05-14 15:23:49 -07:00
committed by gsxdsm
parent 233c5bbd8e
commit 652e820f7d
25 changed files with 210 additions and 34 deletions

View File

@@ -1,10 +1,10 @@
import type { RetrySummary, TaskDetail } from "./types.js";
import type { RetrySummary, Task, TaskDetail } from "./types.js";
export const RETRY_STORM_WARNING_RATIO = 0.8;
const toCount = (value: number | null | undefined): number => (typeof value === "number" ? value : 0);
export function computeRetrySummary(task: TaskDetail): RetrySummary {
export function computeRetrySummary(task: Pick<Task | TaskDetail, "stuckKillCount" | "recoveryRetryCount" | "taskDoneRetryCount" | "workflowStepRetries" | "verificationFailureCount" | "postReviewFixCount" | "mergeConflictBounceCount" | "branchConflictRecoveryCount" | "reviewerContextRetryCount" | "reviewerFallbackRetryCount">): RetrySummary {
const stuckKill = toCount(task.stuckKillCount);
const recovery = toCount(task.recoveryRetryCount);
const taskDone = toCount(task.taskDoneRetryCount);

View File

@@ -1426,6 +1426,9 @@ export interface Task {
/** Number of reviewer fallback retries consumed by FN-4092 fallback-model
* and same-model strict-prompt retry paths. */
reviewerFallbackRetryCount?: number;
/** Derived retry aggregation computed at read time from retry counters.
* This field is not persisted to SQLite. */
retrySummary?: RetrySummary;
/** ISO-8601 timestamp indicating when the task becomes eligible for the next
* recovery retry. Scheduler and triage processor skip tasks whose
* `nextRecoveryAt` is still in the future. Cleared alongside `recoveryRetryCount`. */