Not all rules documented in manuals are possible, easy, or economically smart to automate, we try hard, but still impossible to reach perfection. In this case:
sol(hack): #0 root-me, network-bluetooth-file ...
sol(hack): #0 network-bluetooth-file, root-me ...
That’s why we do manual peer review per change. Automation helps but is not infallible.
Regarding your example, the format is
site, challenge, not
challenge, site. The case that you are referring to is OK (lord-of-sqli is a site), yours not (bluetooth-… is not a site, is root-me).
If you look in the parser combinator, from the parser POV, both are just strings. We don’t know in advance all the sites or challenges names. We only enforce some canonicalization.