koala73/worldmonitor · error · Error

[resumeRamp] no ramp configured

Error message

[resumeRamp] no ramp configured

What it means

Operator guard in the resumeRamp internal mutation: loadConfig returned no broadcastRampConfig row, so there is no ramp to resume. Same missing-configuration condition as pauseRamp — the deployment has no ramp configured.

Solutions

  1. Run configureRamp first, then resume
  2. Verify you are pointing at the intended Convex deployment — the config row exists per environment
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at convex/broadcast/rampRunner.ts:233 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/ef94463eba61cbb8. Report an issue: GitHub.

Appendix: source

Thrown at convex/broadcast/rampRunner.ts:233

    return { ok: true };
  },
});

export const pauseRamp = internalMutation({
  args: {},
  handler: async (ctx) => {
    const row = await loadConfig(ctx);
    if (!row) throw new Error("[pauseRamp] no ramp configured");
    await ctx.db.patch(row._id, { active: false });
    return { ok: true, prevActive: row.active };
  },
});

export const resumeRamp = internalMutation({
  args: {},
  handler: async (ctx) => {
    const row = await loadConfig(ctx);
    if (!row) throw new Error("[resumeRamp] no ramp configured");
    if (row.killGateTripped) {
      throw new Error(
        "[resumeRamp] kill-gate is tripped; clearKillGate first after investigating.",
      );
    }
    await ctx.db.patch(row._id, { active: true });
    return { ok: true };
  },
});

export const clearKillGate = internalMutation({
  args: { reason: v.string() },
  handler: async (ctx, { reason }) => {
    const row = await loadConfig(ctx);
    if (!row) throw new Error("[clearKillGate] no ramp configured");
    if (!row.killGateTripped) {
      return { ok: true, noop: true };
    }

View on GitHub (pinned to 7d06c8633d)