setQuery(e.target.value)}
placeholder="Search nodes…"
diff --git a/components/home.tsx b/components/home.tsx
index fa82895..ca53acf 100644
--- a/components/home.tsx
+++ b/components/home.tsx
@@ -109,7 +109,7 @@ export function Home() {
if (e.key === "Escape" && dictation.active) {
e.preventDefault();
e.stopPropagation();
- dictation.stop();
+ dictation.cancel();
return;
}
if (e.key === "Enter" && !e.shiftKey) {
diff --git a/components/keyboard-shortcuts.tsx b/components/keyboard-shortcuts.tsx
index ea64165..3dc33bc 100644
--- a/components/keyboard-shortcuts.tsx
+++ b/components/keyboard-shortcuts.tsx
@@ -9,7 +9,8 @@
* Shift+Tab cycles the thinking level instead.
* - Esc is a layered dismiss: topmost popover first (popovers stopPropagation
* on their own Esc — usePopoverDismiss + ModelControl), then dictation
- * stop, then abort of an in-flight turn.
+ * CANCEL (discard the transcript, owner 2026-09-17 round 3), then abort of
+ * an in-flight turn.
* - Global actions dispatch lh:kbd-
window events; surfaces that are
* mounted listen (the lh:chat-renamed pattern). A surface that isn't
* mounted simply doesn't listen — an F2 on the graph view is a no-op, not
@@ -71,7 +72,7 @@ export function KeyboardShortcuts() {
// abort seam in Chat decides what's honestly stoppable).
if (isDictationActive()) {
e.preventDefault();
- window.dispatchEvent(new CustomEvent("lh:kbd-stop-dictation"));
+ window.dispatchEvent(new CustomEvent("lh:kbd-cancel-dictation"));
return;
}
window.dispatchEvent(new CustomEvent("lh:kbd-abort-turn"));
diff --git a/components/new-session.tsx b/components/new-session.tsx
index d06e24f..f7b96bc 100644
--- a/components/new-session.tsx
+++ b/components/new-session.tsx
@@ -116,7 +116,7 @@ export function DraftShell({
onStop={() => {}}
canSend={canSend}
autoFocus
- onEscape={dictation.active ? dictation.stop : undefined}
+ onEscape={dictation.active ? dictation.cancel : undefined}
/>