From 25d53cb251e92f456f3463cd8e38312929c5973d Mon Sep 17 00:00:00 2001 From: avi Date: Wed, 16 Sep 2026 17:12:10 -0500 Subject: [PATCH] =?UTF-8?q?Detail:=20always=20fetch=20live=20summary=20for?= =?UTF-8?q?=20open=20file=20=E2=80=94=20voice=20tag=20was=20invisible=20fo?= =?UTF-8?q?r=20library-opened=20files=20(the=20report's=20own=20'##=20Summ?= =?UTF-8?q?ary'=20section=20defeated=20the=20fetch=20heuristic)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/kotlin/com/shonar/desktop/DesktopState.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/shonar/desktop/DesktopState.kt b/app/src/main/kotlin/com/shonar/desktop/DesktopState.kt index 0fa038e..9c1a34a 100644 --- a/app/src/main/kotlin/com/shonar/desktop/DesktopState.kt +++ b/app/src/main/kotlin/com/shonar/desktop/DesktopState.kt @@ -1065,10 +1065,12 @@ class DesktopState(private val appDir: File = defaultAppDir()) { if (_detail.value?.file != file) return@launch } if (remoteId == null) return@launch - // Report written before a summary existed (or lost a race): - // pull finished outputs so the detail view isn't stale. - val report = d.reportText - if (d.transcript == null && !report.isNullOrBlank() && !report.contains("## Summary")) { + // Voice tag + re-summarize state need the live SummaryData, + // not just the rendered report: whenever the open file has no + // summary loaded yet, fetch transcript+summary from the engine + // (the old "report contains ## Summary" shortcut left the + // voice tag invisible for every library-opened file). + if (d.summary == null) { val t = runCatching { parseTranscript(provider.fetchTranscript(remoteId)) } .getOrNull() val s = runCatching { parseSummary(provider.fetchSummary(remoteId)) }