All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
0.1.0 - 2026-09-07
Initial release.
Added
Mutare.Phoenix.LiveView.Navigation(:lv_nav) — swapspush_navigate↔push_patchat the arity-2 form both share.Mutare.Phoenix.LiveView.Reply(:lv_reply) — drops a callback's optional trailing tuple element ({:reply, payload, socket}→{:noreply, socket},{:ok, socket, opts}→{:ok, socket}), gated on the enclosing module'sPhoenix.LiveView/Phoenix.LiveComponentbehaviour.Mutare.Phoenix.LiveView.Stream(:lv_stream) — swapsstream_insert↔stream_deleteat the arity-3 form both share (swap); swapsat: 0 ↔ at: -1onstream_insert/4(at— prepend vs append; the covering rewrite supersedes core's integer leaves there via overlap pruning); drops thelimit:entry ofstream/4/stream_insert/4(limit). Areset: truedrop is deliberately absent — it is core's boolean flip in disguise.Mutare.Phoenix.LiveView.Event(:lv_event) — removespush_event/3,4, collapsing to the socket (orFunction.identity()when piped).Mutare.Phoenix.LiveView.SendUpdate(:lv_send_update) — removessend_update/2,3/send_update_after/3,4, collapsing to a faithful stand-in (:ok/ a freshmake_ref()for_after's timer ref) (remove); and turnssend_update_after/3,4into an immediatesend_updatethat still yields a ref (immediate— deletes the delay). The delay argument is a marked:timeoutposition, so core's literal families skip it.Mutare.Phoenix.LiveView.Hook(:lv_hook) — removesattach_hook/4(attach— the hook never runs) anddetach_hook/3(detach— the hook keeps running), collapsing to the socket. Hook name and stage atoms are routed:raw, so no core family mutates them.- Registers the LiveView compile-time DSL (
live/live_session,on_mount,attr/slot/embed_templates) as:skipthroughMutare.CallRouting, so declarations that run once as mutant 0 are left unmutated. Mutare.Phoenix.LiveView.all/0for splicing the six families into a:mutatorslist, composing withMutare.Phoenix.all/0.