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.
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.
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.
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.
Maintainer decision, 2026-11-02: the core implementation and basic live behavior are sufficient for this stage. The original exhaustive done checklist was not fully satisfied and the contract is not marked Final; unfinished verification and known failures remain visible as future work.
A quiet live Wayland desktop is not assumed to yield a reliable single-environment 7/7. Record that a purpose-built private compositor/XWayland harness may be needed and whether split-environment evidence suffices is open for review.
Phase 4 remains in progress and the contract is not Final. This records the verified interim results, the open Wine title and Battle.net blockers, the incomplete Braille pass, and the owed quiet-desktop wine-access CTest run.
Maintainer amendment: no fresh Phase 4 session; the maintainer runs the live corpus, the master session records results and runs automated checks, and defect sessions are spawned only on proven need.
Maintainer disposition: no Phase 4 fix or wine-access defect branch for the pre-attached edit subclass; record it honestly in the Phase 4 results. Future work item: dynamic add/remove of hook exclusions inside the running helper.
Wine preferences tab landed as 75f34ea with maintainer flesh-test results; the pre-attached edit-subclass dynamic-addition caveat is recorded and localized for Phase 4.
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.
Live Wine settings landed as 9a10a15; includes the maintainer smoke results and the settled note that external settings-file edits have never auto-reloaded in Go or legacy Cthulhu.
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.
Settled decisions, scope and done checklist in wine-proton.md; execution ledger with batch amendments, the satisfied Phase 0 gate and the accepted Phase 1 handoff in wine-proton-phases.md.
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.
Add the document selection adapter, integrate it through script utilities and major callers, and package the clipboard fallback work that was needed during manual testing on Wayland.
Also include a handoff note for the still-open browser link-selection issue so other developers can continue from the current branch state without reconstructing the debug trail.