fix(cron): classify script timeouts separately

This commit is contained in:
Jody Bagdonas 2026-08-09 07:18:29 -04:00 committed by Teknium
parent d1fc20432f
commit 7d039d7ee6
1 changed files with 75 additions and 0 deletions

View File

@ -12,6 +12,7 @@ Covers:
from __future__ import annotations
import json
import subprocess
from unittest.mock import patch
import pytest
@ -135,6 +136,80 @@ def test_run_job_no_agent_reloads_dotenv_before_script(hermes_env, monkeypatch):
assert str(loaded_homes[0]) == str(hermes_env)
def test_timed_out_no_agent_script_delivery_is_not_mislabeled_as_provider_failure(
hermes_env, monkeypatch,
):
"""A watchdog timeout happens before any LLM/provider call.
The delivery summary must preserve that process-level failure taxonomy and
must not claim a provider fallback was attempted or exhausted.
"""
from cron.jobs import create_job
import cron.scheduler as scheduler
(hermes_env / "scripts" / "slow.py").write_text("import time; time.sleep(999)\n")
job = create_job(
prompt=None,
schedule="every 5m",
script="slow.py",
no_agent=True,
deliver="telegram",
name="slow watchdog",
)
delivered = []
def _timeout(*_args, **kwargs):
raise subprocess.TimeoutExpired(cmd="slow.py", timeout=kwargs["timeout"])
monkeypatch.setattr(scheduler.subprocess, "run", _timeout)
monkeypatch.setattr(
scheduler,
"_deliver_result",
lambda _job, content, **_kwargs: delivered.append(content),
)
assert scheduler.run_one_job(job) is True
assert len(delivered) == 1
assert "script timed out" in delivered[0].lower()
assert "provider" not in delivered[0].lower()
assert "fallback" not in delivered[0].lower()
def test_agent_provider_timeout_delivery_keeps_fallback_guidance(hermes_env, monkeypatch):
"""Provider timeout classification remains available to agent-backed jobs."""
from cron.jobs import create_job
import cron.scheduler as scheduler
job = create_job(
prompt="Summarize the overnight logs.",
schedule="every 5m",
deliver="telegram",
name="provider-backed report",
)
delivered = []
monkeypatch.setattr(
scheduler,
"run_job",
lambda *_args, **_kwargs: (
False,
"# Cron Job: provider-backed report\n\nprovider request timed out\n",
"",
"ReadTimeout: provider request timed out after fallback attempts",
),
)
monkeypatch.setattr(
scheduler,
"_deliver_result",
lambda _job, content, **_kwargs: delivered.append(content),
)
assert scheduler.run_one_job(job) is True
assert len(delivered) == 1
assert "provider timeout" in delivered[0].lower()
assert "fallback chain was exhausted or unavailable" in delivered[0].lower()
# ---------------------------------------------------------------------------
# _run_job_script: shell-script support
# ---------------------------------------------------------------------------