Previously when we've added functions to the listener protocols this results in breaking of consumers that implement them. This is annoying because many listeners only actually need meaningful implementations of a small number of these functions, and the rest of the functions shouldn't actually do anything beyond returning the existing value of the listener. The listener used for tracking fact insertions in all cases, including unconditional assertions, for inspection is a good example of this. Perhaps we could create a new macro that creates an implementation of a protocol, but supplies the implementation of just returning the listener for function implementations that are not specified.