86fd6da1dc
- delivery_id is now generated once per firing and used for both the X-Hermes-Delivery header and the signed body's delivery_id field — previously they were two different uuid4s, breaking receiver-side dedupe as documented. - 3xx responses are no longer followed: urllib's default redirect handler converts a redirected POST into a body-less GET, silently dropping the signed payload. Redirects now log a misconfiguration warning and count as delivery failure (no retry). - Docs: receiver-side replay-protection guidance (dedupe on delivery_id, timestamp freshness window) + redirect semantics. - Tests: 5xx retry count, redirect-not-followed (sabotage-verified), header/body delivery_id equality.