Skip to content

Complete CPAN release qualification after UAT/lifecycle split: remaining suite failures and setup gaps #1646

Open

Description

@fglock

CPAN UAT handoff (2026-10-05)

Candidate scope

PR #1628 retains Object::Pad accessors (#1177), directory/handle errors (#1187),
bundled provider fixtures (#1278), transliteration/dualvar/version UTF-8 flags,
sort comparator helper tail calls, bounded captured subprocess diagnostics,
launcher refresh and bundled JAR pinning, and removal of the stale Catalyst
skip preference. All reachability and lifecycle changes, their fixes and new
regressions moved to an independent draft PR. In particular, #1597's pipe fix,
DOM parent-lifetime fix, socket ownership and #1336-related lifecycle work are
not included in this UAT candidate. Existing master tests remain intact.

The combined parent was d3f9ae5ac31b51810c0d3b83f302438e656a496a. Rebase onto
master c38ef8a preserved newer eval/format context handling and sort comparator
frames. The split source must pass a new immutable build before publication.

Acceptance run 11: exact qualification limits

The combined parent passed make and focused backend regressions. Its isolated
fresh-home acceptance attempt stopped at the overall eight-hour guard, exit 124.
This is not a successful release gate.

Target Result
Template PASS: 121 files, 3,165 tests
PPR PASS: 75 files, 1,253 tests
XLSX PASS: 1,247 files, 5,115 tests
Mojolicious 9.49 Retry: 109 files, 4,181 counted tests, 4,174 passed / 7 failed across five programs; dom.t passed
Catalyst-Runtime 5.90132 Prerequisite installation exceeded 15,000-second guard before the suite; no distribution skip
DateTime 1.67 Setup exceeded its guard before suite; cannot classify this as excluded #1269
DBIx::Class 309/325 programs failed; 2/1,722 assertions failed; parser cascade requires separate assertion classification
ExifTool 13.55 Started, then interrupted by outer guard; no completed result

Mojolicious final failures: asset.t subtest 20 requires unsupported fork;
json.t 25–26 computed numbers serialize as strings; websocket_lite_app.t 19
has mixed string/number output; proxy_app.t 1 and 3 have incorrect responses;
restful_lite_app.t 87 reports inactivity timeout. The initial missing gzip
prerequisite cascade was retried successfully and is not a separate runtime bug.

Confirmed reductions and open work

Mixed arithmetic 1 + '0 but true' and 23 + 'bar' incorrectly set UTF-8 flags
on both PerlOnJava backends. The four-assertion reduction passes system Perl
and fails assertions 3–4 on both backends. Mojo::JSON's numeric predicate tests
this flag, explaining json.t 25–26. This is distinct from closed #1260/#1262.

A minimal Test::Mojo GET /nothing with Accept image/png passes system Perl
and JVM with the upstream default timeout. Interpreter instead exits 255 at
Mojo/Server/Daemon.pm:55 because app is undefined. A shortened five-second
probe produced a false JVM failure from cold template compilation; do not
reuse that artificial timeout as proof of a JVM defect. The full proxy/restful
failures still need reductions with default upstream settings.

Resume sequence and completion criteria

  1. Validate this exact split commit with captured nice -n 19 make output and
    nice -n 19 make check-links. Never mutate a checkout during a gate.
  2. Review the linked bug tickets' inline reproductions and fix numeric flags
    and interpreter application ownership/dispatch with permanent regression
    tests. Verify Perl oracle, unfixed failure and JVM/interpreter success.
  3. Reduce proxy/restful failures separately; classify DBIx assertions; complete
    DateTime and ExifTool rather than assuming setup or outer timeouts are excluded.
  4. Review the independent lifecycle draft and its deterministic query counts.
    Its old combined success does not validate either new split candidate.
  5. Batch fixes, build once at an immutable barrier, then run full acceptance
    in an isolated CPAN home and preserve logs. Only area:parser, Prioritize standard Perl test-suite failures #1269 and
    unsupported fork are authorized exclusions. Catalyst must run normally;
    DOM OOM remains an in-scope requirement in the independent lifecycle PR.
  6. UAT approval does not establish release acceptance. Keep the goal open until
    all in-scope targets pass and all failures have explicit root-cause evidence.

Related work

Investigation tickets

Independent UAT validation

Commit 1acfa1f80 passed full nice -n 19 make on 2026-10-05 (exit 0);
all unit shards and Joni packaging checks completed. nice -n 19 make check-links
also passed. This validates the split UAT code, not full release acceptance.

Reproduce remaining upstream Mojolicious failures

The following runs the unchanged, pinned upstream programs with their default
application timeouts. It does not shorten the HTTP inactivity timeout.
Use the jperl launcher from the candidate checkout after full make passes.

source_home=$(mktemp -d)
curl -fL https://cpan.org/authors/id/S/SR/SRI/Mojolicious-9.49.tar.gz -o "$source_home/Mojolicious-9.49.tar.gz"
printf '%s  %s\n' 281933d4f9b821f669a3e93a466daaad5596443ea2cb167fa7c019752bce6d66 "$source_home/Mojolicious-9.49.tar.gz" | shasum -a 256 -c -
tar -xzf "$source_home/Mojolicious-9.49.tar.gz" -C "$source_home"
mojo_source="$source_home/Mojolicious-9.49"
for suite in proxy_app restful_lite_app websocket_lite_app; do
  timeout 3600 ./jperl -I"$mojo_source/lib" "$mojo_source/t/mojolicious/$suite.t" > "$suite.jvm.log" 2>&1
  timeout 3600 ./jperl --interpreter -I"$mojo_source/lib" "$mojo_source/t/mojolicious/$suite.t" > "$suite.interpreter.log" 2>&1
done

Some upstream tests may assume their source directory is the working directory;
if required, use an absolute launcher path and run from the extracted distribution.
Loopback networking must be permitted. Test::More and gzip prerequisites must be
available. Classify a missing prerequisite separately rather than calling it a
runtime assertion failure. Use the actual default timeout; cold template compilation
made an artificially shortened five-second minimal probe misleading.

Exact run-11 observations still requiring reduction:

  • proxy_app.t subtest 1, line 160: a 304 redirect produced 400, X-Mojo-App undef,
    Content-Length 20 instead of undef, body Error: Unknown error.
  • proxy_app.t subtest 3, line 215: GET /proxy3/GET/res1 failed; status undef
    instead of 200, proxy headers undef, empty body instead of One!.
  • restful_lite_app.t subtest 87: GET /nothing with Accept image/png reported
    inactivity timeout and status undef rather than 404. The minimal default-timeout
    JVM reproduction passed, so this is still a full-suite-only observation.
  • websocket_lite_app.t subtest 19, line 282: output ["1","2","3",4] instead
    of [1,2,3,4]; whether Mixed numeric arithmetic incorrectly sets UTF-8 flag and changes Mojo JSON serialization #1643 explains the decoder path is unconfirmed.

Qualification gaps must remain explicit

DateTime's setup timeout is not the known #1269 missing TAP plan. Prior focused
t/10subtract.t passed 37 assertions and exited without a plan; that is separate
from run 11 failing before its suite. ExifTool's incomplete run is not a pass;
previous reduced XMP tests 1–3 passed after UTF-8 fixes, while Sony parser errors
are eligible only after matching the documented parser root cause. DBIx::Class's
shared literal conflict-marker parse failure can classify the cascade; its two
assertion failures still need their own earliest-cause review.

Archive each candidate's full logs and report snapshot. Run all remaining targets
from one immutable built candidate, with a unique CPAN home. Allow the outer
budget to cover prerequisites and targets, or qualify staged runs explicitly on
the same source/JAR rather than losing final-target evidence at a global guard.
Do not infer success from a timeout or exclude an entire distribution.

This is a qualification tracker, not a claim that every incomplete target has a
new runtime defect. Close only when the in-scope acceptance matrix is complete,
confirmed defects have tracked regressions, and lifecycle #1642 is reconciled.

Activity

  1. fglock commented on Oct 5, 2026

    @fglock
    OwnerAuthor

    Committed UAT handoff records the scope, exact acceptance limits, follow-up issues and next steps.

    UAT split source 1acfa1f80 passed full nice -n 19 make; documentation link checks passed. All reachability/lifecycle work and its new tests moved together to independent draft #1647, with tracking issue #1642 and its own successful build/backend regression gates.

    Full release acceptance remains incomplete. Follow #1643, #1644 and #1646; historical run 11 results do not qualify either split for release.

  2. fglock commented on Oct 6, 2026

    @fglock
    OwnerAuthor

    Update for Image::ExifTool 13.55: the previously interrupted qualification run is now complete under issue #1659 and PR #1661.

    • System Perl: 113 test files, 600 tests passed.
    • PerlOnJava JVM: 113 test files, 600/600 assertions passed.
    • PerlOnJava interpreter: 113 test files, 600/600 assertions passed.
    • The repository nice -n 19 make gate passed, with permanent regression tests added for the parser, conditional goto, and transliteration string-flag fixes.

    The PR's GitHub Ubuntu and Windows CI checks are pending.

  3. fglock commented on Oct 6, 2026

    @fglock
    OwnerAuthor

    Image::ExifTool 13.55 qualification from follow-up issue #1659 is complete. Its full 113-file / 600-test suite passed on system Perl, PerlOnJava JVM, and interpreter. The PerlOnJava core UAT passed 575/575 files with zero regressions against the 2026-10-03 baseline. PR #1661 passed Ubuntu and Windows CI and was merged into master as 6c2df2f72d978e014abf875237a914a6a2164a15. The committed regression coverage and detailed evidence are recorded in #1659.

  4. fglock commented on Oct 7, 2026

    @fglock
    OwnerAuthor

    DBIx::Class recheck (2026-10-07)

    The Phase 1 CPAN recheck of DBIx::Class 0.082844 ended with 309/325 test programs failing and 2/1,722 assertions reported failed. Most of the load cascade reports the heredoc false-positive tracked in #1434: DBICTest::RunMode loads under target Perl 5.45.4, but PerlOnJava rejects marker-like text in its diagnostic heredoc. The focused failure reproduces on both Phase 1 PR #1653 and current master, so it is pre-existing. The two assertion failures remain separate and unclassified.

    Full log: /private/tmp/issue1649-jcpan-DBIx-Class.log.

  5. fglock commented on Oct 14, 2026

    @fglock
    OwnerAuthor

    Mojolicious targeted recheck on PR #1777 head 9ac6409a6 (2026-10-14)

    I rechecked the historical proxy/REST/WebSocket acceptance failures against the installed Mojolicious 9.49 source, using system Perl as the oracle and the current PR JVM/interpreter build:

    • t/mojolicious/proxy_app.t, restful_lite_app.t, and websocket_lite_app.t: system Perl passed all 129 tests.
    • proxy_app.t and restful_lite_app.t: JVM passed when run individually (REST reported 91 top-level tests).
    • websocket_lite_app.t: interpreter passed 35/35. The JVM passed 35/35 on an isolated repeat; an earlier run concurrent with another loopback test failed only the server-push subtest, so that observation is treated as timing-sensitive rather than a confirmed regression.
    • t/mojo/user_agent.t: system Perl and JVM each passed all 234 tests when run individually. Two failures seen in the interrupted full-suite run did not reproduce.

    The full jcpan -t Mojolicious run on this candidate did not complete: t/mojo/dom.t still fails “Replace elements” and “Scoped selectors” (the known DOM lifetime overlap with #1642), then emits repeated uninitialized-value warnings from Mojo::DOM::HTML and grew the captured log to 2.2 GB. I stopped that specific run after preserving its failure summary and removing the oversized raw log. This does not establish full Mojolicious qualification.

    These targeted passes reduce the outstanding independent Mojolicious work in the historical run-11 list. A full acceptance rerun still needs the #1642 lifecycle change and complete target results; DBIx::Class, Catalyst, DateTime, and ExifTool completion claims are unchanged by this recheck.

  6. fglock commented on Oct 14, 2026

    @fglock
    OwnerAuthor

    Independent fixes merged; lifecycle qualification remains (2026-10-14)

    PR #1777 has merged as 96ecb08691b1e60d86d25fb839cb1fa256ef243f after Ubuntu and Windows CI passed.

    #1646 remains open. The full CPAN gate is not complete: Mojolicious t/mojo/dom.t still requires the #1642 lifecycle work, and the integration-only controller/WebSocket and Catalyst tempfile regressions are tracked in #1794 and #1795. After #1642 and those follow-ups settle, rerun the full release acceptance matrix on one immutable candidate and record every target's result here. Do not treat the prior targeted tests or PR CI as full CPAN qualification.

  7. fglock commented on Oct 14, 2026

    @fglock
    OwnerAuthor

    Reopened: PR #1777 resolves the independent fixes but does not complete the release acceptance matrix. The post-merge follow-up below records the remaining #1642-dependent Mojolicious DOM and integration regressions; keep this tracker open until the full acceptance run is complete.

  8. reopened this on Oct 14, 2026
  9. fglock commented on Oct 26, 2026

    @fglock
    OwnerAuthor

    Lifecycle and DBIx update (2026-10-26)

    PR #1877 now includes the deferred weak-reference sweep fix and DestroyDispatchNestedWeakSweepTest for the DBIx::Class callback lifecycle.

    The #1646 release acceptance matrix is still incomplete. #1794 remains open pending review and merge of PR #1877. After that follow-up settles, rerun the full acceptance matrix on one immutable candidate and keep #1646 open until every in-scope target is classified and complete.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:releaseBuild release and project workflowenhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions