Commit Graph

2 Commits

Author SHA1 Message Date
gsxdsm
a27921a276 fix: address PR review feedback (#1467)
- guard optional project selection callbacks and keep bookmarked search matches visible
- use structured timeout/rate-limit handling in retry backoff
- add focused regressions for selector and retry behavior

Note: pnpm test passed the merge gate but hit pre-existing non-blocking engine mock failures in changed-package tests.
2026-06-07 23:03:38 -07:00
Fusion Worker
1afdbbbb47 feat(engine): add structured error types and general-purpose retry with exponential backoff
Add domain-specific error classes (engine-errors.ts) replacing generic
catch blocks with typed, classifiable errors:
- EngineError base with code/retryable/details fields
- TransientError hierarchy: NetworkError, ServiceUnavailableError, TimeoutError
- PermanentError hierarchy: ConfigurationError, ValidationError
- RateLimitError (triggers global pause, not local retry)
- classifyThrownError() bridge from legacy string-based detection

Add general-purpose retry with exponential backoff (retry-with-backoff.ts):
- withRetry() wraps async ops with configurable retries for transient errors
- Exponential backoff: delay = min(baseMs * 2^attempt, maxMs)
- Three jitter strategies: full (default), equal, none
- Per-attempt timeout support via timeoutMs option
- AbortSignal integration for task pause/cancel/shutdown
- Custom isRetryable check for domain-specific retry logic
- withRetryResult() variant returning retry metadata
- Never retries rate-limit errors (delegates to global pause)

53 new tests covering error hierarchy, backoff math, cancellable sleep,
retry on transient errors, non-retryable fail-fast, rate-limit bypass,
abort cancellation, per-attempt timeout, custom predicates.
2026-06-07 00:15:48 +07:00