2 min read

Breaking everything; did:web CLI Tool

Breaking everything; did:web CLI Tool

When it rains it pours, I guess. After yesterday's period of recovery from Saturday's debauchery, I am taking a sick day for a severe case of stummy hurty. Being in your 30s sucks, man. I brought this on myself: the compounding interest on a night of drinking followed by a day of eating poorly is fairly predictable but I still make this kind of mistake once every few months. Oh well. Live and learn, or don't, whatever.

Anyway, I'm using this as justification for today's lazy project, which was 90% vibe coding with Claude Code. I've been meaning to try it out for a while and this seems like a good candidate for it, so I just gave it the atproto-did-web repo from yesterday and gave it instructions to generate a CLI tool for the same process. Fair warning, I cannot in good conscience recommend its use: I did minimal code review and anything that asks you to enter a private key probably shouldn't be trusted/used. This worked well enough after some issues getting fetch to play nicely - it made an npm cli tool that can run all the different API commands for generating keys and validating and creating accounts.

The fun part of this is that after deleting my old account with sudo pdsadmin account delete did:web:atproto.bront.rodeo, I appear to have broken every attached service by recreating my account with the same did. My bluesky profile was deleted:

And while the record for my did:web exists in PDSLs, the profile itself doesn't (I'm guessing because it's reliant on Bluesky for profile info?)

My best guess is that by not deleting my Bluesky account before deleting the did:web from my self-hosted PDS, I've created some sort of conflict that can't be resolved, since as far as I can tell the new did.json file is functionally identical to the previous one. I even tried using putRecord to create a Bluesky profile manually, which worked but hasn't solved the issue with my account apparently not existing. I'll probably go through this process with yet another URL tomorrow - I'm glad I was using a test/throwaway URL for this instead of something I actually wanted to park.

I am not sure I learned a ton today but at least I have discovered that deleting your did:web is probably not a great idea and I learned some new easy curl tricks for my self-hosted PDS. 'Til tomorrow.