fix(tui): the spotlight card floats over the room, never rearranges it [spec 10] - #128
Merged
Merged
Conversation
…ts rows [spec 10] The card was a flex sibling: mounting it took ~20 rows from the layout, and on borderline heights the scene-yield guard collapsed the whole sky band, throwing the wordmark to the top of the frame (user report). The card is a mask, not a sibling — it is now absolutely positioned over the room (yoga absolute, zIndex above the text layer), anchored a gap row above the bottom rule, so the room dims but never rearranges. The scene band stays whenever the pane is closed; the raster layers still yield where the card's rows reach (stagePlan / waveRowsFor, unchanged). Yoga anchors absolute insets to the parent's border box, so the ultrawide gutter is added back to keep the card centered. 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.2-B / §3.3 (overlay amendment, 2026-08-12).
What
The spotlight card was a flex sibling in the root column: mounting it took ~20 real rows from the layout, and on borderline terminal heights the scene-yield guard (
cardTop > 3 + sceneRows) collapsed the entire sky band — the figure vanished and the wordmark ident jumped to the top of the frame on every pre-broadcast check (user report, 2026-08-12).The card is a mask, not a sibling. It is now absolutely positioned over the room (yoga
position: absolute+zIndex, anchored a gap row above the bottom rule, centered): it takes no rows, so the room dims (hush) but never rearranges.sceneShowndrops its card clause — the band stays whenever the settings pane is closed. The raster layers' yield contract is unchanged: kitty images composite above text cells, sostagePlan/waveRowsForstill clip or delete the figure/ripple only where the card's own rows reach (all pure modules and their tests untouched).One yoga finding locked into a comment: absolute insets anchor to the parent's border box, not the padding box, so the ultrawide gutter (>184 cols) must be added back into
leftto keep the card centered.Evidence (real-frame A/B, 200x60 pty + pyte replay)
Fake engine sends the pre-broadcast checklist
ask; real TUI client under a ghostty-env pty; final grid asserted:wordmark_row=2— scene band collapsed, wordmark at the top of the frame (the reported bug); viz stream ~28KB (wave off stage).Tests
pnpm test780 passed,pnpm run typecheck, oxlint, andtuitsc all green.stagePlan,waveRowsFor,cardTopRow) already pin the raster-yield contract. The layout change itself is JSX-only and was verified by the real-frame harness above; the border-box gutter finding is not unit-testable headlessly (yoga layout), recorded in the code comment instead.Peer review (codex gpt-5.5 xhigh): 0 findings.
AI coding brief
app.tsxbefore proposing fixes — starting from the two screenshots' diff kept the investigation to one file. Checking OpenTUI's type surface forposition/zIndexbefore promising the overlay avoided a dead-end design; the pty A/B harness caught the border-box centering bug that no unit gate could.🤖 Generated with Claude Code