./blog.sh 1.8

./blog.sh 1.8 is out — release on GitHub.

A release about what happens when something goes wrong. Every page, feed and index is now written to a temporary file and renamed into place, so a save interrupted by a full volume or a build stopped mid-write no longer leaves a page at half its length, or a post at 0 bytes with the old text gone. A cold build costs about a fifth more for it; a cached rebuild does not, so an ordinary day of publishing costs exactly what it did.

Arriving twice stopped meaning happening twice: a post sent from the phone twice, or one receipt delivered in two copies at once, is one post now, and re-importing this engine's own export no longer turns 1200 posts into 2400. And an address is no longer trusted just because it looks like one — a ../ in a slug, a media filename or a redirect target stays inside the site, a local deploy stays inside its directory, and a feed's redirect cannot send a fetch to localhost.

Before the tag, five narrow review passes went through the write paths, the build's output, import and export, check and the series; everything they found is fixed and pinned by a test that fails on the old code. Most of it nobody will ever meet. What you might: check asks what the build asks, so a page slugged index.html no longer stops every build while check calls the archive sound; an export no longer stops at the first broken post, and comes home with its empty paragraphs and embeds intact; a series of twenty parts or more opens at part one; and a part numbered 08 no longer loses its number to octal.

Nothing to migrate — git pull, rebuild, deploy. The first build renders every page once; on my own 6,600-post archive the deploy after it uploaded a single file, the Markdown cheat sheet. Full notes →

Comments