Revision history for Chorus::Expert

2.01    2026-06-21
        - Engine.pm : add TERMINAL field to YAML DSL for declarative pipeline termination
          (solved/failed callable from pure YAML rules)
        - Engine.pm : promote setFilter/setScope/setCondition/setException/setEffect
          to engine methods (was package-level functions relying on implicit $SELF)
        - Engine.pm : apply_rec converted from named sub to proper closure
        - Engine.pm : loop() guard against infinite loops (_MAX_CYCLES, default 10_000)
        - Engine.pm : addrule() duplicate _ID detection and warning
        - Engine.pm : YAML English aliases (RULE/FIND/ACTION/PREMISES) accepted
          alongside French forms (REGLE/CHERCHER/EFFET/PREMISSES)
        - Engine.pm : logging support (_LOG, _TRACE, _CYCLE fields in YAML rules)
        - Frame.pm  : fmatch() fix — dead code 'Y' || () replaced with conditional
          to avoid undef key in %filter
        - Frame.pm  : fselect() added — selects the best-matching prototype frame
          given observed slot/value pairs; options: _all, _from, _min
        - Frame.pm  : _ON_DELETE demon added — fires when a slot is erased via delete()
        - Frame.pm  : complete() method added — checks that all _TERMINAL_SLOTS are filled
        - Frame.pm  : _ALTERNATIVES slot added — declares a neighbourhood of sibling
          frames for use with fselect(_alternatives => ...)
        - Frame.pm  : _reset() added — clears %FMAP, %REPOSITORY, %INSTANCES, %SERIAL,
          $SELF, @Heap, $getMode (test isolation)
        - doc/       : full bilingual documentation added (doc/en/, doc/fr/) covering
          concepts, AI agent integration, application domains, chorus-* commands
        - eca/skills/: chorus-pdf, chorus-feed, chorus-check, chorus-create-project,
          chorus-import-project, chorus-strengthen skills added
        - lib/Chorus/Engine/AIAgent.pod : AI agent integration reference added
          (replaces ECA.pod; tool-neutral, covers all six chorus-* commands)
        - Tests: t/28-Engine-addrule-dedup.t, t/29-Engine-yaml-aliases.t,
          t/30-Engine-logging.t, t/31-Frame-fselect.t, t/32-Frame-on-delete.t,
          t/33-Frame-complete.t, t/34-Frame-alternatives.t added
          (total: 25 test files, 170 assertions)

1.03    2015-12-14
		- Some tests added (Chorus::Frame : get - set - delete - getZ - getN - fmatch - weaken
		- Frame method inherits() renamed to _inherits()
		- bug 90530 : fixed - pod test only if $ENV{AUTHOR_TESTING}

1.02    2013-12-18
        - Chorus::Frame : DESTROY debbuged (unblessed reference)
        - Chorus::Frame : method _inherits() added
        - Chorus::Frame : fmatch() new syntax fmatch(slot => 'SLOT_NAME') or fmatch(slot => ['SLOT1_NAME', 'SLOT2_NAME'])
        - Chorus::Frame : fmatch() optimized with %INSTANCES
        - Chorus::Frame : _push() method added
        - Chorus::Frame : bug fixed with set + multiple inheritance
        - Chorus::Sample::Cursors : Added        
        - bug 90530 should be fixed
        - bug 90166 fixed
        
1.01    2013-11-21
        - Chorus::Frame - new syntax : fmatch( slots => $slots , from => $subset )
        - Chorus::Engine - new methods last(), reorder(), solved()
        
0.01    2013-11-08
        - First release to CPAN
        
        