Changes for version 0.32 - 2026-04-12
- Added detect_scattered_failures() root cause detector. Surfaces a weak-confidence advisory when failures and passes coexist across 2 or more common Perl series with no detectable version cliff or OS pattern, suggesting flaky tests, optional dependency differences, or CGI environment assumptions rather than a compatibility issue. Complements detect_universal_failure() which handles the opposite case of near-total failure. Confidence is intentionally set to 0.40 (Weak) since this is a catch-all signal rather than a precise diagnosis, ensuring it appears below stronger signals in the root causes table when multiple detectors fire simultaneously.
- Added detect_universal_failure() root cause detector. Surfaces a high-confidence warning when failures occur across 3 or more distinct Perl versions and 2 or more OS types with fewer than 10% passing reports, indicating a likely broken release rather than a version- or platform-specific compatibility issue. Likely causes listed in evidence: missing file in tarball, broken Makefile.PL, or undeclared dependency. Integrated into detect_root_causes() where it is evaluated first and sorted by confidence alongside the existing OS, locale, and Perl version cliff detectors.
- Fixed blib/ paths appearing in coverage table instead of lib/ paths. Devel::Cover instruments blib/ during testing; paths are now normalised to lib/ for display, with deduplication against any native lib/ entry.
- Fixed structural coverage percentages in Executive Summary and Structural Coverage sections showing ~24% instead of ~93%. _coverage_totals now aggregates from individual own-project files rather than Devel::Cover's pre-aggregated Total key which includes all instrumented CPAN dependencies.
- Fixed cyclomatic complexity badge colour and tooltip inverted. High complexity now correctly shows red/Needs improvement; low complexity shows green/Good. Second condition also fixed to use $complexity rather than $score.
Documentation
Run mutation testing against a Perl test suite
Demonstrate the schema extractor
Extract test schemas from Perl modules
Extract schemas and optionally emit Perl tests
Generate fuzzing + corpus-based test harnesses from test schemas
Test coverage dashboard generator
Modules
Generate fuzz and corpus-driven test harnesses from test schemas
AFL-style coverage-guided fuzzing for App::Test::Generator
Static LCSAJ extraction for Perl
Generate mutation tests
Example module for schema extraction testing
Extract test schemas from Perl modules
Template for the test files generated by App::Test::Generator
Debugger backend for LCSAJ coverage
Provides
in lib/App/Test/Generator/Analyzer/Complexity.pm
in lib/App/Test/Generator/Analyzer/Return.pm
in lib/App/Test/Generator/Analyzer/ReturnMeta.pm
in lib/App/Test/Generator/Analyzer/SideEffect.pm
in lib/App/Test/Generator/Emitter/Perl.pm
in lib/App/Test/Generator/LCSAJ/Coverage.pm
in lib/App/Test/Generator/Model/Method.pm
in lib/App/Test/Generator/Mutant.pm
in lib/App/Test/Generator/Mutation/Base.pm
in lib/App/Test/Generator/Mutation/BooleanNegation.pm
in lib/App/Test/Generator/Mutation/ConditionalInversion.pm
in lib/App/Test/Generator/Mutation/NumericBoundary.pm
in lib/App/Test/Generator/Mutation/ReturnUndef.pm
in lib/App/Test/Generator/Pipeline.pm
in lib/App/Test/Generator/Planner.pm
in lib/App/Test/Generator/Planner/Fixture.pm
in lib/App/Test/Generator/Planner/Grouping.pm
in lib/App/Test/Generator/Planner/Isolation.pm
in lib/App/Test/Generator/Planner/Mock.pm
in lib/App/Test/Generator/Report/HTML.pm
in lib/App/Test/Generator/TestStrategy.pm