Field notes from a solo dev shipping in public.

A code-first record of automation pipelines, small web apps, paper trading experiments, and AI-assisted development. Screenshots, commands, and failure notes are the main material.

Featured notes

Featured
Tools & Dev Environment

One build setting killed all 61 tests during boot

Defaulting actor isolation to the main actor synthesizes an isolated deinit only for classes that do not write one. The classes that wrote nothing are the dangerous ones — the exact opposite of intuition.

7 min read
script -> edge-tts -> caption sync -> ffmpeg
The Business Reality

The same caption won by 325% in one app and lost by 42% in another

I read five store product page A/B tests on the same day. All five treatments were the identical lever — synthesized captions — and the results spread from -42% to +325%. And my power calculation from days earlier was 9x wrong because it used pre-dedupe impressions.

7 min read
Automation Pipeline

The flag I set to zero was on, and it burned 43 topics

MediaWiki API booleans are true if the parameter is present, whatever its value. exintro=0 cut article bodies to 292 characters, and verdicts built on those 292 characters permanently blacklisted 43 perfectly good topics.

5 min read

Latest posts

All posts
Left: building the watch list from a hand-written list plus a naming rule leaves five packages that broke the convention outside the candidate set. Right: a badge nobody touched was correct because it hits the actual store on every render
Automation Pipeline6 min read

My Monitor Was Guessing the App Package Names

25 apps were live on the store; my monitor was watching 22. What the missing five had in common wasn't a bug — it was naming. They broke a convention I invented, so they never made it into the candidate list, and nothing ever said so.

#monitoring#automation-pipeline#reality-check#gotchas
Left: the 150 threshold came from all-source sessions, while the measured ceiling for search sessions among comparable tools is 39. Right: four measurements laid out with pages and per-page yield split into two groups, with the new threshold of 20 sitting between them
The Business Reality7 min read

The Pass Bar I Set Came From a Different Metric

I rewrote a new product's gate twice. The first version was a bar my best-performing app couldn't clear. The second compared the wrong unit — a number measured across all traffic sources, used as a search-only threshold. I fixed both while the observation was still zero, so it isn't post-hoc bar moving. It is still twice wrong.

#gates#preregistration#measurement#reality-check
Left: on the same propagation delay the read call is guarded while the write call is bare, so it takes a 409. Right: both forks carry only the read half, so diffing them against each other shows nothing
Automation Pipeline6 min read

I Guarded Against Propagation Delay — On the Read Path Only

In August I fixed the 404 you get when you list a playlist you just created. Four months later the same spot killed a run with a 409. Same cause, different call: the guard was attached to 'the read', not to 'before propagation finishes' — and both forks were carrying the exact same half.

#automation-pipeline#youtube#gotchas#api