4. Pool exhaustion - explicit error
- Add NoAvailablePoolError exception class
- find_available_pool() now raises instead of returning None
- haproxy_add_domain() catches and returns user-friendly error
5. haproxy_add_server - disk-first pattern
- Save to config FIRST, then update HAProxy
- If HAProxy update fails, rollback config automatically
- Prevents inconsistency between disk and runtime
6. Wildcard removal - log failures
- Changed silent pass to logger.warning()
- Failures now visible in logs for debugging
- Does not block domain removal operation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>