Loop guardrails are the least glamorous item on that list and the one I would ship first, because an agent that retries a failing step is not an error condition anywhere in the stack - it is a successful request repeated until someone notices the bill. Failures that look like normal traffic are the ones no monitoring catches by default. On failover, the caveat worth being explicit about is that swapping providers mid-run is not transparent: output shape, refusal behaviour and tool-call formatting all shift, so a run that fails over can complete and produce something downstream cannot parse. Zero-drop at the transport layer is necessary but the contract still has to hold, which usually means validating the response against a schema on both paths rather than trusting either.