Skip to content
Latchkey

CircleCI Approval Job Errors - Fix type: approval Gates

A manual approval gate is misconfigured - it has steps it should not, nothing depends on it, or it is not wired into the workflow. Approval jobs are special workflow-only placeholders, and the rules differ from normal jobs.

What this error means

Validation rejects the approval job, or the gate never blocks the pipeline - downstream jobs run without waiting for approval. The hold you expected does not appear because the approval job is not wired correctly.

CircleCI UI
Config is invalid:
  - job 'hold': type 'approval' jobs cannot define 'steps' or an executor
  - workflow 'deploy': nothing requires the approval job 'hold'

Common causes

Approval job defined with steps/executor

A type: approval job is a placeholder in the workflow - it must not have steps, docker, or an executor. Giving it any fails validation.

Nothing requires the approval

The gate only matters if downstream jobs requires: it. Without that edge, the approval is ignored and later jobs run immediately.

Approval declared as a top-level job

Approval jobs live only inside a workflow’s jobs: list, not under the top-level jobs: map. Declaring it there is invalid.

How to fix it

Define the approval inline and gate downstream jobs

.circleci/config.yml
workflows:
  deploy:
    jobs:
      - build
      - hold:
          type: approval
          requires: [build]
      - deploy:
          requires: [hold]   # waits for manual approval

Keep approval jobs as bare placeholders

  1. Declare type: approval only inside the workflow’s jobs: list.
  2. Do not give it steps, docker, machine, or an executor.
  3. Make every job that must wait requires: the approval job.

How to prevent it

  • Define approval jobs inline in the workflow, never as top-level jobs.
  • Always wire downstream jobs to requires: the approval.
  • Keep approval jobs free of steps and executors.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →