> ## Documentation Index
> Fetch the complete documentation index at: https://docs.substrate.42.pe/llms.txt
> Use this file to discover all available pages before exploring further.

# substrate unapprove — Revoke a Mistaken Human Approval

> substrate unapprove revokes a mistaken human approval by deleting the field key so both exists and eq-true guards re-block the task.

Run `substrate unapprove` to reverse a mistaken `substrate approve`. It uses the same board resolution, the same `human_only` guard, the same optimistic write, and the same `human:<os-user>` event stamp — except that instead of setting the field it deletes the key from `custom_data`. Deletion, not `false`, is the correct primitive: an absent key reads as undefined, so a guard checking `exists` re-blocks, and so does one checking `eq true`.

## Usage

```shell theme={null}
substrate unapprove <task_id> <field>
```

## Arguments

<ParamField path="task_id" type="string" required>
  The task id.
</ParamField>

<ParamField path="field" type="string" required>
  The `human_only` field to clear.
</ParamField>

## Stranding Warning

<Warning>
  If the task already advanced past the gate on the mistaken approval, `unapprove` warns that the task is now **stranded** — sitting in a group it could no longer reach — and leaves it there. Moving it back is your call.

  The stranding check looks for an active `transition_guard` whose `to_group` is the task's current group and whose `require` tree references the field. It is a direct match, not a multi-hop reachability analysis, so it can miss a case — a false negative merely omits the warning; it never moves or blocks anything.
</Warning>

## See Also

* [`substrate approve`](/cli/approve) to set an approval.
* [`substrate pending-approval`](/cli/pending-approval) to see what is currently blocked.
