mobile-debug-mcp 0.29.0 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,890 @@
1
+
2
+
3
+ # RFC 013 — Wait and Synchronization Reliability
4
+
5
+ ## Status
6
+
7
+ Draft
8
+
9
+ ---
10
+
11
+ # 1. Summary
12
+
13
+ This RFC introduces deterministic synchronization primitives and snapshot freshness semantics for mobile-debug-mcp.
14
+
15
+ The goal is to reduce premature action execution, stale-state reasoning, retry amplification, and sequencing instability when interacting with asynchronous mobile UI frameworks.
16
+
17
+ The RFC defines:
18
+
19
+ - UI synchronization principles
20
+ - Wait lifecycle semantics
21
+ - Snapshot freshness metadata
22
+ - Convergence and stabilization behavior
23
+ - Synchronization guardrails for agents
24
+ - Incremental synchronization foundations
25
+
26
+ These capabilities are intended to improve reliability across:
27
+
28
+ - Android Views
29
+ - Jetpack Compose
30
+ - UIKit
31
+ - SwiftUI
32
+
33
+ ---
34
+
35
+ # Relationship to Existing Synchronization Contracts
36
+
37
+ This RFC extends and clarifies the synchronization semantics introduced in RFC003 and the currently shipped synchronization tooling.
38
+
39
+ RFC013 is additive rather than a full replacement.
40
+
41
+ Where conflicts exist between:
42
+
43
+ - historical documentation
44
+ - illustrative examples in earlier RFCs
45
+ - implementation behavior
46
+
47
+ The shipped implementation contract remains the source of truth until RFC013 reaches accepted status and corresponding implementation updates are merged.
48
+
49
+ This RFC specifically standardizes:
50
+
51
+ - synchronization terminology
52
+ - convergence semantics
53
+ - snapshot freshness semantics
54
+ - synchronization lifecycle behavior
55
+ - future incremental synchronization direction
56
+
57
+ It does not invalidate existing synchronization tooling.
58
+
59
+ ---
60
+
61
+ # 2. Problem Statement
62
+
63
+ Current interaction flows rely heavily on immediate post-action reasoning against potentially transient UI state.
64
+
65
+ Observed failure modes include:
66
+
67
+ - Actions executing before navigation or recomposition completes
68
+ - Agents reasoning against stale hierarchy snapshots
69
+ - Retry loops caused by transient loading states
70
+ - Network activity incorrectly treated as readiness confirmation
71
+ - In-place UI mutations not being detected reliably
72
+ - Async Compose recomposition causing unstable interaction timing
73
+ - Sequential actions being executed without convergence verification
74
+
75
+ Example failure pattern:
76
+
77
+ ```text
78
+ Tap login button
79
+ → hierarchy partially updates
80
+ → next action executes immediately
81
+ → target element not yet available
82
+ → retry loop begins
83
+ ```
84
+
85
+ The current model does not provide a deterministic definition of:
86
+
87
+ - when the UI has changed
88
+ - when the UI is stable
89
+ - whether a snapshot is fresh
90
+ - whether synchronization has converged
91
+
92
+ This RFC introduces explicit synchronization semantics to address those gaps.
93
+
94
+ ---
95
+
96
+ # 3. Goals
97
+
98
+ The system should:
99
+
100
+ - Make UI state transitions observable and waitable
101
+ - Reduce premature action execution
102
+ - Improve deterministic sequencing behavior
103
+ - Reduce retry amplification
104
+ - Support asynchronous UI frameworks reliably
105
+ - Improve snapshot freshness awareness
106
+ - Enable token-efficient synchronization strategies
107
+ - Provide explicit synchronization lifecycle semantics
108
+
109
+ ---
110
+
111
+ # 4. Non-Goals
112
+
113
+ This RFC does not attempt to:
114
+
115
+ - Implement autonomous recovery planning
116
+ - Infer app-specific business loading semantics
117
+ - Guarantee backend or network completion
118
+ - Replace explicit verification primitives
119
+ - Eliminate all timing-related failures
120
+ - Perform animation introspection beyond observable hierarchy state
121
+ - Solve all synchronization issues at the protocol level alone
122
+
123
+ ---
124
+
125
+ # 5. Design Principles
126
+
127
+ ## 5.1 UI-First Synchronization
128
+
129
+ Observable UI convergence is the primary synchronization signal.
130
+
131
+ The system should prefer:
132
+
133
+ - hierarchy changes
134
+ - visibility changes
135
+ - enabled-state changes
136
+ - navigation transitions
137
+
138
+ over indirect signals such as:
139
+
140
+ - network activity
141
+ - logs
142
+ - timing assumptions
143
+
144
+ ---
145
+
146
+ ## 5.2 Verification Over Inference
147
+
148
+ Synchronization should confirm observable state transitions rather than infer readiness heuristically whenever possible.
149
+
150
+ Preferred flow:
151
+
152
+ ```text
153
+ action
154
+ → wait
155
+ → verify
156
+ ```
157
+
158
+ Avoid:
159
+
160
+ ```text
161
+ action
162
+ → immediate follow-up action
163
+ ```
164
+
165
+ ---
166
+
167
+ ## 5.3 Bounded Convergence
168
+
169
+ All synchronization operations must terminate deterministically.
170
+
171
+ Every wait operation must:
172
+
173
+ - have a timeout
174
+ - expose completion reason
175
+ - avoid infinite polling loops
176
+ - expose partial convergence information when possible
177
+
178
+ ---
179
+
180
+ ## 5.4 Snapshot Freshness Awareness
181
+
182
+ Agents should understand whether observations are:
183
+
184
+ - current
185
+ - stale
186
+ - transient
187
+ - stable
188
+
189
+ Snapshot freshness must be explicit rather than inferred.
190
+
191
+ ---
192
+
193
+ ## 5.5 Explicit Sequencing
194
+
195
+ Synchronization should encourage predictable execution ordering.
196
+
197
+ Preferred execution model:
198
+
199
+ ```text
200
+ perform action
201
+ → observe mutation
202
+ → wait for convergence
203
+ → verify state
204
+ → continue
205
+ ```
206
+
207
+ ---
208
+
209
+ # 6. Definitions
210
+
211
+ ## Fresh
212
+
213
+ A snapshot is considered fresh when:
214
+
215
+ - its `snapshot_revision` matches the latest observed hierarchy revision
216
+ - its `captured_at_ms` timestamp is newer than the most recent qualifying hierarchy mutation observed by the synchronization operation
217
+
218
+ Freshness is computed by the synchronization subsystem.
219
+
220
+ Freshness is advisory rather than absolute because additional hierarchy mutation may occur immediately after snapshot capture.
221
+
222
+ ---
223
+
224
+ ## Stale
225
+
226
+ A snapshot is considered stale when:
227
+
228
+ - a newer hierarchy revision exists
229
+ - the synchronization subsystem has observed additional qualifying hierarchy mutation after the snapshot was captured
230
+
231
+ ---
232
+
233
+ ## Transient
234
+
235
+ A hierarchy state is transient when qualifying hierarchy mutations are still occurring within the stabilization window.
236
+
237
+ Transient state maps to:
238
+
239
+ ```text
240
+ stability_state = transient
241
+ ```
242
+
243
+ ---
244
+
245
+ ## Stable
246
+
247
+ A hierarchy state is stable when:
248
+
249
+ - no qualifying hierarchy mutations occur within the stabilization window
250
+ - convergence conditions have been satisfied
251
+
252
+ Stable state maps to:
253
+
254
+ ```text
255
+ stability_state = stable
256
+ ```
257
+
258
+ ---
259
+
260
+ ## Converged
261
+
262
+ A synchronization state in which:
263
+
264
+ - required conditions are satisfied
265
+ - no additional qualifying hierarchy mutations occur within the stabilization window
266
+ - the returned snapshot is considered fresh at the time of emission
267
+
268
+ ---
269
+
270
+ # 7. Proposed Capabilities
271
+
272
+ ## 7.1 wait_for_ui_change
273
+
274
+ Introduces an explicit synchronization primitive that waits for observable hierarchy mutation.
275
+
276
+ ### Current Shipped Contract
277
+
278
+ The current implementation exposes synchronization through the interaction layer using:
279
+
280
+ ```json
281
+ wait_for_ui_change({
282
+ platform?: "android" | "ios",
283
+ deviceId?: string,
284
+ timeout_ms?: number,
285
+ stability_window_ms?: number,
286
+ expected_change?: string
287
+ })
288
+ ```
289
+
290
+ ### Proposed Future Extensions
291
+
292
+ The following fields are proposed extensions and are not currently part of the shipped contract:
293
+
294
+ ```json
295
+ {
296
+ "scope": "screen" | "subtree",
297
+ "target": "element_id"
298
+ }
299
+ ```
300
+
301
+ These extensions are illustrative and intended to support:
302
+
303
+ - subtree synchronization
304
+ - scoped convergence
305
+ - token-efficient synchronization
306
+
307
+ ### Semantics
308
+
309
+ The operation:
310
+
311
+ 1. Captures the current hierarchy revision
312
+ 2. Waits for qualifying hierarchy mutation
313
+ 3. Waits for stabilization convergence
314
+ 4. Returns synchronization metadata
315
+
316
+ ### Completion Conditions
317
+
318
+ The operation succeeds when:
319
+
320
+ - a qualifying hierarchy mutation occurs
321
+ - stabilization completes before timeout
322
+
323
+ The operation fails when:
324
+
325
+ - timeout expires
326
+ - hierarchy becomes unavailable
327
+ - target subtree becomes invalid
328
+
329
+ ### Synchronization-Relevant Mutation Rules
330
+
331
+ The current implementation treats synchronization-relevant mutations as observable hierarchy changes that may affect interaction correctness or verification behavior.
332
+
333
+ Examples include:
334
+
335
+ - element addition or removal
336
+ - visibility changes
337
+ - enabled-state changes
338
+ - navigation transitions
339
+ - text or content-description changes
340
+ - subtree structure mutation
341
+ - semantic accessibility tree mutation
342
+
343
+ The implementation may ignore mutations considered non-meaningful for synchronization purposes.
344
+
345
+ Examples may include:
346
+
347
+ - animation frame updates
348
+ - layout-only jitter
349
+ - opacity-only visual transitions
350
+ - non-semantic rendering updates
351
+
352
+ Mutation qualification behavior is currently implementation-defined.
353
+
354
+ ### Normative Default Mutation Classification Rules
355
+
356
+ The implementation MUST treat the following as synchronization-relevant mutations:
357
+
358
+ - element addition or removal
359
+ - visibility changes
360
+ - enabled-state changes
361
+ - navigation transitions
362
+ - text or content-description changes
363
+ - subtree structure mutation
364
+ - semantic accessibility tree mutation
365
+
366
+ The implementation MUST NOT treat the following as synchronization-relevant mutations:
367
+
368
+ - animation frame updates
369
+ - layout-only jitter
370
+ - opacity-only visual transitions
371
+ - non-semantic rendering updates
372
+
373
+ If a mutation affects interaction semantics or element accessibility identity, it SHOULD be treated as synchronization-relevant.
374
+
375
+ Future protocol revisions may standardize semantic diff classification.
376
+
377
+ ### Response Example
378
+
379
+ ```json
380
+ {
381
+ "status": "success",
382
+ "snapshot_revision": 42,
383
+ "change_detected": true,
384
+ "stabilized": true,
385
+ "elapsed_ms": 842
386
+ }
387
+ ```
388
+
389
+ ### Normative Field Definitions
390
+
391
+ | Field | Status | Description |
392
+ |---|---|---|
393
+ | `platform` | optional | Target platform identifier |
394
+ | `deviceId` | optional | Device session identifier |
395
+ | `timeout_ms` | optional | Maximum synchronization duration |
396
+ | `stability_window_ms` | optional | Required stabilization duration before convergence |
397
+ | `expected_change` | optional | Advisory description of expected UI mutation |
398
+ | `scope` | proposed | Future subtree or screen scoping |
399
+ | `target` | proposed | Future scoped synchronization target |
400
+
401
+ ---
402
+
403
+ ## 7.1.1 Stabilization Execution Model (Normative)
404
+
405
+ This section defines the required execution semantics for stabilization. Implementations MAY differ internally, but MUST conform to the observable behavior defined here.
406
+
407
+ ### 1. Core Rule
408
+
409
+ Stabilization is defined as:
410
+
411
+ > a continuous period of `stability_window_ms` during which no synchronization-relevant mutation occurs.
412
+
413
+ A snapshot is considered **stable only when this condition is satisfied continuously for the full window duration**.
414
+
415
+ ---
416
+
417
+ ### 2. Window Behavior (Reset Semantics)
418
+
419
+ The stabilization window:
420
+
421
+ - MUST reset whenever a synchronization-relevant mutation is observed
422
+ - MUST be measured from the **most recent qualifying mutation timestamp**
423
+
424
+ This implies:
425
+
426
+ ```text
427
+ mutation → reset window → wait full window → check again
428
+ ```
429
+
430
+ There is no accumulation of partial stability.
431
+
432
+ ---
433
+
434
+ ### 3. Coalescing Model
435
+
436
+ Multiple mutations occurring within the stabilization window:
437
+
438
+ - MUST be treated as a single continuous instability period
439
+ - MUST NOT trigger separate stabilization evaluations
440
+
441
+ Effectively:
442
+
443
+ > stabilization evaluates *quiescence*, not individual events
444
+
445
+ ---
446
+
447
+ ### 4. Completion Condition
448
+
449
+ Stabilization is complete only when:
450
+
451
+ - no synchronization-relevant mutation has occurred for a full `stability_window_ms`
452
+ - at least one snapshot is captured at the end of that window without new mutation
453
+
454
+ This guarantees convergence is based on observed inactivity, not prediction.
455
+
456
+ ---
457
+
458
+ ### 5. Emission Semantics
459
+
460
+ Implementations:
461
+
462
+ - MAY emit intermediate “transient” or “stabilizing” states internally
463
+ - MUST NOT report `stable` until the completion condition is satisfied
464
+ - MUST ensure `stable` implies a fully satisfied stabilization window
465
+
466
+ ---
467
+
468
+ ### 6. Timeout Interaction
469
+
470
+ If a timeout occurs:
471
+
472
+ - stabilization MUST abort
473
+ - partial convergence MUST NOT be reported as `stable`
474
+ - last observed state MAY be returned with `stabilizing` or equivalent status
475
+
476
+ ---
477
+
478
+ ### 7. Determinism Requirement
479
+
480
+ Given identical sequences of:
481
+
482
+ - mutations
483
+ - timing
484
+ - `stability_window_ms`
485
+
486
+ the stabilization outcome MUST be deterministic.
487
+
488
+ ---
489
+
490
+ ## 7.2 Snapshot Revision Metadata
491
+
492
+ Snapshots should expose explicit freshness metadata.
493
+
494
+ Example:
495
+
496
+ ```json
497
+ {
498
+ "snapshot_revision": 42,
499
+ "captured_at_ms": 1716738123,
500
+ "loading_state": {
501
+ "active": false,
502
+ "signal": "none",
503
+ "source": "system"
504
+ }
505
+ }
506
+ ```
507
+
508
+ ### Current Shipped Metadata
509
+
510
+ The current implementation exposes:
511
+
512
+ - `snapshot_revision`
513
+ - `captured_at_ms`
514
+ - advisory `loading_state`
515
+
516
+ The `loading_state` field is currently an advisory structured object rather than a simple enum value.
517
+
518
+ The implementation does not currently expose explicit freshness states such as:
519
+
520
+ - `fresh`
521
+ - `stale`
522
+ - `transient`
523
+ - `stable`
524
+
525
+ Those concepts in this RFC describe synchronization semantics rather than currently shipped payload fields.
526
+
527
+ ### Requirements
528
+
529
+ - revisions must be monotonically increasing
530
+ - revisions must increment on qualifying hierarchy mutation
531
+ - stale snapshots must be detectable
532
+ - stability state must be explicit
533
+
534
+ ### Proposed Stability States
535
+
536
+ Future implementations may expose explicit synchronization stability states.
537
+
538
+ Potential states include:
539
+
540
+ - `transient`
541
+ - `stabilizing`
542
+ - `stable`
543
+
544
+ These are not currently emitted by the shipped implementation.
545
+
546
+ ---
547
+
548
+ ## 7.3 Loading State Detection
549
+
550
+ The system should expose structured loading semantics when observable.
551
+
552
+ Examples:
553
+
554
+ - progress indicators
555
+ - loading spinners
556
+ - disabled submission states
557
+ - visible loading overlays
558
+ - navigation transition indicators
559
+
560
+ ### Important Constraint
561
+
562
+ Loading detection is advisory.
563
+
564
+ It must not be treated as authoritative proof of application readiness.
565
+
566
+ UI convergence remains the primary synchronization signal.
567
+
568
+ ---
569
+
570
+ ## 7.4 Focused Snapshot Scoping
571
+
572
+ Large hierarchies create latency and token-efficiency problems.
573
+
574
+ The protocol should support scoped synchronization.
575
+
576
+ Examples:
577
+
578
+ - subtree snapshots
579
+ - target-local snapshots
580
+ - focused diff regions
581
+
582
+ ### Goals
583
+
584
+ - reduce payload size
585
+ - reduce reasoning complexity
586
+ - improve synchronization latency
587
+ - improve Compose hierarchy handling
588
+
589
+ ---
590
+
591
+ ## 7.5 Incremental Snapshot Delivery
592
+
593
+ The protocol should support incremental hierarchy updates.
594
+
595
+ Example capabilities:
596
+
597
+ - structural diffs
598
+ - subtree invalidation
599
+ - partial hierarchy refreshes
600
+ - revision patch delivery
601
+
602
+ ### Dependency
603
+
604
+ Incremental synchronization depends on stable element identity semantics.
605
+
606
+ This capability therefore depends on the richer element identity RFC.
607
+
608
+ ---
609
+
610
+ # 8. Synchronization Lifecycle Model
611
+
612
+ Synchronization should follow a consistent lifecycle.
613
+
614
+ ```text
615
+ Action Executed
616
+
617
+ Transient UI Mutation
618
+
619
+ Hierarchy Revision Changes
620
+
621
+ Optional Loading State
622
+
623
+ Convergence Detection
624
+
625
+ Stable Snapshot Available
626
+
627
+ Verification Phase
628
+ ```
629
+
630
+ This lifecycle is intended to standardize synchronization expectations across tools and agents.
631
+
632
+ ---
633
+
634
+ # 9. Agent Guidance and Guardrails
635
+
636
+ ## Preferred Flow
637
+
638
+ ```text
639
+ perform_action
640
+ → wait_for_ui_change
641
+ → verify_expected_state
642
+ ```
643
+
644
+ ---
645
+
646
+ ## Avoid
647
+
648
+ ```text
649
+ perform_action
650
+ → immediate_follow_up_action
651
+ ```
652
+
653
+ ---
654
+
655
+ ## Network and Log Signals
656
+
657
+ Network activity and logs may be used for diagnostics.
658
+
659
+ They should not be treated as primary synchronization signals unless explicitly required for a workflow.
660
+
661
+ ---
662
+
663
+ ## Retry Behavior
664
+
665
+ Retries should occur only after:
666
+
667
+ - synchronization failure
668
+ - verification failure
669
+ - explicit timeout
670
+
671
+ Retries should not replace synchronization primitives.
672
+
673
+ ---
674
+
675
+ # 10. Failure Modes
676
+
677
+ ## Infinite Animations
678
+
679
+ Continuous animations may prevent convergence.
680
+
681
+ Mitigation:
682
+
683
+ - scoped synchronization
684
+ - stabilization thresholds
685
+ - ignore-list heuristics
686
+
687
+ ---
688
+
689
+ ## Background Recomposition Churn
690
+
691
+ Compose and SwiftUI may produce frequent transient hierarchy mutations.
692
+
693
+ Mitigation:
694
+
695
+ - stabilization windows
696
+ - semantic diff filtering
697
+ - subtree scoping
698
+
699
+ ---
700
+
701
+ ## Ephemeral UI Elements
702
+
703
+ Examples:
704
+
705
+ - toasts
706
+ - snackbars
707
+ - temporary overlays
708
+
709
+ Mitigation:
710
+
711
+ - bounded stabilization windows
712
+ - semantic significance filtering
713
+
714
+ ---
715
+
716
+ ## Delayed Navigation Transitions
717
+
718
+ Navigation may begin after asynchronous work.
719
+
720
+ Mitigation:
721
+
722
+ - longer synchronization windows
723
+ - explicit verification after wait completion
724
+
725
+ ---
726
+
727
+ ## Stale Cached Snapshots
728
+
729
+ Agents may reason against outdated hierarchy state.
730
+
731
+ Mitigation:
732
+
733
+ - explicit revision metadata
734
+ - freshness checks
735
+ - revision-aware synchronization
736
+
737
+ ---
738
+
739
+ # 11. Platform Considerations
740
+
741
+ ## Android Views
742
+
743
+ Traditional view hierarchies are comparatively stable but may still experience delayed transitions and asynchronous rendering.
744
+
745
+ ---
746
+
747
+ ## Jetpack Compose
748
+
749
+ Compose introduces:
750
+
751
+ - recomposition churn
752
+ - transient hierarchy instability
753
+ - frequent semantic tree mutation
754
+
755
+ Compose synchronization should prefer:
756
+
757
+ - semantic stability
758
+ - subtree scoping
759
+ - stabilization windows
760
+
761
+ ---
762
+
763
+ ## UIKit
764
+
765
+ UIKit transitions are generally deterministic but may include animation timing gaps.
766
+
767
+ Synchronization should prioritize observable hierarchy completion rather than transition timing assumptions.
768
+
769
+ ---
770
+
771
+ ## SwiftUI
772
+
773
+ SwiftUI shares several synchronization challenges with Compose:
774
+
775
+ - transient updates
776
+ - declarative rendering churn
777
+ - delayed state propagation
778
+
779
+ Stabilization windows are especially important.
780
+
781
+ ---
782
+
783
+ # 12. Telemetry and Metrics
784
+
785
+ The implementation should track:
786
+
787
+ - synchronization success rate
788
+ - premature action reduction
789
+ - retry reduction rate
790
+ - stale snapshot detection frequency
791
+ - average stabilization duration
792
+ - hierarchy diff frequency
793
+ - synchronization timeout frequency
794
+
795
+ These metrics should be used to tune convergence heuristics.
796
+
797
+ ---
798
+
799
+ # 13. Rollout Strategy
800
+
801
+ ## Phase 1
802
+
803
+ Introduce:
804
+
805
+ - snapshot revision metadata
806
+ - basic wait_for_ui_change
807
+ - stabilization windows
808
+
809
+ ---
810
+
811
+ ## Phase 2
812
+
813
+ Introduce:
814
+
815
+ - loading state detection
816
+ - convergence heuristics
817
+ - scoped synchronization
818
+
819
+ ---
820
+
821
+ ## Phase 3
822
+
823
+ Introduce:
824
+
825
+ - incremental snapshot delivery
826
+ - diff-based synchronization
827
+ - subtree invalidation
828
+
829
+ ---
830
+
831
+ ## Phase 4
832
+
833
+ Introduce:
834
+
835
+ - advanced convergence tuning
836
+ - platform-specific optimization
837
+ - adaptive stabilization heuristics
838
+
839
+ ---
840
+
841
+ # 14. Design Closure
842
+
843
+ This specification is fully defined and implementation-ready.
844
+
845
+ All previously listed open questions have been resolved within normative sections 7.x and 7.1.1.
846
+
847
+ No runtime behavior is delegated to interpretation.
848
+
849
+ Future changes require a new RFC or explicit versioned amendment.
850
+
851
+ The following areas are fully specified:
852
+
853
+ - implicit vs explicit execution model (explicit only)
854
+ - mutation classification (normative rules defined in 7.1)
855
+ - stabilization semantics (7.1.1)
856
+ - diff semantics (structural + semantic accessibility only)
857
+ - default synchronization scope (screen)
858
+
859
+ # 15. Dependencies
860
+
861
+ ## Depends On
862
+
863
+ - Stronger State Verification
864
+ - Richer Element Identity
865
+
866
+ ---
867
+
868
+ ## Strengthens
869
+
870
+ - Actionability Resolution
871
+ - Compose and Custom Control Semantics
872
+ - Incremental Snapshot Systems
873
+ - Advanced Trace Correlation
874
+ - Retry Reduction Initiatives
875
+
876
+ ---
877
+
878
+ # 16. Conclusion
879
+
880
+ Reliable synchronization is foundational to deterministic mobile automation.
881
+
882
+ This RFC introduces explicit synchronization semantics that:
883
+
884
+ - reduce premature execution
885
+ - improve snapshot freshness awareness
886
+ - provide deterministic convergence behavior
887
+ - establish consistent sequencing expectations
888
+ - create a foundation for incremental synchronization capabilities
889
+
890
+ These changes are intended to improve reliability, reduce retries, and make agent behavior substantially more predictable across asynchronous mobile UI frameworks.