4 Commits
Author SHA1 Message Date
deedra edd6c560b8 Read Thunderbird message text and preserve link announcements
Thunderbird HTML messages expose readable text on containers around embedded
objects. The browse cursor previously considered only text leaves, and native
document capture omitted heading/link character counts. This skipped message
content, headings and link text. A caret event following Tab could also replace
a complete link announcement with its first character.

Capture owned hypertext child identities and native placeholder offsets on the
GLib thread, releasing native interfaces before returning. Require every child
to occupy one embedded-object character so providers exposing duplicate text
through static descendants retain their ordinary traversal.

Traverse native text ranges before and after embedded children without changing
their offset domains. Preserve character, word, line and document-boundary
navigation; normalize native caret and Braille routing positions at adjacent
embedded links. Keep the Braille cursor on the correct fragment when a parent
contributes text more than once to an assembled line.

Ignore same-input link caret echoes after focus while retaining subsequent
arrow and selection feedback. Add regression tests, extend the private Firefox
fixture, and record behavior and remaining acceptance in the parity ledger.

Validation:
- Full Go test suite with count=1; focused app/atspi/review race checks.
- go vet ./...; reader and brlapi helper builds.
- Private Firefox baseline, mixed-parent offsets and tab navigation.
- Private Chromium fragments, named links, document navigation and selection.
- Parity ledger validation and whitespace checks.

The existing Firefox tab test intermittently timed out on both an untouched
HEAD copy and the changed tree; the final run passed. The unchanged
TestRunReachesSoundStopAfterEarlierServiceStopError also failed once during
startup cancellation and passed in subsequent full-suite and race runs.

Both installed binaries were verified and the reader reloaded in its original
desktop session. The maintainer confirmed readable message text and later
working links after an earlier intermittent omission. That omission remains
untraced; repeat live acceptance and physical Braille verification remain open.
2026-10-20 10:41:38 -07:00
deedra 8ef838e16e Speak relation-only labels for unnamed edit fields
Irctest exposes its settings-field labels through AT-SPI LABELLED_BY
relations while leaving the fields' accessible names empty. Cthulhu
previously captured only the name, so focus speech announced the text
role and contents without Nickname, Username, or Real name.

Resolve direct label targets in the shared native snapshot capture for
unnamed text, entry, and password-text objects. Preserve explicit names,
combine multiple label targets in relation order, and use label/static
text only when a target has no accessible name. Bound relation scans,
target queries, and UTF-8 output; release all native references and avoid
reading password targets. No application-specific handling is required.

Add an isolated GTK fixture and native regression test exercising capture
and speech formatting for single labels, multiple labels, explicit names,
unlabelled fields, and labelled password fields without password contents.
Expose the probe through CTHULHU_NATIVE_EDIT_LABELS=1 in native_atspi.py.
Record verification and installed-reader acceptance in the parity ledger.

Validation:
- go test ./... -count=1
- CTHULHU_NATIVE_EDIT_LABELS=1 python3 tests/native_atspi.py
- go vet ./...
- Build the reader and the brlapi-tagged Braille helper.
- Validate configuration and testdata/parity-ledger.csv.
- Read-only live irctest capture includes all three settings-field labels
  in formatted speech.
- Install both tested binaries and replace the reader in its original
  desktop session; verify service ownership and installed build hashes.
- Maintainer confirms the installed reader now speaks the field labels.

The full suite passes outside the sandbox; its socket and process checks
require access unavailable inside the sandbox. Physical Braille acceptance
remains pending. Preserve cthulhu.log outside the commit.
2026-10-20 09:29:24 -07:00
Storm Dragon 8e76d2341c Fix panning sounds after scrolling. 2026-10-14 12:50:44 -04:00
Storm Dragon 069fc674dc Cthulhu is no longer a fork. Now it is a screen reader written in Golang. 2026-10-14 00:16:34 -04:00