← Wisp

Notes

Write-ups of the traps hit while building Wisp, a desktop AI agent with a VRM body. Measurements and mistakes, not announcements.

The jitter wasn't in the interpolation. It was in the schedule.

One symptom, three unrelated causes, and the order to check them in. Including a threshold-free test for telling a real kink from a smooth curve.

My VRM was rejected at upload and every viewer I own said it was fine

The mesh data was correct. The declaration about the mesh data was wrong — and rendering never reads the declaration, so nothing local could see it.

I set the font to the largest size and found the same bug eleven times

Reading the code found none of them. Screenshots found all eleven — and Japanese broke worse than English, because Japanese can wrap anywhere.

My dev environment was hiding eight production bugs

Every convenience in my development setup was concealing a defect on the other side of it. Counting the conveniences found the bugs faster than looking for the bugs.

My evidence pipeline was saving Cloudflare block pages as evidence

A third-party wrapper died, and the failure came back as a plausible-looking image with an HTTP 200 attached. What broke, and what I changed.

I redacted my username from a screen recording three times and missed it every time

Fixed rectangles cannot hide a dialog that animates in. I tracked the text with an FFT correlation, missed it twice more, and finally scanned the finished file with a machine — which found one more frame nobody was looking at.

My approval dialog grew until the buttons went off screen

Showing the user everything the agent is about to do, and letting them actually choose, are two different properties. I only had the first one, and it took a demo recording to find out.

Where to split a sentence for streaming TTS is decided by one number

The split point for streaming text-to-speech follows from the real-time factor. I measured that factor on a machine with a full disk, got it 4x wrong, and shipped a constant that was never going to fail loudly enough to notice.