FN-7519: add planner-overseer intervention timeline model and UI
Introduces a persisted planner-overseer intervention timeline surfaced in the task-detail Planner Oversight cluster, recording stage, reason, action taken, outcome, attempt count/limit, and source links for each intervention. - Add core `PlannerInterventionEntry` type plus `recordPlannerIntervention`/`getPlannerInterventionTimeline` helpers that persist entries via the run-audit store under the `overseer:intervention` mutation - Add `PlannerInterventionTimeline` dashboard component rendering the timeline (stage/reason/action/outcome/attempts/links) with associated styles - Wire the new API route/legacy handler and TaskDetailModal integration to expose and render the timeline - Add unit tests for the core helpers and the new UI component - Add changeset for the new minor feature and update architecture/dashboard-guide docs Files changed: $(cat /tmp/diffstat_7519.txt) Fusion-Task-Id: FN-7519 Fusion-Task-Lineage: 3c4fcda3-9eb2-46d3-b142-b0c7d6334cd0 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
This commit is contained in:
@@ -97,6 +97,7 @@ import type {
|
||||
} from "@fusion/core";
|
||||
import type { PlanningQuestion, PlanningSummary } from "@fusion/core";
|
||||
import type { PlannerOverseerRuntimeSnapshot } from "@fusion/core";
|
||||
import type { PlannerInterventionEntry } from "@fusion/core";
|
||||
import type { GithubIssueAction, ScheduledTask, ScheduledTaskCreateInput, ScheduledTaskUpdateInput, AutomationRunResult, Routine, RoutineCreateInput, RoutineUpdateInput, RoutineExecutionResult } from "@fusion/core";
|
||||
import type { DiscoveredSkill, CatalogEntry, CatalogFetchResult, ToggleSkillResult, SkillContent, SkillFileEntry, SkillFileContent } from "@fusion/dashboard";
|
||||
import type { MilestoneValidationTelemetry, MissionInterviewDraftSummary } from "../components/mission-types";
|
||||
@@ -851,6 +852,16 @@ export function explainOverseer(id: string, projectId?: string): Promise<{ snaps
|
||||
return api<{ snapshot: PlannerOverseerRuntimeSnapshot | null }>(withProjectId(`/tasks/${id}/overseer/explain`, projectId), { method: "GET" });
|
||||
}
|
||||
|
||||
/*
|
||||
FNXC:PlannerOversight 2026-07-04-18:00:
|
||||
FN-7519 read-only client fetch for the planner-intervention timeline. Mirrors
|
||||
`explainOverseer`'s pattern; never mutates state and resolves to an empty
|
||||
array when the task has no recorded interventions.
|
||||
*/
|
||||
export function fetchPlannerInterventionTimeline(id: string, projectId?: string): Promise<{ entries: PlannerInterventionEntry[] }> {
|
||||
return api<{ entries: PlannerInterventionEntry[] }>(withProjectId(`/tasks/${id}/overseer/interventions`, projectId), { method: "GET" });
|
||||
}
|
||||
|
||||
export function archiveTask(id: string, projectId?: string, options?: ArchiveTaskOptions): Promise<Task> {
|
||||
const search = new URLSearchParams();
|
||||
if (options?.removeLineageReferences) {
|
||||
|
||||
Reference in New Issue
Block a user