fix: prevent private AX subtree leaks at source - #1807
Conversation
Size Report
Startup median (7 runs, lower is better):
Top changed chunks:
|
Code-quality reviewThis is the right shape: the leak is closed where the information lives ( Verified locally on the PR head: the touched unit suites pass (88 tests: stable-capture-signal, snapshot-presentation/*, snapshot-capture, daemon-runtime-port-observation, contracts snapshot, maestro runtime-targets-typed). Swift regression reads correctly for the Theme/clamped-children case. Two things worth tightening; neither blocks: 1. 2. Notes, no action needed:
|
|
Summary
Prevent private-AX descendants of an offscreen scroll item from reappearing at a clamped visible edge. Element settings rows such as Theme, Notifications, and About now stay excluded from interactive snapshots when their ancestor is offscreen.
This follow-up removes the downstream collapsed-cluster detector and second iOS presentation pass introduced in #1798 while retaining Maestro source-index provenance. XCTest settle projection now uses the canonical visibility rules with linear behavior for nested and flat scroll trees.
Related to #1797; this does not implement or close the broader acquire/present migration.
Scope: 22 files across Apple runner presentation, canonical snapshot visibility and settle, daemon iOS presentation, and Maestro provenance.
Validation
The new XCTest regression was proven red before the fix: an offscreen Theme cell leaked two clamped Theme descendants. It passes after the fix alongside the geometryless-content and scroll-hint regressions.
Two settle-signal regressions were proven red independently: a visible node changing only its value incorrectly compared stable, while whitespace-only semantic changes incorrectly compared unstable. The signal retains value and preserves canonical semantic trimming; the focused settle/wait suite passes 24 tests.
iOS and macOS runner builds with unit regressions enabled passed. Focused unit and integration tests cover composed replacement updates, tree and flat-tree settle linearity, iOS presentation, snapshot capture, and Maestro target provenance. The full affected gate passed on the pushed head: 556 test files and 4,724 tests passed with 100% changed-line coverage. A final Sol high review found no remaining in-scope issues on the current head.
No docs or skills changed because this is an internal correction to existing snapshot behavior; the XCTest CI allowlist was updated for the new regression.