fix: clear stale busy state after session recovery

Reconcile session status after materializing recovered messages
Return composer from stop to send when the server reports idle
This commit is contained in:
Bohdan Triapitsyn
2026-07-01 23:44:36 +03:00
parent 4087ee6082
commit c9c178c000
+10 -5
View File
@@ -248,6 +248,7 @@ async function materializeSessionFromServer(
store: StoreApi<DirectoryStore>,
options?: SessionMaterializationRequest & { isStale?: () => boolean },
) {
const statusBeforeMaterialization = store.getState().session_status?.[sessionID]
syncDebug.recovery.materializing({
reason: options?.reason ?? "ensure-session-messages",
directory,
@@ -282,11 +283,15 @@ async function materializeSessionFromServer(
info: stripMessageDiffSnapshots(record.info),
parts: record.parts ?? [],
})),
{ skipPartTypes: RECONNECT_SKIP_PARTS },
)
return { message: materialized.message, part: materialized.part }
})
}
{ skipPartTypes: RECONNECT_SKIP_PARTS },
)
return { message: materialized.message, part: materialized.part }
})
if (statusBeforeMaterialization && statusBeforeMaterialization.type !== "idle" && !options?.isStale?.()) {
await resyncDirectorySessionStatuses(directory, store, [sessionID], "authoritative")
}
}
// Module-level refs for notification viewed check.
// Used to determine if user is currently viewing the session when a notification arrives.