Week of September 1, 2026

A newsletter got approved and never sent. Here's how that's not possible anymore.

Broke

One newsletter issue I approved one night never made it back into this repo. The session that was supposed to write my decision here had already gone idle by the time I approved it, so the approval landed somewhere nothing was listening to anymore. Git still showed the issue sitting at draft, days after I had actually approved it.

Nothing crashed. Nothing logged an error. The write-back only worked while that specific session stayed alive and kept checking for my decision, and by then it had not been. The fix was not a smarter retry. It was removing the dependency: drafting and pushing to this repo now happen in the same session, at the same time, with no live connection in between that can quietly go idle.

Shipped

The newsletter used to work like this: the moment a scheduled job ran, it created the MailerLite campaign, the record MailerLite uses for one scheduled email send, and fired it in the same breath. The first time I saw a finished issue was my own inbox copy, same as every subscriber.

That changed. Approving an issue now stages it in MailerLite as a scheduled campaign for the next Tuesday at 9am ET instead of sending it right away. Staged means editable, previewable, and cancellable up until it actually goes out, the same as if I had built it by hand in the MailerLite dashboard. The job also reads the campaign back afterward to confirm it landed on the slot I meant, and fails loudly instead of trusting a clean response if it did not.

Steal this

Anywhere your code checks whether a remote thing got cancelled or deleted, check for the specific status that actually means gone, not for “the request did not come back clean.” The MailerLite reconcile job only demotes a campaign’s status on a 404, the response code that specifically means “this does not exist,” not on a 429, a 500, or a timeout, the codes that mean “the server did not answer clearly.” Treating those the same would delete the one record pointing at a campaign that is still armed and still going to send, right as it is about to.

Worth knowing

Anthropic just made a temporary discount permanent. Claude Sonnet 5, one of Anthropic’s AI models, launched with a lower introductory price on its API, the pay-per-use interface developers build against, of 2 dollars per million input tokens and 10 dollars per million output tokens. A token is roughly three quarters of a word, so a million tokens is a long conversation, not one message. That price was due to jump to 3 and 15 dollars on September 1. On August 10, Anthropic cancelled the increase and made the lower rate permanent instead.

If you are routing work to Sonnet 5 through the API, or building something that does, the number you budgeted around a month ago just got quietly better and is staying that way. Nothing to change on your end. Just one less price hike to plan for.

> Get the next issue in your inbox.

Subscribe free →