Conversation
…r leaks terminal query replies
At the end of an interactive upgrade the flow re-invokes `proxsave --show-whatsnew`.
showWhatsnewScreen built a Bubble Tea session (shell.Start) BEFORE deciding whether
there were unseen notes. On the common nothing-unseen path the program quit within
milliseconds, before bubbletea's input reader consumed the terminal's async
mode-2026 (synchronized output) / mode-2027 (unicode core) DECRQM capability-query
replies. bubbletea emits those queries on a local terminal (no SSH_TTY, no
TERM_PROGRAM), so the sub-millisecond replies arrived after the terminal was
restored and leaked into the shell as stray input:
^[[?2026;2$y^[[?2027;0$y ... -bash: 2026: command not found
The dashboard never hit this because its long-lived menu loop drains the replies.
Resolve the SHOW/skip decision first and only build the session when there is
something to render. Extract whatsnewResolve (Decide + corrupt-flag self-heal, no
TTY) and whatsnewRender (dedicated timeout + run + seen-flag write only on a clean
continue); maybeShowWhatsnew and showWhatsnewScreen now share both, and the
standalone entry starts no Bubble Tea program on a no-op. Behavior is otherwise
identical (show-once, write-only-on-continue, self-heal, dry-run and
non-interactive guards, dedicated timeout all preserved).
Add SkipsSessionWhenNothingUnseen / BuildsSessionWhenUnseen guards and retarget the
dedicated-timeout AST guard to whatsnewRender.
Qodo reviews are paused for this user.Troubleshooting steps vary by plan Learn more → On a Teams plan? Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center? |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
📝 WalkthroughWalkthroughScreen 0 now resolves whether notes should be shown before starting a dashboard session. Rendering runs under its dedicated timeout, and the seen flag is saved only after a successful flow. Tests cover session skipping, rendering, and timeout wiring. ChangesWhat’s new screen flow
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant showWhatsnewScreen
participant whatsnewResolve
participant whatsnewDecide
participant shell.Session
participant whatsnewRender
participant whatsnewRun
showWhatsnewScreen->>whatsnewResolve: resolve SHOW/skip
whatsnewResolve->>whatsnewDecide: check unseen notes
whatsnewResolve-->>showWhatsnewScreen: return verdict and notes
alt notes unseen
showWhatsnewScreen->>shell.Session: build and start session
showWhatsnewScreen->>whatsnewRender: render notes
whatsnewRender->>whatsnewRun: run with dedicated timeout
else no notes unseen
showWhatsnewScreen-->>showWhatsnewScreen: return without session
end
Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Automated release PR for
v0.30.0-beta8.Summary by CodeRabbit
Bug Fixes
Tests
Greptile Summary
Refactors the whats-new screen flow to avoid starting a terminal session when there are no unseen release notes.
Confidence Score: 5/5
The PR appears safe to merge with no actionable correctness or security defects identified.
The refactor preserves the existing decision, timeout, error, and seen-state contracts while preventing terminal initialization on the no-op standalone path, with targeted tests covering both branches.
Important Files Changed
Reviews (1): Last reviewed commit: "fix(whatsnew): decide before starting th..." | Re-trigger Greptile