Elaboration circularity detected

Sure, but you can’t compile separately the declaration part and begin part of a declare block, so it’s not totally symmetrical.
I just wonder what solution the compiler finds automatically with -gnatE, and how I could provide that same elaboration order manually.

I don’t think it’s a problem of your elaboration model.
At least the warning of—

— is merely saying that the two are being used in the same program. (Typically it’s from withing a library. / The solution is to compile in the other mode, or else recompile the library in the mode you’re using.)

I mean, of course you can force it with the elaborate pragmas; I’m not sure that this is worth it though. (This does however raise the possibility of a debug-option for generating a log for elaboration, at-compile for static and after a run for dynamic.)