Back to the changelog

v0.79.4

August 5, 2026

The engine becomes crash-proof. Seventeen coordinated changes close critical races and crash windows: events that can no longer be lost, outcomes with a single winner, always-recoverable creations, atomic escalations. With one declared breaking change for n8n integrations.

  • Improvement

    No lost events, no duplicate outcomes

    Recording an event and dispatching it now happen in the same transaction: a crash can no longer leave orphaned events (they may arrive a few seconds later, but are never lost). Every activity outcome — manual completion, callback, timeout, retry, reopen — goes through an atomic claim: two concurrent actors can no longer write opposite outcomes or run webhooks, AI calls or child flows twice; the loser gets an honest answer and leaves no changes behind. Creations with an idempotency key recover on their own after a crash (the key previously stayed locked forever), and an interrupted entry is resumed automatically within half an hour.

  • Security

    Hardened event provenance and alerts that really arrive

    An external caller can no longer have data copied from an item by naming its identifier in the payload: automatic copying now happens only for events generated internally by the system. And escalation policies configured on custom roles — silent until now due to a notification-worker defect — finally notify for real: anyone who had them configured will start receiving alerts that never arrived before.

  • Integration

    n8n callbacks with an explicit contract

    n8n workflow responses to FlowSharp now require the `runId` field (just echo the `xflow.runId` value received in the payload — without it, a clear error with instructions). The `taskId` field must come from the `X-XFlow-Task-Id` header: anyone who copied old templates should regenerate the snippet from settings, which now produces the correct code. This definitively closes "stale" callbacks from superseded runs.

  • Improvement

    Always-honest operational health

    Event-dispatch health is now visible and never falsely green: backlog, age, attempts and last error are exposed in the worker's health endpoint, with a "degraded" state that never triggers restart loops. Failed rows are retried with growing backoff without blocking later ones, and nothing ever disappears silently: a documented replay procedure covers the extreme cases.