version: str
vinfo: VersionInfo
Using `version: str` meant that version.parse_version_info implicitly used the "{pycalver}" pattern. The changed parameter vinfo: VersionInfo now requires the caller (with access to cfg.version_pattern) to provide the correctly parsed vinfo.
Using ValueError for everything caused underlying issues to be hidden. Now there are explicit classes for each error condition.