Skip to content

fix: resilient standard.site publishing (retry + non-fatal)#8

Merged
fmalcher merged 1 commit into
mainfrom
feat/standard-site-hardening
Jul 22, 2026
Merged

fix: resilient standard.site publishing (retry + non-fatal)#8
fmalcher merged 1 commit into
mainfrom
feat/standard-site-hardening

Conversation

@fmalcher

Copy link
Copy Markdown
Member

A transient 502 UpstreamFailure from bsky.social failed an entire article-data build (angular-schule/website-articles run for #55), aborting before the deploy step. This hardens the publisher so a flaky PDS response can't block the primary build.

Changes

  • atproto.tsfetchWithRetry: retries transient conditions (network errors, 429, 5xx) with exponential backoff (4 attempts). Used by both xrpc and uploadBlob.
  • build.ts — the publishStandardSite call is wrapped in try/catch: a publish failure is logged, not thrown, so the standard.site side-effect never fails the article-data build/deploy. Records catch up on the next successful build.
  • STANDARD-SITE.md — documents the resilience behaviour and the icon convention (icon lives in the website repo's public/, referenced by URL).

Verification

  • npm run typecheck clean.
  • Happy path re-tested live (createSession + uploadBlob through fetchWithRetry) → OK.

A transient bsky.social response (e.g. 502 UpstreamFailure) failed the whole
article-data build, aborting before deploy. Harden it two ways:

- atproto.ts: retry transient conditions (network errors, 429, 5xx) with
  exponential backoff (4 attempts) in a shared fetchWithRetry, used by both
  xrpc and uploadBlob.
- build.ts: catch and log a publish failure instead of throwing, so this
  secondary side-effect never blocks the primary article-data build/deploy.

Also documents the icon convention and resilience behaviour.
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