Skip to content

AshHooks 2.0.1

Choose a tag to compare

@palermo-git palermo-git released this 07 Oct 01:04
· 6 commits to main since this release

2.0.1 — October 6, 2026

Delivery rows now retain declaration and queue ownership, fence each send attempt,
and recover unfinished work after queue exhaustion or an interrupted endpoint disable.
HubSpot retries use a stable batch identity, and the default transport bounds the
complete HTTP operation.
Existing installations require the ordered schema and identity migration in
UPGRADING.md before running 2.0 workers or ingress.

Changed

  • Outbound rows persist declaration ownership and queue route. A declaration
    cannot recover another declaration's rows. Named callbacks have stable routes;
    anonymous callbacks can supply enqueue_key for durable recovery.
  • Send and recovery admission use separate UUID tokens and expiring leases.
    Every result is fenced to the live attempt; retry ceilings are checked before
    sending. The complete ledger primary key is used throughout.
  • A 410 response records :disable_pending before disabling the matching endpoint
    configuration. Recovery completes that obligation without another HTTP request.
  • Oban uniqueness covers runnable jobs and the durable route/tenant identity.
    Completed or discarded jobs do not strand recoverable rows; an unpersisted
    conflict is an admission error.
  • HubSpot's default dedup identity canonicalizes the complete batch, ignoring only
    each outer event's attemptNumber. The optional provider event_identity/1
    callback follows an explicit declaration extractor in precedence. Retained
    legacy rows are adopted explicitly, preserving payloads and an audit map.
  • Ash's supported floor is 3.34.3, including its security correction and the tenant
    inverse API used by workers. The lock resolves Ash 3.34.4, AshPostgres 2.14.2,
    and Spark 2.7.6.

Fixed

  • Minimal production consumers start :public_key and :ssl through the package's
    application dependencies; optional packages are unnecessary for default HTTPS.
  • Direct delivery calls apply the documented retry defaults for omitted or nil
    settings, including the attempt ceiling and bounded Retry-After, without
    requiring an Oban worker.
  • Required keyset pagination, bounded retention deletion, custom ledger keys,
    renamed UUID endpoint/subscription keys, and aliased worker HTTP-option resolvers.
  • Endpoint status values are cast and constrained at compile time; empty enabled
    sets, overlapping states, and primary-key mappings are rejected.
  • IDs on direct event structs and HTTP headers reject control bytes and malformed UTF-8.
    Telemetry reasons use a fixed vocabulary, preventing arbitrary tokens from escaping.
  • SSRF classification covers special-purpose address ranges; IPv6 Host values are
    bracketed. Bounded HTTP follows interim responses to the final response, stops
    at its body cap, and uses one deadline across resolution and transport.
  • HubSpot's finite event taxonomy includes generic object events.

Documentation and delivery

  • Current install/version pins, terminal inbound acknowledgments, generated DSL
    references, migration instructions, and an executable 2.0.1 Livebook.
  • Candidate archive inspection and notebook execution precede publication; the
    normal notebook then executes against the exact published version.
  • Documentation changes trigger Linux CI. The minimum-consumer leg pins Ash
    3.34.3; package, PostgreSQL, coverage, and Livebook checks feed all-checks-pass.
  • Keep notebook protocols unconsolidated so dynamically defined resources use their custom display without consolidation warnings.