Very happy to be using protocols. One small note, in the documentation here:
https://mypy.readthedocs.io/en/stable/protocols.html#callback-protocols
Keyword argument names in __call__ methods must be identical, unless a double underscore prefix is used
Really, I think this should say "Arguments" and not "Keyword" arguments. Unless I'm missing something, this applies to all argument names, not just keyword ones.