Changes for version 0.07 - 2026-10-23

  • Recursion & Cycle Detection. Parameterized #emb resolution in assemble() now differentiates invocations by their active argument signatures rather than unconditionally blocking repeated "$ns:$basename" identifiers along the active branch. Added the 'Fab/max_recursion_depth' configuration limit (default 1000) to trap runaway cycles while permitting deep recursive recipe decomposition.
  • Configuration & Typing. Corrected the meta-configuration classification of 'Fab/list_keys' in new() to be registered under 'Fab/hash_keys' rather than listing itself as a list key, preventing cfg__set() from clobbering the internal hash into an array reference and causing dereference crashes in _get_key_type().
  • Inclusion & Options Forwarding. Normalized include__text() across all modes ('filename', 'string', 'section', 'configkey') to peel off and accept an optional trailing options hashref without triggering E_TYPE_MISMATCH arity errors. Updated the default directive parser to pass bracketed directive options (#include[opts] ...) through to include__text().
  • Test Suite. Added t/50_peano.t to stress-test deep recursive stack frames, lexical call-frame isolation, and nested promise resolution by modeling pure unary Peano arithmetic (addition, multiplication, non-negative subtraction, and integer division with remainder) strictly on top of add1/pred primitives.
    • t/50_peano.t Peano arithmetic (honestly implemented in terms of incr, decr and is0) t/51_rpn.t RPN calculator for embedded expressions t/52_infix.t Infix notation calculator t/53_at-end-paragraph_vars.t Same, with ${var} accessing the value of the variable at the end of the current paragraph

Modules

A powerful, general-purpose document expansion framework (currently Control Flow, Loops, and Caching are unimplemented {???})