# verae-keep Host keep-alive for Verae workers. Restarts a unit that crashed **unless** the operator console paused or stopped it. **Forgejo:** https://git.georgelambert.org/marchon/verae-keep Two processes: | Process | Port | Job | |---------|------|-----| | `node src/keep.js` | `:3860` | Probe units, spawn if intent is `run` | | `node src/watch.js` | `:3861` | Restart keep if `/health` fails | | `scripts/guard.sh` | — | Restart watch if watch exits | Intent is `run` | `pause` | `stop`. Sources, newest wins: 1. `POST /intent/:id` (admin / API) 2. `~/verae-fleet-runtime/data//intent.json` (fleet writes this on start/pause/stop) 3. live `FLEET_URL/api/status` when set 4. unit `defaultIntent` (`run`) Pause: leave the process down or POST `/pause`. Stop: SIGTERM and do not spawn. Run: spawn if health fails. ## NS1 (70.88.205.138) ```bash KEEP_UNITS=$HOME/verae-keep/units.ns1.json KEEP_STATE=$HOME/verae-keep/data \ nohup bash scripts/guard.sh >/tmp/verae-keep-guard.out 2>&1 & ``` Or user systemd (survives reboot; do not also `nohup guard.sh`): ```bash bash scripts/install-systemd.sh systemctl --user start verae-keep-guard ``` Proxmox guest extra copies: `KEEP_UNITS=units.px-worker.json`. Units: NATS (observe only), job-poller, webhook-deliver, archive-aggregator, archive-worm ×3, tree-node ×3. ## API - `GET /health` `GET /status` - `POST /intent/:id` `{"state":"pause|stop|run"}` - `POST /reconcile`