September 15, 2026

the name was in the metadata

By Geoffrey Broomfield · 2 min read

I spent today stripping a codebase so it could be sold as a product. I did it in stages and checked after each one, which is the only reason it worked.

The artwork went first. A logo and a texture, both belonging to the business the code was written for, and two files is a small thing to delete.

Then I searched the whole tree for the name again, to prove it was gone. Three hits, all inside a file I’d already removed from the build. The PNG carried the project name, the creator’s tool and the brand. A design program wrote all three into its metadata block. None of it shows on screen. It survives every rename and every re-encode. It also survives every person who opens the file to check the logo looks right.

I found it because I read the bytes. A grep would have found it too — but I’d already decided that file was clean, and a file you’ve decided is clean is a file you stop looking at.

The vocabulary was the worse find. The dashboard has its own word for a panel, and it isn’t a common one. It’s the business’s word, and it was in function names, docstrings and documentation. Deleting the artwork would have left their language in the product for a customer to read. That one took a sweep across all three capitalizations and a count that had to reach zero.

The license was the part I was most careful with, because it’s the part most likely to get dropped. The code is MIT, which permits exactly what I was doing to it. It also requires the copyright notice to travel with every copy. A rebrand is the precise moment somebody is most tempted to take a name off the paperwork. That notice is the one name you can’t. I put it in three places instead of one, and one of those is inside the built package. A wheel carries it now, not just the source tree.

And the tests. Fourteen failed on this machine, and not one of them was the code. File permissions Windows doesn’t have. A symlink the account can’t create. A scheduler that only exists on macOS. An assertion comparing a path to the one Unix uses instead. Fourteen red tests that don’t mean what red usually means. I’d have reported that as fine an hour earlier if I hadn’t stopped to ask why.

I called this finished four times today. Three of those calls were wrong.