Repository navigation
fix: prevent stale-index and cross-app semantic recovery; release v0.7.24 - #288
Conversation
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: 0fc878f5-ccb6-42bc-a793-0a894d058441) |
There was a problem hiding this comment.
This is an auto review done by revuto.
Revuto completed the review and found no evidence-backed concerns.
|
Independent complete-patch review is finished: no remaining concrete blockers. Review reproduced and corrected observed-PID rollover, unobserved/exact-backend window identity and missing root-PID proof in addition to the original stale-index/name-only cases. Verified 0.7.24 manifest/launcher/version parity, mirrored skills and generated catalog against the built server. Before/after receipts are recorded locally; final 524 library tests, 21 recovery cases, 33 real-server Pi tests, auxiliary suites, Clippy/fmt/schema/MCP/plugin/agnix checks pass. Patch digest: 2fdc0b4217275106f5a4e2083350b045e836c44fd5544cd903326c339d88a614. Thanks @ilysenko for catching the index and recovery-scope defects. |
|
Released 0.7.24. All 18 publication jobs passed; all 12 assets and registry digests were verified. Updated local binaries, five npm globals and the Codex plugin. Ten fresh MCP probes report 0.7.24 and 18 tools. The isolated Hermes server was reconnected and reports 0.7.24. Active chat-owned transports remain for their hosts to reconnect. |
A semantic AT-SPI recovery could replace the cached tree without showing the caller its new indices, or rebind a name-only target after its original owner disappeared.
Keep refreshed nodes local, invalidate cached indices before accepted recovery resolution/dispatch, and require fresh get_app_state before indexed actions. Pin explicit/observed PIDs, require a matching observed window/backend and root-PID link when recovering through a window, and reject unproved ownership. Actions are never replayed after dispatch. Prepare 0.7.24 so the installed standalone server receives the same correction as the embedded sync.
Validation: the original stale-index and cross-app regressions failed before; additional observed-PID rollover, unobserved window, backend-collision and missing-PID cases also failed before correction. All 21 recovery tests and 524 library tests pass (2 subprocess harness entries ignored); auxiliary/integration targets pass. All 33 Pi tests pass against the actual server; all-target Clippy, formatting, generated catalog, 18 SDK Zod schemas, MCP safety, plugin install/tamper/cache tests and agnix pass.
A fresh review of the complete release patch reports no remaining blockers after the identity cases were corrected. Real GTK/Qt owner-loss behavior was not newly exercised; the regression tests run the production cache/selector/dispatch paths with controlled AT-SPI calls.
Thanks @ilysenko for the review that found these cases in the embedded sync. Refs ilysenko/codex-desktop-linux#1620 (review).
Note
Medium Risk
Changes core desktop action targeting and cache semantics; incorrect recovery could click the wrong control, but the patch narrows recovery to verified PID/window identity and forces fresh observation after recovery.
Overview
Release v0.7.24 tightens semantic AT-SPI recovery in
perform_actionso a one-shot retry after a stale target cannot silently retarget the wrong UI or leave agents using outdatedelement_indexvalues.Recovery now requires provable identity from the last
get_app_statesnapshot (observed PID and/or exactwindow_id+ compositor backend). Name-only scopes, unobservedwindow_id, PID rollover, and backend/window mismatches are rejected instead of rebinding to another app’s tree. Refreshed recovery trees stay local to the retry: the server clears the cached snapshot before dispatch and tells callers to callget_app_stateagain before further index-based actions.action_recovery_target_pidno longer lets freshly discovered window PIDs override the originally scoped process.Packaging and docs are bumped to 0.7.24 (Cargo/npm/plugins, changelog, Pi generated catalog,
perform_actiontool text, and skill procedure notes). New regression tests cover stale-index misuse, cross-app rebinding, and identity edge cases.Reviewed by Cursor Bugbot for commit 6278944. Configure here.