we should transform the 21st arity into a var args signature
Unless misunderstanding, can't do that. Var args sigs aren't allowed in protocols.
we should not allow arities above 21 args
Emitting an analyzer warning is what you want?
I believe I hit this problem in my code using core.async.
If it is not possible to implement ATM, I would kindly ask for a compiler warning at least. This thing manifested as a infinite recursive loop ending up in a cryptic stack overflow.