Summary
- preserve
BridgeError.Busywhen iOS narrows a handler's inferred error set - centralize the existing handler-error narrowing so pool-refusal tests exercise the same conversion as dispatch
- add a dispatcher-level regression assertion proving
BUSYreaches the page rather than becomingNATIVE_CALL_FAILED
Closes #242.
Follow-up to #267: its enum and 27 production refusal paths were correct, but ios_dispatch.asBridgeError did not recognize the new variant and collapsed it through the catch-all.
Fail-first proof
With only the dispatcher assertion added, zig build test:ios failed exactly as expected:
expected error.Busy, found error.NativeCallFailedVerification
zig fmt --check src/bridge_error.zig src/ios_dispatch.zig src/bridge_mobile_imagepicker.zigzig build test:ios --summary all(9/9 steps; 1,217 pass, 12 skip)- normal SDK gate on current main before this patch: 566 pass, 0 fail