earendil-works/pi · error · SessionError

storage

storage

Error message

Lane ${row.lane} points at missing entry ${row.leaf_id}

What it means

Error "Lane ${row.lane} points at missing entry ${row.leaf_id}" thrown in earendil-works/pi.

Source

Thrown at packages/session-backends/sqlite-node/src/sqlite/storage/lanes.ts:38

	sql`INSERT INTO lanes (session_id, lane, leaf_id, open_operation_id)
		VALUES (${sessionId}, ${lane}, ${leafId}, NULL)`.run(db);
}

export function readLanes(db: SqliteDatabase, sessionId: string) {
	const rows = sql`SELECT
			l.session_id,
			l.lane,
			l.leaf_id,
			l.open_operation_id,
			(l.leaf_id IS NULL OR EXISTS (
				SELECT 1 FROM entries AS e WHERE e.session_id = l.session_id AND e.id = l.leaf_id
			)) AS leaf_exists
		FROM lanes AS l
		WHERE l.session_id = ${sessionId}
		ORDER BY l.lane`.all<LaneRow & { leaf_exists: number }>(db);
	for (const row of rows) {
		if (row.leaf_exists === 0) {
			throw new SessionError("storage", `Lane ${row.lane} points at missing entry ${row.leaf_id}`);
		}
	}
	return rows.map(({ session_id, lane, leaf_id, open_operation_id }) => ({
		session_id,
		lane,
		leaf_id,
		open_operation_id,
	}));
}

export function readLane(db: SqliteDatabase, sessionId: string, lane: string) {
	return sql`SELECT session_id, lane, leaf_id, open_operation_id
		FROM lanes
		WHERE session_id = ${sessionId} AND lane = ${lane}`.get<LaneRow>(db);
}

export function readLaneHead(db: SqliteDatabase, sessionId: string, lane: string) {
	const row = sql`SELECT

View on GitHub (pinned to 4af9d21d3b)

Solutions

  1. The lane references a missing entry; the database is inconsistent, repair or rebuild it.

When it happens

Trigger: Thrown at packages/session-backends/sqlite-node/src/sqlite/storage/lanes.ts:38 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/20697df0ea430453. Report an issue: GitHub.