The error cap counts failures without reading them. Classify instead: retryable (429 / 5xx /
timeout) → retry; context-full → its own recovery, not a blind retry; refused /
content-policy → deterministic failure, never retried (a retry burns error-cap budget for
an identical answer). The adapter's neutral terminal reasons already carry these
categories — route the error cap by category.
Evidence: hermes agent/error_classifier.py and omnigent runtime/llm_retry.py converge on
the same taxonomy independently.
The error cap counts failures without reading them. Classify instead: retryable (429 / 5xx /
timeout) → retry; context-full → its own recovery, not a blind retry; refused /
content-policy → deterministic failure, never retried (a retry burns error-cap budget for
an identical answer). The adapter's neutral terminal reasons already carry these
categories — route the error cap by category.
Evidence: hermes agent/error_classifier.py and omnigent runtime/llm_retry.py converge on
the same taxonomy independently.