Skip to content

Overlay: never show the target visualizer over SYSTEM RESPONDING - #151

Merged
JRufer merged 3 commits into
developmentfrom
feat/overlay-exclusivity
Sep 24, 2026
Merged

JRufer merged 3 commits into
developmentfrom
feat/overlay-exclusivity

Conversation

@JRufer

@JRufer JRufer commented Sep 24, 2026

Copy link
Copy Markdown
Owner

Part of re-landing 1f13d62. This one is independent and based directly on development.

The overlay's parts now stack in a column: target visualizer, command pill, SYSTEM RESPONDING pill, MCP pill. The visualizer is hidden while SYSTEM RESPONDING shows, so they never overlap.

Fixes over the original commit

  • The visualizer's fade-out plays again. The original removed it the moment recording stopped, cutting off the 450ms fade the overlay waits for. It now stays on screen while the whole overlay fades. When recording ends and the overlay stays up only for a command or MCP pill, the visualizer is removed.
  • Recording takes priority over SYSTEM RESPONDING. Starting to dictate stops playback (begin_recording), but the speaking flag can lag behind it. Until then, all recording feedback was hidden.
  • Pills stay inside the window. Built-in visualizers are at most ~152px, so the visualizer plus two pills fit in the 444px window. A taller custom overlay now gets trimmed instead of pushing the pills out of the window.
  • Removed the unused commandTriggeredDuringRecording and a duplicate condition.
  • More reliable tests. They restore the shared config store afterwards and wait out the overlay's 25ms repaint delay explicitly. The mocked get_config now fails, which keeps the store at its defaults; before, it replaced the store with a status object and the original tests passed by luck.

Test plan

  • npx vitest run: 244 pass, including new fade-out and talk-over-reply tests. The fade-out test fails against the original commit's Overlay.svelte
  • svelte-check: 0 errors
  • Manual: check the visualizer plus command pill with each built-in style, and the fade on release

🤖 Generated with Claude Code

JRufer and others added 2 commits September 23, 2026 19:53
Stack the overlay's parts in a column and hide the recording visualizer
while the SYSTEM RESPONDING pill is up, so the two never overlap. Command
and MCP pills are shown alongside the visualizer during recording.

- The visualizer stays mounted while the whole overlay fades out, so its
  outro transition still plays (an earlier draft unmounted it the instant
  recording stopped). It is dropped once recording ends only when the
  overlay stays up for a command/MCP pill.
- Overlay tests restore the config store after themselves, wait out the
  overlay's 25ms repaint delay explicitly, and fail the mocked get_config
  so the store keeps its defaults instead of a status-shaped object.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pills in view

- While recording, show the target visualizer and hide the SYSTEM
  RESPONDING pill. Starting to dictate interrupts playback, but the
  speaking flag can lag behind it, which briefly hid all recording feedback.
- Let the visualizer box shrink (trimmed, not scaled) so a tall custom
  overlay can't push the command/MCP pills out of the 444px window.
  Built-in visualizers (at most ~152px) plus two pills fit with room left.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@JRufer JRufer mentioned this pull request Sep 24, 2026
6 tasks
The status store polls get_status every second when no status-tick events
arrive, which in tests is always. The mock replied with a fixed idle
status, so whenever a run was slow enough for a poll to land inside a
test's settle window (as on CI), speaking/recording were reset under it
and 'hides target visualizer and displays SYSTEM RESPONDING' failed. The
mock now returns the status store's current value, so a poll is a no-op.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@JRufer
JRufer merged commit 4b73e11 into development Sep 24, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant