ReviewOS

also looking at this

craft-native/craft

feat: finish native customization and platform seams

#401
Merged glennmichael123 wants to merge codex/issues-388-400-344 into main
21 files +707 -17

Review threads live on the whole diff, not on one commit, so none are shown here - a thread's line means something in the branch's final form, and painting it into an intermediate step would put it on code it is not about.

packages/zig/test/ios_conformance_test.zigmodified+5-7
Changes to packages/zig/test/ios_conformance_test.zig
@@ -201,12 +201,10 @@ const dispatch_end = "func webView(";
201201/// and HKLiveWorkoutBuilder are owned by CraftHealth.swift, including their
202202/// delegate callbacks and iOS 26 availability; the actions remain on the
203203/// Swift shim until the Zig bridge has an equivalent lifecycle channel.
204/// 59 when the spec gained getHealthSamples: glucose, insulin and carbs one
205/// sample at a time (bloodGlucose, insulinDelivery, dietaryCarbohydrates), an
206/// HKSampleQuery in CraftHealth.swift like the other health reads. It went
207/// into Swift first and falls through to the shim, which serves it. Not a
208/// regression: no action left Zig.
209const max_not_yet_migrated: usize = 59;
204/// 60 when native screens gained setAppearance and getAppearance. They update
205/// the app-wide UIKit style and remain on the Swift side until Zig owns that
206/// lifecycle as well; no existing Zig action was removed.
207const max_not_yet_migrated: usize = 60;
210208
211209fn dispatcherRegion() []const u8 {
212210 // CraftApp.swift also contains chrome, console and bridge-relay handlers.
@@ -1131,7 +1129,7 @@ test "Zig validates every field of the nested types Swift decodes, the way Swift
11311129 };
11321130
11331131 var expected_buf: [256]u8 = undefined;
1134 const expected = try std.fmt.bufPrint(&expected_buf, ".{{ .name = \"{s}\", .kind = .{s}, .required = {s}", .{
1132 const expected = try std.fmt.bufPrint(&expected_buf, ".{{ .name = \"{s}\", .kind = .{s}, .required = {s} }},", .{
11351133 member.name, kind, if (optional) "false" else "true",
11361134 });
11371135 if (std.mem.indexOf(u8, zig_fields, expected) == null) {