<commit_before>
= ruote - CHANGELOG.txt


== ruote - 2.3.0    not yet released

- Dashboard#wait_for('action' => 'apply', 'name' => 'wait')
- past_tags: track variables
- Workitem#launched_at and #sub_wf_launched_at
- Ruote.deep_delete and .deep_mutate
- Ruote::Observer (a base classing for observing a ruote engine's activity)
- thread['ruote_worker']
- Dashboard#respark(wfid, opts={})
- StorageBase#dump: go with YAML
- on_error: !immediate
- "kill" expression (undo/cancel alias)
- ${tags}, ${tag} and ${full_tag}
- StorageParticipant#flunk(workitem, err, *err_args)
- ReceiverMixin#flunk(workitem, err, *err_args)
- workitem: sub_wf_name and sub_wf_revision
- new 'raise' msg for passing back errors to worker
- participant#on_apply
- push/pop specialized aliases for inc/dec
- inc/dec: 'v:x' => 2 shortcut
- inc/dec: drop default 'v:d' and accept nested {in|de}crement
- 'participant_in_variable_enabled' switch
- make re_apply use the applied workitem by default
- ${mnemo_id} (along with ${expid} and ${subid})
- Dashboard#remove_process (idea <NAME>)
- re_dispatch bug fix (patch by <NAME>)
- Ruote.extract_wfid(o)
- on_error/on_timeout: cancel/cando
- Worker#handle_step_error(e, msg) enhancements
- cancel "flavour" rebound
- Dashboard#logger shortcut
- :on_error => 'raise'
- :over_if bug fix (reported by <NAME>)
- :merge_type => 'deep' (idea <NAME>)
- Dashboard#launch accepts :wfid "field", custom wfid
- kill_process expression (and on_error)
- the "second take" (__on_error__, __on_cancel__)
- Ruote.tree(&block) alias to Ruote.to_tree(&block)
- added 'tree' entry to error doc and error msg
- error handler $f:__error__: added 'tree' entry
- Ruote::Reader.to_expid_radial
- wfid_generator: dropping the @last['raw'] concept
- wait_for(:x, :or_error) (thanks <NAME>)
- concurrence over_if bug (thanks alexw668)
- concurrence and citerator :remaining => 'wait' (idea <NAME>)
- set 'v:x' => 'y', :over[ride] => true/'sub'
- concurrence and citerator :count => -x (all but x)
- "await" expression, successor to "listen"
- root expression: __past_tags__ variable
- full tags
- concurrence and citerator: :count => 0 (immediate reply)
- iterator and concurrent-iterator: implicit sequence
- iterator: stopped creating new variable scope
- :vars_to_f common attribute
- :scope => true forces a new variable scope
- subprocess 'field:x' => 'y' (variables and now fields)
- Dashboard#worklist (alias for Dashboard#storage_participant)
- set: now accepting children (and behaving like a sequence)
- [un]set: setting __result__
- concurrence :wait_for => 'alpha, bravo' (idea <NAME>)
- BlockParticipant: nicer multi blocks
- Dashboard #cancel and #kill now accept options
- StorageParticipant #reserve and #delegate
- 'terminated/ceased' msg: include root exp variables
- Dashboard#worker_state[=] (running/paused/stopped)
- define :on_terminate => :regenerate
- :on_error => '5m: retry * 3, 10m: retry'
- :on_error => '5m: retry, 2m: retry, pass'
- dsub for attribute keys as well
- conf option: 'worker_info_enabled' (defaults to true, enabled)
- Dashboard#register saves list in one batch (unless :clear => true)
- DefaultHistory include Enumerable
- Dashboard#wait_for(action_name) (dispatch, cancel, reply, ...)
- merged TestLogger into WaitLogger
- :take and :discard common attributes
- filter: 'take' and 'discard'
- Participant: on_cancel -> false prevents on_cancel reply
- LocalParticipant #is_gone? #is_cancel[l]ed?
- Dashboard#worker_info
- msg: put_doc, low-level action
- participant: #rtimers, #rtimeout and #timers
- lose and forget expressions: aligned 'multi' behaviour
- concurrence and citerator: :merge_type => 'ignore'
- :timers error, redo/retry, undo/pass and commands
- :timers common attribute
- :flank common attribute
- Storage#done(worker, msg) optional method
- get_many :batch option (used by some storages for optimization)
- 'stall' expression (mostly for testing)
- context and worker : subscription reworked
- worker : 'restless_worker' option
- Ruote::Dashboard (will slowly phase Ruote::Engine out)
- :on_timeout => 'rewind', :on_timeout => 'jump to alpha'
- :on_error => 'rewind', :on_error => 'jump to alpha'
- dispatch_pool and context['participant_threads_enabled']
- participant params.__children__
- on_error expression
- concurrence :merge_type => 'concat' (vs 'union') (Thanks <NAME>)
- Workitem#re_dispatch_count
- Engine#launch(pdef, fields, vars, root_stash)
- Workitem #[] amd #[]= (#lookup and #set_field shortcuts)
- LocalParticipant#lookup_variable(key)
- LocalParticipant / Receiver : stash_get / stash_put
- LocalParticipant implicit participant_name
- LocalParticipant implicit workitem, fei, flavour and fexp
- Participant #on_workitem, #dont_thread?, etc
- FlowExpression #root and #root_id
- dollar substitution in expression name as well
- Engine#replay_at_error(err_or_fei_or_wi)
- Engine#error(wi_or_fei)
- storages : #replace_engine_configuration(opts)
- FsStorage : saving newer configuration (Thanks <NAME>)
- ProcessStatus context : linking expression <-> error
- ProcessStatus#root_workitem
- ProcessStatus#leaves
- filter 'includes' and 'is' (Thanks <NAME>)
- trailing fields (a Simone Carletti idea)
- concurrence vs history issue fixed (Thanks <NAME>)
- unset and fields : made sure the field is removed (Thanks jpgilman)
- sourcify, using to_raw_source from now on
- filter expression and blocks
- set 'v:display' => 'echo', aliasing of expressions
- Reader.read(s) : better error raised when failed to 'parse'
- :on_field => 'my.nested.field' now possible
- [concurrent-]iterator :to => 'v:x' / 'f:y' / 'y'
- concurrence :merge_type => 'union'
- Reader.to_radial(tree)
- Workitem#param_or_field(key) and #field_or_param(key)
- Workitem#param_text
- ProcessError#deviations (cf filter and Ruote::ValidationError)
- reworked (process definition) Reader
- filter top-level 'or'
- filter field => 'x|y' (or on field names)
- 'radial' process definitions
- fixed Tracker#add_tracker (2nd try) issue (Thanks <NAME>)
- Engine#register :on_workitem / :on_reply / ...
- set 'v:participant' => lambda { |wi| wi.fields['x'] = 'y' }
- listen :to => :errors, :class => string / :message/:msg => string / regex
- listen :to => :errors
- dropped require 'json' and co from fs_storage (Thanks Torsten)
- cursor : 'reset' command and :reset_if attribute
- Engine#resume(wfid, :anyway => true) resumes any paused expression in a
  given process
- Engine#pause(fei, :breakpoint => true) pauses only one expression (and not
  its children)
- CompositeStorage#delete_schedule fix (Thanks Greg)<commit_msg>cleanup changelog<commit_after>
= ruote - CHANGELOG.txt


== ruote - 2.3.0    not yet released

- Dashboard#wait_for('action' => 'apply', 'name' => 'wait')
- past_tags: track variables
- Workitem#launched_at and #sub_wf_launched_at
- Ruote.deep_delete and .deep_mutate
- Ruote::Observer (a base classing for observing a ruote engine's activity)
- thread['ruote_worker']
- Dashboard#respark(wfid, opts={})
- StorageBase#dump: go with YAML
- on_error: !immediate
- "kill" expression (undo/cancel alias)
- ${tags}, ${tag} and ${full_tag}
- StorageParticipant#flunk(workitem, err, *err_args)
- ReceiverMixin#flunk(workitem, err, *err_args)
- workitem: sub_wf_name and sub_wf_revision
- new 'raise' msg for passing back errors to worker
- participant#on_apply
- push/pop specialized aliases for inc/dec
- inc/dec: 'v:x' => 2 shortcut
- inc/dec: drop default 'v:d' and accept nested {in|de}crement
- 'participant_in_variable_enabled' switch
- make re_apply use the applied workitem by default
- ${mnemo_id} (along with ${expid} and ${subid})
- Dashboard#remove_process (idea <NAME>)
- re_dispatch bug fix (patch by <NAME>)
- Ruote.extract_wfid(o)
- on_error/on_timeout: cancel/cando
- Worker#handle_step_error(e, msg) enhancements
- cancel "flavour" rebound
- Dashboard#logger shortcut
- :on_error => 'raise'
- :over_if bug fix (reported by <NAME>)
- :merge_type => 'deep' (idea <NAME>)
- Dashboard#launch accepts :wfid "field", custom wfid
- kill_process expression (and on_error)
- the "second take" (__on_error__, __on_cancel__)
- Ruote.tree(&block) alias to Ruote.to_tree(&block)
- added 'tree' entry to error doc and error msg
- error handler $f:__error__: added 'tree' entry
- Ruote::Reader.to_expid_radial
- wfid_generator: dropping the @last['raw'] concept
- wait_for(:x, :or_error) (thanks <NAME>)
- concurrence over_if bug (thanks alexw668)
- concurrence and citerator :remaining => 'wait' (idea <NAME>)
- set 'v:x' => 'y', :over[ride] => true/'sub'
- concurrence and citerator :count => -x (all but x)
- "await" expression, successor to "listen"
- root expression: __past_tags__ variable
- full tags
- concurrence and citerator: :count => 0 (immediate reply)
- iterator and concurrent-iterator: implicit sequence
- iterator: stopped creating new variable scope
- :vars_to_f common attribute
- :scope => true forces a new variable scope
- subprocess 'field:x' => 'y' (variables and now fields)
- Dashboard#worklist (alias for Dashboard#storage_participant)
- set: now accepting children (and behaving like a sequence)
- [un]set: setting __result__
- concurrence :wait_for => 'alpha, bravo' (idea <NAME>)
- BlockParticipant: nicer multi blocks
- Dashboard #cancel and #kill now accept options
- StorageParticipant #reserve and #delegate
- 'terminated/ceased' msg: include root exp variables
- Dashboard#worker_state[=] (running/paused/stopped)
- define :on_terminate => :regenerate
- :on_error => '5m: retry * 3, 10m: retry'
- :on_error => '5m: retry, 2m: retry, pass'
- dsub for attribute keys as well
- conf option: 'worker_info_enabled' (defaults to true, enabled)
- Dashboard#register saves list in one batch (unless :clear => true)
- DefaultHistory include Enumerable
- Dashboard#wait_for(action_name) (dispatch, cancel, reply, ...)
- merged TestLogger into WaitLogger
- :take and :discard common attributes
- filter: 'take' and 'discard'
- Participant: on_cancel -> false prevents on_cancel reply
- LocalParticipant #is_gone? #is_cancel[l]ed?
- Dashboard#worker_info
- msg: put_doc, low-level action
- participant: #rtimers, #rtimeout and #timers
- lose and forget expressions: aligned 'multi' behaviour
- concurrence and citerator: :merge_type => 'ignore'
- :timers error, redo/retry, undo/pass and commands
- :timers common attribute
- :flank common attribute
- Storage#done(worker, msg) optional method
- get_many :batch option (used by some storages for optimization)
- 'stall' expression (mostly for testing)
- context and worker : subscription reworked
- worker: 'restless_worker' option
- Ruote::Dashboard (will slowly phase Ruote::Engine out)
- :on_timeout => 'rewind', :on_timeout => 'jump to alpha'
- :on_error => 'rewind', :on_error => 'jump to alpha'
- dispatch_pool and context['participant_threads_enabled']
- participant params.__children__
- on_error expression
- concurrence :merge_type => 'concat' (vs 'union') (Thanks <NAME>)
- Workitem#re_dispatch_count
- Engine#launch(pdef, fields, vars, root_stash)
- Workitem #[] amd #[]= (#lookup and #set_field shortcuts)
- LocalParticipant#lookup_variable(key)
- LocalParticipant / Receiver : stash_get / stash_put
- LocalParticipant implicit participant_name
- LocalParticipant implicit workitem, fei, flavour and fexp
- Participant #on_workitem, #dont_thread?, etc
- FlowExpression #root and #root_id
- dollar substitution in expression name as well
- Engine#replay_at_error(err_or_fei_or_wi)
- Engine#error(wi_or_fei)
- storages: #replace_engine_configuration(opts)
- FsStorage: saving newer configuration (Thanks <NAME>)
- ProcessStatus context: linking expression <-> error
- ProcessStatus#root_workitem
- ProcessStatus#leaves
- filter 'includes' and 'is' (Thanks <NAME>)
- trailing fields (a Simone Carletti idea)
- concurrence vs history issue fixed (Thanks <NAME>)
- unset and fields: made sure the field is removed (Thanks jpgilman)
- sourcify, using to_raw_source from now on
- filter expression and blocks
- set 'v:display' => 'echo', aliasing of expressions
- Reader.read(s): better error raised when failed to 'parse'
- :on_field => 'my.nested.field' now possible
- [concurrent-]iterator :to => 'v:x' / 'f:y' / 'y'
- concurrence :merge_type => 'union'
- Reader.to_radial(tree)
- Workitem#param_or_field(key) and #field_or_param(key)
- Workitem#param_text
- ProcessError#deviations (cf filter and Ruote::ValidationError)
- reworked (process definition) Reader
- filter top-level 'or'
- filter field => 'x|y' (or on field names)
- 'radial' process definitions
- fixed Tracker#add_tracker (2nd try) issue (Thanks <NAME>)
- Engine#register :on_workitem / :on_reply / ...
- set 'v:participant' => lambda { |wi| wi.fields['x'] = 'y' }
- listen :to => :errors, :class => string / :message/:msg => string / regex
- listen :to => :errors
- dropped require 'json' and co from fs_storage (Thanks Torsten)
- cursor : 'reset' command and :reset_if attribute
- Engine#resume(wfid, :anyway => true) resumes any paused expression in a
  given process
- Engine#pause(fei, :breakpoint => true) pauses only one expression (and not
  its children)
- CompositeStorage#delete_schedule fix (Thanks Greg)
{'fraction_non_alphanumeric': 0.12296206003352125, 'fraction_numerical': 0.0022855401493219562, 'mean_word_length': 5.082947173308619, 'pattern_counts': {'":': 0, '<': 29, '<?xml version=': 0, '>': 101, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3654546', 'n_tokens_mistral': 4317, 'n_tokens_neox': 4171, 'n_words': 1340}