Parent: #17171
Make retry decisions independently understandable and testable.
Scope
- Given an immutable Helix observation and invocation context, produce explicit actions such as leave running, resubmit selected items, record an actionable failure, or take no action.
- Keep API calls, logging, and mutable counters in an executor/orchestrator layer.
- Preserve one-shot-on-entry behavior and stage-attempt reconciliation invariants.
- Represent resubmission failure explicitly rather than with ambiguous nulls where practical.
Acceptance criteria
- Retry policy is expressed by a deterministic pure component.
- Existing retry, crash-recovery, and multi-attempt scenarios remain unchanged.
- A reviewer can understand retry behavior without following service calls.
Parent: #17171
Make retry decisions independently understandable and testable.
Scope
Acceptance criteria