Skip to content

Run every flow on Android and publish screenshots from both platforms - #56

Draft
arun279 wants to merge 27 commits into
feat/expo-nativefrom
ci/android-parity
Draft

arun279 wants to merge 27 commits into
feat/expo-nativefrom
ci/android-parity

Conversation

@arun279

@arun279 arun279 commented Sep 19, 2026

Copy link
Copy Markdown
Owner

+973 / -209, net +764

Product-Growth: Product code grows by 79 lines to provide Android modal, menu, safe-area, marker, and episode navigation behavior while removing five product comment lines.
Binary-Size: The Firebase tester APK is unchanged. The Play download estimate is +0.7 kB; the iOS and Android JavaScript bundles are +0.6 kB and +1.4 kB.

Final CI run: 35478285903. Wall time was 14 minutes 55 seconds, below the 15 minute target. The run is red: Android light expanded and focused Search but could not resolve the visible native placeholder, Android dark and iOS dark stayed on the episode sheet after the Close control was tapped, and iOS light detail lost its simulator transport during preparation. The corrected required aggregate failed because a required shard failed. All four authorized CI cycles were used, so no additional push or rerun was made.

Final job timings

Job Result Duration
actionlint passed 8s
audit passed 24s
check passed 3m 25s
fingerprint passed 26s
footprint passed 39s
native-android passed 1m 34s
native-ios passed 2m 45s
render-performance passed 2m 12s
standardrb passed 12s
android-e2e failed 4m 18s
ui-screenshots-android-dark failed 3m 33s
native-e2e-ios-light (detail) failed during simulator preparation 2m 55s
native-e2e-ios-light (discovery) passed 11m 19s
ui-screenshots-ios-dark failed 9m 8s
native-e2e aggregate failed as required 4s
CodeQL actions passed 43s
CodeQL javascript-typescript passed 1m 16s

Android defects found

  • Fixed: the Season 2 confirmation now presents as a Material modal bottom sheet. The Expo UI host had inline layout instead of an absolute full-window host with pass-through pointer events.
  • Fixed: Up Next rows no longer overlap after mutations. Reanimated layout transitions inside the virtualized queue and lapsed drawer left stale rows over settled content.
  • Fixed: the episode modal scrim covers and blocks the tab bar, and its snackbar clears system navigation. The route was owned by the tab navigator and the Android footer omitted the bottom safe inset.
  • Fixed: the unsupported Android startup threshold was removed. It came from an unrelated hosted software-rendered emulator; zero-ANR, four-tab, and response assertions remain.
  • Fixed: the Android app-idle marker is inside the visible hierarchy.
  • Fixed: the dark traversal returns to Up Next by relaunching into the persisted tab root. The generic navigation-up action exited the Android host.
  • Fixed: Library cards remain mounted and tappable. Expo UI's Android MenuView host dropped dynamic React Native children in the virtualized grid; Android now renders the child outside the host and opens an invisible native menu anchor imperatively on long press.
  • Fixed: the native Search toolbar action remains reachable after browse scrolling. The final evidence shows it expands and focuses the field with the keyboard visible.
  • Open: the Android Search flow still taps the visible placeholder after expansion. Maestro cannot resolve that native placeholder even though the field is focused, so text entry never starts.
  • Open: the episode Close control is visible and receives the automation tap, but router.dismiss() does not return to show detail on Android or iOS in the final run.

Other findings

  • Fixed: response-timing now uses the same one-point, accessible, non-collapsable Marker primitive and root placement rule as app-idle-timing. Run 35474602384 completed the marker copy and exposed Response timing: mark 28.6 ms, undo 43.8 ms in the accessibility evidence.
  • Fixed: the iOS light suite is split into detail and discovery workers on separate runners, and the required native-e2e check now runs with always() and fails when its required detail shard fails.
  • Open: final run 35478285903 did not exercise iOS detail because simulator preparation failed with a local transport connection reset before the flow started.
  • Open: no final green run or complete four-platform contact-sheet set exists. The final run produced partial Android light, Android dark, and iOS dark sheets plus a complete iOS light discovery shard.

Verification

  • Local pnpm check passes with 830 repository tests and 488 native Jest tests.
  • The final run passed all static, build, footprint, security, and iOS discovery jobs.
  • Workflow contract tests cover the split suites, required aggregate, screenshot artifacts, and pinned iOS artifact transfer.
  • The changed aggregate assertion and episode dismissal assertion were each mutation-tested by making the assertion wrong, observing the focused test fail, restoring it, and rerunning the focused tests.
  • Final Android light evidence confirms the toolbar Search action expands and focuses the native field.
  • The branch is merged with 2d54b39, clean, and pushed at 456b3d4.

…d-parity

# Conflicts:
#	scripts/verify-android-ui.sh
@github-actions

Copy link
Copy Markdown

Pull request footprint

measurement base to head
Product code lines in core/src, native/src, native/app, and native/modules +79
Test lines in test, tests, and e2e paths +70
Product comment lines identified by a comment prefix -5

User-delivered artifact sizes

measurement base head delta
Expo iOS JavaScript bundle, raw file 5.23 MB 5.23 MB +0.6 kB
Expo Android JavaScript bundle, raw file 5.26 MB 5.26 MB +1.4 kB
Firebase tester APK, arm64-v8a and all densities 41.21 MB 41.21 MB 0 B
Play download estimate, XXXHDPI arm64-v8a English Android 15 19.66 MB 19.66 MB +0.7 kB

@arun279

arun279 commented Sep 20, 2026

Copy link
Copy Markdown
Owner Author

Contact sheets from final authorized CI run 35478285903. The run completed in 14 minutes 55 seconds and is red. These sheets preserve the final evidence; captions identify where each flow stopped.

Android light, partial

The toolbar Search action expanded and focused the native field. The flow then stopped because Maestro could not resolve the visible placeholder.

Android light final partial contact sheet

Android dark, partial

The flow reached the episode screen, but the Close control did not return to show detail.

Android dark final partial contact sheet

iOS light discovery

The discovery shard completed. The detail shard failed during simulator preparation, so this is not a complete light-mode aggregate.

iOS light final discovery contact sheet

iOS dark, partial

The flow reached the episode screen and reproduced the Close navigation failure.

iOS dark final partial contact sheet

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant