I find API of `satisfies` function very confusing it either returns true or throws exception. It's specially hard to predict that if clause will throw. Could you please avoid throwing from conditionals ? Maybe return `null`  if compatible and `error` if isn't which you can later throw if that is a case, something like:

```js
error = incompatibility(module) || error
if (error) throw error
```