{"record":{"id":"75a206cd48569363","repo":"puppetlabs/puppet","slug":"could-not-action-module-name-version-75a206","errorCode":null,"errorMessage":"Could not %{action} '%{module_name}' (%{version}); downgrades are not allowed","messagePattern":"Could not %(.+?) '%(.+?)' \\(%(.+?)\\); downgrades are not allowed","errorType":"exception","errorClass":"Puppet::ModuleTool::Errors::DowngradingUnsupportedError","httpStatus":null,"severity":"error","filePath":"lib/puppet/module_tool/applications/upgrader.rb","lineNumber":185,"sourceCode":"                  :directory => mod.path,\n                  :metadata => mod.metadata\n          end\n\n          child = releases.find { |x| x.name == name }\n\n          unless forced?\n            if child.version == results[:installed_version]\n              versions = graph.dependencies[name].map(&:version)\n              newer_versions = versions.select { |v| v > results[:installed_version] }\n\n              raise VersionAlreadyInstalledError,\n                    :module_name => name,\n                    :requested_version => results[:requested_version],\n                    :installed_version => results[:installed_version],\n                    :newer_versions => newer_versions,\n                    :possible_culprits => installed_modules_source.fetched.reject { |x| x == name }\n            elsif child.version < results[:installed_version]\n              raise DowngradingUnsupportedError,\n                    :module_name => name,\n                    :requested_version => results[:requested_version],\n                    :installed_version => results[:installed_version]\n            end\n          end\n\n          Puppet.info _(\"Preparing to upgrade ...\")\n          releases.each(&:prepare)\n\n          Puppet.notice _('Upgrading -- do not interrupt ...')\n          releases.each do |release|\n            installed = installed_modules[release.name]\n            if installed\n              release.install(Pathname.new(installed.mod.modulepath))\n            else\n              release.install(dir)\n            end\n          end","sourceCodeStart":167,"sourceCodeEnd":203,"githubUrl":"https://github.com/puppetlabs/puppet/blob/e227c27540975c25aa22d533a52424a9d2fc886a/lib/puppet/module_tool/applications/upgrader.rb#L167-L203","documentation":"Raised by the Upgrader as Puppet::ModuleTool::Errors::DowngradingUnsupportedError when the resolved release's version is lower than the installed version and --force was not passed. The `upgrade` action intentionally refuses to move backwards; downgrades must be explicit.","triggerScenarios":"Running `puppet module upgrade <name> --version <older>` (or letting a dependency graph resolve to a lower version) when the installed version is higher, e.g. installed 9.1.0 and requesting --version 8.5.0.","commonSituations":"Rolling back a module after a bad release by using upgrade --version with an older number; a constrained graph resolving to an older release than the one installed; CI templates that pin an old version string.","solutions":["Do the rollback explicitly: `puppet module uninstall <name>` then `puppet module install <name> --version <older>`","Or reinstall over it in one step: `puppet module install <name> --version <older> --force`","If the downgrade is intended via upgrade, add --force: `puppet module upgrade <name> --version <older> --force`","Double-check the version pin in your Puppetfile/scripts so future upgrades request a newer version"],"exampleFix":"# before\n$ puppet module upgrade puppetlabs-stdlib --version 8.6.0   # installed 9.1.0\n# Error: Could not upgrade 'puppetlabs-stdlib' (8.6.0); downgrades are not allowed\n\n# after\n$ puppet module install puppetlabs-stdlib --version 8.6.0 --force","handlingStrategy":"validation","validationCode":"mod = env.modules.find { |m| m.forge_name && m.forge_name.tr('/', '-') == name }\nif mod && mod.version && options[:version]\n  target = SemanticPuppet::Version.parse(options[:version].to_s)\n  if target < SemanticPuppet::Version.parse(mod.version)\n    # downgrade path: install --force, not upgrade\n    Puppet::ModuleTool::Applications::Installer.new(name, options).run\n  end\nend","typeGuard":null,"tryCatchPattern":"begin\n  Puppet::ModuleTool::Applications::Upgrader.new(name, options).run\nrescue Puppet::ModuleTool::Errors::DowngradingUnsupportedError\n  Puppet::ModuleTool::Applications::Installer.new(name, options.merge(force: true)).run  # explicit downgrade\nend","preventionTips":["Use `puppet module install --version` for rollbacks; reserve upgrade for moving forward","Assert requested version > installed version in scripts before calling the upgrader","Keep Puppetfile pins monotonic in CI so accidental downgrades fail fast"],"tags":["puppet","module-tool","upgrade","downgrade","version-management"],"backgroundTag":"downgrade-not-supported","analyzedSha":"e227c27540975c25aa22d533a52424a9d2fc886a","analyzedAt":"2026-08-21T20:49:46.650Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}