diff --git a/nanobot/agent/verification_state.py b/nanobot/agent/verification_state.py index 9db53c424..8c0e89024 100644 --- a/nanobot/agent/verification_state.py +++ b/nanobot/agent/verification_state.py @@ -51,6 +51,7 @@ _FAILURE_RE = re.compile( r"\bAssertionError\b|" r"\bFileNotFoundError\b|" r"\bTimeoutError\b|" + r"\bcommand not found\b|" r"\bError:\s+Command timed out\b|" r"\bFAILURES?\b|" r"\bTEST FAILED\b" @@ -73,6 +74,7 @@ _ERROR_LINE_RE = re.compile( r"(?:AssertionError|FileNotFoundError|TimeoutError|ValueError|TypeError|RuntimeError)" r"(?::[^\n]*)?|" r"assert\s+[^\n]+|" + r"[^:\n]+:\s+line\s+\d+:\s+[^:\n]+:\s+command not found|" r"Error:\s+[^\n]+|" r"TEST FAILED[^\n]*" r")" diff --git a/tests/agent/test_verification_state.py b/tests/agent/test_verification_state.py index f06e41447..fc80017b2 100644 --- a/tests/agent/test_verification_state.py +++ b/tests/agent/test_verification_state.py @@ -52,3 +52,22 @@ def test_analyze_passing_test_records_success_without_feedback(): assert analysis is not None assert analysis.status == "passed" assert append_verification_feedback("ok", analysis) == "ok" + + +def test_analyze_command_not_found_as_failed_check(): + output = """\ +STDERR: +/usr/bin/bash: line 1: python3: command not found + +Exit code: 127 +""" + + analysis = analyze_verification_result( + command="python3 - <<'PY'\nprint('quick verification')\nPY", + output=output, + exit_code=127, + ) + + assert analysis is not None + assert analysis.status == "failed" + assert any("command not found" in item for item in analysis.primary_errors)