Bloomberg's Automated Uplift initiative applied LLM-assisted migration pipelines to thousands of internal repositories, generating 2,333 pull requests that resulted in 729 successful migrations. By the team's estimates, the merged changes alone represent well over a thousand person-days of manual migration work.
The problem was a long tail of infrastructure migrations that are worth doing but rarely urgent enough to compete with feature work. Previously, the team owning a low-priority uplift would publish instructions and an FAQ and ask each owning team to migrate on its own, so every team rediscovered the same edge cases. Under Automated Uplift, a central team encodes its instructions in a pipeline that generates the migration pull requests, and owning teams review and deploy them.
The project started in October 2025. After three months of experimentation across five technology domains, two production campaigns ran from January 2026: a Python packaging migration (PyPackaging) across about 1,900 candidate repositories, with 294 pull requests generated, and a C++ build system migration from the internal CppBuild system to CMake across about 6,700 candidate repositories, with 2,039 pull requests generated.
The pipeline is hybrid: deterministic steps gather context through source analysis and, for packaging, runtime production telemetry such as startup logs and module usage traces; render an archetype-specific prompt; let the LLM perform a bounded change - editing files for PyPackaging, extracting structured data that templates turn into code for CMake; validate the result deterministically, re-invoking the LLM with the errors up to three times; and have a read-only LLM call write the pull request description. Validation is never delegated to the model, and each migration runs in its own container. The primary models were Claude Sonnet 4.5 for CppBuild-to-CMake and Claude Opus 4.6 for PyPackaging, with mean agent runs of about 13 turns (48 seconds) and about 63 turns (7.2 minutes). The central team reviewed generated pull requests in batches before handing them to owning teams.
Measured as of 30 June 2026, 34.2% of CppBuild-to-CMake and 10.5% of PyPackaging pull requests had been merged, while 57.7% and 67.7% had received no developer decision; 34 of the 51 PyPackaging repositories where a pull request was rejected later completed the migration themselves. The team found that generating migrations was the easier part: the bottleneck was the cost for owning teams of reviewing, testing and deploying them, which was lowest when the pipeline could verify a change itself before opening a pull request.