updateLockedDependency() only searched the packages section of
composer.lock, so updates to packages-dev dependencies were never
recognized as already committed to the branch. Every Renovate run then
fell back to a full artifact update and rebuilt the branch from a clean
base, force-pushing grouped composer PRs containing dev dependencies
whenever the base branch had moved - even with identical content.
Moves datasource, manager, platform and versioning code from lib/ into new lib/modules/
BREAKING CHANGE: External tools must update paths to datasource, manager, platform and versioning