From 499de45fdbbacb86cbb4340d4e5548484f06a39e Mon Sep 17 00:00:00 2001 From: Igor Loskutov Date: Mon, 9 Feb 2026 15:09:29 -0500 Subject: [PATCH] fix: processing page reads DAG status from user room WS fallback The processing page only read dagStatus from the transcript room WS, which loses events during page navigation and React strict mode double-mounting (WS torn down and reconnected, historical replay skips DAG_STATUS). Now also consumes useDagStatusMap() from UserEventsProvider (user room), which uses a singleton WS that survives remounts. Priority: transcript room WS > user room WS > REST API. --- .../(app)/transcripts/[transcriptId]/processing/page.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/www/app/(app)/transcripts/[transcriptId]/processing/page.tsx b/www/app/(app)/transcripts/[transcriptId]/processing/page.tsx index ad5f6e11..2c08037a 100644 --- a/www/app/(app)/transcripts/[transcriptId]/processing/page.tsx +++ b/www/app/(app)/transcripts/[transcriptId]/processing/page.tsx @@ -13,6 +13,7 @@ import { useTranscriptGet } from "../../../../lib/apiHooks"; import { parseNonEmptyString } from "../../../../lib/utils"; import { useWebSockets } from "../../useWebSockets"; import type { DagTask } from "../../useWebSockets"; +import { useDagStatusMap } from "../../../../lib/UserEventsProvider"; import DagProgressTable from "./DagProgressTable"; type TranscriptProcessing = { @@ -29,13 +30,16 @@ export default function TranscriptProcessing(details: TranscriptProcessing) { const transcript = useTranscriptGet(transcriptId); const { status: wsStatus, dagStatus: wsDagStatus } = useWebSockets(transcriptId); + const userDagStatusMap = useDagStatusMap(); + const userDagStatus = userDagStatusMap.get(transcriptId) ?? null; const restDagStatus: DagTask[] | null = ((transcript.data as Record)?.dag_status as | DagTask[] | null) ?? null; - const dagStatus = wsDagStatus ?? restDagStatus; + // Prefer transcript room WS (most granular), then user room WS, then REST + const dagStatus = wsDagStatus ?? userDagStatus ?? restDagStatus; useEffect(() => { const status = wsStatus?.value ?? transcript.data?.status;