Skip to content

docs(mobile): G2 evidence — T054/T055 proven, T056 3/5 drills green - #1827

Draft
h4yfans wants to merge 3 commits into
mainfrom
mobile-g2-evidence
Draft

docs(mobile): G2 evidence — T054/T055 proven, T056 3/5 drills green#1827
h4yfans wants to merge 3 commits into
mainfrom
mobile-g2-evidence

Conversation

@h4yfans

@h4yfans h4yfans commented Aug 24, 2026

Copy link
Copy Markdown
Collaborator

What

  • T054 → [x]: device proof (iPhone 12 Pro: conformance 26/26 + round-trip 6/6, 2026-08-24 21:07) + simulator closure run after the full fix chain (22:50 — bulk ladder applied, nothing stuck, list complete).
  • T055 → [x]: Maestro us1-unlock-browse.yaml green on the iPhone 17 Pro simulator (2026-08-25 01:44) — stored session short-circuits sign-in/unlock as designed, browse→open-note asserted. One flow fix: the note body sets accessibilityLabel="Note content" (no testID), so the final assert matches the label instead of id:.
  • T056 → 3/5 annotated: kill-switch ✓ (staging client_policies flip → Read-only banner on next bg→fg, no restart; clears on re-enable), version-gate ✓ (99.0.0 floor → update banner → clears on NULL), attribution ✓ (staging D1: zero ios write rows across sync_items/crdt_* — US1 pull-only proven).
  • G2 checkpoint block refreshed: remaining items are the final phone pass after fix(mobile): note_bodies.path is not unique — a title collision no longer kills the apply batch #1826, the <5 s visibility drill (owner call on trigger path), and SC-004 (owner call on seeding the 10k vault).

Verification

Staging client_policies restored to writes_enabled=1, min_write_version=NULL after the drills (verified by query). Screenshots + attribution JSON captured in the session.

🤖 Generated with Claude Code

T055 Maestro flow green on simulator; the final assert now matches the
note body's accessibilityLabel (the component sets no testID).
tasks.md: T054/T055 checked with evidence, T056 annotated with the
kill-switch/version-gate/attribution proofs, G2 checkpoint block updated
to the remaining three owner items.
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Aug 24, 2026
@codecov

codecov Bot commented Aug 24, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Body-only desktop edits never touch the record row (update pushes send
content: null and body saves do not enqueue a record push at all), so a
pull driven purely by changedNoteIds never re-fetches a changed body —
desktop peers only see them because desktop probes every note's CRDT
sequence each pass. Mirror that: each incremental pass probes the
first-sync 30-day recent window in the shared batch call; unchanged notes
cost one cursor echo, older bodies stay on-demand (T048).

Proven on simulator against staging: a typed desktop edit now lands in
note_bodies where it previously never arrived.
An open app never re-pulled: the only triggers were foreground
transitions, online transitions, and the BG task, so a desktop edit
stayed invisible until the next app switch (measured: uniform ~43 s in
the G2 drill, set entirely by the second glance). While the app is
active a 5 s poll now runs an incremental pass; the engine's exclusive
queue coalesces overlaps and an empty pass is one cursor echo.

The recent-window body sweep gets a 30 s floor so the poll does not
multiply CRDT probes — desktop only pushes CRDT state on its 30 s
snapshot scheduler, so probing faster cannot observe anything new.
@h4yfans

h4yfans commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator Author

Two mobile sync fixes landed on this branch during the T056 drills (both proven on simulator against staging):

  1. Body edits were invisible to mobile — the record feed never carries body changes (updates push content: null; body saves do not touch the record row), and the pull engine fetched CRDT bodies only for changedNoteIds. Desktop peers see body edits because desktop probes every note's CRDT sequence each pass. Mobile now probes the 30-day recent window each pass (30 s floor), mirroring desktop; older bodies stay on-demand.
  2. An open app never re-pulled — the only triggers were fg/online transitions and the BG task, so visibility of a desktop edit was set by the next app switch (uniform ~43 s in the drill). A 5 s foreground poll now runs while the app is active.

20-trial drill results (desktop → staging → simulator, app foreground): 0 misses; body median 32.2 s / p95 34.0 s; metadata median 28.1 s / p95 33.1 s (best trial 7.9 s). The floor is set by the DESKTOP push side: PushCoordinator drains the outbox and CRDT state on 30-second cycles (CrdtSnapshotScheduler + push cycle), so <5 s end-to-end is not reachable for any edit type without making desktop pushes event-driven — flagging that as an owner decision (Phase 4 write-path work is the natural home).

🤖 Generated with Claude Code

@github-actions

Copy link
Copy Markdown

React Doctor found no new issues. 🎉

Reviewed by React Doctor for commit 92090b1.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant