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
- Update claude-mem so client and hub schema versions match, then restart.
- Read the attached error for the failing op; if it is a poison revision, ask the hub admin to skip or repair that range.
- If it self-clears, no action — the backoff retries until the page applies.
Defensive patterns
Strategy: retry
Prevention
- Upgrade clients promptly after hub upgrades to avoid schema skew.
- Watch failStreak warnings during rollout windows; three failures on one cursor means a poison page, not flakiness.
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
- Backfill failed: ${error instanceof Error ? error.message :
- sync hub status: response requires decimal-string epoch/head
- sync hub status: projected_seq exceeds head_seq
- partial canonical mutation snapshot
- mutation body is not JSON
AI-assisted analysis of thedotmack/claude-mem@e2d1df569a (2026-08-20).
Data as JSON: /api/errors/b04227a30fd2e278.
Report an issue: GitHub.