Introduction
OpenAI announced on November 4 that it plans to acquire Pierre Computer Company. Pierre’s Trees and Diffs libraries already provide file navigation and change review in the Codex app. Pierre also makes Code Storage, a Git-based service for storing code and its history. OpenAI’s announcement
For a team reviewing AI-assisted changes, the useful question is what happens when separate pieces of work meet. We ran a small example to show one failure that a clean merge can miss.
Two passing branches, one broken receipt
We created a synthetic JavaScript project with a user record and a greeting. The user’s name was stored in a field called name. Two branches started from that same version:
- Rename the field: change
nametodisplayName, update the existing greeting and add a test for the new field. - Add a receipt: introduce a receipt function that reads the original
namefield, with a test expecting the text “For Taylor”.
Each branch passed its own tests. The receipt branch had no knowledge of the rename; the rename branch had no receipt to update.
Git then merged them without a conflict. The receipt branch added new files, so there were no competing edits to reconcile in those files. Git’s merge documentation explains how changes are combined and how conflicting paths are recorded. Our next step was a separate run of the application tests. Git merge documentation
- Field rename on its own: 2 tests passed, 0 failed.
- New receipt on its own: 2 tests passed, 0 failed.
- Combined merge: 2 tests passed, 1 failed.
- Receipt updated to the new field: 3 tests passed, 0 failed.
In the combined version, the user record returned this:
return { displayName: 'Taylor' };The new receipt still read this:
return `For ${getUser().name}`;The result was For undefined instead of For Taylor. Updating that reader to getUser().displayName made all three tests pass. The merge command had exited successfully, with no unresolved entries in Git’s index, before the failed application test exposed the mismatch.
Review the connection between changes
On a website, the same kind of mismatch could occur between a checkout form and an order summary, or between an account record and an email template. Those are possible applications of the example, not failures we observed in a customer system.
For a field rename, the review should follow both ends: the code producing the value and the code reading it. Search for the old field, inspect the consumers and run a check that exercises the combined behavior. Here, an assertion against the finished receipt caught the problem; the test of the user record alone could not.
When separate coding tasks are underway, keep the test result attached to the version actually tested. “Both branches passed” accurately described our two earlier runs. It did not describe the merged version. For this example, the useful acceptance check was the text the receipt produced after both changes were present.
We ran this fixture on November 4 using Git 2.53.0 and Node.js 22.22.3, with Node’s built-in test runner and no installed dependencies. We authored both branches to demonstrate the mismatch. This was a Git integration example, not an evaluation of Pierre’s libraries, Codex or a production application. Three passing tests cover the three assertions in this small fixture; they do not establish that an arbitrary application is ready to ship.
Availability and limits
The acquisition remains subject to closing conditions and regulatory approvals. OpenAI says Pierre’s open-source projects will remain open-source and Code Storage customers can continue after closing. The announcement gives no delivery date or pricing for the planned Codex additions. Acquisition status and product plans
Developers can find the existing Trees and Diffs projects through Pierre’s open-source directory. Download the original reproduction script and run python3 clean-merge-example.py in an empty working folder with Git, Node and Python available. It creates a new local repository and retains the branch, merge and test logs. It uses no provider account or installed dependencies.


