Okay, but nothing actually stops me from writing:

    syntax Foo ::= Bar "*" Bar [klabel(Foo)]
    syntax Foo ::= Bar "*" [klabel(Foo)]

right now, does it? Because unless that's a compiler error if I try to do that with a nice error message saying all KLabels must have the same arity, then this is still a problem. Now maybe having that nice compiler error is the way to go, I don't know. But it still needs to be enforced, otherwise it's a latent bug.