npm ci is not a faster npm install. It deletes node_modules entirely, installs exactly what the lockfile pins, and never writes the lockfile back. If a dependency range in package.json cannot be satisfied by the locked tree, it aborts with npm ci can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync, followed by a list of the offending packages.
The usual cause is a hand-edited package.json, or a merge that resolved package.json but took the other side's lockfile. It also fires when a teammate on a different npm major regenerated the lockfile with a different lockfileVersion.
The fix is to run npm install locally, commit the updated lockfile, and re-run CI. Do not delete the lockfile to make the error go away, because that discards every transitive pin and turns a reproducible build into a fresh resolution. npm ci also refuses to run at all if no lockfile is present, which is the intended behavior for a CI job.