GuidesDiagnose publishing incidents from the symptom first
A runbook for missing, duplicate, partial, delayed, unauthorized, and media-rejected social posts without unsafe automatic retries.
Last updated September 3, 2026 · 7 min read · The Naasher team · Editorial and corrections policy (Arabic) · اقرأ بالعربية
Answer first: start from what the operator sees, freeze automatic retries, and separate local scheduling from the remote provider result. Confirm the intended identity and inspect the remote account before creating a replacement.
Capture a safe incident envelope
Record the local post/job identifier, provider, intended account label, scheduled timestamp and time zone, content format, last state, provider identifier if present, and timestamps for each transition. Keep access tokens, secrets, private messages, unpublished customer copy, and browser sessions out of tickets and screenshots.
Route by symptom
| Symptom | Likely boundary | Safe next action |
|---|---|---|
| Nothing appeared at the expected time | Time zone, queue, worker, or provider rejection | Confirm UTC conversion, job state, and provider response before rescheduling |
| Status is uncertain after timeout | Response lost after possible provider acceptance | Open the remote account and query by provider ID; do not replay blindly |
| Local status says failed but the post is live | Late provider success or response lost after acceptance | Mark failed-but-live, retain both timestamps, and suppress replacement |
| Only part of a thread published | Sequential mutation failed after earlier success | List remote parts, preserve IDs, then decide whether to complete or remove manually |
| Duplicate post | Retry or two active schedulers | Pause both schedules, retain IDs, remove only the approved duplicate |
| Authorization error | Expired grant, revoked role, or missing scope | Confirm account owner and role, then reconnect through the provider |
| Media rejected or stuck processing | Format, size, codec, URL, or asynchronous processing | Compare the exact asset with current provider rules; wait only within the documented window |
| Wrong account published | Identity selection or stale authorization | Stop remaining jobs, notify the owner, remove only with authorization, and rebind identity |
| A successful post later disappears | Provider moderation, author deletion, or policy enforcement | Preserve initial success evidence, record the later remote state, and alert the content owner |
Distinguish retryable from unsafe
A rate limit with a Retry-After value is usually retryable at the stated time. A confirmed authentication failure needs a corrected grant, not repeated requests. Validation failures need new content or media. A connection reset or timeout after sending a create request is uncertain: the provider may have accepted it. Query status or inspect the remote identity first.
Threads are especially sensitive. X, Threads, Bluesky, and other reply chains may create parts sequentially. Earlier parts can be live when a later call fails. Treat “partial” as its own state and preserve the returned identifiers.
Use the native surface as independent evidence
The scheduler database proves what it intended and recorded. The worker log proves an attempt. The provider response proves what the API returned. The visible remote post proves what users can see. Keep these layers separate in the timeline; one does not substitute for another.
If a provider offers its own status endpoint, query it with the retained operation ID. For inbox-upload workflows, distinguish upload completion from the creator's later publication. For media containers, distinguish container creation and processing from the publish call.
Reconcile late success and partial targets
Model failed-but-live, partial, and moderated-after-success explicitly. A late success must close the replacement path and notify the incident owner before another copy is created. For a multi-target post, retain one result per provider account; retry only the confirmed failed target, never the entire source batch.
An alert should identify the workspace, intended account label, local item ID, target state, scheduled time and zone, and next safe action. It must not contain tokens or unpublished copy. Route uncertain and wrong-account outcomes to a human immediately; routine retryable rate limits can remain in an operational queue with their documented next attempt.
When diagnosing duplicates, trace every possible source: two active schedulers, a manual native post, a webhook consumer, an agent/API caller, a migration replay, or a user clicking retry after a slow response. Match source IDs and timestamps before deleting anything. Two visually identical posts do not prove which one is the duplicate.
A Naasher worked example
Naasher uses bounded retry behavior around provider mutations and leaves uncertain outcomes for verification instead of automatically replaying them. An operator should open the target network, compare provider IDs, and decide whether to complete, cancel, or replace the post. TikTok SEND_TO_USER_INBOX is a handoff, not public publication. An X thread can be partial because each reply depends on the previous returned post ID.
Close the incident with prevention
- Revoke stale credentials and remove former staff access.
- Add the failed format to the acceptance matrix.
- Keep only one active scheduler during migration.
- Show account identity, time zone, and format at approval.
- Preserve provider IDs in operational history.
- Test a known failure case before trusting automatic recovery.
Close only when the remote state matches the decision, future jobs are safe, and the prevention owner is named. “The retry passed” is not enough if the first mutation may still exist.
Frequently asked questions
- Should I retry a post when the request times out?
- Not until you check the remote account and any provider identifier. A timeout can happen after the provider accepted the mutation, so an automatic repeat may duplicate the post.
- What is the first thing to record?
- Record intended identity, scheduled time and zone, format, local post or job ID, provider request or post ID, last confirmed state, and who is investigating. Do not copy tokens or customer content into a public ticket.
- When is reconnecting appropriate?
- Reconnect after confirming an expired or revoked grant, changed role, or missing scope. Reconnecting does not repair unsupported media, app-level approval, or provider processing.