> ## Documentation Index
> Fetch the complete documentation index at: https://solo-09d10f60.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Dispatch flow

> Safely move from status checks to dry-run dispatch and then live dispatch.

# Dispatch flow

Dispatch turns a queued idea into a worker run. Treat it as a guarded operation, not a raw script call.

## 1. Check health and status

```bash theme={null}
curl -fsS "$ENOCH_BASE_URL/healthz"
curl -fsS -H "Authorization: Bearer $ENOCH_CONTROL_TOKEN" \
  "$ENOCH_BASE_URL/control/api/status" | python3 -m json.tool
```

Review `dispatch_safe` and `dispatch_blockers` before proceeding. The operator dashboard UI is at `http://<control-vm>:8787/control/dashboard-v2`. The older `/control/dashboard` and `/dashboard` URLs redirect to the canonical V2 shell on current deployments.

<Info>
  The dashboard image in this section is a redacted, public-safe reference view with sample values. It shows the current V2 information architecture without exposing private hostnames, tokens, project IDs, or live operator data.
</Info>

<img src="https://mintcdn.com/solo-09d10f60/7_YFtPMZPg5Rce_Z/images/dashboard-status-blocked.png?fit=max&auto=format&n=7_YFtPMZPg5Rce_Z&q=85&s=936ca259cb94565d567887d86faf62a6" alt="Current operator overview showing attention, running work, paper-writing, and publish/import cards" width="1400" height="860" data-path="images/dashboard-status-blocked.png" />

Use the dashboard as a fast visual check, but trust the API response as the source of truth for automation.

## 2. Check queue health

```bash theme={null}
curl -fsS -H "Authorization: Bearer $ENOCH_CONTROL_TOKEN" \
  "$ENOCH_BASE_URL/control/api/queue-health" | python3 -m json.tool
```

## 3. Verify worker preflight

```bash theme={null}
curl -fsS -H "Authorization: Bearer $ENOCH_CONTROL_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"wake_gate_url":"http://<worker>:8787","bearer_token":"<worker-token>","require_paused":false,"strict":false}' \
  "$ENOCH_BASE_URL/control/api/preflight" | python3 -m json.tool
```

## 4. Dry-run dispatch

```bash theme={null}
curl -fsS -H "Authorization: Bearer $ENOCH_CONTROL_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"dry_run":true,"requested_by":"operator"}' \
  "$ENOCH_BASE_URL/control/dispatch-next" | python3 -m json.tool
```

Dry run should be your default for new config, new worker hosts, and post-upgrade checks.

## 5. Live dispatch

Only after status, queue health, and preflight are understood should you send a non-dry-run dispatch request. Confirm `live_dispatch_enabled` and `dispatch_script_path` are intentionally configured.

```bash theme={null}
curl -fsS -H "Authorization: Bearer $ENOCH_CONTROL_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"dry_run":false,"requested_by":"operator"}' \
  "$ENOCH_BASE_URL/control/dispatch-next" | python3 -m json.tool
```

## What the control plane checks

The queue tabs show the same read model from different operator angles. Empty active and queued views are useful during smoke testing because they prove the dashboard can read canonical queue state without launching work.

<Info>
  The two queue-tab images below are redacted, public-safe reference views with sample values. Use them to understand the queue layout, not as live queue evidence.
</Info>

<img src="https://mintcdn.com/solo-09d10f60/7_YFtPMZPg5Rce_Z/images/dashboard-active-queue.png?fit=max&auto=format&n=7_YFtPMZPg5Rce_Z&q=85&s=b3007742379ffd2dc387621dcb5e0027" alt="Current active queue tab showing bounded active-work rows" width="1400" height="860" data-path="images/dashboard-active-queue.png" />

<img src="https://mintcdn.com/solo-09d10f60/7_YFtPMZPg5Rce_Z/images/dashboard-queued-queue.png?fit=max&auto=format&n=7_YFtPMZPg5Rce_Z&q=85&s=5b64686902dc075d21b7839b69e66c6f" alt="Current queued queue tab showing bounded ready-queue rows" width="1400" height="860" data-path="images/dashboard-queued-queue.png" />

The control plane checks that a queue item exists, pause and maintenance flags allow work, no conflicting active lane exists, worker preflight passes, and the dispatch script can be launched for live dispatch.
