Date: 2026-08-08
Status: Approved for implementation
Branch: fix/channel-monitor-v2-ops-ui-blockers (onto channel-monitor-v2)
channel_monitor_mode=v2, so every upgrade without an existing key auto-opts into passive V2, stops V1 probes, and may leave users on an empty V2 view.RecomputeRange chunks until now-30d, hammering the primary DB.request_id without a created_at bound, scanning ops_error_logs history via candidate_ids.| Topic | Decision |
|---|---|
| Default mode | v1 (keep active probes). V2 is explicit opt-in. |
Existing channel_monitor_mode=v2 rows |
Unchanged (ON CONFLICT DO NOTHING / no force rewrite). |
| Switch to v2 | V1 runner fire() and RunCheck require ActiveProbesAllowed() → probes stop. |
| Backfill | Unified hard gates + adaptive soft gates (same rules, different observed load). |
| Optional profile knob | Not in this change (YAGNI). |
195_channel_monitor_mode.sql: insert 'v1' when key missing.defaultChannelMonitorMode = v1; empty/invalid normalize → v1.RunCheck path remains fail-closed (no probes) for test safety — independent of product default.refresh_interval (60 or 300s). No 5s bootstrap override.request_id IN candidate_ids branch withcreated_at >= $1 - INTERVAL '90 minutes' AND created_at < $2.backfill_profile setting (may add later).