feat(run): async refactor — run_live_async + 7-step shutdown
run_live() is now a thin asyncio.run() wrapper. run_live_async(): - Blocking pipeline (capture→canary→detect→_handle_tick→snapshot) in asyncio.to_thread() per decision 1 (_sync_detection_tick function) - TelegramPoller + ScreenshotScheduler as background asyncio tasks - asyncio.Queue[Command] for inter-task communication - Auto-start scheduler on PRIMED, auto-stop on fire/cooled/phase_skip - 7-step graceful shutdown sequence - heartbeat_due uses time.monotonic() (prevents immediate-fire regression) - Status command: FSM state, last detection, uptime, fire count, canary health - "ss" command: one-shot capture+annotate+send via to_thread - Price overlay in _save_annotated_frame (dot_pos_abs + canary_ok params) - test_main.py: ScriptedDetector.step(ts, frame=None) for zero regression Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -186,7 +186,7 @@ def test_run_live_catchup_sell_from_gray_then_dark_red(monkeypatch, tmp_path):
|
||||
]
|
||||
def __init__(self, *a, **kw):
|
||||
self._i = 0
|
||||
def step(self, ts):
|
||||
def step(self, ts, frame=None):
|
||||
if self._i >= len(self._script):
|
||||
raise _StopLoop
|
||||
color, accepted = self._script[self._i]
|
||||
|
||||
Reference in New Issue
Block a user