Ok, I think I understand this now, and will attempt to prove it by trying to explain it in simple language.
Macro.xnyXML permits any text or XML content, apart from anything in the TEI or TEI Examples namespaces. By permitting anything, it implicitly defines @xml:id with whatever content you’d like. If your ODD adds a new element (say, e.g. foo:bar, @xmlns:foo="http://example.com http://example.com/"), and that element is allowed to have @xml:id, then there is an extra definition of @xml:id on <foo>, because macro.anyXML would permit, e.g.
<xenoData>
</xenoData>
and that would be just fine, except @xml:id is defined as an ID on foo:bar, so there’s a conflict. This didn’t flag up any tests before, because macro.anyXML only showed up in tagdocs. But now it’s in tei, and so it’s much, much easier to make an ODD that does this, and we accidentally did make a couple.
So the solution, well, "a" solution is for any ODD that adds new namespaces and allows @xml:id on their elements to also exclude that namespace from macro.anyXML. Then it’s no longer implicitly defining a non-ID @xml:id for foo:bar. There might be some clever way of doing this automatically in the Stylesheets ODD processing, I suppose. Other solutions occur to me, but they aren’t very palatable.
Something like:
<macroSpec xmlns="http://www.tei-c.org/ns/1.0" type="pe" ident="macro.anyXML" module="tei"
mode="replace">
<desc versionDate="2008-09-05" xml:lang="en">defines a content model within which any XML
elements are permitted</desc>
<desc versionDate="2009-07-16" xml:lang="fr">définit un modèle de contenu dans lequel tous
les éléments XML sont autorisés.</desc>
<content>
<element xmlns="http://relaxng.org/ns/structure/1.0">
<anyName>
<except>
<nsName ns="http://www.tei-c.org/ns/1.0"/>
<nsName ns="http://www.oucs.ox.ac.uk/ns"/>
<name ns="http://www.tei-c.org/ns/Examples">egXML</name>
</except>
</anyName>
<zeroOrMore>
<attribute>
<anyName/>
</attribute>
</zeroOrMore>
<zeroOrMore>
<choice>
<text/>
<ref name="macro.anyXML"/>
</choice>
</zeroOrMore>
</element>
</content>
</macroSpec>
added to https://github.com/TEIC/Stylesheets/blob/master/Test/test30.odd https://github.com/TEIC/Stylesheets/blob/master/Test/test30.odd, which is the Stylesheets test that was giving me headaches (note https://github.com/TEIC/Stylesheets/blob/master/Test/test30.odd#L94 https://github.com/TEIC/Stylesheets/blob/master/Test/test30.odd#L94), fixes the validation error. I don’t think there’s a general solution, but at least we can tell people how to deal with it if it pops up in their ODDs.