From 05b84a361a7e4cf0b77ad04ff33a4d7142b537db Mon Sep 17 00:00:00 2001 From: avi Date: Fri, 18 Sep 2026 21:18:30 -0500 Subject: [PATCH] Show the busy label the instant a click lands, before the first job row exists MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Between pressing Transcribe and the first /jobs poll there was a blind window where real work (POST in flight, token refresh, initial upload) had no on-screen trace at all — the screenshot complaint 'shows nothing'. Any non-null busy label now renders as a pipeline-style card in the same slot the panel occupies, so feedback starts at click time. --- app/src/main/kotlin/com/shonar/desktop/Screens.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/src/main/kotlin/com/shonar/desktop/Screens.kt b/app/src/main/kotlin/com/shonar/desktop/Screens.kt index cc8cbbd..7b3e4a7 100644 --- a/app/src/main/kotlin/com/shonar/desktop/Screens.kt +++ b/app/src/main/kotlin/com/shonar/desktop/Screens.kt @@ -847,6 +847,21 @@ fun DetailScreen(state: DesktopState) { val sJob = detail.jobs.firstOrNull { it.jobType == "summarize" } if (pipeline != null) { PipelinePanel(pipeline) + } else if (detail.busy != null) { + // Click-landed but no job row yet (POST/token/poll latency): + // busy is REAL work in flight — showing nothing here was the + // "hit transcribe, screen looks dead" blind window. + SonarCard(modifier = Modifier.fillMaxWidth()) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(Shonar.Space2), + ) { + Text("→", style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.primary) + Text(detail.busy!!, style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.primary) + } + } } // Rescue-swap note: the engine succeeded but had to switch // summarizers mid-job. Tell the user in plain words, not the raw