namespace GB5Shared.ActionProcessor { /// /// Outcome enum for action handler results. /// Success → mark TEVENTACTIONRUN.RUNSTATUS=2, insert LPROCESSEDACTION, ACK /// TransientFailure → NACK (retry) if ATTEMPTS < max; else mark RUNSTATUS=3, ACK /// PermanentFailure → mark RUNSTATUS=3 immediately, ACK /// public enum ActionOutcome { Success = 0, TransientFailure = 1, PermanentFailure = 2 } public class ActionResult { public ActionOutcome Outcome { get; set; } public string? Response { get; set; } public string? Error { get; set; } public static ActionResult Ok(string? response = null) => new() { Outcome = ActionOutcome.Success, Response = response }; public static ActionResult Transient(string error) => new() { Outcome = ActionOutcome.TransientFailure, Error = error }; public static ActionResult Permanent(string error) => new() { Outcome = ActionOutcome.PermanentFailure, Error = error }; } }