# Dispatch Chassis Deploy

The dispatch LaunchAgent runs tools from `~/.recoil/bin`. Those files are a copy
of the canonical repo tools in `recoil/pipeline/tools`, not symlinks. That means
repo fixes to the chassis do not affect the running daemon until the copy in
`~/.recoil/bin` is explicitly refreshed.

The chassis files covered by the deploy script are:

- `dispatch_reaper.sh`
- `dispatch_status.py`
- `dispatch_notify.sh`
- `dispatch_heartbeat_watch.sh`
- `audit_dispatch.py`

To sync the repo versions into the daemon bin directory:

```bash
bash recoil/pipeline/tools/deploy_dispatch_chassis.sh
```

To detect drift without changing files:

```bash
bash recoil/pipeline/tools/deploy_dispatch_chassis.sh --check
```

`--check` prints the repo and deployed `shasum` for each file and exits non-zero
if any deployed copy differs or is missing, so CI or a heartbeat can detect that
the daemon home has drifted from the repo.

The deploy script does not run `launchctl` and does not restart the reaper. Those
remain explicit ops steps after a deploy. JT may choose to switch this topology
to symlinks later, but that would change runtime behavior and is not implemented
here.
