ReviewOS

also looking at this

craft-native/craft

feat(ios): scanNFC — the first migration with no blocker to expire, ratchet 25 → 24

#121
Merged glennmichael123 wants to merge feat/ios-scan-nfc into main
5 files +539 -1
packages/zig/test/ios_conformance_test.zigmodified+6-1
Changes to packages/zig/test/ios_conformance_test.zig
@@ -57,6 +57,7 @@ const zig_sources = [_][]const u8{
5757 @embedFile("src/bridge_mobile_audiorec.zig"),
5858 @embedFile("src/bridge_mobile_health.zig"),
5959 @embedFile("src/bridge_mobile_speech.zig"),
60 @embedFile("src/bridge_mobile_nfc.zig"),
6061};
6162
6263/// The action list lives in the `switch action` block, and nowhere else.
@@ -104,6 +105,10 @@ const dispatch_end = "func webView(";
104105/// preconditions and four blockers; the load-bearing one was the realtime
105106/// audio tap, which is the first callback in this migration that runs on a
106107/// thread where a lock is a bug rather than a slowdown.
108/// 24 with scanNFC, which had no recorded reason at all — not a deferral that
109/// expired, just an action nobody had reached. One framework, one guard, one
110/// small delegate; the four remaining like it are registerPush, scanQRCode and
111/// signInWithApple.
107112/// 25 with scheduleNotification. Its deferral was the first to expire on its
108113/// own: the blocker recorded in `bridge_mobile_notifications.zig` was that
109114/// `ios_async` could only resolve, so an action whose two failure paths are
@@ -111,7 +116,7 @@ const dispatch_end = "func webView(";
111116/// and `deliverErrorCode` landed the day after that was written. Worth
112117/// re-reading the other deferrals for the same reason before assuming they
113118/// still hold.
114const max_not_yet_migrated: usize = 25;
119const max_not_yet_migrated: usize = 24;
115120
116121fn dispatcherRegion() []const u8 {
117122 const begin = std.mem.indexOf(u8, swift_spec, dispatch_begin) orelse return "";