Eight pull requests to my manager's repoproject
Everything I’ve shipped on this blog runs on hardware I own, for users who share my last name. When something breaks, the stakes are a grumpy family and a bruised ego. This month was different: my manager keeps an open source personal side project, an Android app that turns a phone into a repair tool for a broken tablet or laptop (it identifies and writes the appropriate rescue image onto a USB drive, a chore that normally requires a working PC to begin with), and I decided to contribute. Which put me somewhere new: writing code for review by the person whose opinion of me extends beyond my hobbies. Craft wasn’t a virtue here; it was the assignment.
The work began with a restructuring pass: make the codebase easier to build on without changing a single visible behavior. My audit turned up three real imperfections (a step missing from a progress indicator, a write loop that doesn’t cancel cleanly, some inconsistent copy), and all three are still there, listed as follow-up suggestions in the pull request instead of silently fixed. I was looking to impress the guy, not insult him.

Then the AI ran ahead, with permission. After I reviewed and shipped the first restructuring by hand, I let the agent (the same cockpit that builds everything here) work through the rest of the plan we laid out together in one autonomous run. It came back with more than I bargained for: the planned six PRs had become eight stacked branches (each building on the last, meant to be reviewed in order), every one with its own wordy description.
The two extras survived my review because they were good judgment: the toolchain modernization split out on its own so the feature diffs stay readable, and a fix for the app’s pretend “erase” (a feelgood “Success!” message with nothing wired under the hood), replacing it with one that actually zeroes the drive. Of the eight branches, my favorite is the least necessary but most Googley: Chrome browser’s offline dinosaur game, rebuilt natively so there’s something to do while the drive writes, with physics constants pulled from the browser’s own source so it jumps exactly like the original.

An emulator can’t pretend to have a USB drive plugged in, so the screens that matter were unreachable anywhere but on real hardware. Validation required testing with two devices on my desk, a Pixel 10 Pro XL and a Pixel Tablet, driven over wireless ADB. The live test surfaced three real bugs, and the best one I misdiagnosed first: the dinosaur bled past the right edge of its play area, obstacles scrolling out across the screen. I blamed the sizing math. The model told me I was wrong: Android’s UI toolkit doesn’t clip a drawing canvas by default, so everything positioned “off-screen” was being painted anyway, just outside the frame. One clip call fixed what an evening of width arithmetic could not have. The other two fixes were judgment rather than geometry: a menu action that could interrupt a now-real erase mid-write is hidden while one runs, and a joke in the app’s rotating status quips (think “reticulating boot partitions”) got cut after I imagined it read aloud in an HR review.
Two decisions were about the relationship rather than the code. The pull requests carry no AI attribution, the same contract this blog runs on (the colophon explains it): a model drafts, I review, edit, and sign, and the name on the work means I answer for it. My manager, a PM executive, is reviewing my judgment either way; the tool doesn’t dilute the accountability. And where that judgment ran ahead of his brief, the pull requests say so out loud: two design calls are flagged in their descriptions as open questions for the reviewer (whether the system’s dynamic theming should keep overriding the app’s brand color, and the game scaling past the spec because strict scaling left it at about 55% width on a real phone) rather than being too opinionated and resolved silently.
All eight went up ordered, with a tracker comment laying out the review sequence, and my fork’s main branch stayed a clean mirror of his so the stack could collapse tidily as each one merged. It never got the chance to collapse slowly. Two weeks after the stack went up, he accepted the entire thing in one sitting: eight merges, in order, about three minutes end to end. I had budgeted patience for a piecemeal review and got a single burst of notifications instead, and the part I’d been rehearsing for our next 1:1 (defending the two flagged design calls) never came up; both went in as proposed. The dinosaur jumps in his repo now.