This required a few changes in the grammar describing descriptor templates: the single symbol KP is no longer enough to cleanly represent the syntax. Therefore, it’s now replaced by a more fine-grained symbol hierarchy:
KEY, mapping 1-on-1 toKEYexpressions of descriptorsKP, key placeholders, that represent a single root key, or an aggregate musig key; regardless of the nature of the key, key placeholders are what is followed by/**or/<M;N>/*.KI, key index, the actual “pointer” to the key information vector.
While the validity checks to avoid pubkey reuse before this change were feasible by looking at all the @i expressions in the descriptor template, they are now at the level of the KEY expressions, by comparing their key placeholders.
This means that the specs do not prevent having @i somewhere and musig(@i,...) elsewhere (which does not cause pubkey reuse in the actual scripts).
Note that there is no breaking change with the previous specs, just more fine-grained grammar in order to keep everything working in the presence of musig.