Two real findings from today's live self-hosting run, surfaced while diagnosing why
bfd3ee82/71868db6 were blocked:
1. trigger_org_node/trigger_org_node_structured use a fixed wall-clock
subprocess.run(timeout=...) -- a long-running-but-genuinely-progressing agent call
gets killed just for taking longer than a guessed constant (300s), which is exactly
what happened to bfd3ee82's Validator planning call. Per an already-established
(but never actually implemented) decision: an agent call should never be judged
"stuck" by total duration alone, only by an extended period with no activity AND no
error. New requirements doc:
docs/todo/agent-call-liveness-not-fixed-duration-timeout-requirements.md.
2. task_execution.py::_mark_blocked's catch-all dumps anything outside a small
exception whitelist into blocked_reason='execution_error' -- including
ConcurrencyLimitReachedError, which isn't an error at all, just normal backpressure.
Boss Agent needs the system to emit distinct, meaningful reasons at the point of
failure, not reverse-engineer root cause from a generic bucket -- added as FR-7 to
the Boss Agent doc.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>