Can parallel tool calls break if one depends on the other running first?
Yes. Calling tools one after another enforces an ordering nobody had to write down: if tool B’s logic assumes tool A already ran, sequence satisfies that assumption automatically. Calling the same two tools in parallel removes the guarantee. If A creates a record B expects to already exist, and both fire at once, B can execute before A has committed, and it acts on stale or missing state instead of the input it was written for.
Nothing raises an exception. The agent gets a result back from each call, treats both as normal, and moves on with the mismatch buried in whatever B actually returned. The dependency was never explicit in the tool definitions the model sees or in the runtime that dispatches the calls, so nothing was in a position to catch it. The fix is making the ordering explicit again: run dependent tools in sequence, or have the dependent one check its precondition instead of assuming it.