Repository navigation
Conversation
…eaks (#417) - New buffer-level suite: one hostile corpus (OSC 52, OSC 8, OSC 0, screen clear, cursor, C1, CR, BS, BEL, NUL, bidi, CJK, combining, ZWJ emoji) in every untrusted field, drawn on every page at 20x6 to 180x50, in every color mode and both glyph sets: no control character reaches a cell, the way back stays visible from 40x12, and NO_COLOR draws no color. - Fix: the notification toast drew its message raw and in hard-coded truecolor. Next now draws its own one-row toast in the selected color mode with inert text; Classic keeps its banner. - Fix: the Next header and Session page showed the session title, project, model and familiar raw. - Fix: in Next the terminal-title topic drops control characters, so a stored session title cannot end the OSC title sequence early. - tmux case 11: a fake claude answers with control sequences; tmux paste buffers and the title stay clean and earlier screen content survives.
…test/417-safety-matrix
…each every page - Matrix: three variants (approval pending, plain, error notice); the plain variant must draw a distinct frame for every page, so a hidden inspector can no longer pass for coverage. - Error notices: Next draws its own inert panel over the composer instead of handing the frame to Classic's modal, which drew provider error text raw and in color under NO_COLOR. Esc still dismisses through the shared key handling (parity test updated and a new one added). - Every Next field value is made inert (Session page model, provider, familiar and project; approval Project detail). - Attachment labels (image media type, document title, pasted image file name) are made inert. - The toast sits in the transcript pane, never over an approval, the header or the inspector, and ends a cut message with an ellipsis. - tmux case 11: the model's OSC 52 has its own payload; hyperlink and raw BEL checks added. - Test header names what is not covered: frames still handed to Classic, look-alike chrome, and bidi marks.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…xt (#417) - Every scheme (dark, light) and motion setting (full, reduced) across all color modes, pages and sizes keeps cells inert and the way back visible. - Large content: a 100,000-line answer, a 10,000-line diff-shaped result and 64 KiB of binary output render inert at 20x6 to 180x50 with the live end and the way back visible; scrolling away and Alt+L back to live work. - Observation (not a gate): frame cost grows with transcript length.
Member
Author
|
Added
Workspace: 2936 passed, 0 failed. Clippy is clean. |
This branch was successfully deployed
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.
Context
mainas the stack lands.What the tests found and what changed (Next only)
workspace_linesafe_one_linefield()field()makes every value inertapplication/view.rsupdate_terminal_titleat 4 call sitesterminal_title_topicdrops control characters and bidi overrides. Classic is unchanged; see #437.Classic is unchanged.
notifications.rsandrender.rsare not touched. The one changed parity test now states the new contract: Next draws error notices itself.Tests
tui/tests/next_hostile_output.rs(9 tests). One corpus is placed in every untrusted field Next shows. It contains:The suite runs these checks:
presentation_parity.rs: the error modal is no longer in the list of surfaces handed to Classic. A new test covers the Next error panel and Esc.tmux case 11: a fake
claudeanswers with control sequences, and tmux'sset-clipboardis on so a leak would be observable. The case checks that:Honest note: at the PTY level, pasted prompt controls already arrive in the composer as caret text. A raw byte capture showed the base binary emits no raw OSC 52 for this journey either, so case 11 is a regression guard. The leaks above were proven red at buffer level against the parent commit.
Verification
cargo fmt --all --checkcargo clippy --workspace --all-targets -- -D warningscargo test --workspace: 2932 passed, 0 failedSHELL=/bin/bash: 93/93python3 scripts/check-secrets.py: this repository has no such script. Fixtures are synthetic.Independent review
A fresh reviewer read
993754c. Verdict: not ready. The matrix could not see most surfaces, because a pending approval hid the inspector. Resolved in588e85f:field()makes every value inertview.rsAccepted gaps:
Risk and Rollback