From 0e22098652b2d868a2dea4f5a1e579e7baa21bf3 Mon Sep 17 00:00:00 2001 From: Kacper Date: Thu, 1 Jan 2026 19:07:13 +0100 Subject: [PATCH] feat(backlog-plan): add detailed logging for Cursor result extraction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Change debug logs to info/warn so they're always visible - Log when result message is received from Cursor - Log lengths of both msg.result and accumulated responseText - Log which source is being used (result vs accumulated) - Log empty response error for better diagnostics - Add response preview logging on parse failure This will help diagnose why Cursor parsing is failing by showing: 1. Whether result messages are being received 2. What content lengths we're working with 3. Whether response text is empty or has content 4. What the actual response looks like when parsing fails 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- .../server/src/routes/backlog-plan/generate-plan.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/server/src/routes/backlog-plan/generate-plan.ts b/apps/server/src/routes/backlog-plan/generate-plan.ts index 15302cbc..23ebacda 100644 --- a/apps/server/src/routes/backlog-plan/generate-plan.ts +++ b/apps/server/src/routes/backlog-plan/generate-plan.ts @@ -56,8 +56,11 @@ function parsePlanResponse(response: string): BacklogPlanResult { // If parsing fails, log details and return an empty result logger.warn('[BacklogPlan] Failed to parse AI response as JSON'); - logger.debug('[BacklogPlan] Response text length:', response.length); - logger.debug('[BacklogPlan] Response preview:', response.slice(0, 500)); + logger.warn('[BacklogPlan] Response text length:', response.length); + logger.warn('[BacklogPlan] Response preview:', response.slice(0, 500)); + if (response.length === 0) { + logger.error('[BacklogPlan] Response text is EMPTY! No content was extracted from stream.'); + } return { changes: [], summary: 'Failed to parse AI response', @@ -150,9 +153,13 @@ export async function generateBacklogPlan( } } else if (msg.type === 'result' && msg.subtype === 'success' && msg.result) { // Use result if it's a final accumulated message (from Cursor provider) + logger.info('[BacklogPlan] Received result from Cursor, length:', msg.result.length); + logger.info('[BacklogPlan] Previous responseText length:', responseText.length); if (msg.result.length > responseText.length) { - logger.debug('[BacklogPlan] Received result from Cursor, length:', msg.result.length); + logger.info('[BacklogPlan] Using Cursor result (longer than accumulated text)'); responseText = msg.result; + } else { + logger.info('[BacklogPlan] Keeping accumulated text (longer than Cursor result)'); } } }