Skip to main content

What it checks

The publisher polls app.bsky.video.getJobStatus every 2 seconds for up to 6 minutes. If the job is still in a non-terminal state (CREATED / ENCODING_IN_PROGRESS / SCANNING) when the deadline hits, we surface this rule rather than holding the request open indefinitely.

Why

Most Bluesky video transcodes finish in seconds. Long clips, heavy-bitrate sources, or service-side congestion can push past the deadline. Holding a synchronous publish open for 10+ minutes is worse UX than failing fast and letting the caller retry — Bluesky deduplicates by content hash, so a retry skips re-uploading the bytes.

Failure response

Remediation

  • Retry the publish. The upload is content-addressed; the second attempt skips the bytes phase.
  • If timeouts are persistent, shorten the clip (Bluesky caps duration at 60 s anyway) or reduce bitrate.