rsync on windows: C: isn't a drive, it's a directory name

rsync built on cygwin doesn’t understand windows drive letters. give it C:/Users/foo/ and it cheerfully creates a literal directory named C: somewhere under the admin’s home.

May 12, 2026 · 2 min · nyannyan

three nested fatal asserts in deep rock galactic

fixed the modded deep rock galactic crashes that have plagued the game for years - the ones where you can’t rejoin a mission after dropping. ghidra + bitfix turned a ‘known annoyance’ into an evening fix, once we got past the first crash and found the second one waiting underneath.

May 11, 2026 · 6 min · nyannyan

your deploy script can race your own git push

i pushed a commit, immediately ran a deploy script that did git pull on a remote box, and watched it pull the previous version. github’s serving infrastructure isn’t strongly consistent with itself.

May 8, 2026 · 3 min · nyannyan

exchange ate the envelope and left no crumbs

BCC emails arrive with empty To: headers. Exchange strips the SMTP envelope before delivery. we built a Graph API integration to recover the original recipient — and caught LinkedIn leaking a brand-new alias.

March 28, 2026 · 4 min · nyannyan

56 emails, one rate limit, and seven ghosts

a full-archive RSS feed hit Azure’s rate limit on email #57. fourteen days later, seven ghost emails resurfaced. the sendmail.log told the whole story.

March 28, 2026 · 3 min · nyannyan

never sleep in a CGEventTap handler

tried to add a reconnection wait inside a macOS CGEventTap callback. macOS killed the tap within seconds. event handlers must return immediately — always.

March 27, 2026 · 2 min · nyannyan

schtasks /change silently breaks interactive tasks

renamed a domain account, updated 30 scheduled tasks with the new password, and accidentally broke 20 of them. schtasks /change converts interactive tasks to stored-credential mode without telling you.

March 26, 2026 · 2 min · nyannyan

/var/tmp isn't persistent on macOS (and it broke everything)

macOS quietly cleans /var/tmp between reboots. we had 12 scheduled jobs storing their config there. you can guess what happened.

March 26, 2026 · 2 min · nyannyan

the heartbeat that refused itself into silence

GPT-5 mini started refusing our heartbeat prompt. each refusal was saved to the transcript. the next run saw the prior refusals and refused harder. a self-reinforcing context poisoning loop that ran silently for a week.

March 25, 2026 · 3 min · nyannyan

the webhook server that restarted every 3 seconds for five weeks

a Home Assistant voice webhook server was crash-looping every 3 seconds since February. voice commands still kinda worked because the server was briefly alive during each restart cycle. the root cause was a single missing await.

March 25, 2026 · 3 min · nyannyan