fix: preserve follower total on noop closeout

This commit is contained in:
Codex
2026-07-03 16:33:04 +00:00
parent 528481ee26
commit 9d7331230e
+16 -1
View File
@@ -782,6 +782,7 @@ async function decideAndMaybeTrigger(
} else if (targetSha !== null && targetSha === observedSha && live.aligned === true) {
phase = "Noop";
decision = "target already matches observed source sha";
inFlightJob = null;
lastSucceededSha = observedSha;
} else if (lastTriggeredSha !== null && lastTriggeredSha === observedSha && live.pipelineRunPresent === true) {
phase = "ClosingOut";
@@ -2122,7 +2123,8 @@ function buildFollowerTimings(
phase?: BranchFollowerPhase,
): FollowerState["timings"] {
const nativePayload = asOptionalRecord(live.payload);
const total = totalTimingFromCommand(triggerCommand, phase) ?? totalTimingFromStored(storedTimings, phase, stringOrNull(triggerCommand?.finishedAt), live.observedSha);
const finishOverride = stringOrNull(triggerCommand?.finishedAt) ?? noopStoredTotalFinishOverride(storedTimings, phase, live);
const total = totalTimingFromCommand(triggerCommand, phase) ?? totalTimingFromStored(storedTimings, phase, finishOverride, live.observedSha);
const stages = dedupeTimingStages([
...stageTimingsFromCommand(triggerCommand),
...stageTimingsFromNativePayload(nativePayload),
@@ -2141,6 +2143,19 @@ function buildFollowerTimings(
};
}
function noopStoredTotalFinishOverride(
storedTimings: Record<string, unknown> | null | undefined,
phase: BranchFollowerPhase | undefined,
live: AdapterSummary,
): string | null {
if (phase !== "Noop" || live.aligned !== true || live.observedSha === null) return null;
if (storedTimings === null || storedTimings === undefined) return null;
if (stringOrNull(storedTimings.sourceCommit) !== live.observedSha) return null;
if (stringOrNull(storedTimings.startedAt) === null) return null;
if (stringOrNull(storedTimings.finishedAt) !== null) return null;
return new Date().toISOString();
}
function storedFollowerTimingsForStatus(
follower: FollowerSpec,
storedTimings: Record<string, unknown> | null,