live app goes push-mode: own Alchemy webhook + health check + watchdog

60s poll's ~39s avg detection lag is slippage the copy edge pays; push is
~3s (paper-measured). fly.live.toml gains http_service + /health check
(self-heal); start.sh live role switches on ALCHEMY_SIGNING_KEY like paper
(poll fallback intact; push mode keeps the 60s heartbeat + 5min backstop
poll). sync_webhook.py syncs BOTH webhooks (alchemy_webhook_id_live).
watchdog.yml probes both apps; a disarmed live app paging is expected.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
jaxperro
2026-07-10 01:32:22 -04:00
parent 4bb5ccc52c
commit df3c750efe
4 changed files with 90 additions and 40 deletions
+10 -2
View File
@@ -65,9 +65,17 @@ git config user.name "copybot[bot]"
git config user.email "copybot@users.noreply.github.com"
# live role, ARMED: own config (committed template + env secrets), own state
# file, own feed/fills (config paths), ALWAYS poll mode — the Alchemy push
# webhook stays pointed at the paper app (LIVE_ROLLOUT Phase 3.3).
# file, own feed/fills (config paths). ALCHEMY_SIGNING_KEY set -> PUSH mode
# (the live app's OWN webhook, wired 2026-07-10 — ~3s detection vs the 60s
# poll's ~39s avg; 60s heartbeat + 5min backstop poll are built in). Without
# the key -> classic poll, same as before.
if [ "${COPYBOT_ROLE:-paper}" = "live" ]; then
if [ -n "${ALCHEMY_SIGNING_KEY:-}" ]; then
exec python3 copybot.py \
--config config.live.example.json \
--state copybot_state.live.json \
--live
fi
exec python3 copybot.py \
--config config.live.example.json \
--state copybot_state.live.json \