Generic actions vs Splode errors

Sorry, I’m not saying there isn’t a bug here. If you return {:error, :enoent} we should accept any value, and unknown values should ultimately be wrapped in an unknown error. Please open a bug in ash for that not working.

In the meantime:

You don’t need to set up your own entire Splode system to have custom errors. If you want to create your own “proper” invalid error, you’d only need to define the individual error:

defmodule MyApp.Errors.FileDoesntExist do
  use Splode.Error, fields: [:file], class: :invalid

  def message(%{file: file}) do
    "File #{file} doesn't exist."
  end
end

and then return {:error, MyApp.Errors.FileDoesntExist.exception(file: "filename")}

The bit about error classes is that there are only four error classes that Ash knows about.

:forbidden, :invalid, :framework and :unknown. Errors with a different class should be treated as :unknown, but you’re clearly having a bug where thats not happening.