{"schema_version":"dashboard-backlog-detail.v1","generated_at":1790074202.0675704,"item":{"item_id":"575e23ec-0b01-4670-a2dd-66c7212e0ae4","short_id":"575e23ec","title":"Fix TaskRunner crash: FileNotFoundError 'codex' (subagent runtime not on PATH)","description":"From daemon log health batch (item 8af39f33-f95b-4396-9ce2-36039684e7fb).\nFindings from triage of 3 fingerprints:\n1. ERROR loghealth:92a9a1e466b88eb2 — REAL BUG / env issue. TaskRunner 571131bf-4b6a-4a86-9827-e4e7154acf2c crashed: FileNotFoundError: 'codex'. The codex CLI is not on PATH in the daemon's environment, so every codex-based subagent spawn will crash. Fix options: (a) ensure codex is installed and resolve its absolute path at spawn time instead of relying on PATH; (b) add a pre-flight runtime check that fails the task gracefully with a clear error instead of a crash. Recommend both: resolve runtime binary via shutil.which with fallback to configured absolute path, and surface a clean 'runtime unavailable' error to the orchestrator.\n2. WARNING loghealth:924e5b5e3750dd97 — TRANSIENT. LLM status=500 retries (x2), handled by existing retry/backoff (attempt 1/10, no escalation). No code change; upstream API noise.\n3. WARNING loghealth:5220d710d57877a8 — TRANSIENT, same root cause as #2. Escalation classifier hit APIStatusError from the same 500s and correctly fell back to static tier 'auto'. Fallback behavior is working as designed. No code change.\nLog path: /home/kyhuang/.config/dylanbot/daemon.log\nSource: scheduler self-healing suggestion.","description_html":"<p>From daemon log health batch (item 8af39f33-f95b-4396-9ce2-36039684e7fb).\nFindings from triage of 3 fingerprints:</p>\n<ol>\n<li>ERROR loghealth:92a9a1e466b88eb2 — REAL BUG / env issue. TaskRunner 571131bf-4b6a-4a86-9827-e4e7154acf2c crashed: FileNotFoundError: 'codex'. The codex CLI is not on PATH in the daemon's environment, so every codex-based subagent spawn will crash. Fix options: (a) ensure codex is installed and resolve its absolute path at spawn time instead of relying on PATH; (b) add a pre-flight runtime check that fails the task gracefully with a clear error instead of a crash. Recommend both: resolve runtime binary via shutil.which with fallback to configured absolute path, and surface a clean 'runtime unavailable' error to the orchestrator.</li>\n<li>WARNING loghealth:924e5b5e3750dd97 — TRANSIENT. LLM status=500 retries (x2), handled by existing retry/backoff (attempt 1/10, no escalation). No code change; upstream API noise.</li>\n<li>WARNING loghealth:5220d710d57877a8 — TRANSIENT, same root cause as #2. Escalation classifier hit APIStatusError from the same 500s and correctly fell back to static tier 'auto'. Fallback behavior is working as designed. No code change.\nLog path: /home/kyhuang/.config/dylanbot/daemon.log\nSource: scheduler self-healing suggestion.</li>\n</ol>\n","priority":"high","status":"open","estimated_effort":"small","tags":["self-healing","daemon","loghealth"],"spawn_policy":"approve","queue_rank":null,"eligible":false,"blocked_by":[],"skip_reason":"spawn_policy_approve","source":"scheduler","created_at":1786178362.2093384,"updated_at":1786178362.2093384,"linked_task_id":"","deadline":"","depends_on":[],"source_context":{}},"errors":[]}