{"record":{"id":"6080f96fc3098d9a","repo":"koala73/worldmonitor","slug":"recoverfrompartialfailure-no-ramp-configured","errorCode":null,"errorMessage":"[recoverFromPartialFailure] no ramp configured","messagePattern":"\\[recoverFromPartialFailure\\] no ramp configured","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"convex/broadcast/rampRunner.ts","lineNumber":371,"sourceCode":"export const recoverFromPartialFailure = internalMutation({\n  args: {\n    recovery: v.union(\n      v.literal(\"manual-finished\"),\n      v.literal(\"discard-and-rotate\"),\n    ),\n    reason: v.string(),\n    // For recovery==='manual-finished'. Fall back to persisted pending*\n    // markers when omitted; sentAt is ALWAYS operator-supplied (no progress\n    // marker captures send-completion time).\n    broadcastId: v.optional(v.string()),\n    segmentId: v.optional(v.string()),\n    sentAt: v.optional(v.number()),\n    assigned: v.optional(v.number()),\n    waveLabel: v.optional(v.string()),\n  },\n  handler: async (ctx, args) => {\n    const row = await loadConfig(ctx);\n    if (!row) throw new Error(\"[recoverFromPartialFailure] no ramp configured\");\n    if (row.lastRunStatus !== \"partial-failure\") {\n      return {\n        ok: true as const,\n        noop: true as const,\n        currentStatus: row.lastRunStatus,\n      };\n    }\n\n    const clearPending = {\n      pendingRunId: undefined,\n      pendingRunStartedAt: undefined,\n      pendingWaveLabel: undefined,\n      pendingSegmentId: undefined,\n      pendingAssigned: undefined,\n      pendingExportAt: undefined,\n      pendingBroadcastId: undefined,\n      pendingBroadcastAt: undefined,\n    } as const;","sourceCodeStart":353,"sourceCodeEnd":389,"githubUrl":"https://github.com/koala73/worldmonitor/blob/7d06c8633d256c18e38133030bc3613976a96ec9/convex/broadcast/rampRunner.ts#L353-L389","documentation":"Operator guard in the recoverFromPartialFailure internal mutation: loadConfig returned no broadcastRampConfig row, so there is no partial-failure state to recover from — the ramp was never configured on this deployment.","triggerScenarios":"Thrown at convex/broadcast/rampRunner.ts:371 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Run configureRamp to create the ramp configuration before recovery","Double-check the Convex deployment target — a missing config row usually means wrong environment"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"7d06c8633d256c18e38133030bc3613976a96ec9","analyzedAt":"2026-08-21T16:51:25.751Z","contentChangedAt":"2026-08-21T16:51:25.751Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}