From 8526c491e8175041dcf433f6a6bbce53765b7aae Mon Sep 17 00:00:00 2001 From: PJ Date: Sun, 7 Jun 2026 00:33:27 +0530 Subject: [PATCH] fix(ioscompanion): treat unresolved bridge values as transitional, never as content --- internal/driver/ioscompanion/driver.go | 6 ++++++ internal/driver/ioscompanion/hierarchymap.go | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/internal/driver/ioscompanion/driver.go b/internal/driver/ioscompanion/driver.go index 132db65..486f662 100644 --- a/internal/driver/ioscompanion/driver.go +++ b/internal/driver/ioscompanion/driver.go @@ -594,6 +594,12 @@ func (d *Driver) WaitForIdle(ctx context.Context, _ time.Duration) error { if err != nil { return nil } + // Unresolved bridge values mean the tree is mid-update; report the + // snapshot transitional so the streak resets instead of declaring a + // half-readable screen stable. + if hasUnresolvedValues(dump) { + return nil + } mapped, err := MapHierarchy(dump, d.screenWidth, d.screenHeight) if err != nil { return nil diff --git a/internal/driver/ioscompanion/hierarchymap.go b/internal/driver/ioscompanion/hierarchymap.go index fa8a227..205ccd2 100644 --- a/internal/driver/ioscompanion/hierarchymap.go +++ b/internal/driver/ioscompanion/hierarchymap.go @@ -108,6 +108,11 @@ func mapElement(element *rawElement) (treeNode, bool) { } value := stringValue(element.AXValue) + if value == unresolvedValueSentinel { + // Bridge state, not app content: surfacing it would show phantom + // field values in snapshots taken while the bridge catches up. + value = "" + } label := stringValue(element.AXLabel) editable := isEditable(element.Type)