{"record":{"id":"20697df0ea430453","repo":"earendil-works/pi","slug":"storage-20697d","errorCode":"storage","errorMessage":"Lane ${row.lane} points at missing entry ${row.leaf_id}","messagePattern":"Lane (.+?) points at missing entry (.+?)","errorType":"exception","errorClass":"SessionError","httpStatus":null,"severity":"error","filePath":"packages/session-backends/sqlite-node/src/sqlite/storage/lanes.ts","lineNumber":38,"sourceCode":"\tsql`INSERT INTO lanes (session_id, lane, leaf_id, open_operation_id)\n\t\tVALUES (${sessionId}, ${lane}, ${leafId}, NULL)`.run(db);\n}\n\nexport function readLanes(db: SqliteDatabase, sessionId: string) {\n\tconst rows = sql`SELECT\n\t\t\tl.session_id,\n\t\t\tl.lane,\n\t\t\tl.leaf_id,\n\t\t\tl.open_operation_id,\n\t\t\t(l.leaf_id IS NULL OR EXISTS (\n\t\t\t\tSELECT 1 FROM entries AS e WHERE e.session_id = l.session_id AND e.id = l.leaf_id\n\t\t\t)) AS leaf_exists\n\t\tFROM lanes AS l\n\t\tWHERE l.session_id = ${sessionId}\n\t\tORDER BY l.lane`.all<LaneRow & { leaf_exists: number }>(db);\n\tfor (const row of rows) {\n\t\tif (row.leaf_exists === 0) {\n\t\t\tthrow new SessionError(\"storage\", `Lane ${row.lane} points at missing entry ${row.leaf_id}`);\n\t\t}\n\t}\n\treturn rows.map(({ session_id, lane, leaf_id, open_operation_id }) => ({\n\t\tsession_id,\n\t\tlane,\n\t\tleaf_id,\n\t\topen_operation_id,\n\t}));\n}\n\nexport function readLane(db: SqliteDatabase, sessionId: string, lane: string) {\n\treturn sql`SELECT session_id, lane, leaf_id, open_operation_id\n\t\tFROM lanes\n\t\tWHERE session_id = ${sessionId} AND lane = ${lane}`.get<LaneRow>(db);\n}\n\nexport function readLaneHead(db: SqliteDatabase, sessionId: string, lane: string) {\n\tconst row = sql`SELECT","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/earendil-works/pi/blob/4af9d21d3b4d664e4a29fcabfec85171077248e3/packages/session-backends/sqlite-node/src/sqlite/storage/lanes.ts#L20-L56","documentation":"Error \"Lane ${row.lane} points at missing entry ${row.leaf_id}\" thrown in earendil-works/pi.","triggerScenarios":"Thrown at packages/session-backends/sqlite-node/src/sqlite/storage/lanes.ts:38 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["The lane references a missing entry; the database is inconsistent, repair or rebuild it."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"4af9d21d3b4d664e4a29fcabfec85171077248e3","analyzedAt":"2026-08-24T13:07:14.692Z","schemaVersion":2},"datasetVersion":"2026-08-24T17:17:21.512Z"}