fix(ios): end a bridge creation that outlives the snapshot source close
Summary
SnapshotBridgeManager.close() now adopts in-flight request turns and bridge creation, interrupts refused work, and waits for cleanup. A creation cannot publish a helper after close has collected its sessions.
The helper exit wait starts one diagnostic observer, then races raw status against the request's remaining delay, interrupted by close. Status precedence, typed cancellation, and deadline bounds are preserved. Late status still records the crash after close, timeout, or cancellation. Close's dispose map is simplified. Two files; no scope expansion or shared helpers. Tracked as SM-7.
Validation
Head 893e41ac957f01306fb8a7f7d34308404ec3dac2; reviewed base c62f0c8d62bcfd4f4720d8edf61bcca5aecbf8ff.
Cancellation regression: base loses the late diagnostic (1 failed, 1 passed, 24 skipped); head lifecycle file 26 passed, including the exact bridge-request-deadline assertion.
pnpm format and build pass. pnpm check:affected --run --head 893e41ac957f01306fb8a7f7d34308404ec3dac2 is base-blocked: six stages pass; related tests report 301 passed, 1 failed. The provider output guard's fake record exceeds 20s. Identical focused commands on unchanged base and head each produce 2 passed, 1 failed. Receipt .tmp/validation/run-TnEc9k/receipt.json: exactCommit=true, checkoutChanged=false. Unit and remaining integration stages were not run. CI owns coverage/device lanes. Draft pending the recording-guard blocker.
Live at this head: local iOS 26.2 simulator CAE86E90-9D1D-42A4-B020-179F0FE092DE; private state directory; Settings open, snapshot -i returns 18 nodes through the bridge, close and graceful daemon stop succeed; no owned bridge remains. Failure interleavings are covered by unit tests.