{"record":{"id":"95319139fd6ad688","repo":"koala73/worldmonitor","slug":"pauseramp-no-ramp-configured","errorCode":null,"errorMessage":"[pauseRamp] no ramp configured","messagePattern":"\\[pauseRamp\\] no ramp configured","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"convex/broadcast/rampRunner.ts","lineNumber":223,"sourceCode":"      lastWaveBroadcastId: args.seedLastWaveBroadcastId,\n      lastWaveSentAt: args.seedLastWaveSentAt,\n      lastWaveLabel: args.seedLastWaveLabel,\n      lastWaveSegmentId: args.seedLastWaveSegmentId,\n      lastWaveAssigned: args.seedLastWaveAssigned,\n      // Default-FALSE on insert when arg omitted. Per the design doc:\n      // explicit, never silently true — existing-ramp byte-identical\n      // behavior is the default; operators opt in for wave-8+.\n      excludeNonEnglish: args.excludeNonEnglish ?? false,\n    });\n    return { ok: true };\n  },\n});\n\nexport const pauseRamp = internalMutation({\n  args: {},\n  handler: async (ctx) => {\n    const row = await loadConfig(ctx);\n    if (!row) throw new Error(\"[pauseRamp] no ramp configured\");\n    await ctx.db.patch(row._id, { active: false });\n    return { ok: true, prevActive: row.active };\n  },\n});\n\nexport const resumeRamp = internalMutation({\n  args: {},\n  handler: async (ctx) => {\n    const row = await loadConfig(ctx);\n    if (!row) throw new Error(\"[resumeRamp] no ramp configured\");\n    if (row.killGateTripped) {\n      throw new Error(\n        \"[resumeRamp] kill-gate is tripped; clearKillGate first after investigating.\",\n      );\n    }\n    await ctx.db.patch(row._id, { active: true });\n    return { ok: true };\n  },","sourceCodeStart":205,"sourceCodeEnd":241,"githubUrl":"https://github.com/koala73/worldmonitor/blob/7d06c8633d256c18e38133030bc3613976a96ec9/convex/broadcast/rampRunner.ts#L205-L241","documentation":"Operator guard in the pauseRamp internal mutation: loadConfig returned no broadcastRampConfig row, so there is no ramp to pause. This fires when the ramp was never configured (configureRamp not run) on this deployment.","triggerScenarios":"Thrown at convex/broadcast/rampRunner.ts:223 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Run configureRamp to create the broadcastRampConfig row before pausing","If the ramp was intentionally never set up in this environment, remove the pause call from the operator runbook"],"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"}