# #231 ppinc + robinhood-indices (ppdata, 10 Oct)
## ppinc.service (main)
Cause: supply.py loops /opt/hist/rh/2026-*.db and reads table `launches`. My rh slimming (days < 25 Sep reduced to pools+kv) removed `launches` there -> "no such table: launches", exit 1 (birth_inc part worked).
Fix DONE: supply.py now skips day files without `launches` (backup supply.py.bak_10oct). Manual run OK: 0 of 62,948 launch rows without supply.
Still to do (blocked by permission check, needs ops):
1. append to /opt/pricepredict-data/supply.py: `open("/opt/pricepredict-data/supply.ok","w").write(str(int(time.time())))`
2. add to /opt/guard/checks.json (checks): {"name":"M ppinc hourly new pools + supply (PP Data)","type":"fresh","path":"/opt/pricepredict-data/supply.ok","kind":"epoch","max":7800,"fix":"systemctl start --no-block ppinc.service","fix_timeout":30,"backoff":1800}; then guard.py --dry.
Live-safe: data job on main only, nothing live reads supply.ok.
## robinhood-indices.service
Not a crash: it collects and delivers fine ("delivered", 8 indices) but exits 1 whenever the run has any error entry. Errors every run: 4 coins "Researched price pool not returned" (BANGERCAT, FROGE, BUTTHOLE, BLESS), plus "HTTP 429" in recovery (external price API rate limit) and "Ranking refresh incomplete". Timer is every 5 min (*:05/5) + 3 retries, which feeds the 429s. Not my service; suggest owner relaxes the timer to hourly (as OPERATIONS.md says) or exits 0 when delivery succeeded.
