Fixes #5638. Scope ANSI key deduplication - #5643
Draft
YourRobotOverlord wants to merge 2 commits into
Draft
Conversation
Revert b2525d1 to evaluate a replacement for the timing-based suppression window. Refs tui-cs#5638
Use parser provenance and input-batch boundaries so legacy keys cannot match stale suppression state without relying on timeouts. Fixes tui-cs#5638 Refs tui-cs#4918, tui-cs#5616
YourRobotOverlord
marked this pull request as draft
August 23, 2026 05:29
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.
Summary
Revert the timing-based printable suppression from #5618 and replace it with protocol-aware, batch-scoped deduplication.
Changes
KittyKeyboardPattern, so legacyESC[ZShift+Tab cannot suppress a following TabThe ANSI character stream has no physical-key identity. Consequently, duplicate halves split across separate processing batches are delivered separately; this is the deterministic tradeoff for avoiding a timing heuristic.
Testing
dotnet build --no-restoredotnet test --project Tests/UnitTestsParallelizable --no-build --filter-class "*KittyKeyboardPipelineTests"— 108 passedAnsiResponseParserTests— 59 passedInputProcessorImplTests— 31 passed, 1 pre-existing skipdotnet test --project Tests/UnitTests.NonParallelizable --no-build— 72 passed, 2 pre-existing skipsdotnet test --project Tests/IntegrationTests --no-build— 437 passedTo pull down this PR locally: