# X_RELEASE_HEAD_NOT_MAIN

## Means

`scripts/release-due.ts` refused to answer because HEAD is not the tip of `origin/main`

## Typical cause

two causes, one code, and the `cause` says which. `fetch`: `origin/main` is unreachable from HEAD — the fetch in `scripts/lib/base-ref.ts` failed and the script cannot tell what HEAD is anchored to. `mismatch`: `git rev-parse HEAD` and `git rev-parse origin/main` returned different SHAs — HEAD is on a side branch (or ahead of `origin/main`) and the answer a release-due consumer reads would be anchored to neither. The check compares `git rev-parse HEAD` to `git rev-parse origin/main` (the latter fetched first by `scripts/lib/base-ref.ts`) and refuses on any disagreement, running after the tag/window reachability tests so their codes keep their meaning. `data.headSha` is the consumer's anchor — comparing it to the SHA the ask body quoted is the check that the run that filed the ask is still the run answering it

## Fix

`git fetch --no-tags --depth=1 origin +refs/heads/main:refs/remotes/origin/main && git checkout main` — fetch the base, then move HEAD to it

[CLI and verify](/error-codes#cli-and-verify)
