























@@ -211,6 +211,27 @@ export function deriveTaskFlowStatusFromTask(
211211return "failed";
212212}
213213214+function isTerminalTaskFlowStatus(status: TaskFlowStatus): boolean {
215+return (
216+status === "succeeded" ||
217+status === "blocked" ||
218+status === "failed" ||
219+status === "cancelled" ||
220+status === "lost"
221+);
222+}
223+224+function resolveTaskMirroredFlowTiming(
225+task: Pick<TaskRecord, "createdAt" | "lastEventAt" | "endedAt">,
226+isTerminal: boolean,
227+): { updatedAt: number; endedAt?: number } {
228+if (!isTerminal) {
229+return { updatedAt: task.lastEventAt ?? task.createdAt };
230+}
231+const endedAt = task.endedAt ?? task.lastEventAt ?? task.createdAt;
232+return { updatedAt: endedAt, endedAt };
233+}
234+214235function ensureFlowRegistryReady() {
215236if (restoreAttempted) {
216237return;
@@ -383,15 +404,10 @@ export function createTaskFlowForTask(params: {
383404requesterOrigin?: TaskFlowRecord["requesterOrigin"];
384405}): TaskFlowRecord {
385406const terminalFlowStatus = deriveTaskFlowStatusFromTask(params.task);
386-const isTerminal =
387-terminalFlowStatus === "succeeded" ||
388-terminalFlowStatus === "blocked" ||
389-terminalFlowStatus === "failed" ||
390-terminalFlowStatus === "cancelled" ||
391-terminalFlowStatus === "lost";
392-const endedAt = isTerminal
393- ? (params.task.endedAt ?? params.task.lastEventAt ?? params.task.createdAt)
394- : undefined;
407+const timing = resolveTaskMirroredFlowTiming(
408+params.task,
409+isTerminalTaskFlowStatus(terminalFlowStatus),
410+);
395411return createFlowRecord({
396412syncMode: "task_mirrored",
397413ownerKey: params.task.ownerKey,
@@ -404,8 +420,8 @@ export function createTaskFlowForTask(params: {
404420terminalFlowStatus === "blocked" ? normalizeOptionalString(params.task.taskId) : undefined,
405421blockedSummary: resolveFlowBlockedSummary(params.task),
406422createdAt: params.task.createdAt,
407-updatedAt: params.task.lastEventAt ?? params.task.createdAt,
408- ...(endedAt !== undefined ? { endedAt } : {}),
423+updatedAt: timing.updatedAt,
424+ ...(timing.endedAt !== undefined ? { endedAt: timing.endedAt } : {}),
409425});
410426}
411427@@ -597,12 +613,15 @@ export function syncFlowFromTask(
597613return flow;
598614}
599615const terminalFlowStatus = deriveTaskFlowStatusFromTask(task);
600-const isTerminal =
601-terminalFlowStatus === "succeeded" ||
602-terminalFlowStatus === "blocked" ||
603-terminalFlowStatus === "failed" ||
604-terminalFlowStatus === "cancelled" ||
605-terminalFlowStatus === "lost";
616+const isTerminal = isTerminalTaskFlowStatus(terminalFlowStatus);
617+const timing = resolveTaskMirroredFlowTiming(
618+{
619+createdAt: flow.createdAt,
620+lastEventAt: task.lastEventAt,
621+endedAt: task.endedAt,
622+},
623+isTerminal,
624+);
606625return updateFlowRecordByIdUnchecked(flowId, {
607626status: terminalFlowStatus,
608627notifyPolicy: task.notifyPolicy,
@@ -611,10 +630,10 @@ export function syncFlowFromTask(
611630blockedSummary:
612631terminalFlowStatus === "blocked" ? (resolveFlowBlockedSummary(task) ?? null) : null,
613632waitJson: null,
614-updatedAt: task.lastEventAt ?? Date.now(),
633+updatedAt: timing.updatedAt,
615634 ...(isTerminal
616635 ? {
617-endedAt: task.endedAt ?? task.lastEventAt ?? Date.now(),
636+endedAt: timing.endedAt ?? timing.updatedAt,
618637}
619638 : { endedAt: null }),
620639});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。