Changes for version 0.06 - 2026-10-22
- Architecture & Callbacks
- Canonical engine callbacks moved to 'Fab/callbacks_bundle/dbg0'.
- 'Fab/callbacks' now accepts a bundle name string (e.g. 'dbg0') in addition to direct hashrefs; resolved and propagated during initialization and scoping.
- Eliminated ad-hoc fallback guessing chains (//) across callback retrieval; operational callbacks now resolve uniformly via cfg__get_prefixed_scan().
- Added support for scoped callback bundle switches via #start_group[callbacks=...] and promise-local overrides via #emb[callbacks=...].
- Embeds, Parameter Passing & Lenses
- Modernized #emb directive grammar to #emb[<opts>] <recipe> [<args...>]. Supported options in [...] include aim=..., in=..., with_blinder=..., callbacks=..., and resolve_args=....
- Primitive out__embed() now takes ($recipe_basename, $recipe_ns, \@args, \%opts).
- Parameterized recipes: section arguments passed to a recipe are bound to $ARGV0, $ARGV1, etc. in the recipe body via an internal call frame stack.
- Implemented lens affection massaging with deterministic static joining (_fmt_lens_join) formatting candidate lenses as (A)/B and matching against registered transitions in 'Fab/lens_affects'.
- Embed resolution now traverses the namespace DAG from the massaged virtual root while respecting blinders and dynamic argument bindings.
- Input & Inclusion
- Extended #include and include__text() to support container targets: 'section' and 'configkey'.
- Enforced strict arity validation across all inclusion modes:
- 'filename' and 'string' strictly require exactly 1 target argument.
- 'section' and 'configkey' strictly require 2 arguments: position 2 is the joiner list key, and position 3 is the target container. Arity mismatches now immediately halt with E_SYNTAX_ERROR (directives) or E_TYPE_MISMATCH (Perl API).
- Section and configkey inclusions reuse the cyclic delimiter engine (out__get_joined / cfg__get_joined).
- Snapshot & Undo Engine
- Added a compatibility hook for FreezeThaw::copyContents treating compiled CODE references as atomic/immutable values, preventing dclone() crashes when configuration contains duplicated or shared code references across snapshots and groups.
- Documentation & Tests
- Updated POD to reflect modern #emb, #include, lens, and callback semantics while preserving design rationale and marking planned subsystems as {???}.
- Modernized test suite (t/01 through t/12) to exercise strict arity, parameterized recipes, lens affections, and container inclusion.
Modules
A powerful, general-purpose document expansion framework (currently Control Flow, Loops, and Caching are unimplemented {???})