carry of #27994: guard Cloud Ports actions while pending
Carry of #27994: guard Cloud Ports actions while pending. This branch merges current feat-cmux-next and carries the original purpose and authorship while repairing the stale in-flight response overwrite.
Original PR: https://github.com/manaflow-ai/cmux/pull/27994
Validation: 27 port-action tests pass at 49a949d9a6a13cb746c620aa19b77b328ec3103d (run). They cover delayed replies, selection changes, and a detail load still waiting for snapshots after a port mutation completes.
No capture: the pending-state gallery fixture is included, but no running app capture was available for this carry. Deferred-response tests verify the asynchronous state transitions.
Agent session: agent session
![View with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v3-3x.png)
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Carries #27994: guards Cloud Ports actions while pending and prevents stale in-flight responses from overwriting newer state, adapted onto feat-cmux-next.
- Forward, close, and browser actions lock per port so overlapping requests can't run concurrently; actions stay pending and disabled in the UI until the host call and any reconciliation finish.
- Completed port mutations are tracked by revision, so a detail load or section reload can't replace a newer port list with a stale one.
- Guard and pending state survive detail loads, reloads, and machine selection changes; late responses from an old session can't release a new session's lock, and mutations parked on another machine reconcile the current machine's ports on return.
- Adds a pending variant to the Cloud gallery fixture and unit tests for action locking, coalescing, failure recovery, stale responses, parked mutations, and stale loads.