koala73/worldmonitor · error · Error
[clearPartialFailure] refused: pending progress markers…
Error message
[clearPartialFailure] refused: pending progress markers present (waveLabel=${row.pendingWaveLabel ?? "-"}, segmentId=${row.pendingSegmentId ?? "-"}, broadcastId=${row.pendingBroadcastId ?? "-"}). The export DID run; clearing here would mask stamped contacts. Use recoverFromPartialFailure instead. What it means
Error "[clearPartialFailure] refused: pending progress markers present (waveLabel=${row.pendingWaveLabel ?? "-"}, segmentId=${row.pendingSegmentId ?? "-"}, broadcastId=${row.pendingBroadcastId ?? "-"}). The export DID run; clearing here would mask stamped contacts. Use recoverFromPartialFailure instead." thrown in koala73/worldmonitor.
Solutions
- Follow the error's own guidance: use recoverFromPartialFailure ('manual-finished' if the wave went out, 'discard-and-rotate' if not) instead of clearPartialFailure
- Verify in the Resend dashboard and audience tables whether the pending wave/segment/broadcast actually went out before choosing a recovery mode
- Only use clearPartialFailure when confirmNoExport is genuinely true and no pending markers exist
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at convex/broadcast/rampRunner.ts:313 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of koala73/worldmonitor@7d06c8633d (2026-08-21).
Data as JSON: /api/errors/4b7f673ba2494613.
Report an issue: GitHub.
Appendix: source
Thrown at convex/broadcast/rampRunner.ts:313
handler: async (ctx, { reason }) => {
const row = await loadConfig(ctx);
if (!row) throw new Error("[clearPartialFailure] no ramp configured");
if (row.lastRunStatus !== "partial-failure") {
return {
ok: true as const,
noop: true as const,
currentStatus: row.lastRunStatus,
};
}
// Fail-closed: if any pending-progress marker exists, the export DID make
// progress past `assignAndExportWave` — clearing here would mask a stamped
// / sent wave. Force the operator to use recoverFromPartialFailure.
if (
row.pendingWaveLabel ||
row.pendingSegmentId ||
row.pendingBroadcastId
) {
throw new Error(
`[clearPartialFailure] refused: pending progress markers present (waveLabel=${row.pendingWaveLabel ?? "-"}, segmentId=${row.pendingSegmentId ?? "-"}, broadcastId=${row.pendingBroadcastId ?? "-"}). The export DID run; clearing here would mask stamped contacts. Use recoverFromPartialFailure instead.`,
);
}
await ctx.db.patch(row._id, {
lastRunStatus: `partial-failure-cleared: ${reason.slice(0, 200)}`,
lastRunError: undefined,
pendingRunId: undefined,
pendingRunStartedAt: undefined,
});
return { ok: true as const };
},
});
/**
* Structured recovery for `lastRunStatus === "partial-failure"` that ALSO
* occurred AFTER `assignAndExportWave` succeeded (or after a forced lease
* release on a wedged run). Two recovery modes:
*View on GitHub (pinned to 7d06c8633d)