fix(simple_metrics): ignore unparseable frequency_alert and malformed adaptive_state (SIENTIAPDE-2190)

This commit is contained in:
PedroHMCosme
2026-10-08 08:42:49 -03:00
parent 7222b5d1ef
commit b5512498b9
3 changed files with 42 additions and 3 deletions

View File

@@ -100,8 +100,16 @@ def simple_metrics(config: dict[str, Any]):
# SIENTIAPDE-1995: laborious flips `adaptive_state.escalated` on a threshold breach (and back
# after the window is renewed without one) and bumps `updated_at`, which makes this tick
# rewrite the schedule.
if frequency_alert and (config.get('adaptive_state') or {}).get('escalated'):
base['frequency'] = frequency_alert
state = config.get('adaptive_state')
# Hand-written docs: a malformed state must not raise and kill the tick for every model.
if frequency_alert and isinstance(state, dict) and state.get('escalated') is True:
try:
# Temporal parses the schedule frequency on create/update; an unparseable value
# would fail it, so keep `frequency` (create_schedule_config still warns).
parse_frequency(str(frequency_alert))
base['frequency'] = frequency_alert
except ValueError:
pass
return {
**base,
'schema': 'sientia_data',
@@ -121,7 +129,8 @@ MIN_FREQUENCY_ALERT_SECONDS = 60
def frequency_alert_warning(frequency_alert: str | None) -> str | None:
"""
Warning message when `frequency_alert` is below the 1-minute floor or does not parse,
otherwise None. Warn only: the configured value is kept (SIENTIAPDE-1995 decision 7).
otherwise None. Warn only (SIENTIAPDE-1995 decision 7): a value below the floor is kept;
an unparseable one is ignored by `simple_metrics()`, which keeps `frequency`.
"""
if not frequency_alert:
return None