`merlin >= 4.14-502~preview -> ocaml < 5.3` conflicts with everything?

I’m just starting out (no serious projects yet), so my current refresh procedure is opam update followed by opam upgrade -y --update--invariant $(opam list -s --roots). Said roots are currently core, merlin, utop, ocamlformat, ocaml – I removed ocaml-base-compiler from the default because it conflicted with ocaml every time (it gets pulled in anyway, I figured). Anyways, today I encountered a problem I did not encounter yesterday:

[ERROR] Package conflict!
  * No agreement on the version of ocaml:
    - ocaml >= 5.3.0
    - merlin >= 4.14-502~preview → ocaml < 5.3
  * Missing dependency:
    - merlin >= 4.14-502~preview → ocaml < 5.3 → ocaml-base-compiler < 3.07+1 |
      ocaml-system < 3.07+1 | ocaml-variants < 3.8~
    unmet availability conditions: 'arch != "arm64" & arch != "arm32" & arch
      != "ppc64"'
    unmet availability conditions: 'sys-ocaml-version = "3.07"'
    no matching version
  * Missing dependency:
    - merlin >= 4.14-502~preview → ocaml < 5.3 → ocaml-base-compiler = 3.07+1 |
      ocaml-system = 3.07+1 | ocaml-variants < 3.8~
    unmet availability conditions: 'arch != "arm64" & arch != "arm32" & arch
      != "ppc64"'
    unmet availability conditions: 'sys-ocaml-version = "3.07+1"'
    no matching version

And it continues for multiple screens.

Near as I can figure, the issue is that opam wants to install a preview version of Merlin for some reason, which looking into it expects ocaml version exactly 5.2, whereas ocaml wants to upgrade to 5.3 (which I wasn’t aware was even out). Then it exhaustively tries every compiler version compatible with 5.3, none of which compile for my system (why is that even shown?).

So, my questions: why is there so much output? How do I stop opam installing previews? Is there really a 5.3 out already or is that another preview? Why is this happening now when I heard there was a PR two years ago that should have fixed it?

I’m on an M3 MacBook Air running macOS Sonoma. My OPAM is from Brew.

followed by opam upgrade -y --update--invariant $(opam list -s --roots)

where did you see this refresh procedure from? What are you trying to do?

Trial and error, trying to get the most recent compatible versions of all packages in one step. I figure, nothing I’m making now needs to be stable, and new versions tend to fix weirdness which will trip me up heavily at this stage.

Today, a transitive dependency of core expects ocaml earlier than 5.1. It keeps getting stranger.

Having now uninstalled and reinstalled everything, I understand the problem: not everything is updated in lockstep, so getting everything mutually compatible sometimes requires stepping things back a bit. It makes sense now I’m thinking about it.