You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(native): KDE SnapShot no longer loses the first reply from KWin - #36218
The Rust test transport_tests::keeps_captured_identity_when_only_the_title_spinner_changes fails now and then in CI (main on 2026-11-10, #36187 on 2026-11-13). It panics on unwrap() of None at src/transport_tests.rs:268 and the test binary takes 5.03s.
The cause is in the product code, not the test. script() registered its D-Bus reply object with object_server().at() after the connection was built. zbus starts the object server's method-call listener in a spawned task and does not wait for it. If KWin's first Reply call arrives before that listener subscribes, zbus drops the call. script() then waits the full 5 second deadline, and the capture comes back with no window identity. A real KDE capture can hit the same race.
Change
ScriptReply is now served from the connection builder (Builder::serve_at), in a new connect() helper. zbus waits for the listener before build() returns, so no call can arrive too early.
ScriptReply holds the pending call (Option<(owner, sender)>). script() sets it before the script runs and clears it after. A reply with no script in flight is refused.
The test fixture builds its client with the same connect() helper.
Scope
Small fix of a known flake in the daily CI flake ledger. No issue. #10645 fixed the same zbus behavior for the feedback test only; the comment it left in feedback.rs describes this race.
Verification
Stress alone did not reproduce it: 0 failures in 1200 runs under CPU contention.
Forced timing: I built the crate against a local copy of zbus 5.19.0 that starts the object server task 300 ms late.
Old code: fails 3 of 3 with the CI panic (transport_tests.rs:268, unwrap() on None, about 5.3s).
This change: passes 5 of 5 with the same delay.
cargo fmt --check and cargo test --locked pass for native/kde-snap-shot (12 of 12).
vp run check:changed passes.
Not checked: a capture on a real KDE Plasma session. The fake KWin in the transport tests covers the D-Bus path.
Reviewed with sol-loop: 1 pass with GPT-6.1 Sol. Sol verdict: approved
Model and harness: Claude Fable 5.2 in Claude Code, through T3 Code.
Macroscope's review found this PR approvable — The KDE helper registers its reply listener before connecting so the first KWin response is not missed. Existing sender validation, payload limits, and timeouts remain, with no change to capture permissions or product defaults.
No code changes detected at 5dba2ee. Prior analysis still applies.
You can add or adjust custom eligibility rules. Learn more.
Reviewing files that changed from the base of the PR and between 6aa017f and 5dba2ee.
You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.
Use the checkbox below for a quick retry:
Trigger review
No actionable comments were generated in the recent review.
Walkthrough
The session connection now serves a persistent reply object. The object accepts replies only from the active KWin owner during a script call, then clears that active state when the script completes.
Changes: KWin reply handling
Layer / File(s)
Summary
Reply lifecycle and connection setup native/kde-snap-shot/src/main.rs, native/kde-snap-shot/src/transport_tests.rs
ScriptReply stores an optional active owner and reply channel. It rejects replies when no script is active or the sender is not the recorded owner, while retaining the 64 KiB limit. connect serves the reply object, and script clears its active state after execution. The session and test fixture now use connect.
This change makes KDE screenshot window identification more reliable by registering the reply handler before the connection starts. No concrete merge-blocking risk was found.
Pre-merge checks: 4
Check name
Status
Explanation
Title check
The title names the main change: a fix so KDE SnapShot no longer loses the first reply from KWin. The changeset serves ScriptReply through connect()/Builder::serve_at so zbus registers the listener be…
Description check
The description follows the template sections: Problem, Change, Scope, and Verification. The Problem section explains the flaky race and the cause. The Change section explains the connect() helper, th…
Linked Issues check
Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check
Check skipped because no linked issues were found for this pull request.
Full details: Title check
Explanation
The title names the main change: a fix so KDE SnapShot no longer loses the first reply from KWin. The changeset serves ScriptReply through connect()/Builder::serve_at so zbus registers the listener before the first Reply call, which addresses that race. The title is a conventional commit, concise, and specific. It is 67 characters, slightly long but acceptable.
Full details: Description check
Explanation
The description follows the template sections: Problem, Change, Scope, and Verification. The Problem section explains the flaky race and the cause. The Change section explains the connect() helper, the pending-call tracking, and the fixture update. Scope links no issue but explains why, cites a related prior fix (#10645), and gives a reason. Verification gives focused tests, a forced-timing reproduction with before/after results, and states what was not checked (real KDE Plasma session). The description is mostly complete. Minor gaps: Scope says 'No issue' without a link to the bug source in the CI flake ledger, and the agent-model line is present as required.
Finishing Touches
Generate unit tests (beta)
Commit to this branch
Create a new PR
Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Reviewing files that changed from the base of the PR and between f313d0a and 6aa017f.
Files selected for processing: 2
native/kde-snap-shot/src/main.rs
native/kde-snap-shot/src/transport_tests.rs
Included review availability: This review used your included allowance. 9 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 10 reviews per hour.
* fix(server): Claude can show the user mid-turn text in full (pingdotgg#36384)
* fix(cli): tagged source builds report the release version (pingdotgg#36350)
Co-authored-by: Lakshmi Tanmay <[email protected]>
* fix(server): storage cleanup prunes idle No project folders under ~/.t3/scratch (pingdotgg#36369)
* fix(terminal): trimmed history no longer replays half of a control sequence (pingdotgg#36368)
* fix(usage): a re-emitted Codex snapshot is no longer billed as a counter rewind (pingdotgg#36367)
Co-authored-by: rihanaws <[email protected]>
* fix(server): a Claude Monitor line no longer wakes a delegated child's parent (pingdotgg#36339)
* fix(opencode): a lost subagent report no longer leaves a resumed call running (pingdotgg#36386)
* fix(web): a new worktree thread opened during a clone bases on the real default branch (pingdotgg#36379)
* fix(server): unauthenticated token requests no longer write DPoP replay markers (pingdotgg#36393)
* fix(server): other sites can no longer frame the web app (pingdotgg#36395)
* fix(server): a server browser tab survives a renderer crash, and a service worker badge call no longer causes one (pingdotgg#36389)
* fix(web): T3 Connect sign-in offers Retry after Clerk fails to load (pingdotgg#23620)
Co-authored-by: Claude Opus 5.5 <[email protected]>
* fix(ci): macOS PR previews no longer run the PR's bundle next to signing secrets (pingdotgg#36407)
* fix(mobile): a new thread's first message no longer returns to the composer after a lost launch reply (pingdotgg#32330)
* fix(web): size markdown media whose width and height carry a px unit (pingdotgg#32108)
* fix(web): file links the agent cited from a checkout it cd'd into open that file (pingdotgg#36364)
* ci(mobile): iOS jobs run on macos-27, store builds require the final Xcode 27.1 (pingdotgg#36421)
* fix(server): Claude context meter no longer shows an auto-compact point when auto-compaction is off (pingdotgg#36417)
* fix(web): a run waiting on foreground subagents says so instead of Thinking (pingdotgg#36334)
* fix(server): a follow-up to a delegated child waits for its awaited background work (pingdotgg#36411)
* fix(provider-grok): Grok follow-ups queue instead of cancelling the running tool (pingdotgg#36422)
* fix(server): thread list builds metadata only for the page it returns (pingdotgg#36434)
* fix(web): middle-clicking empty chat space on Linux no longer pastes into the composer (pingdotgg#36436)
* fix(web): closing Settings no longer leaves it as a back/forward stop (pingdotgg#36437)
* fix(opencode): OpenCode 1.x threads report context-window usage (pingdotgg#36430)
* fix(web): bare @ in the composer lists workspace files (pingdotgg#36435)
* fix(mobile): thread list project filter lists recently active projects first (pingdotgg#36433)
* fix(clients): live working timers count on the host's clock (pingdotgg#36420)
* perf(relay): lighter Postgres load and PS-160 cluster (pingdotgg#36442)
Co-authored-by: Claude Opus 5.5 <[email protected]>
* fix(mobile): mobile:install --session works on pooled devices (pingdotgg#36447)
* fix(native): KDE SnapShot no longer loses the first reply from KWin (pingdotgg#36218)
Co-authored-by: Claude Fable 5.2 <[email protected]>
* fix(server): t3 connect status no longer reports a publish-only link as exposed (pingdotgg#33967)
* fix(web): don't label Windows paths outside the workspace as relative (pingdotgg#28469)
Co-authored-by: Julius Marminge <[email protected]>
* fix(server): multi-line guest messages are no longer refused or stored with CRLF (pingdotgg#26542)
* perf(desktop): provider checks no longer compete with server startup (pingdotgg#35712)
Co-authored-by: Claude Opus 5.5 <[email protected]>
* fix(web,mobile): explain missing file access for host videos (pingdotgg#24637)
* fix(scripts): iOS scenarios prepare the dev client before leasing a device (pingdotgg#36456)
* perf(server): a new thread's first turn starts sooner (pingdotgg#35710)
Co-authored-by: Claude Opus 5.5 <[email protected]>
* fix(provider-pi): running shell output no longer stores a snapshot row per update (pingdotgg#36429)
* fix(web): NVDA browse mode reads the current thread's branch, not the previous one (pingdotgg#34446)
Co-authored-by: nibarAhmed <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>
* fix(server): T3 Connect clients are named "T3 Connect", not "T3 Connect connect" (pingdotgg#27887)
* fix(web): screen readers read the Update everything machine list as a table (pingdotgg#36445)
* feat: agents can restyle T3 Code with theme colors and CSS (pingdotgg#35247)
Co-authored-by: maria-rcks <[email protected]>
Co-authored-by: Claude Fable 5.2 <[email protected]>
* fix(mobile): long-pressed iOS blockquotes no longer draw over the thread (pingdotgg#36461)
* fix(cli): npm launcher no longer leaves a runtime running after a stop signal (pingdotgg#30487)
* feat(connect): require approval for new T3 Connect devices (pingdotgg#36419)
Co-authored-by: Claude Opus 5.5 <[email protected]>
* fix(server): run the Azure CLI in UTF-8 on Windows (pingdotgg#25801)
Co-authored-by: Julius Marminge <[email protected]>
* fix(server): preview navigation leaves a page whose script never yields (pingdotgg#36365)
* fix(server): the auto-settle sweep no longer rereads every idle branch every few minutes (pingdotgg#36371)
* fix(web): rewind no longer offers file restore in project-folder threads (pingdotgg#36467)
* fix(server): stop the relay client a crashed server left running (pingdotgg#36465)
* fix(server): read Azure DevOps pull request templates (pingdotgg#22881)
* perf(azure-devops): PR Code tab loads a page's files in one az run instead of two per file (pingdotgg#35295)
Co-authored-by: Julius Marminge <[email protected]>
* fix(web): copying a file preview selection returns the selected lines after scrolling (pingdotgg#36466)
* fix(mobile): push-token failures no longer report notifications as enabled (pingdotgg#26557)
* fix(provider-core): mise updates a tool configured by its backend name (pingdotgg#36472)
* fix(server): parent turns no longer duplicate delegated task thread items (pingdotgg#36473)
* fix(server): Windows drive paths open under WSL (pingdotgg#26030)
* fix(client-runtime): new T3 Connect machines appear without signing in again (pingdotgg#29788)
* fix(azure-devops): local pull request checkout no longer fails on --detect (pingdotgg#31170)
Co-authored-by: maria-rcks <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>
* fix(usage): count shared Windows and WSL transcripts once (pingdotgg#24319)
* fix(azure-devops): pull requests report build validation as checks (pingdotgg#31146)
Co-authored-by: maria-rcks <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>
* fix(desktop): WSL backend starts in distros without automounted drives (pingdotgg#25734)
* fix(server): t3 browser setup reloads an AppArmor profile that is on disk but not loaded (pingdotgg#36490)
* Initial plan
* fix(azure-devops): finish reconciling nightly diff tests
Remove retired files-diff code and update mocks for iteration changes and blob reads. Preserve bounded paging, cache, and error-path coverage.
Co-authored-by: Copilot <[email protected]>
---------
Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Lakshmi Tanmay <[email protected]>
Co-authored-by: rihanaws <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: Theo Browne <[email protected]>
Co-authored-by: ValeraZSD <[email protected]>
Co-authored-by: nibarAhmed <[email protected]>
Co-authored-by: nibarAhmed <[email protected]>
Co-authored-by: maria-rcks <[email protected]>
Co-authored-by: Pedro Henrique <[email protected]>
Co-authored-by: Kieren-Foenander <[email protected]>
Co-authored-by: Pavel Kroupa <[email protected]>
Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: Alex Vallone <[email protected]>
Co-authored-by: Copilot <[email protected]>
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
size:M30-99 changed lines (additions + deletions).vouch:trustedAuthor is trusted by repo permissions or the VOUCHED list.
1 participant
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.
Problem
The Rust test
transport_tests::keeps_captured_identity_when_only_the_title_spinner_changesfails now and then in CI (main on 2026-11-10, #36187 on 2026-11-13). It panics onunwrap()ofNoneatsrc/transport_tests.rs:268and the test binary takes 5.03s.The cause is in the product code, not the test.
script()registered its D-Bus reply object withobject_server().at()after the connection was built. zbus starts the object server's method-call listener in a spawned task and does not wait for it. If KWin's firstReplycall arrives before that listener subscribes, zbus drops the call.script()then waits the full 5 second deadline, and the capture comes back with no window identity. A real KDE capture can hit the same race.Change
ScriptReplyis now served from the connection builder (Builder::serve_at), in a newconnect()helper. zbus waits for the listener beforebuild()returns, so no call can arrive too early.ScriptReplyholds the pending call (Option<(owner, sender)>).script()sets it before the script runs and clears it after. A reply with no script in flight is refused.connect()helper.Scope
Small fix of a known flake in the daily CI flake ledger. No issue. #10645 fixed the same zbus behavior for the feedback test only; the comment it left in
feedback.rsdescribes this race.Verification
transport_tests.rs:268,unwrap()onNone, about 5.3s).cargo fmt --checkandcargo test --lockedpass fornative/kde-snap-shot(12 of 12).vp run check:changedpasses.Reviewed with sol-loop: 1 pass with GPT-6.1 Sol. Sol verdict: approved
Model and harness: Claude Fable 5.2 in Claude Code, through T3 Code.
🤖 Generated with Claude Code