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/studiopackage, the demo machines, and thefate-studioserver are no longer part of this module, so the engine no longer pulls innet/http. - The
fateCLI is now engine-only and file-based:render/mermaid/graph/snap/diffoperate 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:
scs→fate,scs-web→fate-studio. The server env var is nowFATE_STUDIO_ADDR(wasSCS_WEB_ADDR); the Docker image target isfate-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}/timerand/sim/{m}/invoke. - New
timeout(after-timer) andfetch(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
counterdemo machine whose transitions mutate context (INC/DEC/RESET).
Fixed
- Studio context panel rendered
[object Object](doubleJSON.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.fateCLI (list / view / describe / snap / diff) andfate-studioserver, serving a set of generic demo machines (traffic light, media player, build pipeline, deep-history document editor).- A multi-stage, distroless
Dockerfileforfate-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.
Setupbuilder for registering named guards and actions (XState-style).Cond/StateIn/InState— structural conditions over the active configuration, complementary to dataGuards.- 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. invokeas effects-as-data (PendingInvocations/ResolveInvocation/RejectInvocation); a spawned child machine is an invocation whoseSrcnames a machine (ADR-0004).- Final-state
Outputcaptured 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, runnableexamples/. - Temporal integration: a
WorkflowActorthat hosts afate.Actorinside a Temporal workflow —aftertimers →workflow.NewTimer, invocations →workflow.ExecuteActivity, events → a signal channel — with continue-as-new support viaPersist/NewWorkflowActorFromSnapshot.
Full release notes and tags: github.com/arisros/fate/releases.