From 30f45d6ec794ff2666cea9540d264a5c0a55da01 Mon Sep 17 00:00:00 2001 From: Shrinivas Biradar Date: Mon, 25 May 2026 15:29:33 +0530 Subject: [PATCH] mergeTooShort() never merges a short first segment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The function merges short segments into the preceding one using this guard: if (result.length > 0 && part.length < MIN_SEGMENT_CHARS) When the very first segment is short (e.g. "Ok."), result.length === 0, so it's pushed as-is. The second segment then passes the length check and gets pushed separately — leaving a tiny stub bubble as the first chat message. Fix: After the main loop, if result[0] is still below the minimum, forward-merge it into result[1]. --- app/src/utils/messageSegmentation.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/app/src/utils/messageSegmentation.ts b/app/src/utils/messageSegmentation.ts index baf33c450e..4a91af14ff 100644 --- a/app/src/utils/messageSegmentation.ts +++ b/app/src/utils/messageSegmentation.ts @@ -59,7 +59,18 @@ export function getSegmentDelay(segment: string): number { // ─── helpers ───────────────────────────────────────────────────────────────── -/** Merge adjacent items that are shorter than MIN_SEGMENT_CHARS. */ +/** + * Merge adjacent items that are shorter than MIN_SEGMENT_CHARS. + * + * Previously only short segments following a prior segment were merged (into + * the preceding one). A short *first* segment was left as-is because the + * `result.length > 0` guard prevented it from being absorbed. This caused the + * first chat bubble to show fewer than MIN_SEGMENT_CHARS characters while all + * subsequent short segments were correctly consolidated. + * + * Fix: after the normal backward-merge pass, check whether the first segment + * is still too short and, if so, forward-merge it into the second segment. + */ function mergeTooShort(parts: string[], joiner: string): string[] { const result: string[] = []; for (const part of parts) { @@ -69,6 +80,14 @@ function mergeTooShort(parts: string[], joiner: string): string[] { result.push(part); } } + + // If the first segment is still shorter than the minimum, forward-merge it + // into the second segment (if one exists) so no leading stub bubble is shown. + if (result.length >= 2 && result[0].length < MIN_SEGMENT_CHARS) { + result[1] = result[0] + joiner + result[1]; + result.shift(); + } + return result; }