fix(connect): preserve tunnel delivery and late wrappers - #142
Merged
minekube-ai-engineer[bot] merged 2 commits intoAug 9, 2026
Conversation
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
Reproduction: delayed keepalive delivery (#140)
The new
TunnelHandlerTest.onReceiveFlushesBeforeTheNextEventLoopTaskCanObserveDeliveryinserts an observation task immediately after packet acceptance. The previous two-task batching path produced[WRITE, OBSERVE, FLUSH], proving unrelated event-loop work could run before the accepted packet was delivered. The fixed path produces[WRITE, FLUSH, OBSERVE]and keeps payload copying and event-loop confinement.The later Windows socket abort in the report is cleanup after Paper's kick, not the initiating cause. An affected-host 0.15.4 retest is still required before closing #140.
Reproduction: PacketEvents/nLogin (#141)
The Velocity regression test installs a PacketEvents-shaped wrapper after Connect creates its tunnel initializer. The previous implementation invoked only the captured Velocity initializer and omitted the later decoder. The fixed path resolves the holder per connection, so both the base Velocity decoder and late PacketEvents decoder are present.
Validation
[WRITE, OBSERVE, FLUSH]TunnelHandlerTestpassed./gradlew checkpassedCloses #141
Addresses #140