fix(tui): the wave blooms from the center, the figure stops blinking [spec 10] - #116
Merged
Conversation
…[spec 10] Two by-eye reports from the first real Ghostty session after #115: - The spectrum was pinned bin 0 -> left arm, so the ever-breathing bass made the wave read as marching left-to-right. waveBinAt now mirrors the bins from the arc's middle outward — bass at the center, treble fraying toward both arms (unit-tested for symmetry and for a bass-only frame lighting the center alone). - The raster figure blanked for over half a second at the first spoken line: the placement effect depended on the pose, so every state change ran deleteFigures and waited out the 600ms resettle. The pose now rides a ref and swaps the next transmitted frame in place under the same image id; only a real relayout tears the placement down. Verified in the pty harness: 73 in-place retransmissions across a run spanning the greeting->talk transition, zero deletes before shutdown. Peer review (codex gpt-5.5 xhigh): 0 findings. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements specs/spec10/10-tui.md (§3.6 visualizer, §6.1 quiet-constellation).
Two by-eye reports from the first real Ghostty session after #115.
Wave direction
The spectrum bins were laid left-to-right across the arc, so bin 0 — the
bass, which is almost always breathing — anchored the left arm and the wave
read as growing from the left edge.
waveBinAtnow mirrors the spectrumfrom the arc's middle outward: bass rises at the center, treble frays toward
both arms, and the wave blooms symmetrically. Unit-tested for mirror
symmetry and for a bass-only frame lighting only the center.
Start-of-broadcast flash
The raster figure's placement effect depended on the pose, so the first
spoken line (greeting -> talk) tore the effect down:
deleteFigures, then a600ms resettle before the repaint — the figure blanked visibly on every
state change. The pose now rides a ref and swaps the next transmitted frame
in place under the same kitty image id; PNGs are encoded per pose on first
use, a shared clock advances each pose at its own fps, and identical frames
are not retransmitted. Only a real relayout (resize, breakpoint, settings)
tears the placement down.
Acceptance
Wide-pty harness (200x50, ghostty env, STUB): 73 in-place frame
retransmissions across a 22s run spanning the greeting->talk transition,
zero
a=ddeletes before shutdown — the flash's byte signature is gone.Full suite 688 green; typecheck and lint clean.
Peer review (codex gpt-5.5 xhigh): 0 findings.
AI coding brief
the figure flashes once when the radio's first line arrives, and the wave
always grows from the left instead of emanating from the center.
from the code, no added logging needed.
that deletes a terminal-side artifact on re-run must depend only on real
layout inputs, with content swaps riding refs.
🤖 Generated with Claude Code