Careful with setof/3

Not in any comprehensive way. Most of the ISO incompatibilities are mentioned in the documentation, but surely not all of them. Notably SWI-Prolog typically does not care about the exact exception for exceptions that are normally only caused by a broken program. For example, the exceptions caused by e.g., open/4 may well be caught and handled by an application. Except for resource errors, exceptions raised by e.g., length/2 are caused by a buggy program and the only thing that matters is to give the programmer as good as possible feedback about what happened.

PEPs could be a good way to move forward. Currently our biggest problem are all the built-ins and libraries provided by the various systems that are not covered by ISO (despite all corner cases it seems pretty easy to write portable Prolog code as long as you do not need anything outside the ISO core standard). For that, I think the HTML/CSS/JavaScript docs that specify which browsers implement what since which version with additional notes on differences looks better to me. If we could bootstrap this by automatic conversion of existing documentation it might work.

Agree. Let us start by trying to make predicates compatible when called with valid arguments. IMO it is up to Prolog systems to help the user to debug programs. That could can be static analysis, runtime tools, etc. If I recall correctly, call((fail, 42)) must raise a type error on 42 not being callable according to ISO. That IMO makes no sense. It is fine if a system does this. It is also fine if it refuses to compile a clause holding this code and it is also fine if it silently fails.