1 Commits

Author SHA1 Message Date
hamza.khyari 12fc9e089f fix(plan): implement error recovery for execute phase per spec §35958 and §18323
CI / lint (pull_request) Successful in 1m8s
CI / quality (pull_request) Successful in 1m7s
CI / typecheck (pull_request) Successful in 1m31s
CI / security (pull_request) Successful in 1m39s
CI / helm (pull_request) Successful in 28s
CI / push-validation (pull_request) Successful in 24s
CI / build (pull_request) Successful in 36s
CI / integration_tests (pull_request) Successful in 4m21s
CI / unit_tests (pull_request) Successful in 4m45s
CI / e2e_tests (pull_request) Successful in 4m8s
CI / docker (pull_request) Successful in 1m29s
CI / benchmark-publish (pull_request) Has been skipped
CI / coverage (pull_request) Successful in 11m24s
CI / status-check (pull_request) Successful in 4s
CI / benchmark-regression (pull_request) Successful in 1h10m52s
Two recovery paths for execute/errored plans using the domain model's
classify_error() for canonical error classification:

1. Transient failures (§28530/§35958): rate limit, timeout, connection
   errors — reset to execute/queued and re-execute with the same
   strategy.  Preserves strategy_decisions_json for decision
   hierarchy reconstruction.

2. Non-transient failures (§18323-18329): strategy constraint,
   authentication, unknown — delegate to
   service.try_auto_revert_from_execute() which enforces
   MAX_REVERSIONS loop guard, increments reversion_count, records a
   reversion decision, and respects the delete_content automation
   threshold.  Error findings are redacted via redact_error_details()
   and stored as JSON for the strategy actor (§18329).

Error classification uses the domain model's classify_error() and
ErrorCategory enum — single source of truth, no parallel frozenset.
AuthenticationError correctly classified as non-transient per domain
model.

ISSUES CLOSED: #10843
2026-04-24 22:46:41 +00:00