package intentflow import "errors" // Sentinel errors use the public API error codes from the design ยง9. var ( ErrPlanNotFoundOrHidden = errors.New("PLAN_NOT_FOUND_OR_HIDDEN") ErrPlanStaleRevision = errors.New("PLAN_STALE_REVISION") ErrPlanExpired = errors.New("PLAN_EXPIRED") ErrPlanDecisionConflict = errors.New("PLAN_DECISION_CONFLICT") ErrPlanDependencyInvalid = errors.New("PLAN_DEPENDENCY_INVALID") ErrPlanActionForbidden = errors.New("PLAN_ACTION_FORBIDDEN") ErrPlanActionVersionConflict = errors.New("PLAN_ACTION_VERSION_CONFLICT") ErrUnauthenticated = errors.New("ERR_UNAUTHENTICATED") ) var errTurnExists = errors.New("intentflow: turn exists") // ErrorCode returns the stable machine code for a sentinel, or empty. func ErrorCode(err error) string { switch { case errors.Is(err, ErrPlanNotFoundOrHidden): return "PLAN_NOT_FOUND_OR_HIDDEN" case errors.Is(err, ErrPlanStaleRevision): return "PLAN_STALE_REVISION" case errors.Is(err, ErrPlanExpired): return "PLAN_EXPIRED" case errors.Is(err, ErrPlanDecisionConflict): return "PLAN_DECISION_CONFLICT" case errors.Is(err, ErrPlanDependencyInvalid): return "PLAN_DEPENDENCY_INVALID" case errors.Is(err, ErrPlanActionForbidden): return "PLAN_ACTION_FORBIDDEN" case errors.Is(err, ErrPlanActionVersionConflict): return "PLAN_ACTION_VERSION_CONFLICT" case errors.Is(err, ErrUnauthenticated): return "ERR_UNAUTHENTICATED" case errors.Is(err, ErrSegmentProposalDisabled): return "SEGMENT_PROPOSAL_DISABLED" case errors.Is(err, ErrSegmentProposalMalformed): return "SEGMENT_PROPOSAL_MALFORMED" case errors.Is(err, ErrSegmentProposalTimeout): return "SEGMENT_PROPOSAL_TIMEOUT" case errors.Is(err, ErrSegmentProposalOutOfBounds): return "SEGMENT_PROPOSAL_OUT_OF_BOUNDS" default: return "" } }