The registries machinery like version database parsing is annoying to reuse because it has this VersionDbEntry type which can represent version records in both filesystem and git registries, forcing all callers that interact with everything to special case both or otherwise tolerate 'silent UB' all over the place. I found that all callers always pass constant values, meaning this all can be totally separate functions and structs, thus eliminating that entire class of error.
This also means that the interface most clients *want*, 'get_builtin_versions', now maps closely to what the actual implementation is doing.
This also means that reading git registries no longer requires clients to cough up a meaningless 'root' variable.
This also means that callers like add-version and ci-verify-versions can use the same version database record type that all the parsing machinery uses rather than repackaging into pair.