From 0745be3078eb1b8c7feb5de95d0f489beed3719d Mon Sep 17 00:00:00 2001 From: Brian McMahon Date: Thu, 16 Apr 2026 08:34:39 -0700 Subject: [PATCH] Gate executor on daily_data module health stamp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds daily_data: 26 to _UPSTREAM_MAX_AGE_H. Pairs with the stamp emission added in alpha-engine-data#41 — belt-and-suspenders with the direct LastModified check from #53: - Stamp (this PR's gate): catches "ran and failed today" with structured status/error/summary - LastModified (#53): catches "stamp green, blob stale" Both fire hard-fail + Telegram from main.py's existing upstream gate and the #53 freshness block respectively. Deploy order: alpha-engine-data#41 must merge AND run at least once (next weekday 13:05 UTC) before this merges, otherwise every executor run fails with "no health data returned" until daily_data writes its first stamp. 26h matches predictor_inference's grace buffer — same weekday cadence. Co-Authored-By: Claude Opus 4.6 (1M context) --- executor/main.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/executor/main.py b/executor/main.py index 7764953..44763b7 100644 --- a/executor/main.py +++ b/executor/main.py @@ -891,7 +891,12 @@ def run( # research — 192h (runs weekly Sat; grace covers Sat→next Fri) # predictor_inference — 26h (runs every weekday morning; catches a Mon # miss without false-alarming on the weekend) - _UPSTREAM_MAX_AGE_H = {"research": 192, "predictor_inference": 26} + # daily_data — 26h (same weekday 13:05 UTC cadence as predictor; + # stamp written by alpha-engine-data after + # daily_closes.collect — catches ran-and-failed + # states that the direct LastModified check + # below would miss) + _UPSTREAM_MAX_AGE_H = {"research": 192, "predictor_inference": 26, "daily_data": 26} if not simulate: _health_failures: list[str] = []