Cutting a release is now a workflow, not a local command. Uses uv/commitizen (actions/setup-python is broken on the current runners). Supports auto-detect or forced increment, and a dry_run mode.