koala73/worldmonitor · error · Error

[resumeRamp] kill-gate is tripped; clearKillGate first…

Error message

[resumeRamp] kill-gate is tripped; clearKillGate first after investigating.

What it means

Safety interlock in resumeRamp: the config row has killGateTripped set, meaning an automatic kill gate stopped the ramp. Resuming without investigation would restart sends blindly, so the operator must explicitly run clearKillGate (with a reason) first.

Solutions

  1. Investigate why the kill gate tripped (Convex logs, Resend dashboard, failure metrics) before doing anything else
  2. Once the cause is understood and fixed, run clearKillGate with a documented reason, then resumeRamp
Defensive patterns

Strategy: validation

When it happens

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

Appendix: source

Thrown at convex/broadcast/rampRunner.ts:235

});

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 };
    }
    await ctx.db.patch(row._id, {
      killGateTripped: false,

View on GitHub (pinned to 7d06c8633d)