Skip to content

Ironflow v0.19.0

Transactional outbox, Postgres-backed projection rebuilds with full observability, CommandDedup for idempotent commands, and a major dashboard overhaul including History Lens and URL-driven deep links.

  • Transactional outboxEmit() and AppendEvent now write events and outbox rows in one transaction; a per-node worker drains asynchronously with exponential backoff, dead-letter after 10 attempts, and JetStream dedup on crash-retry (#488)
  • Outbox dead-letter managementironflow outbox dlq list/requeue/discard CLI, GET/POST/DELETE /api/v1/outbox/dead-letter HTTP API, and ironflow_outbox_dead_letter_count Prometheus gauge (#500)
  • Postgres-backed projection rebuilds — rebuild state from the DB event log directly, decoupled from JetStream retention limits; tuneable batch size and pause via env vars (#492)
  • Projection rebuild observabilityironflow_projection_rebuild_active, ironflow_projection_rebuild_events_applied_total, and ironflow_projection_rebuild_duration_seconds metrics; deterministic JobID for log/span correlation (#503)
  • Wait-for-projection-catchup — streaming API endpoint, ironflow projection wait, wait-for-event, and wait-batch CLI commands, and a “Wait until caught up” button on the projection detail page (#482, #483, #485, #493)
  • CommandDedup<T> — atomic command-level idempotency in the SDK; dedup key stored alongside the entity stream event (#468)
  • Metadata on streams.append — attach arbitrary key-value metadata to entity events from both push-mode and pull-mode/projection handlers (#474)
  • Circuit breaker auto-prune — breakers for deleted functions are automatically removed from NATS KV (#507)
  • History Lens — unified continuous timeline dashboard showing runs, steps, and events on a single scrollable canvas (#435)
  • Dashboard deep links — every run, event, and function is now URL-addressable; browser back/forward works throughout (#441)
  • Dashboard stat cards and activity panels — overview page shows live run counts, error rates, and a recent activity feed (#430)
  • Deployed version in sidebar — dashboard shows the running binary version with build metadata (#423)
  • Outbox health in component grid — dashboard home replaces the workers panel with outbox health indicators (#501)
  • Workflow engine audit — 9 bugs closed covering step memoization edge cases, parallel branch teardown, and sleep/wait resume under load (#469)
  • Projection NATS consumer scoping — consumers are now env-scoped; cross-env leakage on multi-tenant clusters is eliminated (#484)
  • Projection monotonic guardlast_event_seq updates are strictly monotonic; out-of-order delivery can no longer roll back state (#481)
  • streams.getInfo() returns null for empty streams instead of throwing (#454)
  • Entity ID validation — URL-unsafe characters in entity_id are rejected at write time with a clear error (#458)
  • JSON 404 for unknown API pathsGET /api/v1/unknown now returns structured JSON instead of a plain-text 404 (#456)
  • Scheduler step FK, history snapshots, and schedules UI (#452)
  • SDK worker registration reports installed version (#467)
  • Example appsexpectedVersion on streams.append, typed event constants, and KV CAS / ConfigWatchEvent API corrections across all bundled examples (#511#524)
  • make auditgovulncheck + nancy dependency audit wired into make ci (#523)
  • Skill-tree drift detectormake drift-check validates AI skill prose against source docs; gated in CI (#530)
  • Documentation — full implementation audit sync, CQRS walkthrough tutorial, projection concurrent-writer race documented, reducer determinism contract (#509, #463, #505, #494)