From fff4ce2bb725d57a346b2635f6a8e2ff4460db22 Mon Sep 17 00:00:00 2001 From: Lukas May Date: Thu, 5 Mar 2026 20:51:16 +0100 Subject: [PATCH] fix: close five frontend invalidation gaps for changeset, preview, and dependency events - Add changeset: SSE rule (Gap 1-A) to cover cross-agent changeset events - Add getChangeSet to revertChangeSet INVALIDATION_MAP (Gap 1-B) for same-client path - Add preview: SSE rule (Gap 2) covering listPreviews and getPreviewStatus - Extend task:/phase: SSE rules with getPhaseDependencies and listPhaseTaskDependencies (Gap 4-A) - Add listPhaseTaskDependencies to createPhaseDependency/removePhaseDependency (Gap 4-B) Co-Authored-By: Claude Sonnet 4.6 --- apps/web/src/lib/invalidation.ts | 6 +++--- apps/web/src/routes/initiatives/$id.tsx | 10 ++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/web/src/lib/invalidation.ts b/apps/web/src/lib/invalidation.ts index f08105d..1ee739d 100644 --- a/apps/web/src/lib/invalidation.ts +++ b/apps/web/src/lib/invalidation.ts @@ -56,8 +56,8 @@ const INVALIDATION_MAP: Partial> = { updatePhase: ["listPhases", "getPhase"], approvePhase: ["listPhases", "listInitiativeTasks"], queuePhase: ["listPhases"], - createPhaseDependency: ["getPhaseDependencies", "listInitiativePhaseDependencies"], - removePhaseDependency: ["getPhaseDependencies", "listInitiativePhaseDependencies"], + createPhaseDependency: ["getPhaseDependencies", "listInitiativePhaseDependencies", "listPhaseTaskDependencies"], + removePhaseDependency: ["getPhaseDependencies", "listInitiativePhaseDependencies", "listPhaseTaskDependencies"], // --- Tasks --- createPhaseTask: ["listPhaseTasks", "listInitiativeTasks", "listTasks"], @@ -66,7 +66,7 @@ const INVALIDATION_MAP: Partial> = { queueTask: ["listTasks", "listInitiativeTasks", "listPhaseTasks"], // --- Change Sets --- - revertChangeSet: ["listPhases", "listPhaseTasks", "listInitiativeTasks", "listPages", "getPage", "listChangeSets", "getRootPage"], + revertChangeSet: ["listPhases", "listPhaseTasks", "listInitiativeTasks", "listPages", "getPage", "listChangeSets", "getRootPage", "getChangeSet"], // --- Pages --- updatePage: ["listPages", "getPage", "getRootPage"], diff --git a/apps/web/src/routes/initiatives/$id.tsx b/apps/web/src/routes/initiatives/$id.tsx index 7ff848e..678100c 100644 --- a/apps/web/src/routes/initiatives/$id.tsx +++ b/apps/web/src/routes/initiatives/$id.tsx @@ -29,10 +29,12 @@ function InitiativeDetailPage() { // Single SSE stream for all live updates useLiveUpdates([ - { prefix: 'task:', invalidate: ['listPhases', 'listTasks', 'listInitiativeTasks'] }, - { prefix: 'phase:', invalidate: ['listPhases', 'listTasks', 'listInitiativePhaseDependencies'] }, - { prefix: 'agent:', invalidate: ['listAgents', 'getActiveRefineAgent'] }, - { prefix: 'page:', invalidate: ['listPages', 'getPage', 'getRootPage'] }, + { prefix: 'task:', invalidate: ['listPhases', 'listTasks', 'listInitiativeTasks', 'getPhaseDependencies', 'listPhaseTaskDependencies'] }, + { prefix: 'phase:', invalidate: ['listPhases', 'listTasks', 'listInitiativePhaseDependencies', 'getPhaseDependencies'] }, + { prefix: 'agent:', invalidate: ['listAgents', 'getActiveRefineAgent'] }, + { prefix: 'page:', invalidate: ['listPages', 'getPage', 'getRootPage'] }, + { prefix: 'changeset:', invalidate: ['getChangeSet', 'listChangeSets'] }, + { prefix: 'preview:', invalidate: ['listPreviews', 'getPreviewStatus'] }, ]); // tRPC queries