Changelog
View SourceAll notable changes to lemon_router are documented here.
The format follows Keep a Changelog;
releases follow Semantic Versioning from 0.1.0 onward.
[Unreleased]
First release as a standalone package. The theme of this release is that
LemonRouter is now a facade you can program against, rather than a set of
internals other applications reached into.
Added
LemonRouteris the supported API surface:submit/1,abort/2,abort_run/2, plus the newavailable?/0,active_runs/0,run_active?/1,active_run_count/0andcounts/0. These were designed from the thirteen real call sites rather than invented, and the facade owns the defensiveness each caller used to reimplement (process probes, registry lookups, supervisor counts, rescue and catch ladders). A router that is not running now reports nothing-active instead of raising.counts/0returns the full zeroed shape (:active,:queued,:completed_today) when the router is down, not an empty map — callers read those keys unguarded.LemonRouter.Envdeclares the environment variables this package reads.
Changed
- The router is the single writer of chat state (
LemonCore.ChatState). The gateway's writes were redundant — the overflow delete was already duplicated by the router on the same event, and the completion event carries the resume token into the router anyway — so gateway's chat-state coupling is now zero. - LemonRouter.RunSupervisor and LemonRouter.RunOrchestrator are now
@moduledoc false. They are internals; use the facade. (There has never been aRunRegistrymodule — it is a plainRegistrystarted in the router's supervision tree.) - Durable memory now comes from the
lemon_memorypackage, following the extraction out oflemon_core. :exqliteis a direct dependency becauseRoutingFeedbackStoretalks to SQLite;lemon_coreonly carries it optionally.
Known gaps
- This package still depends on
lemon_mediafor artifact recording (LemonRouter.MediaJobRecorder), which is not yet published. That dependency has to be resolved — published or inverted — beforelemon_routercan go to hex.