"The clean read works everywhere — until it doesn't. Knowing exactly where it stops is more useful than pretending it never does."
The Clean Read Has an Edge
The last two lessons made AX reading look uniform and elegant: one tree, a few attributes, the selection falls out. That's true for apps that implement Accessibility fully — native editors, Apple's apps, most Cocoa text fields. But a large slice of the software people actually live in does not: Chromium-based browsers, and the many Electron apps built on the same engine — chat clients, editors, note tools. In those, the clean read hits a wall. Understanding that wall precisely is the difference between a tool that works 'usually' and one that works everywhere.
What the Opaque Apps Don't Give You
Chromium and Electron draw much of their interface themselves instead of using native controls, and their Accessibility tree is only partially populated. Concretely: kAXFocusedUIElementAttribute may return nothing usable, or the focused element it returns doesn't expose kAXSelectedTextAttribute — the web content's selection simply isn't published as the standard attribute. It isn't malice and it isn't a lock you can pick; the information is just not there to read. From Flint's side, a real, visible selection comes back as nothing.
native editor: focused element -> selected text -> "..." (works)
Chromium/Electron: focused element -> (missing) -> nil (the hole)
Same API call. In one app it returns the selection;
in the other it returns nothing, even though text IS selected.
Detecting the Hole
The dangerous mistake is to treat a nil AX read as 'nothing is selected.' In a native app that's true; in an opaque app it's a false negative — there is a selection, AX just can't see it. So Flint distinguishes the two: an empty selection from a fully-cooperating element is genuinely empty, but a failed read from a known-opaque app (or a focused element that won't yield selected text) is a signal to switch strategies, not to give up. That detection is what routes the strike to the fallback probe in the next lesson.