Repository navigation
Complete CPAN release qualification after UAT/lifecycle split: remaining suite failures and setup gaps #1646
Description
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
- Validate this exact split commit with captured
nice -n 19 makeoutput and
nice -n 19 make check-links. Never mutate a checkout during a gate. - 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. - Reduce proxy/restful failures separately; classify DBIx assertions; complete
DateTime and ExifTool rather than assuming setup or outer timeouts are excluded. - Review the independent lifecycle draft and its deterministic query counts.
Its old combined success does not validate either new split candidate. - Batch fixes, build once at an immutable barrier, then run full acceptance
in an isolated CPAN home and preserve logs. Onlyarea: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. - 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
- Reachability/lifecycle #1642
- Mixed arithmetic UTF-8 flags #1643
- Interpreter Test::Mojo application #1644
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
doneSome 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, bodyError: 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 ofOne!. - 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
fglock commentedon Oct 5, 2026
Committed UAT handoff records the scope, exact acceptance limits, follow-up issues and next steps.
UAT split source
1acfa1f80passed fullnice -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.
fglock commentedon Oct 6, 2026
Update for Image::ExifTool 13.55: the previously interrupted qualification run is now complete under issue #1659 and PR #1661.
nice -n 19 makegate passed, with permanent regression tests added for the parser, conditionalgoto, and transliteration string-flag fixes.The PR's GitHub Ubuntu and Windows CI checks are pending.
fglock commentedon Oct 6, 2026
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
masteras6c2df2f72d978e014abf875237a914a6a2164a15. The committed regression coverage and detailed evidence are recorded in #1659.fglock commentedon Oct 7, 2026
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::RunModeloads 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.fix: parse labeled SKIP blocks in grep fallback expressions
fglock commentedon Oct 14, 2026
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, andwebsocket_lite_app.t: system Perl passed all 129 tests.proxy_app.tandrestful_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 Mojoliciousrun on this candidate did not complete:t/mojo/dom.tstill fails “Replace elements” and “Scoped selectors” (the known DOM lifetime overlap with #1642), then emits repeated uninitialized-value warnings fromMojo::DOM::HTMLand 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.
fglock commentedon Oct 14, 2026
Independent fixes merged; lifecycle qualification remains (2026-10-14)
PR #1777 has merged as
96ecb08691b1e60d86d25fb839cb1fa256ef243fafter Ubuntu and Windows CI passed.#1646 remains open. The full CPAN gate is not complete: Mojolicious
t/mojo/dom.tstill 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.fglock commentedon Oct 14, 2026
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.
fix(runtime): release deferred weak referents at statement boundaries
fix(runtime): align B refcounts for destroy hash fields
fix(runtime): re-fire DESTROY after captured owner release
fix(runtime): release deferred weak referents at statement boundaries
fix(runtime): align B refcounts for destroy hash fields
fix(runtime): re-fire DESTROY after captured owner release
fglock commentedon Oct 26, 2026
Lifecycle and DBIx update (2026-10-26)
PR #1877 now includes the deferred weak-reference sweep fix and
DestroyDispatchNestedWeakSweepTestfor the DBIx::Class callback lifecycle.05f9121f1and passes on the candidate on JVM and interpreter.t/storage/error.tpasses 49/49 assertions on PerlOnJava; the system Perl oracle passes as well.nice -n 19 makeandmake check-linkspass locally. PR Fix lifecycle cleanup for transient request callbacks #1877's Ubuntu and Windows checks are green.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.