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+9-0
Changes to packages/ios/fixtures/native-navigation/NativeNavigationUnitTests.swift
@@ -435,6 +435,15 @@ final class NativeNavigationUnitTests: XCTestCase {
435435 await renderFrames()
436436 XCTAssertEqual(CraftChrome.shared.selected, "/")
437437 XCTAssertEqual(CraftChrome.shared.tabAccessory?.id, "/capabilities")
438
439 let background = try XCTUnwrap(stack("/details"))
440 XCTAssertTrue(background.view.isHidden)
441 let prepared = try XCTUnwrap(background.topViewController as? CraftNativeScreenController)
442 // UIKit can deliver the prepared tab's first appearance after the
443 // foreground push has finished. That callback must not claim chrome.
444 prepared.viewDidAppear(false)
445 XCTAssertEqual(CraftChrome.shared.tabAccessory?.id, "/capabilities")
446 XCTAssertEqual(CraftChrome.shared.selected, "/")
438447 }
439448
440449 func testDisappearingHiddenNativeTabCannotClearTheVisibleAccessory() async throws {