AuraFrame exposes no AT-SPI accessibility tree — controls invisible to screen readers and to automation #21
Labels
No labels
blocked:needs-attention
blocked:needs-decision
blocked:needs-decompose
blocked:needs-design
blocked:needs-triage
blocked:preflight
blocked:unclassified
bug
documentation
enhancement
gsd-spec
in-progress
lint-cleanup
needs-decompose
priority:high
priority:low
priority:medium
quickfix
test
triage-approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Mark/kimi_agent_local_ai_image_enhancer#21
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
AuraFrame (PyQt6 desktop app) exposes no accessibility tree to AT-SPI — the entire widget set is invisible to assistive technology and to accessibility-driven automation. This is both a human accessibility defect (AuraFrame is unreadable by screen readers) and a functional gap for tooling (the computer-use automation lane cannot identify controls by name/role and falls back to fragile pixel-coordinate clicking).
Evidence (verified 2026-08-16 on blackhole, X11/Cinnamon)
get_app_stateon the AuraFrame window returnsaccessibility_tree_raw_count: 1— a bare application root node ("python3.12") with no children (no Open/Save/AI Upscale buttons, no model dropdown, no controls).at-spi-bus-launcher, accessibility dbus daemon,at-spi2-registrydall running). A GTK file-chooser dialog launched from AuraFrame did expose real accessibility nodes (click tool found a "check box 'Open'") — proving AT-SPI works; the defect is specific to AuraFrame/Qt.QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1still yieldedraw_count: 1. The installed PyQt6 runtime ships no accessibility bridge plugin: nolibqspi, no*accessible*, andplugins/genericonly contains evdev/evdevtouch input plugins.~/.local/lib/python3.12/site-packages/PyQt6/Qt6(platform themelibqgtk3.so) is missing the Qt accessibility/AT-SPI bridge linkage, so the widget tree is never registered with the running AT-SPI bus.Why it matters
name/roledeterministically.Repro
Suggested fix direction
Ensure the PyQt6/Qt6 accessibility bridge is present and loaded (install/ship the Qt accessibility plugin; verify
libqspi/libqtaccessible*is on the runtime path) so the Qt widget tree registers with AT-SPI. Verify by re-querying AT-SPI and confirming the tree contains the app's controls with real roles/names, and that a coordinate-freeclick(name="Open")works.One root cause (Qt bridge not exposing the widget tree) — one issue serving both outcomes.
Reopened by kilo-gsd-runner: prior kilo-gsd run (2026-08-16) closed this issue as a false-positive — it exited 0 with "No changes to push" and verified against the wrong (#20) plan, so no fix ever landed and no commit references #21. Reopening to allow a proper dispatch; the new run will write an issue-specific plan.