Merge remote-tracking branch 'origin/testing' into testing

This commit is contained in:
ak47 committed 2026-11-07 14:46:59 -05:00
commit a29910d002
7 files changed
+304 -2

No files matched your search

+55
View File
@@ -0,0 +1,55 @@
# Clickable disclosures
A successful accessible action can reveal options without a usable
children-changed event. The Actions list must invalidate the same document
ancestry as Enter activation. Both paths also invalidate the target snapshot:
caret navigation deliberately tolerates stale child order on ticking pages,
so child-order invalidation alone can leave the newly opened options skipped.
The next move uses the existing bounded recapture, retaining live object
identities and the saved browse position. Action ownership checks remain strict.
Text caret placement also reveals its native range. Explicitly scrolling the
whole accessible object first can scroll the outer document while reading an
inner popup and cause the page to dismiss that popup. Text targets now rely on
native caret placement, as Python does; non-text stops retain component scrolling.
## Automated checks
```sh
CTHULHU_BROWSER=/usr/bin/chromium CTHULHU_NATIVE_BROWSER_TESTS=actions,disclosure,reveal,positions,ticking,document python3 tests/native_browser.py
```
The disclosure proof opens a generic scrollable popup through the label's
ancestor action and through Enter. It reads characters and both options in
both directions before closing it. The popup dismisses on blur or outer-document
scrolling. Selection-change markers wait for two browser animation frames so
queued scrolling and dismissal run before checking that the option remains
available. Restoring unconditional component scrolling fails this check.
The completion marker is separate from the reader's focus anchor so it cannot
accidentally force recapture and hide the earlier activation regression.
Viewport intersection acknowledgements also verify that distant text and
non-text images are revealed. The other proofs cover iframe actions, revealed
headings, list-position metadata, continuously replaced text, and browser
document commands. All use private Xorg and D-Bus.
The original public page was also checked in a private Chromium profile, with
browser animation-frame acknowledgements between moves. Before the scroll fix,
the next character after the first tag returned to the closed filter label.
With the fix, character reading and moving to the next tag preserved the popup
and its focused scroll container.
The separate `link-sounds` proof failed its initial native Tab-position check
with pans `[0 0 0]` both with the original unconditional scrolling and with the
fix. That baseline failure remains unresolved; it is not a passing check here.
## Live acceptance
With a rebuilt reader on the originally reported page, open each filter using
Enter and the Actions list. Read its options with Down and Up, select an option,
then reopen it and verify that it remains usable. Also check ordinary links,
buttons, Tab/Shift+Tab, and reading through a continuously updating page.
The user's installed Brave session, physical input, audible speech, and physical
Braille remain live acceptance checks. Human diff review and live testing
precede submission.