thedotmack/claude-mem · error

Pull wedged: the same page keeps failing; backing off and re

Error message

Pull wedged: the same page keeps failing; backing off and retrying

What it means

On every pull failure the client doubles its backoff (up to the max) and records which cursor failed. When the same cursor fails 3+ times in a row (`failStreak >= 3`) this warning fires: one page of the pull stream is persistently failing and is retried with backoff instead of blocking progress. Failures on a moving cursor stay at debug level.

Source

Thrown at src/services/sync/SyncClient.ts:888

   * unmoved — log distinctly so the wedge is visible in the logs.
   */
  private recordFailure(error: unknown): void {
    const err = error instanceof Error ? error : new Error(String(error));
    let cursor: string | null = null;
    try {
      cursor = this.apply.getCursor();
    } catch { /* DB may be closing — cursor stays null */ }
    if (cursor === this.failCursor) {
      this.failStreak++;
    } else {
      this.failCursor = cursor;
      this.failStreak = 1;
    }
    this.backoffMs = this.backoffMs === 0
      ? this.backoffInitialMs
      : Math.min(this.backoffMs * 2, this.backoffMaxMs);
    if (this.failStreak >= 3) {
      logger.warn('SYNC_CLIENT', 'Pull wedged: the same page keeps failing; backing off and retrying', {
        cursor,
        failStreak: this.failStreak,
        backoffMs: this.backoffMs,
      }, err);
    } else {
      logger.debug('SYNC_CLIENT', 'Pull failed (non-blocking; will retry)', {
        cursor,
        backoffMs: this.backoffMs,
      }, err);
    }
  }
}

View on GitHub (pinned to e2d1df569a)

Solutions

  1. Update claude-mem so client and hub schema versions match, then restart.
  2. Read the attached error for the failing op; if it is a poison revision, ask the hub admin to skip or repair that range.
  3. If it self-clears, no action — the backoff retries until the page applies.
Defensive patterns

Strategy: retry

Prevention

When it happens

Trigger: The same cursor/page fails on every attempt — an op row the client cannot apply (schema mismatch, malformed op) or a durable server error for that revision range.

Common situations: Client/server version skew after a hub upgrade, or a poison revision that every apply attempt rejects.

Related errors


AI-assisted analysis of thedotmack/claude-mem@e2d1df569a (2026-08-20). Data as JSON: /api/errors/b04227a30fd2e278. Report an issue: GitHub.