Manual DAG pipeline is considered as blocked instead of succesful

We have a optional Terraform CI task which should run only on master or when the Terraform directory changes. Otherwise it should be manual:

.Terraform/plan:
  stage: terraform-plan
  needs: []
  script:
    - terraform --version
    - ...
  rules:
    # plan will be built if the Terraform folder is changed
    - changes:
        - Terraform/*
      when: always
    # when building master branch
    - if: '$CI_COMMIT_BRANCH == "master"'
      when: always
    # otherwise build only manually
    - when: manual

However this has two flaws:

  1. Sometimes this job is run even though not on master and without the directory change. It is hard to debug to see which rule triggered the run.
  2. When the job is not triggered, it completely blocks the pipeline, even though it is to be run manually (see the pipeline blocked):

Can sb. point me in what I am doing wrong?

Try adding allow_failure: true to the job.

  rules:
    # plan will be built if the Terraform folder is changed
    - changes:
        - Terraform/*
      when: always
    # when building master branch
    - if: '$CI_COMMIT_BRANCH == "master"'
      when: always
    # otherwise build only manually
    - when: manual
  allow_failure: true