The counterpart to load_config(), and what both generate_config() and the
app's download button use, so a config saved from a session and one written
programmatically are the same file.
Details
species$resolved is dropped. load_config() derives it on the way in, and
writing it back would put a computed field in a file meant to be edited by
hand — and one that silently overrides the catalog it was derived from.
Examples
if (FALSE) { # \dontrun{
config <- load_config("my_run.yaml")
config$model$trees <- 1000
save_config(config, "my_run_1000.yaml")
} # }