App-Test-Generator

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

      the MetaCPAN API is unavailable. Results are merged into the
      existing Dependency Version Cliffs section alongside findings
      from detect_version_cliffs(). Added report HTML caching in
      fetch_report_html() to avoid fetching the same report twice when
      both aggregate_dependency_stats() and detect_prereq_version_cliffs()
      process the same GUIDs.
    - bin/fuzz-harness-generator: fixed shell injection risk in final
      system() call, replaced string eval with block eval for JSON
      module loading, added explicit use File::Spec, normalised if()
      spacing throughout, added structured comment blocks for all four
      helper functions, added YAML input validation before calling
      generate()
    - bin/generate-test-dashboard: removed duplicate cover -report json
      step that was running twice per dashboard build
    - bin/test-generator-index: added structured comment blocks for six
      private analysis functions; fixed detect_universal_failure() to
      partition genuine FAILs from NAs before counting, returning undef
      when all reports are NA so detect_perl_version_cliff() can
      diagnose correctly
    - SchemaExtractor.pm: added structured comment blocks for all private
      methods (Pass 3)
    - App::Test::Generator: added relationships_code emission so schemas
      containing relationship metadata produced by SchemaExtractor are
      serialised into the generated test file
    - Template test.tt: added semantic type test cases for filepath
      (including Windows paths, reserved device names, UNC paths),
      email, date_string, and iso8601_string; added relationship test
      loop covering all six relationship types (mutually_exclusive,
      required_group, conditional_requirement, dependency,
      value_constraint, value_conditional); added float edge cases for
      Inf, -Inf, and NaN with correct status handling based on whether
      max is defined

0.32	Sun Apr 12 08:16:47 EDT 2026

    - 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.

0.31	Fri Apr 10 08:07:40 EDT 2026

    - Added TER3 (LCSAJ path coverage) column to mutation files table in
      the test dashboard index, showing percentage and raw fraction
      (e.g. "71.8% (352/491)")
    - Added TER1, TER2 and TER3 metrics to per-file mutation report pages,
      replacing the plain "Statement" and "Branch" labels with their
      formal Test Effectiveness Ratio names
    - Renamed the LCSAJ column header in the mutation files table to TER3
    - With min set to zero on an integer, sometimes negative or floats could be created - added abs() and int() calls as needed
    - Added --generate_mutant_tests=DIR option to generate_index.pl to
      produce a timestamped test stub file (t/mutant_YYYYMMDD_HHMMSS.t)
      for surviving mutants. High/Medium difficulty survivors get TODO
      test stubs; Low difficulty survivors get comment-only hints.
      Multiple mutations on the same source line are deduplicated into
      one stub listing all variants — one good test kills them all.
      Boundary value suggestions are generated for numeric mutations,
      clamped and deduplicated for non-negative contexts such as
      scalar() and length(). Environment variable hints are added where
      the source line references $ENV{...}. The enclosing subroutine
      name is shown in each stub for navigation context. File is skipped
      if there are no survivors or low-difficulty hints to report.
    - LCSAJ path dots on per-file mutation pages are now coloured blue
      (covered) or red (not covered), based on whether any line in the
      path range was executed during testing. Uncovered paths show
      [NOT COVERED] in the hover tooltip. The LCSAJ legend is updated
      to explain both colours.
    - Replaced TER3-only column in mutation files table with a
      TER1 / TER2 / TER3 triple, each component shown as a
      colour-coded badge (green/yellow/red). TER1=Statement,
      TER2=Branch, TER3=LCSAJ path coverage. Any component
      without data shows a grey n/a badge. Column header carries
      a tooltip defining all three metrics.
    - Added --generate_test=mutant option to generate_index.pl (used
      alongside --generate_mutant_tests=DIR). For NUM_BOUNDARY survivors,
      attempts to produce a runnable YAML schema file in t/conf/ using
      App::Test::Generator::SchemaExtractor rather than a TODO stub.
      The schema is augmented with boundary values from the surviving
      mutant (the exact boundary value plus one either side) and picked
      up automatically by t/fuzz.t on the next test run. Falls back to
      a TODO stub if SchemaExtractor fails, the enclosing sub cannot be
      found, or confidence in the extracted schema is too low. The
      --generate_test option is designed to accept future classes beyond
      'mutant'. Updated generate_test_dashboard Step 7 to pass
      --generate_test=mutant by default.
    - Made output_dir optional in App::Test::Generator::SchemaExtractor
      new() -- it is now only required if schema files will be written.
      extract_all() gains a no_write option to suppress file output and
      return schemas only, for use by callers that want to inspect or
      augment schemas before deciding where to write them.
    - Added --generate_fuzz flag to generate_index.pl. Scans t/conf/
      for existing YAML schema files and writes timestamped augmented
      copies (mutant_fuzz_YYYYMMDD_HHMMSS_FUNCTION.yml) with boundary
      values from surviving NUM_BOUNDARY mutants merged in. The original
      schema is never modified. Augmented schemas are picked up
      automatically by t/fuzz.t. Schemas with no matching survivors are
      skipped (with a verbose note). Boundary values are merged into
      whichever edge key already exists in the schema (edge_case_array
      or edge_cases), with deduplication. Schemas already prefixed with
      mutant_fuzz_ are skipped to prevent cascading augmentation.
      Updated generate_test_dashboard Step 7 to pass --generate_fuzz.

0.30	Thu Apr  2 07:17:16 EDT 2026
	Added mutation levels.



( run in 1.104 second using v1.01-cache-2.11-cpan-39bf76dae61 )