From 21937fa95025f186a99758c507e4bbd5960d2eab Mon Sep 17 00:00:00 2001 From: Oliver Kieselbach Date: Thu, 16 Apr 2026 11:54:31 +0200 Subject: [PATCH] whiteglove session timeline fix --- .../[sessionId]/hooks/useSessionDerivedData.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Web/autopilot-monitor-web/app/sessions/[sessionId]/hooks/useSessionDerivedData.ts b/src/Web/autopilot-monitor-web/app/sessions/[sessionId]/hooks/useSessionDerivedData.ts index ba6822c3..d07e3412 100644 --- a/src/Web/autopilot-monitor-web/app/sessions/[sessionId]/hooks/useSessionDerivedData.ts +++ b/src/Web/autopilot-monitor-web/app/sessions/[sessionId]/hooks/useSessionDerivedData.ts @@ -180,8 +180,10 @@ export function useSessionDerivedData( // Events are assigned purely by sequence number — no special-casing for whiteglove_complete. // In the race-condition case (Windows writes the WhiteGlove success event after the reboot), // whiteglove_complete naturally lands in the user-enrollment part, preserving chronological order. + // When no split point exists yet (pre-provisioning still in progress), all events belong to Part 1. const preProvEvents = useMemo(() => { - if (!isWhiteGloveSession || whiteGloveSplitSequence < 0) return [] as EnrollmentEvent[]; + if (!isWhiteGloveSession) return [] as EnrollmentEvent[]; + if (whiteGloveSplitSequence < 0) return filteredEvents; return filteredEvents.filter(e => e.sequence <= whiteGloveSplitSequence); }, [filteredEvents, isWhiteGloveSession, whiteGloveSplitSequence]); @@ -193,12 +195,12 @@ export function useSessionDerivedData( // Compute per-block durations for WhiteGlove sessions (using unfiltered events for accuracy). // Duration 1 = pre-provisioning, Duration 2 = user enrollment, combined = D1 + D2 (pause excluded). const whiteGloveDurations = useMemo(() => { - if (!isWhiteGloveSession || whiteGloveSplitSequence < 0) { + if (!isWhiteGloveSession) { return { preProvDuration: null as string | null, userEnrollDuration: null as string | null, combinedDuration: null as string | null }; } - const preProvEvts = events.filter(e => e.sequence <= whiteGloveSplitSequence); - const userEnrollEvts = events.filter(e => e.sequence > whiteGloveSplitSequence); + const preProvEvts = whiteGloveSplitSequence < 0 ? events : events.filter(e => e.sequence <= whiteGloveSplitSequence); + const userEnrollEvts = whiteGloveSplitSequence < 0 ? [] : events.filter(e => e.sequence > whiteGloveSplitSequence); const calcMs = (evts: EnrollmentEvent[]): number => { if (evts.length === 0) return 0;