koala73/worldmonitor · error · Error

[pauseRamp] no ramp configured

Error message

[pauseRamp] no ramp configured

What it means

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.

Solutions

  1. Run configureRamp to create the broadcastRampConfig row before pausing
  2. If the ramp was intentionally never set up in this environment, remove the pause call from the operator runbook
Defensive patterns

Strategy: validation

When it happens

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

Appendix: source

Thrown at convex/broadcast/rampRunner.ts:223

      lastWaveBroadcastId: args.seedLastWaveBroadcastId,
      lastWaveSentAt: args.seedLastWaveSentAt,
      lastWaveLabel: args.seedLastWaveLabel,
      lastWaveSegmentId: args.seedLastWaveSegmentId,
      lastWaveAssigned: args.seedLastWaveAssigned,
      // Default-FALSE on insert when arg omitted. Per the design doc:
      // explicit, never silently true — existing-ramp byte-identical
      // behavior is the default; operators opt in for wave-8+.
      excludeNonEnglish: args.excludeNonEnglish ?? false,
    });
    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 };
  },

View on GitHub (pinned to 7d06c8633d)