Harden TUI transcript scroll and pin reporting - #3391
Merged
Merged
Conversation
8 tasks
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.
TL;DR
The Go TUI now keeps local transcript scroll state and BEAM follow-bottom state synchronized across direct input, content shrink, replacement, and epoch changes. It also exposes truncated history at the resident top and sizes page navigation to the actual transcript viewport.
Closes #2715
Changes
j,k,Ctrl+d,Ctrl+u,G,Page Up, andPage Downthrough exact local-scroll mapping when the transcript owns focus, while forwarding those keys when the composer owns focus.Model.Updatewhen the reader leaves or returns to the bottom, including exact-fit shrink and near-tail clamp cases.earlier messages hiddenat the resident top without exceeding the transcript content budget, including the exact-fit resident-row case.pinEdge, pending-scroll consumption, and received-frame semantics for an empty resident transcript.Acceptance coverage
0x5C) and returned (0x5D) action packets are covered by encoder and update-level tests.0x09decodes true, explicit false, and absent-as-false.Verification
cd go/tui && go test ./...mix protocol.gen --checkmix conformance(162 passed)make lintVisual evidence
Render-level tests verify that the truncation affordance appears only at the resident top, stays inside the content budget, and remains reachable when retained rows exactly fill the viewport.