135 Commits
Author SHA1 Message Date
Storm Dragon e222d336a5 Preserve terminal feedback while coalescing repaints 2026-11-04 12:22:11 -05:00
Storm Dragon 8c26aad128 Merge remote-tracking branch 'origin/testing' into hunter 2026-11-04 12:13:00 -05:00
Storm Dragon 24261edb3d Tentacle support enhancements. 2026-11-04 12:10:41 -05:00
hjozwiak 00dbb1fea7 Graphical terminal improvements.
It makes using programs who like to refresh a ton much more tollerable
when I'm not in Emacs; I suspect others will like them too.
2026-11-04 04:05:19 -05:00
hjozwiak 1fcf7e6f87 Merge in testing. 2026-11-04 00:16:01 -05:00
Storm Dragon 4cf3335017 More work on tentacles. 2026-11-03 23:48:31 -05:00
ak47 573d15d7b4 Add Remote session foundations and feasibility checks
Add opt-in Tentacle protocol 1.1, explicit remote grants, lifecycle IPC and expiring core leases in both SDKs. Revoke access before update preparation, including failed updates.

Add transient secret entries, shared Braille cell export and isolated Xorg recovery experiments with focused tests and documented limitations. Production consent, desktop services and live interoperability remain pending.
2026-11-03 22:33:26 -05:00
Storm Dragon a47253d697 Found a few ways in which the Braille problem with browsers could resurface. Fixed now. 2026-11-03 16:48:39 -05:00
hjozwiak da4ae8525f Fix Shift+digit heading navigation on Wayland 2026-11-03 16:37:46 -05:00
Storm Dragon 0a3d946ffa Latest merge from Hunter. Also a couple files I forgot to add yesterday. 2026-11-03 11:41:33 -05:00
Storm Dragon 4da61465b0 Fix document retention and helper retry regressions
Keep failed cursor trials and native recapture anchored to the original document, and restore the requested cached root before LRU eviction. Base braille retry resets on established connection time rather than stalled startup. Poll private AT-SPI daemon ownership without triggering service activation and clean up partial startup failures. Add focused regressions and update browser testing notes.
2026-11-03 11:37:36 -05:00
hjozwiak a4d427099e Merge origin/testing into hunter 2026-11-03 10:35:41 -05:00
hjozwiak 002e515edf Wait quietly for an absent braille display
Helper retries BrlAPI open in-process until BRLTTY answers, supervisor waits with the parked helper instead of kill/respawn cycles, exponential backoff and warn-once for real helper exits, bounded give-up so permanent failures still surface.
2026-11-03 10:35:00 -05:00
hjozwiak 6c10ed0517 Add native coverage for ticking browser pages
Incremental-game style fixture whose AT-SPI leaves recreate every 250 ms, native navigation test, private-session AT-SPI daemon launch in the harness (no systemd, no host session required), and testing notes.
2026-11-03 10:35:00 -05:00
hjozwiak 7eef6e8be6 Make web document navigation survive live-updating pages
Recreated-node caret recovery, tolerant caret validation, per-root retained document trees and cursors across tab switches, document warm-up, coalesced structural moves, and hung-provider fast-fail with an 'Application is not responding' announcement.
2026-11-03 10:34:55 -05:00
Storm Dragon 89686fa029 Refresh browser tests and recover Firefox tab announcements
Bring the fragmented-line browser fixture into agreement with current browse
navigation. Rich editors are read through their text descendants, so Down from
the preceding heading must read "Review the code." directly. Remove the stale
empty editor-control stop while retaining forward and reverse line navigation,
character and word movement, Read All, and inline Braille-routing assertions.

Fix Firefox's missing announcement when creating a second tab. Firefox can emit
selection events before the new tab enters its accessible child list, causing
the native selected-child lookup to return nothing. Use the subsequent
child-added event only when its target is a live, freshly selected browser-chrome
tab with the emitting tab list as its direct parent. Keep document-authored tabs
and unselected background additions excluded, retain foreground filtering and
tab-identity deduplication, and release native references on the GLib owner.

Normalize child-added origin suffixes such as :system before event dispatch,
preserving the original native type in diagnostics. Rename the shared mutation
normalizer to reflect its expanded scope and update its callers, including the
Pidgin insertion check. Extend the normalization regression to cover child
additions and reject unrelated event names. Firefox keeps its normal animations
and all existing tab-announcement and address-editing assertions.

Make private-session teardown tolerate the document portal's asynchronous FUSE
unmount after D-Bus exits. Retry only ENOTCONN and EBUSY cleanup failures for at
most five seconds. Keep unrelated errors and persistent mount failures visible.
Add regressions for transient teardown, preservation of a failing child's exit
status, unrelated cleanup errors, and the cleanup deadline. Runtime directories
and accessibility buses remain private, with no init-system dependency.

Update browser verification notes and the parity ledger with the fixes, evidence,
regression risks, and concrete live acceptance procedures.

Validation:
- All 33 Chromium browser proofs passed in the final combined run.
- Firefox baseline and tab checks passed repeatedly with normal animations.
- All eight private-session isolation and cleanup regressions passed.
- AT-SPI, app, and review package race suites passed during development; focused
  race regressions passed again after the final event-normalization change.
- Go vet passed for internal/atspi, internal/app, and internal/review.
- A separate reader binary built successfully.
- Parity-ledger validation passed for 75 rows; git diff --check passed.
2026-11-03 02:38:59 -05:00
Storm Dragon 7ec6e4ccaf Preserve native offsets after braille text expansion
Expanding embedded-object placeholders changes the displayed braille text
without changing native AT-SPI offsets. Several consumers still validated
native positions against the expanded string, which could reject a valid
line end after contraction, accept an offset beyond the native line after
expansion, or drop selection and text-attribute indicators on a plain-text
fragment following an embedded object.

Use RawText for native-offset validation and fragment comparisons whenever
a braille line is expanded. Apply the same rule to parent/child native-caret
handoff: identical displayed text must not authorize an offset transfer
when the underlying native strings differ. Expanded spans retain their
existing conservative presentation without native cell routes.

Restrict the assembled-line displayed-text fallback to lines from which
embedded-object placeholders were actually removed. Ordinary whitespace-only
lines now retain their spaces, cursor position, and native routing instead
of being replaced with the object's text or accessible name.

Add regressions for contracted and expanded native offset bounds, suffix
selection and attribute preservation, immutable line enrichment, ambiguous
caret transfer, and whitespace-only line routing. The regressions reproduced
the review findings before the fixes and pass afterward.

Validation:
- Full Go suite before fixes; full race and BrlAPI suites after fixes.
- Focused Braille and native-caret regressions, including race checks.
- go vet ./...; reader and BrlAPI helper builds; parity-ledger validation.
- Private Chromium linked-heading, selection, and browse-mode checks.
- Private Firefox baseline and linked-heading checks.
- git diff --check.

The Chromium fragment harness still fails its embedded-editor navigation
step, and the Firefox harness still times out in its New Tab test. Both
failures reproduce on the parent of the reviewed commit, 8ce5e5c, as well.
These failures are not claimed as passing checks.

The active reader was not replaced. Physical keyboard, audible speech, and
Braille acceptance remain for maintainer testing: check linked headings,
mixed inline-link text, selection indicators after links, and ordinary or
blank-line cursor routing in both browser families before submission.
2026-11-03 01:54:25 -05:00
hjozwiak 8ce5e5cdad Expand embedded objects in braille document lines
Structural navigation to a heading whose native text is a single embedded-object placeholder for its child link showed only that placeholder in braille while speech used the expanded title. Braille line reads now expand embedded objects like speech capture, preserving RawText and native offsets; expanded lines carry no cell routes or native selection/attribute dots and only a line-start cursor. Frame assembly strips any remaining placeholders and falls back to displayed text so a placeholder never reaches the display. Regression tests cover placeholder-only, mixed, expanded, assembled, and empty headings plus native linked-heading and Firefox mixed-line braille. Maintainer confirms physical braille and speech agree on YouTube headings.
2026-11-03 00:17:08 -05:00
Storm Dragon 60f7f7a2e9 Code review and fixes. 2026-11-02 23:37:45 -05:00
hjozwiak f2a35a9305 Sync with testing. 2026-11-02 23:15:59 -05:00
Storm Dragon 7918fc02c4 Found more weird breakage on Slint. Fixed now. 2026-11-02 17:28:31 +00:00
hjozwiak 3026bc55c2 Bring in goodies from testing.
# Conflicts:
#	docs/testing/wine-proton.md
2026-11-02 11:30:32 -05:00
hjozwiak 75f34ea767 Add global Wine preferences tab
Phase 3 of the Wine/Proton stage (decisions 6, 9, 13, 19 in docs/testing/wine-proton.md): a global-only Wine tab modeled on the Pronunciation page, with the controller-only checkbox and a typed editable program list. Wine values flow through the preferences protocol so a global Apply reaches the live Wine settings from Phase 2 with no reader restart. Entries are validated as edited and named in-tab, blocking Apply until fixed; case-insensitive duplicates collapse. Per-application preferences expose no Wine editing and an app-scoped Apply cannot change the governing list.
2026-11-02 02:49:33 -05:00
hjozwiak 9a10a15b68 Read Wine settings live at poll and spawn
Phase 2 of the Wine/Proton stage (decisions 3, 4, 16, 17, 19 in docs/testing/wine-proton.md): replace the Wine manager's startup snapshot with a live settings source read once per poll, so accepted global settings take effect with no reader restart. The source publishes only the active/global profile's Wine values; per-application profile switching never changes the governing list. A newly listed running program restarts its helper once in the same mode; removals and clearing the global switch never downgrade a running helper.
2026-11-02 01:15:33 -05:00
hjozwiak 71093286c7 Add Wine ready-record and mixed-prefix spawn semantics
Phase 1 of the Wine/Proton stage (decisions 2, 5, 16, 17, 18, 24 in docs/testing/wine-proton.md): classify the helper exclusion-count line as info, parse the ready hook_exclusions count, mirror programs=[...] extra=[...] in the helper-start record, and stop passing prefix-wide --no-dialog-reader merely because a listed program is present, so ordinary programs in a mixed prefix keep dialog reading. Wholesale mode remains for the global controller-only switch, the environment override, and helpers whose ready record does not confirm the exclusions sent; unconfirmed binaries are remembered. A newly listed running program restarts its helper once in the same mode; removals never downgrade.
2026-11-01 23:27:55 -05:00
Storm Dragon 6df27c88de Another problem exposed and fixed on Slint. 2026-11-01 22:49:08 -05:00
ak47 92d6ad3cc4 Code review and cleanup. 2026-11-01 22:01:32 -05:00
Storm Dragon bbe931335f Better handling of some qt and gtk applications. Used Audacious for testing. 2026-11-01 21:37:01 -05:00
Storm Dragon 300f4a7504 More work on cthulhu recognizing focused items that should be read. 2026-11-01 18:31:58 -05:00
lilmike 9374b5a2e5 Messages read as you tab through discord again. 2026-11-01 14:52:44 -08:00
Storm Dragon 6ed0e36960 More problems deiscovered from the problem child. :) I think these fixes should improve reliability across the board for reading focused windows though. Needs testing. 2026-11-01 16:22:15 -05:00
Storm Dragon 1c12bc6636 The initial Slint problem was larger than thought. Hopefully a more universal fix. 2026-11-01 15:48:33 -05:00
Storm Dragon d0fdce7285 Descovered a but on Slint where if the reported sizes differ preferences would not rport. HOpefully fixed. This could probably affect more than just Slint, just happened to catch it there. 2026-11-01 14:33:50 -05:00
Kendell Clark 7591f65b58 Added tentacle updater. 2026-11-01 12:21:55 -05:00
Storm Dragon f2cc47c8a0 Merged changes from hunter. Attempt to fix cthulhu announcing modifiers when suspended for xterm. 2026-10-31 16:07:29 -04:00
Storm Dragon 27867a48cb Merge Hunter announcement support into testing 2026-10-31 15:48:42 -04:00
hjozwiak 7e7a83d5c5 Merge goodies from master. 2026-10-31 15:28:10 -04:00
hjozwiak 1780afccba Add the announcement of switched workspaces from Niri.
I haven't tested this with Braille support; I don't remember what I did with the cable.
2026-10-31 15:27:40 -04:00
Storm Dragon 03cf063d60 Make sure testing matches master. 2026-10-31 14:56:39 -04:00
Storm Dragon 9680b583fa Publish Tentacle fixture markers atomically and patch the release package 2026-10-31 11:26:12 -04:00
Storm Dragon 9538776fe3 Publish helper test output atomically and patch the release package 2026-10-31 11:03:48 -04:00
Storm Dragon 53a9aa301f Preparing for release. 2026-10-31 00:23:28 -04:00
Storm Dragon 702894ee4a Package updates. 2026-10-31 00:21:34 -04:00
Storm Dragon ff7055d715 Preparing for release. 2026-10-30 01:51:47 -04:00
Storm Dragon 44581c4038 Merge from testing. 2026-10-29 21:44:43 -04:00
Storm Dragon 01f50c17e8 Fenrir's emoji ported to cthulhu. 2026-10-29 19:20:29 -04:00
Storm Dragon 74afa425da Merge testing. 2026-10-29 13:35:34 -04:00
Storm Dragon 3e2429b8a5 Add autofocus mode. 2026-10-28 22:06:04 -04:00
Storm Dragon b232c1eebb Fix for repeating in some instances, e.g. pidgin. 2026-10-27 19:40:17 -04:00
Storm Dragon 4d29f2bb23 Merge branch 'master' into testing 2026-10-27 12:31:15 -04:00