cx-zloqa: release New Tab split key hold on async refusal
When a New Tab split's asynchronous tab creation is refused, the incoming key hold now ends immediately instead of waiting four seconds for its timeout. The split's existing synchronous refusal and move-failure paths remain unchanged.
Changelog
- Fixed: release the New Tab split key hold when asynchronous tab creation fails.
Verification
python3 scripts/verify-local.py --only swift-syntax --swift-changedgit diff --check- Native visible change: keys typed after a refused New Tab split continue immediately instead of waiting on a stale hold.
- No practical boundary harness currently injects an asynchronous tab-creation refusal; hosted cmux-next checks provide the compile and behavior gate.
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
When a New Tab split's async tab creation is refused or cancelled, the keys typed after the split now go on immediately instead of waiting out the incoming hold's four-second limit. Synchronous refusal and move-failure paths are unchanged.
The fix is applied on the feat-cmux-next base, which restructured both files. A single release path now covers refused, cancelled, and unstarted pages, cancelling the split's sizing and ending the hold for all three. A test drives NewTabPage.split with a creation that fails asynchronously, covering both refusal and cancellation; it fails on the base.