Rolled apps-pmv2-cohort-algo-firstmover from pin 8977b5bd851d44 at ~20:19Z. The headline change: the on-chain feed migrated from Alchemy WSS log-subscription to eth_getLogs HTTP polling via the 150-proxy rotating pool — kills the WSS CU bleed on the cohort lane. Same pin also bumps consensus-alert threshold 2 → 4. Sibling note to crypto-emit-max-fires-cap-clear-2026-06-25 and weather-as-dry-publish-arm-2026-06-25 (three deploy events same evening).

For Agents

Cohort has THREE components — firstmover + query-responder + scheduled-run. Only firstmover was rolled here; the other two are untouched per cohort’s own confirm. The cohort lane’s WSS dependency is gone after this roll, but PM self-watch (pmv2-onchain-watch) is on a separate WSS path and still uses Alchemy WSS (swapped from DRPC ogws on 2026-06-25 to escape flapping). Don’t conflate the two paths in future debugging.

What rolled

FieldValue
Serviceapps-pmv2-cohort-algo-firstmover (cohort component 1 of 3)
Old pin8977b5b (Alchemy WSS log-subscription)
New pind851d44
New imagesha256:716ee0d2...
ContainerrestartCount=0 post-deploy
Deploy shapePattern B containerized via apps Ansible role

Key change — on-chain feed WSS → HTTP polling

Boot log proof of the migration:

INFO cohort_algo::pmv2::watch::poll_feed: polygon poll feed armed interval_secs=5 max_blocks=2000
  • Old shape: Alchemy WSS log-subscription, subscribed to log events as they arrived. Continuous CU spend even when no events fired.
  • New shape: eth_getLogs HTTP polling at 5-second cadence, max 2000 blocks per pull, routed through the 150-proxy rotating pool that cohort/PM/crypto already share. CU spend is bounded by poll frequency, not by event flow.

Other changes in the same pin

  • Consensus-alert threshold 2 → 4. Per cohort’s status. Reduces alert volume.
  • first_mover_core armed cohort=18 (was cohort=20 prior). Minor cohort window resize; no architectural shift.

What this does NOT change

  • PM self-watch (pmv2-onchain-watch) still uses Alchemy WSS. That was swapped from DRPC ogws on 6/25 to escape flapping — separate decision, separate lane.
  • The other two cohort components (query-responder, scheduled-run) — untouched per cohort’s confirm.
  • NATS publish path (cohort.signals) — unchanged; only the on-chain feed transport changed. See cohort-firstmover-nats-migration.

Approval chain

Standard cohort-producer per-task go-ahead + Andras’s #480 standing-auth carve-out for deploys/env/NATS/redispatch/restart applies. No producer-DB mutation here — straight redeploy. No surfacing needed.