31b974dfb7
Introduce HygieneTurnHoldExceeded exception so turn-hold budget expiry no longer collapses into the generic asyncio.TimeoutError handler. - Add HygieneTurnHoldExceeded exception (availability boundary, not a failure) - Add dedicated handler: stamps AGENT_COMPRESSION_TURNHOLD provenance, sends deferral notice, does NOT increment failure cooldown - Preserve #87011 contract: idle timeout still sends 'no output' message and takes failure path - Add behavior witnesses: turn-hold ≠ idle timeout, cooldown untouched Fixes semantic boundary collapse flagged in PR #90845 review.