ReviewOS

also looking at this

craft-native/craft

fix(native): retain keyed controls and correct map and tab chrome

#368
Merged chris wants to merge codex/native-repeated-selector-identity into main
32 files +449 -100

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/ios/fixtures/native-navigation/NativeNavigationUnitTests.swiftmodified+2-2
Changes to packages/ios/fixtures/native-navigation/NativeNavigationUnitTests.swift
@@ -420,7 +420,7 @@ final class NativeNavigationUnitTests: XCTestCase {
420420 }
421421
422422 func testNativePushKeepsItsAccessoryAfterTabPreparation() async throws {
423 await displayWait("the Details tab is prepared") { [self] in stack("/details") != nil }
423 await displayWait("the Third tab is prepared") { [self] in stack("/third") != nil }
424424 let home = try XCTUnwrap(stack("/"))
425425 let root = try XCTUnwrap(home.topViewController as? CraftNativeScreenController)
426426 func button(in view: UIView) -> UIButton? {
@@ -436,7 +436,7 @@ final class NativeNavigationUnitTests: XCTestCase {
436436 XCTAssertEqual(CraftChrome.shared.selected, "/")
437437 XCTAssertEqual(CraftChrome.shared.tabAccessory?.id, "/capabilities")
438438
439 let background = try XCTUnwrap(stack("/details"))
439 let background = try XCTUnwrap(stack("/third"))
440440 XCTAssertTrue(background.view.isHidden)
441441 let prepared = try XCTUnwrap(background.topViewController as? CraftNativeScreenController)
442442 // UIKit can deliver the prepared tab's first appearance after the