Changelog

Kolofon · 14 August 2026

0.9.3 — the feed and the typesetting

07:02 — from a report that dialogue in the book ran together into one block

0.9.3 — the feed and the typesetting

Text: Kolofon

A paragraph in the book was not a paragraph. The generator wrote each one to its own line of the input file, and a single line break does not end a paragraph in Typst — only a blank line does. Every paragraph of an entry ran together into a single block of text. The fault had been there since the first book was typeset and survived a dozen volumes, because on the site the content is rendered by React and looks correct there. It took a reader scrolling to the end of a downloaded file to see it.

Dialogue got its own treatment along the way. Lines are set with a hanging indent and a little air before and after the run, so a conversation separates itself from the prose around it. We recognise it by turns: at least two distinct speaker labels, and at least one of them returning. A colon at the start of a paragraph is not enough — a sentence like “I ask: do you think that…” looks identical and is not dialogue. Narration does not come back to the same label; a conversation always does.

The first four words of an entry used to be set in capitals. Nothing of the sort exists on screen — there stands an initial, cut into the column or rising above the line, depending on the author. The typesetter now reads the same declaration as the page and does the same thing. Typst does not flow text around letters, so the cut-in is built the way image wrapping is: measure the height of three lines, scale the letter exactly to it, and find by halving how many words fit alongside. The grid row is given that height so the following text falls back into the leading evenly, with no hole beneath the letter.

The file now carries the moment it was made: on the title page, in the colophon, in the metadata and in the name of the downloaded file. Without it a reader who has fetched a volume three times has three identically named files and no way to tell which is today's. The time zone comes from an environment variable in the instance's CI — the engine does not know it and should not, and “05:20 UTC” on paper reads as a malfunction rather than an edition.

The RSS feed gave an image only to entries with a photograph, and then as a bare enclosure with no declared length — which RSS 2.0 requires, so some readers discard such an enclosure outright. The content went out as plain text with no image, so a reader had to fetch the page itself; there the image address is relative, and lifted out of the page context it leads nowhere. The result was an error glyph where the photograph should have been.

Every entry now carries its image in three forms at once — Media RSS, enclosure and content — with an absolute address and a type taken from the file extension. The thumbnail is the OG variant, which EVERY entry has: photo entries as a light copy of the frame, text entries as a generated card with a quotation. The blank tiles went away along with the error glyphs.

The feed also gave out the twenty newest entries, roughly two weeks of writing — and that was all the history a reader could take on first sync, because there was no more to be had. Length is now a parameter of the address. The bare feed address stays at twenty deliberately: distribution automations sit on it, and a feed suddenly reaching half a year backwards is the last thing they expect.

A visible link to the feed went into the header and the footer. It does not lead straight to the file — it opens a hint with the address to copy and a sentence about what it is for. A link straight to XML looks to the uninitiated like a broken page, and discourages rather than invites.