fix(server): preserve coalesced feedback retry identity

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
DottaandPaperclip committed 2026-08-15 08:33:01 +00:00
1 parent 9bf5683a08
commit 809c833c43
2 files changed
+12

No files matched your search

@@ -1922,6 +1922,9 @@ describeEmbeddedPostgres("heartbeat orphaned process recovery", () => {
expect(runs).toHaveLength(2);
const coalescedRun = runs.find((run) => run.id === secondRunId);
expect(coalescedRun?.contextSnapshot).toMatchObject({
wakeReason: "feedback_delivery_retry",
retryReason: "feedback_delivery_retry",
retryOfRunId: fixture.runId,
feedbackDeliveryRootWakeupRequestId: fixture.wakeupRequestId,
feedbackDeliveryRetryGeneration: 1,
wakeCommentIds: [first.commentId, secondCommentId],
+9
View File
@@ -10446,6 +10446,12 @@ export function heartbeatService(db: Db, options: HeartbeatServiceOptions = {})
mergedContext.commentId = orderedCommentIds.at(-1);
mergedContext.wakeCommentId = orderedCommentIds.at(-1);
}
// The queued run now owns the feedback-delivery obligation. Preserve
// its retry identity even when the queued context came from a newer,
// unrelated wake so terminal disposition can recover a failed merge.
mergedContext.wakeReason = FEEDBACK_DELIVERY_RETRY_WAKE_REASON;
mergedContext.retryReason = FEEDBACK_DELIVERY_RETRY_REASON;
mergedContext.retryOfRunId = input.run.id;
mergedContext.feedbackDeliveryRootWakeupRequestId = input.delivery.rootWakeupRequestId;
mergedContext.feedbackDeliverySourceRunId = input.run.id;
mergedContext.feedbackDeliveryRetryGeneration = 1;
@@ -10487,6 +10493,9 @@ export function heartbeatService(db: Db, options: HeartbeatServiceOptions = {})
mergedDeferredContext.commentId = orderedCommentIds.at(-1);
mergedDeferredContext.wakeCommentId = orderedCommentIds.at(-1);
}
mergedDeferredContext.wakeReason = FEEDBACK_DELIVERY_RETRY_WAKE_REASON;
mergedDeferredContext.retryReason = FEEDBACK_DELIVERY_RETRY_REASON;
mergedDeferredContext.retryOfRunId = input.run.id;
mergedDeferredContext.feedbackDeliveryRootWakeupRequestId = input.delivery.rootWakeupRequestId;
mergedDeferredContext.feedbackDeliverySourceRunId = input.run.id;
mergedDeferredContext.feedbackDeliveryRetryGeneration = 1;