- Added atomic start() that admits a run and claims a hook in one step, eliminating the getHookByToken‑then‑start race.
- Uses a user‑provided token as an idempotency key; duplicate starts throw HookConflictError with the conflicting run ID.
- Supports early payload buffering and experimental_minRetention to keep the token unavailable after run completion; docs updated in v5.4.0.