[0.3.1] - 2026-09-29
Added
use Solvenow generates an overridablechild_spec/1, allowing apps to be added directly to supervision trees as permanent workers.- Default child IDs include the app module and configured name, allowing differently named instances of the same app under one supervisor.
[0.3.0] - 2026-09-27
Added
- Automatically restore Lookup subscriptions after outages and named app restarts, using owner-scoped watching and capped exponential backoff.
Solve.Lookup.status/1to read cached connection status and the optionalhandle_solve_connection_changed/3callback for lifecycle-aware consumers.- Configurable finite cold-acquisition timeouts and recovery backoff through
:lookup_timeoutand:lookup_recovery.
Changed
- Warm remote Lookup reads, pushed updates, and cleanup no longer make synchronous liveness or name-resolution RPCs; they use owned process monitors instead.
- Remote names stay pinned to their acquired app until invalidation and reacquisition.
- Lookup retains subscription intent across outages.
Solve.Lookup.unsubscribe/1,2cancels pending recovery as well as active subscriptions; cleanup and raw unsubscribe do not cancel recovery intent. - Migration: Manual and helper-mode consumers must forward owned DOWN messages and private
{:solve_lookup, kind, payload}recovery messages toSolve.Lookup.handle_message/1. Auto mode handles these messages automatically. See manual message handling. - Refresh development dependencies and Elixir/OTP and CI tooling while retaining Elixir 1.18 support.
Fixed
- Correct global atom-key name classification.
- Fence recovery and cancellation races so stale work cannot restore canceled subscriptions.
- Notify data consumers after fresh snapshots and event routes are installed, even when recovered values are unchanged.
[0.2.3] - 2026-09-14
Added
Solve.unsubscribe/2and/3to stop receiving raw updates without stopping the controller.Solve.Lookup.unsubscribe/1and/2to release a process-local lookup subscription and its cached value. A later lookup subscribes again.Solve.Collection.new/1to build an ordered collection from{id, value}pairs.Solve.Lookup.cleanup/0to clear cached data for app instances that have stopped.
Changed
- Breaking: Explicit app dispatch requires
Solve.dispatch(app, target, event, payload). Pass%{}when no payload is needed; implicit/2and/3remain available in controller context. - Breaking: Acquire lookup targets through
solveorcollectionbefore forwarding updates.Solve.Lookup.handle_message/1no longer creates subscriptions or seeds the cache from unsolicited or versionless updates. Forward complete runtime envelopes rather than rebuilding them from values. - Controller startup now times out after five seconds by default. Set the app's
:controller_start_timeoutoption for slower initialization. - Reduce overhead of repeated cached lookup reads.
Fixed
- Refresh lookup values and event handlers correctly after controller replacement or app restart.
- Keep collection dependencies consistent during item changes, reordering, and replacement.
- Correct collection handling of nil values and distinct numeric keys such as
1and1.0; reject invalid reorder operations. - Avoid restarting slow controllers when a subscription times out.
- Clean up controller processes when their app stops or initialization fails.
- Reject invalid controller dependency definitions with clearer errors.
[0.2.2] - 2026-08-19
- Full readme rewrite
- Allow more collect collection patterns
- Add direct event dispatch to Solve.Lookup
[0.2.1] - 2026-07-16
Fixed
- Resubscribe dependent controllers when a dependency controller is replaced after a params change, instead of leaving them attached to the stopped process and missing all further updates. Applies to both singleton dependencies and collection items replaced under the same id.
[0.2.0] - 2026-04-15
Added
- Add Solve-style controller
handle_infofallback for non-Solve messages. - Allow controller
handle_infoarities from/2through/5, with access to state, dependencies, callbacks, and init params. - Document controller
handle_infousage in the README and module docs.
Changed
- Keep Solve internal messages reserved from controller-defined
handle_infoclauses. - Validate controller
handle_infoarity at compile time.
[0.1.0] - 2026-04-08
Added
- Initial release.