Any API may fail in some way, but that would be ridiculous to pollute the whole Wine source tree with asserts. As I've said, IMO it's better to have a test case for the API which will detect broken behaviour instead.
I agree that we shouldn't have asserts across DLLs. While we may "know" that the behavior is consistent, we may change the implementation of another DLL at some point, and it's more difficult to discover cross-DLL dependencies like this than those within one DLL. I think Dmitry's right that test cases for the API are a better way to ensure an API will behave in a particular way. asserts are better to ensure consistency within one module, IMO. --Juan