test(ios): isolate smoke contracts and synchronize observable state

Merged
TH
2d ago
+531-176

Summary

Give iOS smoke distinct sessions, declared starting states, and independent subtests. Use one built CLI and fixture controls for depth/WebView setup. Keep deep-link delivery and exact confirmation handling separate; readable misses remain fatal.

Masked XCTests require app-observed complete-suffix delivery and zero toggle presses. Readable fields retain exact replacement and dropped-clear checks. Cleanup captures exhaustion evidence without reissuing commands or losing typed already-clean handling. The prompt test now requires the intended AssertionError.

Scope: 22 files across iOS tests/fixtures, workflow, shared failure recording, and authoring guidance. Rebased onto 6e8c2a046c; preserved upstream documentation. Detailed evidence.

Validation

  • Review-fix source 360ae21bfb: focused 32/32; independent review passed. Prompt mutation: old test 1 false pass, new matcher 1 failure, repaired 1 pass.
  • Historical harness source 316052ba2e: simulator 22/22, 102s, no skips; iPhone 17 Pro/iOS27.0, current Release fixture. Sessions/daemon cleaned; keyboard preference restored. Prior focused suite 49/49; revised native tests 5/5.
  • Original native 92db564a30: masked pair 1 failure/1 pass. Cleanup base 5c7efc83ea: 1 failure → patched 1 pass.
  • pnpm check:affected --run --head HEAD passed at 1067255afada175396fbbf98db710f80938f9d14, exactCommit=true, receipt run-U6l3D6.

CI at 1067255af completed without failures, including iOS 26.2/macOS smoke, Integration Tests, and Coverage. The fixture-build matrix was skipped; Cubic was neutral.