state_machine block from the rest of the resource using Spark.Dsl.Fragment. Bit of a catch-22 though, because without using the AshStateMachine extension there's notransition_state to use in actions, but with it there's no definition for initial_states. This hasn't been an issue for anything else, because for other extensions like AshGraphql, AshJsonApi, etc. there aren't the same kind of interdependencies and the rest of the stuff doesn't seem to get hung up because it's all in core.changes builtins, but also have their own DSL section large enough to want to split it.