earendil-works/pi · error · RangeError

writerLease.heartbeatIntervalMs must be positive and less th

Error message

writerLease.heartbeatIntervalMs must be positive and less than ttlMs

What it means

Error "writerLease.heartbeatIntervalMs must be positive and less than ttlMs" thrown in earendil-works/pi.

Source

Thrown at packages/session-backends/sqlite-node/src/sqlite/repo.ts:119

export interface SqliteSessionRepositoryOptions {
	env: SqliteSessionRepositoryEnv;
	sqlite: SqliteDatabaseFactory;
	databasePath: string;
	writerLease?: SqliteWriterLeaseOptions;
}

interface ResolvedWriterLeaseOptions {
	ttlMs: number;
	heartbeatIntervalMs: number;
}

function resolveWriterLeaseOptions(options: SqliteWriterLeaseOptions | undefined): ResolvedWriterLeaseOptions {
	const ttlMs = options?.ttlMs ?? 30_000;
	const heartbeatIntervalMs = options?.heartbeatIntervalMs ?? 10_000;
	if (!Number.isSafeInteger(ttlMs) || ttlMs <= 0) throw new RangeError("writerLease.ttlMs must be positive");
	if (!Number.isSafeInteger(heartbeatIntervalMs) || heartbeatIntervalMs <= 0 || heartbeatIntervalMs >= ttlMs) {
		throw new RangeError("writerLease.heartbeatIntervalMs must be positive and less than ttlMs");
	}
	return { ttlMs, heartbeatIntervalMs };
}

function activeWriterError(sessionId: string): SessionError {
	return new SessionError("storage", `SQLite session ${sessionId} already has an active writer`);
}

function lostWriterError(sessionId: string): SessionError {
	return new SessionError("storage", `SQLite session ${sessionId} writer lease was lost`);
}

function claimWriterLease(db: SqliteDatabase, sessionId: string, options: ResolvedWriterLeaseOptions): WriterLease {
	const now = Date.now();
	const lease = acquireWriterLease(db, sessionId, uuidv7(), now, now + options.ttlMs);
	if (!lease) throw activeWriterError(sessionId);
	return lease;
}

View on GitHub (pinned to 4af9d21d3b)

Solutions

  1. Set writerLease.heartbeatIntervalMs to a positive value below ttlMs.

When it happens

Trigger: Thrown at packages/session-backends/sqlite-node/src/sqlite/repo.ts:119 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of earendil-works/pi@4af9d21d3b (2026-08-24). Data as JSON: /api/errors/46ecdca981047e1d. Report an issue: GitHub.