diff --git a/app/src/main/kotlin/com/shonar/desktop/Reports.kt b/app/src/main/kotlin/com/shonar/desktop/Reports.kt index 263bd8c..3d70a19 100644 --- a/app/src/main/kotlin/com/shonar/desktop/Reports.kt +++ b/app/src/main/kotlin/com/shonar/desktop/Reports.kt @@ -12,7 +12,12 @@ fun renderReport(title: String, transcript: TranscriptData?, summary: SummaryDat val out = mutableListOf("# $title", "") if (summary != null) { if (summary.short.isNotBlank()) { - out += listOf("## Summary", "", summary.short, "") + // Always state the voice: "neutral" when no persona was asked + // for — the summary is in a voice either way, and silence read + // as "unknown". + out += listOf("## Summary", "", + "*Voice: ${summary.tone ?: "neutral"}*", "", + summary.short, "") } for (key in SUMMARY_LIST_KEYS) { val items = summary.list(key) diff --git a/app/src/main/kotlin/com/shonar/desktop/Screens.kt b/app/src/main/kotlin/com/shonar/desktop/Screens.kt index 32bf2c4..d70ebd4 100644 --- a/app/src/main/kotlin/com/shonar/desktop/Screens.kt +++ b/app/src/main/kotlin/com/shonar/desktop/Screens.kt @@ -803,13 +803,12 @@ fun DetailScreen(state: DesktopState) { if (s.short.isNotBlank()) { Row(verticalAlignment = Alignment.CenterVertically) { Text("Summary", style = MaterialTheme.typography.titleMedium) - // Honest tag: which voice this summary was written in. - s.tone?.let { - Spacer(Modifier.width(8.dp)) - Text("· in a $it voice", - style = MaterialTheme.typography.labelMedium, - color = MaterialTheme.colorScheme.primary) - } + // Honest tag: which voice this summary was written in + // — always shown; no persona = the neutral house voice. + Spacer(Modifier.width(8.dp)) + Text("· in a ${s.tone ?: "neutral"} voice", + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.primary) } Text(s.short) } diff --git a/app/src/test/kotlin/com/shonar/desktop/ReportsTest.kt b/app/src/test/kotlin/com/shonar/desktop/ReportsTest.kt index 12c4fd7..82d7a15 100644 --- a/app/src/test/kotlin/com/shonar/desktop/ReportsTest.kt +++ b/app/src/test/kotlin/com/shonar/desktop/ReportsTest.kt @@ -32,6 +32,15 @@ class ReportsTest { assertTrue("_No transcript available._" in md) } + @Test fun summarySectionAlwaysStatesVoice() { + val s = SummaryData(version = 1, + content = mapOf("short" to "Standup happened.")) + // No persona: the neutral house voice, stated — not silence. + assertTrue("*Voice: neutral*" in renderReport("t", null, s)) + val toned = s.copy(tone = "sarcastic") + assertTrue("*Voice: sarcastic*" in renderReport("t", null, toned)) + } + @Test fun fmtTsShape() { assertEquals("00:00:00", fmtTs(0.0)) assertEquals("00:01:05", fmtTs(65.0))