Changelog
Copy Markdownv0.10.46
- tick_recurring: improvements: better reliability and precision (#260, #262)
- Trim steady state logs from sweepers: reducing log noise by suppressing sweeper logs when no work is being done (#259)
- Test stability improvements: improving scheduler and schedule invalidation test stability (#258, #261)
v0.10.45
- Scheduler: skip loading inactive computations: important optimization for executions with a long history of computations (#256)
- Journey.Tools: harden introspection for orphaned nodes: introspection functions now handle computation nodes that no longer exist in the graph (#255)
- Journey.set() deterministic return value:
Journey.set/3now returns a deterministic execution from before kicking off downstream computations (#254) - Scheduler: prevent duplicate computation scheduling: closing a window that allowed occasional mis-scheduling of duplicate computations (#251)
- Test stability and isolation improvements: various tests updated to use deterministic waits and better isolation (#249, #250, #252)
- Dependency updates: picking up updated libraries, addressing Elixir warnings, updating ex_doc to 0.40.1 (#247, #248)
v0.10.44
- Test stability updates: using deterministic
Journey.get(..., wait: {:newer_than, prev_revision})in various tests to make them deterministic / stable (#244, #245) - Preserve Historian node value across invalidations: :historian nodes are accumulators, and should keep their value even when their upstream dependencies are not satisfied (#242, #243)
v0.10.43
- A Minor License text update: updating the year to 2026 (9b2001f).
v0.10.42
- better DevEx: validate node options: this helps to avoid typos and misspellings in graph definitions (#238)
- adding heartbeats for monitoring computations of self-computing nodes: this allows for faster detection and more robust handling of abandoned computations (#237)
- ops tooling: Journey.Tools.abandon_computation/1: adding
Journey.Tools.abandon_computation/1for abandoning a computation (#236) - refactor/simplification: refactoring Journey.Executions into smaller more focused submodules, adding
GEMINI.md(#235) - singleton executions: implementing singleton executions, with
singleton: trueparam toJourney.new_graph/2graph attribute andJourney.find_or_start/1(#234)
v0.10.41
- documentation updates: updating links and verbiage to reference the new repo (https://github.com/shipworthy), updating package description. (#229, #230, #231)
v0.10.40
- refinements: adding
jasonas an explicit dependency, renaming theUselessMachineexample toJourney.Examples.UselessMachine. (#226, #227)
v0.10.39
- API Ergonomics Improvements: renaming
Journey.Tools.summarize_as_text/1->Journey.Tools.introspect/1, renamingJourney.start_execution/1->Journey.start/1, adding simpleJourney.new_graph(nodes)with auto-generated graph name and revision. (#224)
v0.10.38
- Documentation Updates:
Journey.get_value/3is now marked as deprecated in favor ofJourney.get/3. The function remains fully functional for backward compatibility. (#219)- Reorganized and simplified documentation - created new
BASIC_CONCEPTS.mdwith comprehensive examples, refactored README.md for improved clarity and focus on practical use cases. (#220, #221)
- Internal Enhancement: Streamlined license validation logic for improved code maintainability. Added support for configurable license key service URL via
JOURNEY_LICENSE_KEY_SERVICE_URLenvironment variable. (#222)
v0.10.37
- API Naming: Renamed
schedule_once/4totick_once/4andschedule_recurring/4totick_recurring/4to better reflect that these nodes emit time-based "ticks" (revisions). The old function names remain available with deprecation warnings for backward compatibility. Both old and new internal type atoms (:schedule_once,:tick_once,:schedule_recurring,:tick_recurring) are supported for zero-downtime deployments. - New API:
Journey.count_executions/1- Returns the count of executions matching specified criteria using database-level counting (SQL COUNT) without loading records into memory. Supports the same filtering capabilities aslist_executions/1. (#217) - Enhanced Filtering:
Journey.list_executions/1now supports:is_setand:is_not_setfilter operators to check whether a node has been set, regardless of its value. (#214, #215) - Error Handling, logging:
Journey.Toolsfunctions (computation_state/2,computation_status_as_text/2,summarize_as_data/1) now raiseArgumentErrorwith clear messages when execution is not found. Extra logging in scheduler for better debuggability. (#216, #211) - Elixir 1.19 Support: Updates for Elixir 1.19 compatibility: compiler warning fixes, CI updates. (#212, #216)
v0.10.36
mutate()nodes: now acceptupdate_revision_on_change: trueoption, to have the mutated node trigger downstream computations (idempotent behavior matchingJourney.set/3). (#207)compute()nodes do not trigger downstream computations if the newly computed value is unchanged (idempotent behavior, matchingJourney.set/3). (#208)schedule_recurring()nodes: recompute when upstream dependencies change, adding new semantics for pausing recurring scheduling (node'sf_computereturning{:ok, 0}). (#203, #204)- relaxing
ex_docversion constraint to include 0.39. (#205)
v0.10.33 - v0.10.35
- Metadata support:
Journey.set/3now acceptsmetadata: %{...}option for tracking additional context. - Multinodal nodes: Added
f_compute/2for multi-input compute nodes and enhancedhistorian()for tracking node changes (EXPERIMENTAL). Journey.get/3: New function returning both value and revision (soft-deprecatesget_value/3).Journey.new_graph/4: Added optionalexecution_id_prefix: "..."parameter for easier troubleshooting.Journey.values/2: Addedinclude_unset_as_nil: trueoption.Journey.get_value/3: Enhanced with more ergonomicwait:andtimeout:options, addedwait_for_revision:, superseded byJourney.get/3.- Fully implemented reactive behavior for
:orrecomputations. schedule_once/3nodes now recompute on new upstream revisions.
v0.10.32
- Graph validation:
Journey.new_graph/4to explicitly check for circular dependencies. Journey.list_executions/1'sfilter_by:param to handle:contains,:icontains,:list_contains.- Renamed
Journey.set_value()toJourney.set/2/Journey.set/3andJourney.unset_value()toJourney.unset/2, added support for atomically setting multiple values. - Documentation updates (graph migration notes, modules and functions summary, tidier license text).