{"record":{"id":"038602350d6c1a79","repo":"withastro/astro","slug":"be-sure-to-follow-the-pluralize-changelog-maj","errorCode":null,"errorMessage":"Be sure to follow the ${pluralize('CHANGELOG', majors.length)}.","messagePattern":"Be sure to follow the (.+?)\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"info","filePath":"packages/upgrade/src/actions/install.ts","lineNumber":74,"sourceCode":"\t}\n\tif (majors.length > 0) {\n\t\tconst { proceed } = await ctx.prompt({\n\t\t\tname: 'proceed',\n\t\t\ttype: 'confirm',\n\t\t\tlabel: title('wait'),\n\t\t\tmessage: `${pluralize(\n\t\t\t\t['One package has', 'Some packages have'],\n\t\t\t\tmajors.length,\n\t\t\t)} breaking changes. Continue?`,\n\t\t\tinitial: true,\n\t\t});\n\t\tif (!proceed) {\n\t\t\treturn ctx.exit(0);\n\t\t}\n\n\t\tnewline();\n\n\t\tawait warn('check', `Be sure to follow the ${pluralize('CHANGELOG', majors.length)}.`);\n\t\tfor (const pkg of majors.sort(sortPackages)) {\n\t\t\tawait changelog(pkg.name, pkg.changelogTitle!, pkg.changelogURL!);\n\t\t}\n\t}\n\n\tnewline();\n\tif (ctx.dryRun) {\n\t\tawait info('--dry-run', `Skipping dependency installation`);\n\t} else {\n\t\tawait runInstallCommand(ctx, dependencies, devDependencies, shellFn);\n\t}\n}\n\nfunction filterPackages(ctx: Pick<Context, 'packages'>) {\n\tconst current: PackageInfo[] = [];\n\tconst dependencies: PackageInfo[] = [];\n\tconst devDependencies: PackageInfo[] = [];\n\tfor (const packageInfo of ctx.packages) {","sourceCodeStart":56,"sourceCodeEnd":92,"githubUrl":"https://github.com/withastro/astro/blob/52e6c34790cc8ac4e69e6135ace06049867e5c4a/packages/upgrade/src/actions/install.ts#L56-L92","documentation":"This is not an error: `astro upgrade` prints it after you confirm upgrading packages that cross a major version (packages/upgrade/src/actions/install.ts:74). The tool detects major bumps in the packages it is about to install, prompts '... breaking changes. Continue?', and on 'yes' emits `warn('check', 'Be sure to follow the CHANGELOG(s).')` followed by each package's changelog title and URL (e.g. astro, @astrojs/mdx). It exists because majors of Astro packages routinely contain breaking config or API changes, and skipping the changelog is the top cause of broken upgrades.","triggerScenarios":"Running `npx astro upgrade` (or the integrated upgrade command) when at least one outdated dependency has `isMajor: true` — i.e. the latest version's major is greater than the installed one (astro 4→5, @astrojs/vue 4→5) — and answering the confirm prompt affirmatively. Immediately after, the changelog links for each major package are printed, then the installer proceeds (or is skipped with --dry-run, which still prints the warn).","commonSituations":"Upgrading across Astro major releases (e.g. 4.x → 5.x) where astro and several @astrojs/* integrations jump majors together; running `astro upgrade` in a CI or scripted environment where the changelog output is piped away and never read; maintaining a starter template whose many integrations all bump majors at once.","solutions":["Open each printed changelog URL and apply the migration steps for the majors you crossed before running the app (Astro maintains per-major upgrade guides linked at the top of each changelog).","If you were not ready for breaking changes, re-run `astro upgrade` and answer 'no' at the confirm prompt (or Ctrl+C) — it exits 0 without installing; or upgrade selectively with `astro upgrade astro@4` style pins.","Use `astro upgrade --dry-run` first to preview which packages are majors and read the changelogs before committing to the install.","After upgrading, run `astro build`/your test suite immediately to surface breaking changes rather than discovering them at deploy time."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run `astro upgrade --dry-run` first to see which packages cross majors, then read the linked changelogs before answering the confirm prompt.","Read Astro's official upgrade guide for each major you cross (linked from the changelog) — most upgrade breakages are config/API migrations documented there.","Upgrade in a clean git branch with all tests green before and after, so breaking changes surface as diffs rather than production incidents.","Answer 'no' at the breaking-changes prompt to abort cost-free if you haven't reviewed the changelogs yet; nothing is installed until you confirm."],"tags":["upgrade","cli","changelog","breaking-changes","major-version"],"backgroundTag":"major-upgrade-breaking-changes","analyzedSha":"52e6c34790cc8ac4e69e6135ace06049867e5c4a","analyzedAt":"2026-08-18T18:48:03.901Z","contentChangedAt":"2026-08-18T18:48:03.901Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}