koala73/worldmonitor · error · Error
[_recordPendingBroadcast] no ramp configured
Error message
[_recordPendingBroadcast] no ramp configured
What it means
Internal guard in the _recordPendingBroadcast mutation: loadConfig returned no broadcastRampConfig row, so the broadcastId progress cannot be persisted. Runner-internal invariant failure — the config existed when the action started, so it was deleted mid-flight or the environment is wrong.
Solutions
- Check whether broadcastRampConfig was reset while the wave run was mid-flight
- Record the Resend broadcastId manually and use recoverFromPartialFailure('manual-finished') to close out the wave
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at convex/broadcast/rampRunner.ts:750 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/a738ce2e5fbf99c2.
Report an issue: GitHub.
Appendix: source
Thrown at convex/broadcast/rampRunner.ts:752
});
/**
* Persist post-`createProLaunchBroadcast` progress. Called by the runner
* AFTER `createProLaunchBroadcast` returns successfully. Lets
* `recoverFromPartialFailure` recover the broadcastId without
* operator-supplied metadata if the action dies between this point and a
* successful `_recordWaveSent`.
*
* Lease-validating: same semantics as `_recordPendingExport`.
*/
export const _recordPendingBroadcast = internalMutation({
args: {
runId: v.string(),
broadcastId: v.string(),
},
handler: async (ctx, args) => {
const row = await loadConfig(ctx);
if (!row) throw new Error("[_recordPendingBroadcast] no ramp configured");
if (row.pendingRunId !== args.runId) {
throw new Error(
`[_recordPendingBroadcast] lease lost: expected runId=${args.runId}, found ${row.pendingRunId ?? "<cleared>"}. Refusing to persist broadcast progress — operator/another run owns the state.`,
);
}
await ctx.db.patch(row._id, {
pendingBroadcastId: args.broadcastId,
pendingBroadcastAt: Date.now(),
});
return { ok: true as const };
},
});
/**
* Internal mutation that the action calls to atomically advance the tier +
* record a successful wave-send. Validates that the lease still belongs to
* this runId AND clears all pending-progress markers.
*/View on GitHub (pinned to 7d06c8633d)