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.
This commit is contained in:
Igor Loskutov
2026-02-09 15:09:29 -05:00
parent b4ccbe6928
commit 499de45fdb

View File

@@ -13,6 +13,7 @@ import { useTranscriptGet } from "../../../../lib/apiHooks";
import { parseNonEmptyString } from "../../../../lib/utils"; import { parseNonEmptyString } from "../../../../lib/utils";
import { useWebSockets } from "../../useWebSockets"; import { useWebSockets } from "../../useWebSockets";
import type { DagTask } from "../../useWebSockets"; import type { DagTask } from "../../useWebSockets";
import { useDagStatusMap } from "../../../../lib/UserEventsProvider";
import DagProgressTable from "./DagProgressTable"; import DagProgressTable from "./DagProgressTable";
type TranscriptProcessing = { type TranscriptProcessing = {
@@ -29,13 +30,16 @@ export default function TranscriptProcessing(details: TranscriptProcessing) {
const transcript = useTranscriptGet(transcriptId); const transcript = useTranscriptGet(transcriptId);
const { status: wsStatus, dagStatus: wsDagStatus } = const { status: wsStatus, dagStatus: wsDagStatus } =
useWebSockets(transcriptId); useWebSockets(transcriptId);
const userDagStatusMap = useDagStatusMap();
const userDagStatus = userDagStatusMap.get(transcriptId) ?? null;
const restDagStatus: DagTask[] | null = const restDagStatus: DagTask[] | null =
((transcript.data as Record<string, unknown>)?.dag_status as ((transcript.data as Record<string, unknown>)?.dag_status as
| DagTask[] | DagTask[]
| null) ?? null; | null) ?? null;
const dagStatus = wsDagStatus ?? restDagStatus; // Prefer transcript room WS (most granular), then user room WS, then REST
const dagStatus = wsDagStatus ?? userDagStatus ?? restDagStatus;
useEffect(() => { useEffect(() => {
const status = wsStatus?.value ?? transcript.data?.status; const status = wsStatus?.value ?? transcript.data?.status;