This is an intentional feature!
The difference is that with the Scala-based FIRRTL Compiler (SFC), the WiringAnnotations are converted to connections and ports during the middle of the pass pipeline. Initialization checking happens pretty early during the "ExpandWhens" pass. Initialization checking doesn't know about WiringAnnotations so it errors out.
With CIRCT (the MLIR-based FIRRTL Compiler (MFC)), the WiringAnnotations are converted to connections immediately after parsing. When initialization checking happens (also in an "ExpandWhens" pass) everything has already been hooked up.