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.
This commit is contained in:
1 parent
7ec6e4ccaf
commit
89686fa029
11 files changed
+199
-24
No files matched your search
@@ -58,11 +58,12 @@ The final `live-atomic` run also verifies that busy completion requires no new t
|
||||
insertion. It covers atomic text updates, atomic child additions, non-atomic
|
||||
updates, suppression while busy, and release after busy becomes false.
|
||||
|
||||
Firefox baseline reading passed. Its tab regression timed out on the second
|
||||
At the original review, Firefox baseline reading passed. Its tab regression timed
|
||||
out on the second
|
||||
“New Tab” announcement in both the modified checkout and an untouched `bf4b9d7`
|
||||
snapshot. The recorded events include a selected-state event for the previous
|
||||
unselected tab. This is an unresolved existing/provider case, not a verified
|
||||
regression introduced by these changes.
|
||||
unselected tab. That failure predated the changes reviewed here. The browser-test
|
||||
maintenance below addresses it without relaxing the announcement assertions.
|
||||
|
||||
The affected `go vet` checks, normal reader build, BrlAPI helper build, Python
|
||||
syntax check, parity-ledger validation and whitespace check passed. No installed
|
||||
@@ -90,6 +91,53 @@ go vet ./internal/atspi ./internal/review ./internal/app
|
||||
go run ./cmd/parityledger validate testdata/parity-ledger.csv
|
||||
```
|
||||
|
||||
## Browser-test maintenance (2026-11-03)
|
||||
|
||||
The fragmented-line fixture expected an empty editor-control stop before its
|
||||
first text line. Current browse navigation and its unit regression deliberately
|
||||
descend directly into rich-editor text. The native fixture now requires that same
|
||||
sequence, retaining forward/backward reading, character/word movement, Read All
|
||||
and inline Braille-routing checks.
|
||||
|
||||
Firefox can emit tab selection before the new tab enters its accessible child
|
||||
list. Its later child-added event exposes the selected tab. The native adapter
|
||||
now recognizes that event only for a live, freshly selected browser-chrome tab
|
||||
whose parent matches the emitting tab list. Document-authored tabs and unselected
|
||||
background additions do not qualify. Existing foreground checks and tab-identity
|
||||
deduplication still apply. Child-added origin suffixes such as `:system` are
|
||||
normalized before dispatch, with the original native type retained in diagnostics.
|
||||
The browser profile keeps its normal animations; the tab test still requires an
|
||||
announcement for each creation, switch and close, without duplicate announcements
|
||||
or automatic address-rewrite speech.
|
||||
|
||||
Private-session cleanup now waits up to five seconds for a document portal's
|
||||
FUSE mount to disappear after D-Bus exits. Only disconnected/busy cleanup errors
|
||||
are retried; unrelated errors and a persistent mount still fail the run. The
|
||||
isolation regressions also verify that retries preserve a failing child test's
|
||||
exit status.
|
||||
|
||||
All 33 Chromium proofs passed in the final combined run, and Firefox baseline
|
||||
and tab checks passed in repeated runs with normal animations. Eight private-
|
||||
session regressions, focused package race tests, affected-package vet checks and
|
||||
a separate reader build passed. An earlier Chromium run failed generated-link
|
||||
Read All with “accessible children require recapture”; its isolated and final
|
||||
combined reruns passed. That intermittent failure's cause is not established.
|
||||
|
||||
```sh
|
||||
python3 -B tests/test_native_test_session.py
|
||||
CTHULHU_NATIVE_BROWSER_TESTS=fragments,tabs,linkedheadings,selection,modes,live,live-atomic python3 tests/native_browser.py
|
||||
python3 tests/native_firefox.py
|
||||
```
|
||||
|
||||
For live acceptance, create two Firefox tabs in quick succession, switch between
|
||||
them, then close them. Each action should announce the newly selected tab once;
|
||||
editing and deleting text in the address bar must still speak. Open a link in a
|
||||
background tab and check that its creation does not announce a tab switch. Check
|
||||
page-authored ARIA tabs and an ordinary GTK notebook retain their own behavior.
|
||||
In `tests/browser-fragments.html`, navigate to “Embedded suggestion”: Down should
|
||||
read “Review the code.” immediately, followed by “Report actionable issues.” and
|
||||
“After the suggestion.” Check reverse navigation, Read All and Braille routing.
|
||||
|
||||
## Human acceptance before submission
|
||||
|
||||
Review the generated diff under the project's AI-assisted contribution policy.
|
||||
|
||||
Reference in new issue
Block a user