Skip to content

feat(websub): advertise the hub on both feeds - #145

Merged
jdevalk merged 1 commit into
mainfrom
feat/websub-go-live-2026-07-31
Jul 31, 2026
Merged

feat(websub): advertise the hub on both feeds#145
jdevalk merged 1 commit into
mainfrom
feat/websub-go-live-2026-07-31

Conversation

@jdevalk

@jdevalk jdevalk commented Jul 31, 2026

Copy link
Copy Markdown
Owner

Steps 5 and 6 of the go-live checklist in wrangler.toml. The D1 binding landed separately in c588a61, so the hub can actually serve subscriptions — this is the commit that makes it discoverable.

Order matters here and this is the safe direction. A rel="hub" link with nothing behind it is the exact failure the spec page names: "an advertisement is not a delivery mechanism." Binding first, advertisement second.

What changed

  • public/_headersrel="hub" and rel="self" on /rss.xml and /changelog/rss.xml. This is the authoritative copy; subscribers check headers before embedded elements (WebSub §4).
  • src/pages/rss.xml.ts and src/pages/changelog/rss.xml.ts — the <atom:link rel="hub"> fallback inside each feed body.
  • api-catalog — a hub linkset entry.
  • websub.md — the worked-example callout CLAUDE.md requires once the site is an example of its own page. It says explicitly that this is a self-hub with hub.topic allowlisted to our two feeds, and that pointing at a hosted hub is the ordinary choice — so the page doesn't read as "you should run one too". updated bumped.

Consistency check

_headers warns to keep three copies of the topic list in sync. ALLOWED_TOPICS in functions/websub.ts lists exactly the two rel="self" URLs now advertised. All three agree.

Checks

npm run build ✓ · npm run lint ✓ · npm run format:check ✓ · npm run test:websub ✓ · npm run check:skill ✓ (166 pages)

Verified in the built output rather than the source: both dist/rss.xml and dist/changelog/rss.xml carry <atom:link href="https://specification.website/websub" rel="hub"/>, and api-catalog re-parses as valid JSON.

Still to do after merge (step 7)

  • I'll curl -sI https://specification.website/rss.xml once Pages deploys and confirm the Link header carries rel="hub" in production.
  • A manual workflow_dispatch run of websub-ping should return 202 — yours, since it needs the Actions secret and fans out to any live subscribers.
  • subscribe → verify → distribute has still never been exercised end to end. Neither check above proves a real handshake. websub.rocks pointed at /websub would.

🤖 Generated with Claude Code

Step 5 and 6 of the go-live checklist in wrangler.toml. The D1 binding
landed in c588a61, so the hub can now serve subscriptions and it is safe
to advertise — advertising first is the failure the spec page warns about.

- public/_headers: rel="hub" + rel="self" on /rss.xml and /changelog/rss.xml.
- Both RSS endpoints: the atom:link rel="hub" fallback copy.
- api-catalog: a `hub` linkset entry.
- websub.md: the worked-example callout, and why this is a self-hub rather
  than an open one. `updated` bumped.

ALLOWED_TOPICS in functions/websub.ts lists exactly the two rel="self" URLs
now advertised, so all three copies of the topic list agree.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying specification-website with  Cloudflare Pages  Cloudflare Pages

Latest commit: 40ba5d6
Status: ✅  Deploy successful!
Preview URL: https://28819a74.specification-website.pages.dev
Branch Preview URL: https://feat-websub-go-live-2026-07.specification-website.pages.dev

View logs

@jdevalk
jdevalk merged commit ee9eee1 into main Jul 31, 2026
8 checks passed
@jdevalk
jdevalk deleted the feat/websub-go-live-2026-07-31 branch July 31, 2026 13:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant