koala73/worldmonitor · error · ConvexError

activation outcome revision must be an integer from 1 to ${M

Error message

activation outcome revision must be an integer from 1 to ${MAX_PRO_ACTIVATION_OUTCOME_REVISION}

What it means

ConvexError guard in the Pro activation outcome recorder validating the revision argument: it must be a safe integer between 1 and MAX_PRO_ACTIVATION_OUTCOME_REVISION. Fires when the client reports an outcome with an out-of-range, zero, negative, or fractional revision number, protecting the append-only outcome revision history.

Source

Thrown at convex/payments/billing.ts:983

      ctx,
      args.activationKey,
      args.cohort,
    );
    if (
      presentation === null ||
      presentation.userId !== userId ||
      presentation.claimNonce !== args.claimNonce ||
      presentation.exitedAt !== undefined
    ) {
      return false;
    }

    if (
      !Number.isSafeInteger(args.revision) ||
      args.revision < 1 ||
      args.revision > MAX_PRO_ACTIVATION_OUTCOME_REVISION
    ) {
      throw new ConvexError(
        `activation outcome revision must be an integer from 1 to ${MAX_PRO_ACTIVATION_OUTCOME_REVISION}`,
      );
    }
    const allSteps = [
      ...args.confirmedSteps,
      ...args.skippedSteps,
      ...(args.blockedSteps ?? []),
      ...args.failedSteps,
    ];
    if (
      allSteps.length > proActivationStepIdValidator.members.length ||
      new Set(allSteps).size !== allSteps.length
    ) {
      throw new ConvexError(
        `activation outcome buckets must be disjoint and contain at most ${proActivationStepIdValidator.members.length} steps`,
      );
    }
    if (args.revision <= (presentation.outcomeRevision ?? 0)) {

View on GitHub (pinned to 9361220cc0)

Solutions

  1. Send revision as the next integer after the last recorded revision for the presentation
  2. Never reset or reuse revision numbers; cap updates at MAX_PRO_ACTIVATION_OUTCOME_REVISION
  3. Regenerate the client's revision counter from the server's current presentation state
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at convex/payments/billing.ts:967 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of koala73/worldmonitor@9361220cc0 (2026-08-21). Data as JSON: /api/errors/a8b1635654fa89b4. Report an issue: GitHub.