koala73/worldmonitor · error · Error
[recoverFromPartialFailure:manual-finished] currentTier=
Error message
[recoverFromPartialFailure:manual-finished] currentTier=${row.currentTier} would advance past rampCurve.length=${row.rampCurve.length}. Curve is complete; nothing to recover. What it means
Error "[recoverFromPartialFailure:manual-finished] currentTier=${row.currentTier} would advance past rampCurve.length=${row.rampCurve.length}. Curve is complete; nothing to recover." thrown in koala73/worldmonitor.
Solutions
- Treat as terminal success — the ramp curve is fully sent; no further waves exist to recover
- If more waves are genuinely needed, configure a new ramp with an extended rampCurve rather than forcing recovery past the end
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at convex/broadcast/rampRunner.ts:399 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/9da987c84741c550.
Report an issue: GitHub.
Appendix: source
Thrown at convex/broadcast/rampRunner.ts:399
pendingRunId: undefined,
pendingRunStartedAt: undefined,
pendingWaveLabel: undefined,
pendingSegmentId: undefined,
pendingAssigned: undefined,
pendingExportAt: undefined,
pendingBroadcastId: undefined,
pendingBroadcastAt: undefined,
} as const;
if (args.recovery === "manual-finished") {
// Resolve each field: operator-supplied wins, persisted pending* is the
// fallback. sentAt is operator-only (no fallback).
const broadcastId = args.broadcastId ?? row.pendingBroadcastId;
const segmentId = args.segmentId ?? row.pendingSegmentId;
const assigned = args.assigned ?? row.pendingAssigned;
const nextTier = row.currentTier + 1;
if (nextTier >= row.rampCurve.length) {
throw new Error(
`[recoverFromPartialFailure:manual-finished] currentTier=${row.currentTier} would advance past rampCurve.length=${row.rampCurve.length}. Curve is complete; nothing to recover.`,
);
}
const waveLabel =
args.waveLabel ??
row.pendingWaveLabel ??
`${row.waveLabelPrefix}-${nextTier + row.waveLabelOffset}`;
const missing: string[] = [];
if (!broadcastId) missing.push("broadcastId");
if (!segmentId) missing.push("segmentId");
if (assigned === undefined) missing.push("assigned");
if (args.sentAt === undefined) missing.push("sentAt");
if (missing.length > 0) {
throw new Error(
`[recoverFromPartialFailure:manual-finished] missing required field(s): ${missing.join(", ")}. ` +
`Operator must supply (or rely on persisted pending* state from a prior runner). Persisted state: ` +
`pendingBroadcastId=${row.pendingBroadcastId ?? "-"}, pendingSegmentId=${row.pendingSegmentId ?? "-"}, ` +View on GitHub (pinned to 7d06c8633d)