Extract getCliVersion and createProgram so the version-path changes are covered by the PR Diff Coverage workflow.