Skip to content

0.6.1 — a republish stops re-notifying every origin it quotes

Choose a tag to compare

@vgururao vgururao released this 28 Sep 20:06
· 34 commits to main since this release

⚠️ This one has a migration

git pull
npm ci --legacy-peer-deps
npx wrangler d1 migrations apply <your-db> --remote
npm run deploy

Every changelog entry in this project states Migrations: explicitly, and this is the first release where that line is not "none".

What it fixes

Spec 0.3 §15.2 says a republish re-sends a Webmention "only for references that are new or whose target version changed", and goes on to say that "the reference client records the target version per outbound reference for this purpose". It did not. The outbound queue is keyed (item_id, target) and held only the publisher's version, so every publish reset every row to pending — fixing a typo in a thread re-notified every blyg that thread quoted. Harmless when the network was two nodes nobody had heard of; rude at eleven.

  • The queue now stores target_version, and delivery state resets only when the row is new, when the target's version actually changed, or when the caller forces it.
  • The change test is null-safe (IS NOT, not <>), because a {url} stub has no target version and two nulls have to read as unchanged — otherwise a stub of a plain web page would re-send on every republish forever.
  • Withdrawal forces a re-send, and is the only caller allowed to. §15.7 owes the receiver one mention precisely because nothing about the target changed: it re-verifies, finds a withdrawn document, and marks the mention gone. Without that override the new rule would have swallowed the one notification a withdrawal exists to send.
  • Rows written before the migration have a null target version, and null→value counts as a change, so each pre-existing row re-sends at most once. §15.2 allows this in as many words — "a sender that re-sends everything on every republish is conformant but noisy" — and one noisy round beats a silent wrong answer.

If you run a blyg that other people quote, this release is the difference between your subscribers' edits reaching you as news and reaching you as noise.

531 tests, tsc --noEmit clean. Reasoning in CHANGELOG.md.