Skip to content

Changelog

All notable changes to the fate engine are documented here. The format follows Keep a Changelog, and the project adheres to Semantic Versioning. See Versioning & deprecation for what the version numbers promise.

Source of truth

This page mirrors CHANGELOG.md in the engine repo. When you cut a release, update that file and bump VERSION in docs/.vitepress/config.mts. The Temporal module versions independently (latest: temporal/v0.4.1).

Pre-release (v0.x)

While in v0.x, minor versions may contain breaking API changes. Those are always called out under a Breaking heading below.

[0.4.0] — 2026-06-05

The engine is now a focused, dependency-free library: the studio moved to its own repository, and there is a documentation set covering the model and its use.

Added

  • A documentation set under docs/ — concepts, and guides for defining machines, persistence and determinism, effects and adapters, and Temporal.

Breaking

  • The studio moved to its own repository and module, github.com/arisros/fate-studio. The fate/studio package, the demo machines, and the fate-studio server are no longer part of this module, so the engine no longer pulls in net/http.
  • The fate CLI is now engine-only and file-based: render / mermaid / graph / snap / diff operate on descriptor and snapshot JSON, with no built-in demo machines.

[0.3.0] — 2026-06-05

Studio: timer/invoke visualization, a redesigned welcome page, a Sentry-inspired visual refresh, and the CLI rename.

Breaking

  • Renamed the CLI binaries to match the product: scsfate, scs-webfate-studio. The server env var is now FATE_STUDIO_ADDR (was SCS_WEB_ADDR); the Docker image target is fate-studio.

Added

  • Timer / invocation visualization in the simulator. The live snapshot now carries pending delayed (after) timers and invocations; a "Pending effects" panel fires a timer or resolves/rejects an invocation, driving the machine exactly as an adapter would. New endpoints /sim/{m}/timer and /sim/{m}/invoke.
  • New timeout (after-timer) and fetch (invocation) demo machines.
  • A redesigned welcome page and a Sentry-inspired visual refresh (violet-midnight ink, electric-lime keyword accent, button-cap styling) — self-contained, no external fonts or build step.
  • A counter demo machine whose transitions mutate context (INC/DEC/RESET).

Fixed

  • Studio context panel rendered [object Object] (double JSON.parse); now handled as a value.
  • Studio nodes clipped their bottom action rows; locked header/row heights, added nowrap + ellipsis, enlarged the node box.

[0.2.0] — 2026-06-05

The studio release: a viewer/simulator and the fate / fate-studio binaries.

Added

  • fate/studio — an embeddable, dependency-free HTTP statechart studio: a chart viewer and live, Server-Sent-Events simulator for any fate machine.
  • fate CLI (list / view / describe / snap / diff) and fate-studio server, serving a set of generic demo machines (traffic light, media player, build pipeline, deep-history document editor).
  • A multi-stage, distroless Dockerfile for fate-studio, and a GoReleaser config.
  • Studio endpoint coverage via httptest; the studio package keeps the root module standard-library only.

[0.1.0] — 2026-06-05

First public release: the statechart engine and its Temporal adapter.

Added

  • Zero-dependency engine module (github.com/arisros/fate) and a separate Temporal integration module (github.com/arisros/fate/temporal).
  • ADR-0001 (provenance & license) and ADR-0002 (public API design).
  • Core engine: hierarchy, parallel regions, deep/shallow history, guards, actions, final states, JSON persist/restore.
  • Setup builder for registering named guards and actions (XState-style).
  • Cond / StateIn / InState — structural conditions over the active configuration, complementary to data Guards.
  • Delayed (after) transitions with a clock-agnostic core: the engine records pending timers as data (PendingTimers / FireTimer); an adapter owns all timing. The core never reads the wall clock or starts a goroutine.
  • invoke as effects-as-data (PendingInvocations / ResolveInvocation / RejectInvocation); a spawned child machine is an invocation whose Src names a machine (ADR-0004).
  • Final-state Output captured into the snapshot; snapshot restore re-derives pending timers and invocations from the active configuration.
  • Property-based tests (determinism, persist/restore transparency, persist stability); coverage gate ≥85%.
  • CI (Go matrix × root and temporal/ modules, race, lint, coverage, a zero-dependency assertion), a tag-driven release workflow, runnable examples/.
  • Temporal integration: a WorkflowActor that hosts a fate.Actor inside a Temporal workflow — after timers → workflow.NewTimer, invocations → workflow.ExecuteActivity, events → a signal channel — with continue-as-new support via Persist / NewWorkflowActorFromSnapshot.

Full release notes and tags: github.com/arisros/fate/releases.

Released under the MIT License · v0.4.0 · pkg.go.dev