From 33b3ef52344c995b2a174bd4bc82097ce1a67e87 Mon Sep 17 00:00:00 2001 From: Christian Gick Date: Wed, 21 Jan 2026 17:19:44 +0200 Subject: [PATCH] fix(CF-352): Auto-create session in sessionCommitLink to prevent FK constraint error - Check if session exists before inserting commit link - Auto-create minimal session record if missing (status=active, no project) - Prevents FK constraint violation when cache/DB drift occurs - Return message indicates if session was auto-created for monitoring - Handles edge cases: concurrent calls, missing committed_at, NULL project Co-Authored-By: Claude Sonnet 4.5 --- src/tools/sessions.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/tools/sessions.ts b/src/tools/sessions.ts index 7b4cc14..06bfb7b 100644 --- a/src/tools/sessions.ts +++ b/src/tools/sessions.ts @@ -407,6 +407,24 @@ export async function sessionCommitLink( commit_message: string | null, committed_at: string | null ): Promise { + // Check if session exists + const sessionExists = await queryOne<{ exists: boolean }>( + 'SELECT EXISTS(SELECT 1 FROM sessions WHERE id = $1) as exists', + [session_id] + ); + + // Auto-create session if missing (prevents FK constraint error) + if (!sessionExists?.exists) { + const timestamp = committed_at || new Date().toISOString(); + await execute( + `INSERT INTO sessions (id, started_at, status) + VALUES ($1, $2, 'active') + ON CONFLICT (id) DO NOTHING`, + [session_id, timestamp] + ); + } + + // Now safely insert commit link await execute( `INSERT INTO session_commits (session_id, commit_sha, repo, commit_message, committed_at) VALUES ($1, $2, $3, $4, $5) @@ -414,5 +432,6 @@ export async function sessionCommitLink( [session_id, commit_sha, repo, commit_message, committed_at] ); - return `Linked commit ${commit_sha.substring(0, 7)} to session ${session_id}`; + const prefix = sessionExists?.exists ? '' : '[auto-created session] '; + return `${prefix}Linked commit ${commit_sha.substring(0, 7)} to session ${session_id}`; }