Gitlab-ci rules for manual job only on merge requests

I am finding it difficult to restrict a stage to only run on MR and be manual

I have the following rules

    rules:
        - when: manual
        - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
        - if: '$CI_COMMIT_BRANCH'
          when: never

but this stage is still running under branches, i do not want it to run on any branch, only on MR

it is literally driving me crazy. Code shows what should happen but it just does not follow it

So what am I missing?