Changes for version 0.23 - 2026-06-28
- Refactoring
- Replaced hand-rolled _walk_isa / _get_inheritance_chain with mro::get_linear_isa (handles diamond inheritance correctly; UNIVERSAL appended manually when absent). _walk_isa is removed; callers that called it directly will get "Undefined subroutine".
- Extracted _build_logger() private helper consolidating logger creation from configure() and _reconfigure_logger(), eliminating the duplication.
- Added Readonly constants for all magic strings: $OS_WINDOWS, $LOGGER_NULL, $SIG_DEFAULT, $SIG_IGNORE, $POLL_SLEEP, $KILL_TIMEOUT.
- Removed duplicate dead-code block in configure() (second identical "if ($array && !$params->{'logger'}->{'array'})" check).
- Replaced POSIX::WNOHANG() fully-qualified call with imported WNOHANG.
- Added =head1 LIMITATIONS POD section documenting known design trade-offs.
- Readonly promoted from TEST_REQUIRES to PREREQ_PM (now used in lib/).
- Bug Fixes
- Fixed configure() to give user-supplied arrayref logger priority over config-file logger (previously the config file could silently override an explicitly passed logger => \@arr).
- Fixed env-var ancestor merge order in configure() no-config-file path: was iterating child-first (base-class env vars overrode child-class), now iterates base-first so child correctly overrides base.
- Fixed _reload_object_config() logger-key match from /^logger/ to eq 'logger': keys like 'logger.file' are flat config values, not logger specs, and must not be processed through _reconfigure_logger().
- Fixed warn → carp in reload_config() for package-correct stack traces.
- CI
- Bumped App::Test::Generator to 0.41 in both dashboard.yml and mutate.yml.
- Added --exclude lib/Devel --exclude lib/App/Test/Generator/Sample to the non-ATG-repo generate-test-dashboard call in dashboard.yml (parity with mutate.yml).
- Fixed empty-BASE guard in mutate.yml (no-op diff when all commits are bot).
- Added conditional $BASE_SHA_FLAG in mutate.yml (avoids passing empty --base_sha).
- Removed || true from all git pull --rebase lines in both workflow files.
- Fixed coverage snapshot to use pre-captured SNAPSHOT_SHA / SNAPSHOT_TIMESTAMP instead of recomputing git rev-parse after bot commits moved HEAD.
- Tests
- Added t/locales.t: verifies configure() error strings are locale-consistent under en_US.UTF-8, de_DE.UTF-8, ja_JP.UTF-8 using local $! = ENOENT pattern.
- Updated t/function.t: replaced _walk_isa() subtests with _get_inheritance_chain() equivalents to match refactored internals.
Documentation
Modules
Runtime Configuration for an Object