Files
cthulhu/testdata/parity-ledger.csv

48 KiB

1idpython_sourcesubsystembehaviorownergo_destinationstatusautomated_evidencex11_evidencewayland_evidencespeech_evidencebraille_evidencenotes
2gtk-alert-messagesrc/cthulhu/speech_generator.py;src/cthulhu/script_utilities.pyspeechRead a GTK alert message before its first focused buttoninternal/atspi internal/appin-progressgo test ./internal/app ./internal/atspi -count=1; python3 tests/native_alert.pyPrivate GTK/Xvfb/AT-SPI fixture captured the complete question on 2026-09-26.Physical FastSMRW listening pending.Alert window creation captures its label text; activation does not interrupt the message; the first button appends and later buttons use ordinary focus speech.
3yad-simple-promptsrc/cthulhu/formatting.py;src/cthulhu/scripts/default.pyspeechRead a simple YAD frame question before its first focused buttoninternal/atspi internal/appimplementedgo test ./internal/app ./internal/atspi -count=1; python3 tests/native_alert.pyPrivate YAD/Xvfb/AT-SPI fixture captured the exact question on frame activation or first button focus. The live 2026-09-27 log showed a third path where activation targets the focused button; an event-loop regression covers its speech order.Maintainer confirmed the YAD question was spoken on the updated build on 2026-09-27.YAD exposes the prompt as a frame with layout nodes and a label plus buttons. The generic Python frame format appears to omit the label; this Go addition follows the user's explicit example. A strict simple prompt shape limits frame text capture and bounded first-button refresh handles late labels.
4radio-group-focussrc/cthulhu/generator.py;src/cthulhu/speech_generator.pyspeechSpeak the radio group question with a focused optioninternal/atspi internal/presentation internal/preferencesimplementedgo test ./internal/presentation ./internal/atspi ./internal/preferences -count=1; python3 tests/native_alert.pyPrivate GTK radio group focus captured Punctuation Level.Physical preferences speech pending.A named panel or labelled-by relation supplies the group question; each focused radio presents that name before its option. The Braille verbosity radios now have a named frame.
5yad-list-promptsrc/cthulhu/formatting.py;src/cthulhu/scripts/default.pyspeechRead a simple YAD list question when its window opensinternal/atspi internal/appimplementedgo test ./internal/app ./internal/atspi -count=1; python3 tests/native_alert.pyPrivate YAD power list captured Power options after ordinary or synthesized window activation.Physical I38 power menu listening pending.The I38 list has a labelled question above its choices; foreground recovery and direct activation both capture the same bounded prompt shape.
6web-live-region-announcementssrc/cthulhu/scripts/web/script.py; src/cthulhu/liveregions.pywebAutomatically speak active-tab polite and assertive live region updatesStorm Dragoninternal/atspi internal/appin-progressgo test ./internal/app ./internal/atspi -count=1; CTHULHU_NATIVE_BROWSER_TESTS=live python3 tests/native_browser.pyPrivate Brave/Xvfb fixture captures the Skald-style status update and real child text; physical Skald Xorg test pending.Pending human listening for Skald chat and urgent messagesGo captures inherited live metadata and child text for text insertions and child additions. A Chromium placeholder update is suppressed. Off regions and inactive documents are filtered. Complete Python live-region review commands and politeness overrides remain pending.
7core-startupsrc/cthulhu/cthulhu.pycoreOrchestrate runtime service startup and graceful shutdownStorm Dragoninternal/appin-progressgo test ./internal/app ./internal/atspi ./internal/lifecycle -count=1; CTHULHU_XRECORD_TEST=/tmp/cthulhu-xrecord.test python3 tests/native_x11.pyMaintainer accepted the Stage 1 physical Xorg shutdown checklist on 2026-09-11; post-fix cthulhu.sh returned to the prompt with complete shutdown records on Xorg using its LXTerminal test application. The private Xvfb/D-Bus native proof with XRecord also passed.Lifecycle and service orchestration only; see lifecycle-welcome-message, lifecycle-farewell-message, lifecycle-start-sound, and lifecycle-stop-sound for the four user-visible deliveries. General startup or shutdown parity is not claimed.
8lifecycle-welcome-messagesrc/cthulhu/plugins/HelloCthulhu/plugin.pyspeechSpeak a randomly selected startup welcome messageStorm Dragoninternal/appin-progressgo test ./internal/app -run '^(TestRunSpeaksFocusEventsAndStops|TestRandomString)$' -count=1Maintainer accepted welcome speech in the Stage 1 physical Xorg checklist on 2026-09-11 and confirmed the randomized message wiring worked on 2026-09-12.Maintainer heard the startup welcome message during the accepted Stage 1 physical Xorg checklist on 2026-09-11 and confirmed the randomized message wiring worked on 2026-09-12.Python presents Cthulhu welcomes you. once through HelloCthulhu after start-application-completed and only while an active script exists. Go creates its speech worker only when enableSpeech is true and randomly selects from a small startup list after service startup without an active-script or once-only gate; delivery is not waited for and has no per-message deadline. The extra variants are an intentional Go behavior extension. General startup parity is not claimed.
9lifecycle-farewell-messagesrc/cthulhu/plugins/ByeCthulhu/plugin.pyspeechSpeak a randomly selected graceful-shutdown farewell messageStorm Dragoninternal/appin-progressgo test ./internal/app -run '^(TestRunSpeaksFocusEventsAndStops|TestRandomString)$' -count=1Maintainer heard the post-fix farewell speech through cthulhu.sh on Xorg using its LXTerminal test application on 2026-09-11 and confirmed the randomized message wiring worked on 2026-09-12; the launcher returned to the prompt and completed final shutdown records.Maintainer heard the post-fix farewell speech through cthulhu.sh on Xorg on 2026-09-11 and confirmed the randomized message wiring worked on 2026-09-12.Python presents Cthulhu lurks beneath the waves. through ByeCthulhu only while an active script exists. Go randomly selects from a small shutdown list only when enableSpeech is true, interrupts owned speech, and waits up to 2 seconds for the backend result before native cleanup; timeout cancels the active request. The extra variants are an intentional Go behavior extension. audit-required: active-script gating, speech-disabled presentation semantics, and Python's overall shutdown watchdog versus Go's per-message deadline are not directly aligned by the named evidence.
10lifecycle-start-soundsrc/cthulhu/sound_theme_manager.pysoundPlay the startup sound cueStorm Dragoninternal/soundin-progressgo test ./internal/sound -run '^(TestBundledSoundsDecodeInProcess|TestSoundWorkerBoundsQueueAndStopsActiveCue|TestStopPlaysShutdownCueAfterStartupCueOverflow)$' -count=1Maintainer heard the startup cue during the 2026-09-11 physical Xorg preview; the desktop and window manager were not recorded.Python plays the start cue from the configured theme when enableSound is true and the theme is not none; startup uses a nonblocking, interrupting, best-effort helper command with no per-cue deadline at this call. Go creates the sound service only when enableSound is true, theme is not none, and volume is greater than zero; it enqueues start after service startup into a bounded 8-cue queue, with a 3-second playback deadline, and can drop the startup cue on overflow. audit-required: Python helper-process and Go in-process queue saturation are not directly compared by live evidence. September 25 review: nonblocking queue drains prevent a consumer/producer deadlock during cue replacement and live reconfiguration; concurrent regression and race checks pass.
11lifecycle-stop-soundsrc/cthulhu/sound_theme_manager.pysoundPlay the graceful-shutdown sound cueStorm Dragoninternal/soundin-progressgo test ./internal/sound -run '^(TestBundledSoundsDecodeInProcess|TestSoundWorkerBoundsQueueAndStopsActiveCue|TestStopPlaysShutdownCueAfterStartupCueOverflow|TestStopTimeoutPreservesShutdownCueForRetry)$' -count=1; go test ./internal/app -run '^(TestRunReachesSoundStopAfterEarlierServiceStopError|TestRunReportsSoundStopError)$' -count=1Maintainer heard the post-fix stop cue through cthulhu.sh on Xorg using its LXTerminal test application on 2026-09-11; the launcher returned to the prompt and completed final shutdown records.Python plays stop only when enableSound is true and the theme is not none; it interrupts current sound, waits up to 1 second through the helper, then continues shutdown. Go runs stop as the final reverse lifecycle service with its own 3-second deadline, cancels active cues, discards pending cues, and preserves a timed-out stop cue for one retry. audit-required: Python helper-isolation versus Go in-process cancellation and retry ordering are not directly aligned by the named evidence.
12focus-eventssrc/cthulhu/event_manager.pyfocusReceive focus events and capture immutable accessible snapshots with stable object pathsStorm Dragoninternal/atspiimplementedgo test ./internal/atspi ./internal/app ./internal/logging -count=1GTK yad Zenity and LXTerminal live tests passed 2026-09-10; post-fix AT-SPI shutdown passed through cthulhu.sh with its LXTerminal test application on Xorg 2026-09-11.Queue overflow duplicate-object suppression and nonblocking diagnostics have automated coverage; physical diagnostics saturation remains pending.
13xterm-focus-handoffsrc/cthulhu/input_event_manager.pyinputSuspend Cthulhu while XTerm owns focus and restore when a known non-XTerm window takes focusStorm Dragoninternal/app internal/atspi internal/platform/xorgin-progressNO_COLOR=1 GOCACHE=/tmp/cthulhu-build-cache go test ./internal/app -run '^(TestXTermFocus|TestProcessEvents)' -count=1; NO_COLOR=1 GOCACHE=/tmp/cthulhu-build-cache go test ./internal/platform/xorg -count=1; python3 tests/native_x11.pyPrivate Xvfb/D-Bus proof passes: XTerm focus suspends speech and command grabs; Insert+Q reaches a real XTerm; an unknown active window remains suspended; a known non-XTerm window restores all existing command and release checks.Pending human listening with Fenrir in XTermFollow-up gates delegated modifier interruption and echo; commands dispatch on press with balanced shutdown draining. Go retains the existing XTerm identity matching focus monitoring grab suspension and event suppression boundary. Notifications bypass suppression. Unknown active windows remain suspended so an incomplete match cannot strand a delegated terminal reader; live Fenrir handoff remains pending.
14focus-speechsrc/cthulhu/scripts/default.pyspeechSpeak the focused accessible object including common control states and range valuesStorm Dragoninternal/atspi internal/presentation internal/appin-progressgo test ./internal/atspi ./internal/presentation ./internal/app -count=1Maintainer accepted post-change YAD value and LibreOffice focus value and menu behavior on physical Xorg on 2026-09-12. The combined log had no accessibility-event speech or sound queue overflow; 599 debug diagnostics were dropped during a LibreOffice state-event burst.Maintainer reported that all combined YAD I38 and LibreOffice tests worked great on 2026-09-12.Focus presentation includes common states and range values. Focused value changes speak only the value; non-focused state and value events are filtered; menu selection and table-cell verbosity are reduced. Relations position context background progress updates complete role-specific formatting and diagnostics saturation acceptance remain pending. Parity review corrections and remaining physical gates: docs/testing/parity-review-follow-up.md. September 25 review: window-owned title tracking suppresses repeated name events and preserves empty-to-restored title changes; event-loop regression passes. Combo selection follow-up: focus/name/value event regressions verify selection-only speech without repeated combo cues and restore the cue on re-entry; focused app/presentation race checks pass. Physical listening pending.
15terminal-caret-charactersrc/cthulhu/scripts/default.pyterminalSpeak the character at the caretStorm Dragoninternal/appin-progressgo test ./internal/atspi ./internal/presentation ./internal/app -count=1Maintainer accepted terminal caret behavior in the launcher's LXTerminal test application on Xorg during the Stage 1 physical checklist on 2026-09-11.Maintainer heard terminal caret speech during the accepted Stage 1 physical Xorg checklist on 2026-09-11.Uses AT-SPI character granularity with line fallback debounces caret movement and suppresses unchanged path-and-announcement combinations; broader terminal application and editing coverage remains pending.
16terminal-text-change-echosrc/cthulhu/scripts/terminal/script.pyterminalSpeak sanitized inserted or deleted text from terminals and editable text controlsStorm Dragoninternal/appin-progressgo test ./internal/atspi ./internal/presentation ./internal/app -count=1Maintainer accepted terminal insertion in LXTerminal on Xorg on 2026-09-11, accepted the post-change LibreOffice Writer typing behavior on physical Xorg on 2026-09-12, and confirmed YAD close-and-prompt coalescing on physical Xorg on 2026-09-13. Physical acceptance of terminal deletion-redraw coalescing is pending.Maintainer accepted terminal insertion, Writer duplicate suppression, and YAD close-and-prompt behavior on physical Xorg.Text changes are limited to terminals and editable text or paragraph roles. A change suppresses the next caret event from the same object so typing does not replay the line. Same-terminal insertion within the event-coalescing window suppresses a redundant interrupting terminal-focus presentation. A terminal deletion waits 50 ms and is suppressed only when the same terminal inserts replacement text at the same AT-SPI offset; standalone and different-offset deletions remain presentable. Debug speech delivery records retain the final utterance with cause and policy metadata; normal logging omits speech content. Broader application coverage remains incomplete.
17managed-descendant-presentationsrc/cthulhu/scripts/default.pyfocusResolve focused container selection and active-descendant changes to the managed childStorm Dragoninternal/atspi internal/appin-progressgo test ./internal/atspi ./internal/app -count=1; python3 tests/native_x11.pyThe isolated GTK/Xvfb/D-Bus selection fixture and physical I38 run-dialog completion selection speech passed on 2026-09-12 without regressing X11 pass-through command consumption release ordering lock states lifecycle or grab cleanup.Maintainer accepted I38 run-dialog completion selection speech on physical Xorg on 2026-09-12.The generic adapter registers both selection and active-descendant events resolves their managed child preserves the originating container path and filters events unless the container or child owns focus. Duplicate target presentations are suppressed. No I38-specific workaround was added. Broader GTK and Qt managed-descendant coverage remains pending.
18ssip-speak-cancelsrc/cthulhu/speechdispatcherfactory.pyspeechSend speech and cancellation through SSIPStorm Dragoninternal/speechin-progressgo test ./internal/speech -count=1Maintainer accepted audible non-consuming Control/Shift interruption in the Stage 1 physical Xorg checklist on 2026-09-11.Maintainer heard lifecycle and terminal speech plus Control/Shift interruption during the accepted Stage 1 physical Xorg checklist on 2026-09-11.Protocol replies 230 and 225 were confirmed against the local service; broader backend and X11 coverage remains pending.
19web-structural-navigationsrc/cthulhu/scripts/web/script.pywebMove by headings and other document structureStorm Dragoninternal/input internal/review internal/appin-progressgo test -race ./... -count=1; python3 tests/native_browser.pyPrivate Brave/Xvfb structural and mode/chrome sequences pass on 2026-09-20.Physical Xorg listening and wrap acceptance pending.Structural navigation follows native caret movement. Echo suppression ends on subsequent input. Failed same-object context capture retries. Delayed document carets cannot override editable focus and stale results cannot overwrite unresolved unrelated focus. All 27 browse symbols pass through after routing is disabled. Complete Python structural settings and dialogs remain pending. Parity review corrections and remaining physical gates: docs/testing/parity-review-follow-up.md.
20web-document-recapturesrc/cthulhu/ax_object.pywebRecover heading navigation after browser document replacementStorm Dragoninternal/atspi internal/review internal/appin-progressgo test -race ./... -count=1; python3 tests/native_browser.pyPrivate Brave/Xvfb passes immediate H after loading a new page and after activating its return link on 2026-09-20.Physical forum listening acceptance pending.Native caches refresh on recapture. Load completion retains the new root and resets browser context and pending reading. Worker page epochs retire queued and in-flight results across reused paths. Native reload and mode/chrome tests remain covered. Installed Go preview and Brave Origin are not verified. On 2026-09-21 semantic invalidation was scoped to captured objects so browser chrome and other applications cannot discard the document. Focused race tests and the full private Brave suite pass; heading/link jumps assert capture reuse. Large-page latency and logged stale-object failures still require physical retesting. September 22 log regressions: native invalid text-end recovery and bounded embedded text expansion; web name-event suppression; background load preserves verified chrome focus. Focused race tests and private Brave proofs pass. See docs/testing/chromium-browser.md for reference behavior and remaining physical gates. September 23 ownership correction rejects loads outside the current application or known window and after owner loss; accepted loads update the focus owner for correct defunct recovery. Five event-loop regressions and app race tests pass; physical acceptance remains pending. September 24 same-geometry window recovery now requires fresh active/showing/non-iconified state before foreground correlation; private recovery regression fails on the earlier preview and passes on the rebuilt one. Address changes outside the owned field are suppressed; popup-associated typing remains supported. September 25 review: recovery now checks the fresh tree when text/geometry recapture discovers a removed focus; deterministic regression and focused race checks pass.
21web-caret-line-readingsrc/cthulhu/scripts/web/script.pywebRead displayed document content at the browser caretStorm Dragoninternal/atspi internal/review internal/app internal/presentationin-progressgo test -race ./... -count=1; python3 tests/native_browser.pyPrivate Brave/Xvfb H/Down/H and expanded page transition sequences pass on 2026-09-20.Physical Xorg speech and sound listening pending.Captured and assembled document lines use role/state sound categories and speech fallback. Unit tests cover visited links and per-object cue deduplication and sound-only versus speech-only policy. Character and word intents remain separate. Ordinary caret movement updates structural position. Initial read-all is implemented; braille and complete line-presentation parity remain pending. September 22 log regressions: native invalid text-end recovery and bounded embedded text expansion; web name-event suppression; background load preserves verified chrome focus. Focused race tests and private Brave proofs pass. See docs/testing/chromium-browser.md for reference behavior and remaining physical gates. September 24 prerequisite review: pending caret/terminal timers extracted under the same event-loop owner; adjacent-character word navigation and whitespace and embedded-marker traversal corrected; whole caret movement deadline added. Full race and isolated Brave/X11/ownership proofs pass; physical and installed-preview gates remain pending. See docs/testing/chromium-browser.md for dependency order. September 24 log correction: browse word and line speech includes link and heading ancestors with role sound policy; character output retains character granularity. Native Brave assertions cover link words and document-start heading level. See docs/testing/chromium-browser.md. September 25 review: trailing non-text objects no longer cause false stale-location errors for line/document-edge movement; focused regression and private Brave suite pass. Physical listening remains open.
22config-read-previewsrc/cthulhu/backends/toml_backend.pysettingsRead existing Cthulhu TOML and merge the startup profileStorm Dragoninternal/configimplementedgo test ./internal/config ./cmd/cthulhu -count=1Read-only preview bridge available only through explicit --config selection. The Go-native schema and default path are intentionally separate; the one-shot importer remains Phase 8 work.
23config-speech-previewsrc/cthulhu/speechdispatcherfactory.pyspeechApply supported active-profile speech settingsStorm Dragoninternal/config internal/speech internal/appin-progressgo test ./internal/config ./internal/speech ./internal/presentation ./internal/app -count=1Pending human listening gateApplies enablement description punctuation capitalization and default voice settings.
24typing-printable-key-echosrc/cthulhu/typing_echo_presenter.pyinputApply printable typing-echo category settings to terminal and editable text insertionsStorm Dragoninternal/config internal/atspi internal/presentation internal/appin-progressgo test ./internal/config ./internal/atspi ./internal/presentation ./internal/app -count=1Maintainer reported the configured printable echo settings worked in minimal physical Xorg tests on 2026-09-12; broader application coverage remains pending.Maintainer heard the configured printable echo behavior in minimal tests on 2026-09-12.Single-character terminal and editable AT-SPI insertions honor enableKeyEcho enableEchoByCharacter and alphabetic numeric punctuation space and diacritical categories. Multi-character insertions remain presentation events.
25typing-nonprintable-boundary-echosrc/cthulhu/typing_echo_presenter.pyinputApply non-printable key and word or sentence echo settingsStorm Dragoninternal/config internal/input internal/platform/xorg internal/atspi internal/presentation internal/appin-progressgo test ./internal/config ./internal/input ./internal/platform/xorg ./internal/atspi ./internal/presentation ./internal/app -count=1Pending physical Xorg category chord and pass-through matrixPending human listening for modifier function action navigation dead-key word and sentence echoXRecord copies stable non-printable names from the active keymap and suppresses configured Cthulhu modifier chords. Word and sentence echo use bounded text before the caret and retain the prior line across a newline. Printable delivery remains AT-SPI based to avoid duplicate XRecord speech. Parity review corrections and remaining physical gates: docs/testing/parity-review-follow-up.md.
26keyboard-speech-interruptsrc/cthulhu/input_event.pyinputInterrupt speech on non-consuming Control or Shift pressStorm Dragoninternal/input internal/platform/xorg internal/appin-progressgo test ./internal/input ./internal/platform/xorg ./internal/app -count=1Maintainer accepted Control and Shift interruption without stolen or stuck keys in the Stage 1 physical Xorg checklist on 2026-09-11.Speech interruption was audible during the accepted physical Xorg checklist.XRecord observation and speech-worker wiring are implemented; broader X11 matrix remains pending.
27where-am-i-basicsrc/cthulhu/where_am_i_presenter.pycommandRepeat basic information about the current focused accessibleStorm Dragoninternal/input internal/platform/xorg internal/app internal/presentationin-progressgo test ./internal/input ./internal/platform/xorg ./internal/app -count=1; python3 tests/native_x11.pyPrivate X11 proof covers unmodified desktop KP_Enter consumption and balanced replay of desktop Cthulhu+Return; maintainer accepted the corrected physical desktop binding on Xorg on 2026-09-13Maintainer confirmed both the basic spoken result and corrected desktop binding on 2026-09-13Uses the latest accepted immutable focus or managed-descendant snapshot and the Python no-location message. keyboardLayout selects desktop KP_Enter or laptop Cthulhu+Return. Detailed context repeated-press behavior and selection details remain pending.
28owned-object-treesrc/cthulhu/ax_object.pyreviewOwn stable accessible identities and navigate a validated tree without retaining native objectsStorm Dragoninternal/atspi internal/review internal/appin-progressgo test ./internal/atspi ./internal/review ./internal/app -count=1; python3 tests/native_atspi.pyPrivate Xvfb D-Bus and GTK automation captures the desktop invalidates a removed defunct object recaptures into the same owned tree and invalidates references on adapter shutdown.Identity combines the AT-SPI application bus name and object path. Complete-tree replacement preserves live references; subtree invalidation detaches removed nodes and makes old references stale. Parent child sibling malformed oversized concurrent and structural-event policy cases have unit coverage. The runtime worker follows the latest focus keeps capture off event and command loops recaptures stale state and presents semantic movement or Python boundary messages. Capture waits honor context and individual libatspi calls use explicit 800 ms ordinary and startup timeouts. GtkBox native addition delivery and recapture pass alongside the original ListBox defunct proof. Incomplete child lists trigger one worker recapture preserving live independent review position; failure changed-focus and repeated-invalidation tests pass. Physical dynamic-container recovery native ambiguous removal simplified navigation and text ranges remain pending. Component geometry is recorded separately. Object-navigation key acceptance is recorded separately.
29object-navigationsrc/cthulhu/object_navigator.pyreviewNavigate the owned accessible hierarchy and present each object or boundaryStorm Dragoninternal/review internal/app internal/input internal/platform/xorgin-progressgo test ./internal/review ./internal/app ./internal/input ./internal/platform/xorg -count=1; python3 tests/native_x11.pyPrivate X11 proof covers all four Cthulhu Control Arrow bindings with balanced consumption and no application leakage plus Insert-first and Control-first ordering for Up. Maintainer accepted physical Xorg press release behavior with no leaked or stuck keys on 2026-09-14.Maintainer heard all expected object and boundary announcements on physical Xorg on 2026-09-14.Runtime commands and asynchronous capture presentation are bound to Python's parent first-child previous-sibling and next-sibling gestures. Python simplified navigation filtering action invocation and toggle remain pending. Desktop numpad belongs to flat review and is intentionally not aliased to hierarchical object navigation.
30clipboard-present-commandsrc/cthulhu/plugins/Clipboard/plugin.pycommandPresent clipboard text URI objects image presence empty state or access errors with Cthulhu+Shift+CStorm Dragoninternal/input internal/clipboard internal/app internal/platform/xorgin-progressgo test ./internal/clipboard ./internal/input ./internal/app ./internal/platform/xorg -count=1; isolated Xvfb clipboard helper and native command testPrivate X11 proof covers Cthulhu+Shift+C press dispatch and both release orders; isolated GTK clipboard reads confirmed text URI and image formatsPending human speech acceptance for text URI image empty and error casesThe Go command reads GTK 3 clipboard data in a short lived helper with a three second timeout so a stalled clipboard owner cannot block input or shutdown. It announces text URI object names and types image presence empty state and access errors. URI-only clipboard data is presented even when no text target exists. Physical Xorg listening remains pending.
31display-version-commandsrc/cthulhu/plugins/DisplayVersion/plugin.pycommandSpeak the Cthulhu version plus revision AT-SPI version and session details with Cthulhu+Shift+VStorm Dragoninternal/input internal/presentation internal/versionpendingPending Cthulhu+Shift+V X11 key-consumption and release gatePending human listening gatePython registers the gesture once and presents only through an active script; the announcement conditionally includes the code name build revision and XDG session type and desktop. The Phase 0 audit also confirmed that plugin.info marks this as a visible non-builtin plugin. Go currently implements command-line version output only; that is not evidence for this spoken command.
32game-mode-commandsrc/cthulhu/plugins/GameMode/plugin.pyinputToggle reduced speech interruption for ordinary unbound key presses with Cthulhu+Control+GStorm Dragoninternal/input internal/config internal/presentationpendingPending global Cthulhu+Control+G and unbound-key X11 non-consumption gatePending human listening gate for toggle messages and held-key speech continuityPython keeps interruption for handled or consumed commands and Cthulhu modifiers while game mode is enabled and resets the setting on plugin deactivation. The Phase 0 audit also confirmed that plugin.info marks this as a visible non-builtin plugin. The Go preview now interrupts on every observed key press; reduced-interruption game mode remains pending.
33hello-world-plugin-examplesrc/cthulhu/plugins/hello_world/plugin.pyextensionRegister a learn-mode-aware Cthulhu+Z example command that presents hello worldStorm Dragonapi/lua/v1 docs/contributorpendingPending extension-command X11 key-consumption and release gatePending human listening and learn-mode acceptancePython is a visible non-builtin test plugin and directly accesses the active script without checking that it exists. Preserve the user-facing tutorial behavior in the process-isolated Lua extension examples rather than embedding this Python plugin.
34self-voice-socketsrc/cthulhu/plugins/self_voice/plugin.pyremoteAccept external UTF-8 text over a local Unix socket for speech and braille presentation with append and persistent markersStorm Dragonaccepted-omissionDecision 0005 omits XDG_RUNTIME_DIR/cthulhu.sock and its <#APPEND#> and <#PERSISTENT#> marker protocol in favor of the established Cthulhu D-Bus self-voice API. No socket bridge or compatibility parser will be implemented.
35self-voice-dbus-presentsrc/cthulhu/dbus_service.pyremotePresent an external message through normal speech and braille output over the session D-Bus serviceStorm Dragoninternal/remote internal/appin-progressgo test ./internal/remote ./internal/app -count=1; CTHULHU_NATIVE_DBUS_TEST=1 go test ./internal/remote -run '^TestNativeSessionBusSelfVoice$' -count=1Private session-bus and handler tests pass same-user dispatch introspection and output queueing.Pending PresentMessage speech listening acceptancePending PresentMessage braille acceptancePresentMessage queues speech without interruption and braille when connected; it returns false only if neither output is available. Physical display delivery remains unverified.
36self-voice-dbus-speaksrc/cthulhu/dbus_service.pyremoteSpeak external plain text with caller-selected interruption over the session D-Bus serviceStorm Dragoninternal/remote internal/appin-progressgo test ./internal/remote ./internal/app -count=1; CTHULHU_NATIVE_DBUS_TEST=1 go test ./internal/remote -run '^TestNativeSessionBusSelfVoice$' -count=1Private session-bus proof passes same-user dispatch introspection conflict shutdown release and reacquisition.Pending SpeakText queued and interrupting speech listening acceptanceEmpty and over-64-KiB text is rejected. Noninterrupting text queues; interrupting text clears pending output uses the owned cancellation barrier and then queues the requested text.
37self-voice-dbus-braillesrc/cthulhu/dbus_service.pyremoteDisplay an external persistent braille message over the session D-Bus serviceStorm Dragoninternal/remote internal/appin-progressgo test -tags brlapi ./internal/remote ./internal/app -count=1Focused tests confirm connected-worker queueing and rejection when disconnected.Pending physical BrailleMessage delivery and persistent-display acceptanceBrailleMessage queues a persistent frame only after the BrlAPI helper reports ready. It rejects empty and over-10-KiB text; physical display and Wine client acceptance remain open.
38self-voice-dbus-cancelsrc/cthulhu/dbus_service.pyremoteCancel current speech at an external application's request over the session D-Bus serviceStorm Dragoninternal/remote internal/appin-progressgo test ./internal/remote ./internal/app -count=1; CTHULHU_NATIVE_DBUS_TEST=1 go test ./internal/remote -run '^TestNativeSessionBusSelfVoice$' -count=1Private session-bus proof passes same-user dispatch introspection conflict shutdown release and reacquisition.Pending CancelSpeech interruption and subsequent-delivery listening acceptanceCancelSpeech uses the asynchronous owned speech-worker interruption path and returns false when speech is unavailable. Like Python it does not cancel sound output.
39nvda-controller-ssml-rejectionsrc/cthulhu/dbus_service.pyremoteReject invalid or unsupported NVDA Controller 2 SSML without claiming mark or completion supportStorm Dragoninternal/remoteimplementedgo test ./internal/remote -count=1; CTHULHU_NATIVE_DBUS_TEST=1 go test ./internal/remote -run '^TestNativeSessionBusSelfVoice$' -count=1Private session-bus proof passes the real SpeakSsml signature and unsupported result.Malformed XML or a non-speak root returns Windows ERROR_INVALID_PARAMETER 87. Valid speak-root SSML returns ERROR_NOT_SUPPORTED 50 matching Python because mark callbacks and completion semantics are unavailable.
40flat-review-keyssrc/cthulhu/flat_review_presenter.pyreviewNavigate and present content with desktop and laptop review keysStorm Dragoninternal/input internal/review internal/app internal/platform/xorgin-progressDISPLAY=:0 go test -race ./internal/atspi ./internal/review ./internal/app ./internal/input ./internal/platform/xorg ./internal/presentation -count=1; DISPLAY=:0 python3 tests/native_atspi.py; DISPLAY=:0 python3 tests/native_x11.pyPrivate Xvfb tests pass all nine desktop and laptop sequential review commands; both laptop release orders; NumLock numeric keypad typing; laptop keypad pass-through; existing command and shutdown checks.Maintainer accepted all currently implemented terminal flat-review behavior on physical Xorg on 2026-09-23; broader application listening remains pendingPending braille reading gateBasic previous/current/next line word and code-point character commands are wired to owned window layout and the existing review worker. Window boundaries stop silently as in Python. Capture limits are reported explicitly. Native GTK text navigation and edit recovery pass. Viewport seeking mode toggling same-object caret following after leaving review state/value zones advanced bindings mouse review and full application parity remain pending. See docs/testing/flat-review.md. Parity review corrections and remaining physical gates: docs/testing/parity-review-follow-up.md.
41preferences-basic-speechsrc/cthulhu/cthulhu_gui_prefs.pysettingsOpen accessible basic speech preferences and apply or save settingsStorm Dragoninternal/preferences internal/app internal/configin-progressgo test -race ./... -count=1; python3 tests/native_preferences.py; python3 tests/native_x11.pyPrivate Xvfb GTK and command checks pass; maintainer accepted save shutdown restart and restored settings on physical Xorg on 2026-09-13; broader desktop traversal pendingPending human listening for immediate rate pitch and volume previews plus punctuation and capitalizationApply and OK update the active schema-v2 profile while preserving other profiles and application mappings; Apply stays open and OK closes. Default-voice rate pitch volume and server-default toggles preview immediately without committing settings; Cancel restores the last applied voice configuration. Explicitly selected legacy files remain session-only and cannot be overwritten. Advanced preferences and importer remain pending.
42review-component-geometrysrc/cthulhu/flat_review.pyreviewCapture component screen bounds and visibility for flat-review clippingStorm Dragoninternal/atspiimplementedDISPLAY=:0 go test ./internal/atspi -count=1; DISPLAY=:0 python3 tests/native_atspi.pyPrivate Xvfb D-Bus GtkBox tests verify screen bounds resize invalidation changed dimensions hide invalidation and recapture. Physical acceptance deferred by maintainer on 2026-09-14.Geometry queries run only during owned-tree capture. Bounds and visibility events invalidate geometry without removing identities. Negative coordinates overflow-safe clipping malformed geometry and concurrent invalidation have unit tests. Component bounds do not establish occlusion text ranges zones reading order or flat-review key support.
43review-visible-textsrc/cthulhu/flat_review.pyreviewCapture bounded visible text with character offsets and screen clippingStorm Dragoninternal/atspiin-progressDISPLAY=:0 go test -race ./internal/atspi ./internal/review ./internal/app ./internal/parity -count=1; DISPLAY=:0 python3 tests/native_atspi.pyPrivate ListBox and GtkBox capture edit clipping hidden-text and password-exclusion checks pass. Physical acceptance deferred.Pending navigation and listening gateExact Unicode offsets and owned ranges now include captured caret offsets. Text caret and geometry events make cached text stale without removing identities. Maximum 4096 characters and 256 lines or ranges per object and 1 MiB per tree. Oversized objects remain limited with no partial text. Basic zones and review commands now consume this data; large-document viewport seeking and physical listening remain pending.
44date-time-commandssrc/cthulhu/date_and_time_presenter.pycommandSpeak local time with Cthulhu+T and date with a double tap using saved formatsStorm Dragoninternal/input internal/app internal/preferences internal/configin-progressgo test ./... -count=1; focused race checks; native keyboard double-tap checksPrivate Xvfb press-time and both-release-order checks passed; physical Xorg pendingPending human listeningPending brailleAll 7 Python time and 16 Python date format choices are wired including locale seconds word numeric full and abbreviated variants; see docs/testing/time-date.md.
45notificationssrc/cthulhu/notification_presenter.py;src/cthulhu/scripts/apps/notification-daemon/script.py;src/cthulhu/scripts/apps/notify-osd/script.py;src/cthulhu/mako_notification_monitor.pynotificationPresent provider notifications save history expose mako live actions speak the last notification and open the notification-list GUIStorm Dragoninternal/notification internal/app internal/notificationui internal/atspi internal/inputin-progressNO_COLOR=1 GOCACHE=/tmp/cthulhu-build-cache go test ./... -count=1; NO_COLOR=1 python3 tests/native_notifications.pyAutomated speech-queue history list-state and list-action assertions passed; headless Xvfb/AT-SPI GUI proof passed; human listening and physical Xorg use not verifiedBraille not implementedGo registers window-create and accessible-name events maps notification-daemon mate and xfce4 providers handles notify-osd gauge and name events keeps a 55-entry history and adds Cthulhu+N plus Cthulhu+Ctrl+N. The modal accessible list opens in a GTK helper process with sortable rows copy dismiss clear close dynamic actions and mako live refresh. Live provider Xorg acceptance remains pending. Parity review corrections and remaining physical gates: docs/testing/parity-review-follow-up.md.
46ordinary-key-speech-interruptsrc/cthulhu/input_event.pyinputInterrupt speech on an ordinary key press even if focus does not moveinternal/input internal/appimplementedgo test ./internal/input ./internal/app -run TestProcessInputEventsInterruptsSpeechOnKeyPress -count=1Python KeyboardEvent._present interrupts on press outside game mode. Go now interrupts on every observed press; physical FastSMRW table-boundary listening remains pending.
47table-cell-selection-speechsrc/cthulhu/speech_generator.py; src/cthulhu/scripts/default.pyspeechOmit selected from table-cell focus speech and avoid deselection chatter during movementinternal/presentation internal/appimplementedgo test ./internal/presentation ./internal/app -count=1Selected table-cell focus omits the state; a focused selected-state event can still announce selected. Physical FastSMRW listening remains pending.
48braille-focused-text-routingsrc/cthulhu/braille.pybrailleRoute display cells to the native focused text caretinternal/braille internal/app internal/atspiin-progressgo test -race -tags brlapi ./internal/braille ./internal/app ./internal/atspi -count=1; python3 tests/native_atspi.pyPrivate GTK/Xvfb routes Unicode and EOL carets and rejects stale content and old focus. Physical Xorg pending.Physical display routing and BRLTTY ownership recovery pending.Frame IDs and panned Unicode offsets return through the helper; the GLib owner revalidates focus and source text. Component actions and mouse fallback; virtual browser carets; contracted and review routing remain pending. See docs/testing/braille.md.
49braille-focused-object-formattingsrc/cthulhu/formatting.py;src/cthulhu/braille_generator.py;src/cthulhu/object_properties.pybrailleFormat focused text and common controls for brailleinternal/app internal/atspiin-progressgo test ./internal/app ./internal/atspi ./internal/braille -count=1Private GTK/Xvfb verifies native Unicode capture and caret offsets.Physical text and control reading pending.Default verbose long-role subset: control indicators; expansion; values; EOL and text state suffixes. Full ancestor/group/table context; labels distinct from names; masks; translation; preferences and application overrides remain pending. Reference inspected at local Python b9dd2eb2bf96143309ba0c724c47f86d978826ef; the original inventory oracle commit is unavailable in that checkout. See docs/testing/braille.md.
50editable-text-selectionsrc/cthulhu/scripts/default.py;src/cthulhu/script_utilities.pyeditingSpeak changed selected or unselected text in a focused editable controlinternal/atspi internal/appimplementedgo test ./internal/app ./internal/input -run 'TestTextSelection|TestIntent' -count=1; CTHULHU_NATIVE_BROWSER_TESTS=selection python3 tests/native_browser.pyPrivate Brave/Xvfb fixture verified native selection offsets and text in the browser input.Physical speech listening pending.Physical selection dots pending.The Go event loop compares bounded native selection ranges and excludes password text and autocomplete; browse-mode document selection is tracked separately in web-browse-selection. See docs/testing/editing-selection.md.
51editable-cut-paste-feedbacksrc/cthulhu/scripts/default.py;src/cthulhu/script_utilities.pyeditingAnnounce cut and paste after editable text mutationsinternal/input internal/appimplementedgo test ./internal/app ./internal/input -run 'TestClipboardFeedback|TestIntent' -count=1; CTHULHU_NATIVE_BROWSER_TESTS=selection python3 tests/native_browser.pyPrivate Brave/Xvfb fixture verified Ctrl+X deletion and Ctrl+V insertion events.Physical cut and paste listening pending.Physical short-message braille pending.Go says cut or pasted from clipboard once after a matching focused editable mutation; subsequent paste text and caret events do not interrupt the message. Python uses full or brief clipboard messages. See docs/testing/editing-selection.md.
52editable-copy-feedbacksrc/cthulhu/scripts/default.pyeditingConfirm a successful copy to the clipboardinternal/input internal/platform/xorg internal/appin-progressgo test ./internal/input ./internal/app -run 'TestIntent|TestCopyFeedback' -count=1; CTHULHU_NATIVE_X11=1 go test ./internal/platform/xorg -run TestNativeClipboardOwnerChange -count=1Private Xvfb observed XFixes clipboard ownership change after copy.Physical Xorg listening pending.Short-message braille pending.Go says copied to clipboard once after Ctrl+C and an X11 clipboard ownership change; it stays silent if ownership does not change. See docs/testing/editing-selection.md.
53web-browse-selectionsrc/cthulhu/scripts/web/script.py;src/cthulhu/script_utilities.pywebSelect document text with Shift and Ctrl+Shift arrows in browse modeinternal/review internal/atspi internal/appin-progressPrivate Brave modes fixture verifies selected and unselected speech plus braille dots within one page text object and selected speech from a heading into a paragraph.Maintainer reported on 2026-10-03 that browser selection works but a selected message is missing after selecting a section.The browser can perform native selection without a Go selection command. Go follows native selection within text objects and across the tested heading-to-paragraph transition; the reported section case is unreproduced. The maintainer checks clipboard contents to confirm selection. See docs/testing/reading-selection-diagnostics.md.
54web-browse-braille-linesrc/cthulhu/caret_navigation.py;src/cthulhu/scripts/web/script.py;src/cthulhu/scripts/web/braille_generator.pybrailleFollow accepted browse-caret and structural navigation with the current native text line and virtual cursorinternal/atspi internal/review internal/appimplementedgo test -race ./internal/app ./internal/review ./internal/atspi ./internal/braille -count=1; CTHULHU_NATIVE_BROWSER_TESTS=modes,tables,keys python3 tests/native_browser.pyPrivate Brave/Xvfb mode/table/key checks pass on 2026-10-02; physical Xorg pending.Existing browse speech assertions pass in the private fixture.Queued native line and cursor frames pass; physical HumanWare NLS eReader acceptance pending.Reads run on the bounded navigation worker only while braille is enabled; preserve spaces and Unicode offsets. Table frames retain existing cell presentation. Complete cross-object visual-line assembly and virtual-caret routing remain open. See docs/testing/braille.md.
55web-explicit-link-namessrc/cthulhu/scripts/web/script_utilities.py:_treatObjectAsWholewebRead explicitly named links as whole objects without losing descendant badges or ordinary link navigationStorm Dragoninternal/atspi internal/review internal/appin-progressgo test -race ./...; CTHULHU_NATIVE_BROWSER_TESTS=namedlinks,browser,live,keys python3 tests/native_browser.pyPrivate Brave/Xorg named-link and key checks passedFixture speech verified; real Steam listening pendingNamed-link browse braille uses the full accessible label; physical check pendingdocs/testing/steam-browser.md; actual Steam explicit-name exposure and game-card acceptance remain live gates
56steam-notificationssrc/cthulhu/scripts/apps/steamwebhelper/script.py;tests/test_steam_notification_regressions.pywebCoalesce verified Steam background toasts and present once through speech braille and notification historyStorm Dragoninternal/webscripts internal/atspi internal/appin-progressgo test -race ./...; python3 tests/native_webscripts.pyPrivate GTK/AT-SPI process matching and alert-root capture passedEvent-loop background delivery and Chromium isolation passed; real Steam toast pendingEvent-loop flash verified; physical Steam toast display pendingdocs/testing/steam-browser.md; independent root and bus queues deliberately prevent unrelated toast timestamps from merging
57libreoffice-calc-basicOrca src/orca/scripts/apps/soffice/script.py; Orca src/orca/ax_utilities_table.py; Orca src/orca/speech_generator.pylibreofficePresent Calc cells and recover logical focus around editing and sheet changesStorm Dragoninternal/app internal/atspi internal/presentationin-progressGOCACHE=/tmp/cthulhu-go-cache go test -race ./internal/atspi ./internal/app ./internal/presentation -count=1; /usr/bin/python3 tests/native_libreoffice.pyPrivate real LibreOffice Calc 26.2.6.3 on Xvfb and a private AT-SPI bus validates cell movement blanks F2 typing Escape Enter and sheet changes.Recorded speech assertions pass; audible and physical-input acceptance pending.Recorded value and coordinate frames pass; physical Braille and editor routing acceptance pending.Current Orca is the primary Office reference. Dedicated application policy follows verified process identity after foreground/security gates; native capture remains bounded. Formulas range announcements dynamic headers full-row reading and Writer workflows remain open. See LIBREOFFICE_SUPPORT.md.