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.
Features
Section titled “Features”- Transactional outbox —
Emit()andAppendEventnow 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 management —
ironflow outbox dlq list/requeue/discardCLI,GET/POST/DELETE /api/v1/outbox/dead-letterHTTP API, andironflow_outbox_dead_letter_countPrometheus 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 observability —
ironflow_projection_rebuild_active,ironflow_projection_rebuild_events_applied_total, andironflow_projection_rebuild_duration_secondsmetrics; deterministicJobIDfor log/span correlation (#503) - Wait-for-projection-catchup — streaming API endpoint,
ironflow projection wait,wait-for-event, andwait-batchCLI 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 guard —
last_event_sequpdates 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_idare rejected at write time with a clear error (#458) - JSON 404 for unknown API paths —
GET /api/v1/unknownnow 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 apps —
expectedVersiononstreams.append, typed event constants, and KV CAS /ConfigWatchEventAPI corrections across all bundled examples (#511–#524)
Improvements
Section titled “Improvements”make audit—govulncheck+nancydependency audit wired intomake ci(#523)- Skill-tree drift detector —
make drift-checkvalidates 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)