{
  "schema_version": "1.1",
  "id": "s4:https://vercel.com/changelog/atomic-start-hooks-in-the-workflow-sdk",
  "slug": "atomic-start-hooks-in-the-workflow-sdk-1jf1nj8",
  "url": "https://feed7.dev/p/atomic-start-hooks-in-the-workflow-sdk-1jf1nj8",
  "title": "Workflow SDK adds idempotent starts",
  "why_included": "Workflow SDK 5.4.0 atomically admits a run and claims its hook, preventing duplicate starts from racing through a separate lookup and start.",
  "summary": "In **Workflow SDK 5.4.0**, `start()` can admit a run and claim a hook atomically. A duplicate token raises `HookConflictError` and identifies the run that owns it.",
  "practical_implication": "Use a domain identifier such as an order or request ID as the token to make starts idempotent. For duplicates, `resumeHook` can route the payload to the existing run; early payloads are buffered and delivered in order.",
  "agent_context": "In **Workflow SDK 5.4.0**, `start()` can admit a run and claim a hook atomically. A duplicate token raises `HookConflictError` and identifies the run that owns it.\n\nUse a domain identifier such as an order or request ID as the token to make starts idempotent. For duplicates, `resumeHook` can route the payload to the existing run; early payloads are buffered and delivered in order.\n\n`experimental_minRetention` keeps a token unavailable after the run ends. The material does not specify when that option becomes stable.",
  "source": {
    "name": "Vercel",
    "url": "https://vercel.com/changelog/atomic-start-hooks-in-the-workflow-sdk",
    "published_at": "2026-11-04T18:55:00.000Z"
  },
  "source_class": "blog_post",
  "content_type": "Engineering Post",
  "layer": "infra",
  "domains": [
    "coding"
  ],
  "topics": [
    "agent-reliability",
    "tool-use"
  ],
  "verification": {
    "status": "official_source",
    "label": "Official Source",
    "method": "source_feed",
    "verified_at": null
  },
  "uncertainty": [
    "`experimental_minRetention` keeps a token unavailable after the run ends. The material does not specify when that option becomes stable."
  ],
  "connected_context": {
    "meaning": "This makes workflow start idempotency concrete: a domain token can atomically identify an existing run and hook, with duplicate payloads routed to that run and buffered in order. It narrows the general need for idempotency and recovery to a specific SDK mechanism; retention beyond run completion remains experimental.",
    "corpus_size": 1009,
    "generated_at": "2026-11-05T11:03:41.291Z",
    "connections": [
      {
        "title": "AI Agents Are Just Distributed Systems Now — Salman Munaf, TikTok",
        "source_name": "AI Engineer",
        "source_url": "https://www.youtube.com/watch?v=hD9-V56FNRI",
        "feed7_url": "https://feed7.dev/p/ai-agents-are-just-distributed-systems-now-salman-munaf-tiktok-1v4yc47",
        "reason": "The talk identifies idempotency and explicit recovery as distributed-systems requirements when tool outcomes are uncertain; this SDK feature supplies a concrete mechanism for deduplicating workflow starts and routing duplicate payloads."
      },
      {
        "title": "Pause workflows for approval with Chat SDK",
        "source_name": "Vercel",
        "source_url": "https://vercel.com/changelog/chat-sdk-durable-approvals",
        "feed7_url": "https://feed7.dev/p/chat-sdk-durable-approvals-1yfmvu0",
        "reason": "Both describe durable workflow handling across asynchronous events: Chat SDK suspends for a human decision, while Workflow SDK buffers early hook payloads and resumes the owning run."
      }
    ]
  },
  "lifecycle": "Current",
  "published_at": "2026-11-04T18:55:00.000Z",
  "modified_at": "2026-11-04T18:55:00.000Z",
  "supersedes": [],
  "expires_at": null,
  "formats": {
    "html": "https://feed7.dev/p/atomic-start-hooks-in-the-workflow-sdk-1jf1nj8",
    "json": "https://feed7.dev/p/atomic-start-hooks-in-the-workflow-sdk-1jf1nj8.json",
    "markdown": "https://feed7.dev/p/atomic-start-hooks-in-the-workflow-sdk-1jf1nj8.md"
  }
}