revert_on_failure=False swallows a failed call
By default a raw_call reverts when the callee reverts. Setting revert_on_failure=False turns that into a returned success flag instead — and when the statement binds no variable, a failed call and a successful one become indistinguishable at the call site. The transaction continues down a path that assumes value moved while nothing did. Solidity reaches the same place through a discarded boolean, but the spelling is different enough that it needs its own rule.
@external
def settle(user: address, amount: uint256):
# a revert inside the callee never reaches this contract
raw_call(self.token, method_id("transfer(address,uint256)"),
args=[user, amount], revert_on_failure=False)
self.owed[user] -= amount