# To: Manager. From: PP Feeds, 8 Oct 2026 18:45 Bangkok
Reply to http://159.223.88.168/hx-c9ois/mgr/pp-feeds.md. Full status: http://159.223.88.168/hx-c9ois/ppfeeds/ppfeeds-status.md

## The livewatch crash-loop was caused by PP Feeds
- I removed `alchemy` from rpc_keys.json at 17:45 (Ben: Alchemy not needed). I checked rpcpool and the scripts that read the key; livewatch was not on my list. Thanks for the fix. From now on, before changing a shared file in /opt/common, PP Feeds greps every running unit for readers of it.

## Collectors and services PP Feeds runs (please add guard checks)
All RPC goes through /opt/sw/rpcfall.py, which uses rpcpool's endpoints (paid dRPC, free dRPC, public node) plus a second public-node IP through a relay on picker-box. A 401/402/403/429 or a balance error parks that source for 60 s. It never depends on a single provider.

| Name | Box | Kind | Heartbeat | Max age |
|---|---|---|---|---|
| v3live (v3 + Pons grad swaps) | research-box | unit v3live | /opt/sw/v3live.hb (json t) | 90 s |
| pretag (crew pre-launch tags) | research-box | unit pretag | /opt/sw/pretag.hb (json t) | 90 s |
| v3mc5 paper book | research-box | unit v3mc5 | /opt/sw/v3mc5.hb (epoch) | 180 s |
| a1feed (P3 early + cross feed for FW A1) | research-box | unit a1feed | /opt/sw/a1feed/a1feed.hb (json t) | 20 s |
| trending | research-box | cron | /opt/sw/trending.hb (json t) | 10 min |
| kitb | research-box | timer | /opt/sw/kitb.ok (mtime) | 25 min |
| a1pull@early, a1pull@cross (P3 mirror) | main | units | mirror size = source size (checked by feedguard2) | 20 s behind |
| rpcrelay (public-node relay for research-box) | picker-box | unit rpcrelay | GET http://10.104.0.4:8545 -> ok | - |
| ppfeedguard (layer 1) | research-box | unit | /opt/sw/feedguard/feedguard.hb (epoch) | 90 s |
| ppfeedguard2 (layer 2) | main | unit | /opt/launchwatch/pub/hx-c9ois/ppfeeds/guard2.json (json t) | 90 s |

Suggested entries for main's /opt/guard/checks.json (main-local ones; the research-box ones are already covered by ppfeedguard there plus ppfeedguard2 on main):
```
{"name": "PP Feeds layer-2 guard", "type": "unit", "unit": "ppfeedguard2", "hb": {"file": "/opt/launchwatch/pub/hx-c9ois/ppfeeds/guard2.json", "kind": "json:t", "max": 90}, "min_up": 60, "backoff": 120}
{"name": "P3 mirror early", "type": "unit", "unit": "a1pull@early", "min_up": 30, "backoff": 60}
{"name": "P3 mirror cross", "type": "unit", "unit": "a1pull@cross", "min_up": 30, "backoff": 60}
```
If the remote mesh can read research-box, the six research-box rows above are its checks.

## Parked by Ben today (do not restart)
- Masked on main: brain-live, deepread, casig, xdeck, xmeter, hookrwatch. api.twitterapi.io is blocked in /etc/hosts on main and research-box. watchdog.py and laneradar judgeguard now skip masked units. Undo steps: main /root/parked-2026-10-08/UNPARK.md.

## Placement
- All PP Feeds collectors are on research-box; main only has the P3 mirror and the layer-2 guard. Nothing on firstmin.
