Eliminate initial CPAN compatibility workarounds - #895
Merged
Conversation
fglock
force-pushed
the
feature/cpan-workaround-cleanup
branch
2 times, most recently
from
August 9, 2026 20:53
7ac8e57 to
1b7aabd
Compare
Carry lexical use-bytes mode with replacement regexes so both compiler backends match against UTF-8 octets while destructive substitutions write through the original scalar. Materialize regex capture proxies for bytes::ord to avoid encoding captured octets twice. Add standard-Perl-validated coverage for destructive, non-destructive, aggregate, and tied-scalar substitutions. Retire the WWW::Form::UrlEncoded distropref and source patch after its unmodified 199-test suite passes with both PerlOnJava backends. Add the forward-looking CPAN workaround elimination design handout and mark the bytes-substitution phase complete. Generated with [Codex](https://openai.com/codex/) Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Add a schema-validated bundled provider manifest and teach CPAN to satisfy compatible prerequisites without fetching or installing over authoritative PerlOnJava modules. Reject incompatible and forced shadow installs, and add an explicit non-installing provider conformance mode. Bundle missing loader and facade dependencies for the initial provider set, retire the corresponding lifecycle prefs and DBI patches, and mark Phase 2 complete in the design. Verification: - standard Perl: cpan_bundled_providers.t (61/61) - JVM and interpreter provider resolver gates - clean isolated jcpan DBI shadow refusal - make Generated with [Codex](https://openai.com/codex/) Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Retire the aliased signal-handler investigation as passing on both PerlOnJava backends, and add a standard-Perl-validated regression for the remaining interpreter Carp::confess frame-name mismatch. Preserve the current interpreter call-frame name propagation work and document the exact Phase 4 resumption point. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Record that the interpreter caller mismatch requires a subroutine invoked
from eval, rather than Carp::Assert or SIG{__DIE__} specifically.
Generated with [Codex](https://openai.com/codex)
Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Keep an interpreter subroutine frame selected when the next formatted frame is the virtual eval frame. This restores the named Carp frame while documenting the remaining @db::args payload mismatch. Update the focused regression and Phase 4 design status. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Document the recovered build-worker incident so future investigations avoid using broad CPU-based process selection. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Use the active Perl code object to retrieve pristine @db::args when formatted stack frames have collapsed interpreter/compiler wrappers. This preserves Carp's original assertion arguments while retaining the caller-frame fix. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Document the passing target suites and the remaining interpreter parity blockers discovered after the caller and @db::args fixes. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Treat sqrt as an overridable core operator so dynamically installed wrappers receive and can modify its arguments. This restores Hook::LexWrap's unchanged test suite and updates the Phase 4 status. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Reconstruct a coderef's canonical typeglob from Sub::Util metadata so Test::MockObject::Extends can resolve parent AUTOLOAD packages. Document the remaining weak-reference lifetime failure as Phase 8 work. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Alias undefined nested package entries as stashes, normalize main-package spellings, resolve package-prefix aliases transitively, and create new scalar slots in the canonical stash without disturbing pre-alias slots. Add a standard-Perl-validated regression and record the remaining Devel::Symdump symbol inventory failures in the Phase 4 design status. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Separate use-vars declaration metadata from aggregate slot materialization, make magic hashes lazy, expose standard handle aliases and the main argument array slot, and distinguish the special colon glob from package stashes. This restores Devel::Symdump's unchanged 9-file, 29-assertion suite on both PerlOnJava backends and updates the Phase 4 resumption point. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Qualify package-local handles embedded in two-argument open duplication modes, preserve strict-vars diagnostics before later syntax failures, and restrict the virtual-eval caller adjustment to interpreter frames. Complete the unchanged Test2::Plugin::NoWarnings suite and advance the design status to Phase 5. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Attach interpreter identity directly to formatted call frames and place the synthetic eval frame outside contiguous interpreted calls. Prefer the active named Perl subroutine when it occupies that synthetic slot, while retaining a genuine outer eval caller as (eval). Add an eval-defined caller regression and record the first Phase 5 Graph checkpoint in the CPAN workaround elimination design. Verification: - standard Perl: zz_eval_defined_named_caller.t (4/4) - JVM backend: zz_eval_defined_named_caller.t (4/4) - interpreter backend: zz_eval_defined_named_caller.t (4/4) - unchanged Graph 0.9735: 88 files, 9,256 assertions - full make: 245 tests passed, 2 skipped Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Restore the ordinary Perl subroutine boundary in cached JVM method dispatch so an explicit return can cross nested map callbacks without escaping the method that owns them. Preserve raw lvalue call context while coercing the returned value after consuming the non-local marker. Retire the explicit-loop get_ids_by_paths rewrites from Graph's AdjacencyMap patches while retaining the independently justified compatibility hunks. Verification: - standard Perl: zz_nested_map_return.t (11/11) - JVM backend: zz_nested_map_return.t (11/11) - interpreter backend: zz_nested_map_return.t (11/11) - unpatched Graph t/16_edges.t: 48/48 - pristine Graph with reduced patch bundle: 88 files, 9,260 assertions - jcpan -t Graph with refreshed reduced bundle: 88 files, 9,234 assertions - full make: pass (245 tests, 2 skipped) Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Keep direct defined(&sub) as a CODE-slot probe while restoring normal ampersand-call parsing on an assignment RHS. This makes defined(my $value = &sub) call the subroutine, share @_, and test its result. Retire Graph's AdjacencyMap-Light patch and register its installed path for bootstrap cleanup. Verification: - standard Perl: zz_defined_ampersand_assignment.t (4/4) - JVM backend: zz_defined_ampersand_assignment.t (4/4) - interpreter backend: zz_defined_ampersand_assignment.t (4/4) - pristine Graph focused files: 56/56, 12/12, and 1,795/1,795 - pristine Graph with two remaining patches: 88 files, 9,263 assertions - jcpan -t Graph applying two patches: 88 files, 9,268 assertions - installed AdjacencyMap-Light patch retirement: pass - full make: pass (245 tests, 2 skipped) Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Use the defined-assignment ampersand parsing fix for Graph's upstream postfix-dereference expression and remove the SCC return-shape rewrite. Keep direct defined(&sub) probes intact and document the next Graph split. Verification: - standard Perl: zz_ampersand_postfix_deref.t (4/4) - JVM backend: zz_ampersand_postfix_deref.t (4/4) - interpreter backend: zz_ampersand_postfix_deref.t (4/4) - unmodified Graph t/63_scc.t: 56/56 - pristine Graph with current two patches: 88 files, 9,245 assertions - source-first jcpan -t Graph: 88 files, 9,246 assertions - full make: pass (245 tests, 2 skipped) Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Make PerlOnJava's scalar-state bridge authoritative for safe decimal dumping so untouched short numeric strings stay quoted while integer and numified scalars remain numeric. Retire Graph's recursive deterministic-dumper rewrite and retain only its independent Set::Object adjacency workaround in AdjacencyMap.pm.patch. Verification: - standard Perl: zz_data_dumper_short_numeric_flags.t (5/5) - JVM backend: zz_data_dumper_short_numeric_flags.t (5/5) - interpreter backend: zz_data_dumper_short_numeric_flags.t (5/5) - existing data_dumper_numified.t: 7/7 - unpatched Graph t/08_stringify.t: all dumper assertions pass - reduced-patch Graph: 88 files, 9,249 assertions - full make: pass Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Implement SX_CODE deserialization through Storable Eval callbacks or lexical Perl eval, preserve seen-table tags, and collapse the redundant outer SX_REF around callable values. Retire Graph's Storable guard and now-obsolete caller attribution hunk, delete Graph.pm.patch, and register its installed-cache cleanup. Graph now applies only its independent AdjacencyMap lifetime patch. Verification: - standard Perl: zz_storable_code_eval.t (2/2) - JVM backend: zz_storable_code_eval.t (2/2) - interpreter backend: zz_storable_code_eval.t (2/2) - unpatched Graph t/67_copy.t: 56/56 - unpatched caller-focused Graph tests: 520/520 - source-first jcpan -t Graph with one patch: 88 files, 9,243 assertions - installed Graph.pm.patch retirement: pass - full make: pass Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Keep caller-owned constructor results alive across nested JVM block cleanup, add a standard-Perl list-assignment lifetime regression, and retire Graph's final adjacency patch and distropref. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Preserve forward CODE aliases when an undefined named coderef is assigned to another typeglob, including independently cached interpreter CVs. Remove the Module::Install distropref and source patch after its unmodified upstream suite passes, and record the Phase 5 checkpoint in the design. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Load a native Want call-context bridge lazily so lvalue accessors can detect assignment context without the upstream XS implementation. Remove the Term::ANSIColor::Markup distropref and portable-accessor patch after its unmodified source-first suite passes. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Align interpreter caller locations, lvalue return aliases, localized aggregate assignment, hash-slot identity, and Sub::Name introspection with the JVM runtime. Record the zero-workaround Phase 5 acceptance matrix and advance the design to regex coverage. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Keep XML::TreePP's upstream global parser regex now that the runtime handles its large fixtures safely, while retaining the independent UTF-8 flag adaptation. Record the Phase 6 baselines and next target in the design. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Add interpreter parity for legacy multidimensional hash keys so Regexp::Common can load on both backends. Make Logger::Simple's retained callback policy cross-platform, migrate its unsigned legacy preference, and document the remaining executable-regex capability boundary. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Apply scalar and runtime context to dereferenced arrays in interpreter bytecode, preventing postfix compound assignments from receiving array containers. Record the complete Phase 6 backend matrix and select the stack-safe matcher migration for declarative recursive subpatterns. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Introduce a backend-neutral matcher boundary and route declarative recursive subpatterns through Joni while preserving Perl-visible character offsets. Cover recursion, captures, global matching, substitution, flags, and deep nesting on standard Perl and both PerlOnJava backends. Update the Phase 6 design status with the complete Regexp::Common matrix and the remaining non-recursion failures. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Let the bounded CPAN test retry discover LWP::UserAgent instead of patching upstream metadata. Bundle core AnyDBM_File over the existing SDBM backend so the clean libwww-perl graph does not attempt to install a Perl distribution. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Replace the CPAN::FindDependencies Unix system workaround with a shared ProcessBuilder-backed service that captures output, enforces deadlines, and terminates process trees. Retire the obsolete preference and source patch. Update dev/design/cpan-workaround-elimination.md for Phase 7 completion. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Do not apply the selective-refcount weak cleanup heuristic while a strong aggregate slot remains registered as an active owner. This preserves nested block-lexical call logs and completes the Test::MockObject JVM suite. Update dev/design/cpan-workaround-elimination.md with Phase 8 progress. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Use reachable aggregate owners rather than every active owner when deciding whether selective-refcount drift may clear weak observers. Walk scalar, aggregate, and closed-over captures on both execution backends. This preserves Test::MockObject call logs while releasing Test::Deep's stale localized comparison state. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Treat binary concatenation as an argument terminator for omitted optional named-unary arguments. This preserves caller.'::' when Sub::Uplevel installs its CORE::GLOBAL::caller proxy and lets YAML load afterward on the JVM backend. Update the Phase 8 design status with the next SQL::Translator mismatch. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Emit Perl's defined empty-string result when eval-generated foreach and C-style loops complete in scalar context. This lets Parse::RecDescent accept successful grammar actions whose final statement is a loop. Update Phase 8 progress with the restored SQL::Translator YAML round trip. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Record the unchanged MySQL parser's 347/347 bounded pass and make the complete SQL::Translator source matrix the next Phase 8 policy-retirement gate. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Expose ordinary attribute nodes through getAttributes without including namespace declarations, while preserving the broader attributes API. Record the complete SQL Translator baseline and the five unchanged XML tests this unblocks. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Make repeated quote-delimited token alternatives possessive when their body cannot consume the closing delimiter. This preserves Perl match semantics while preventing Java Pattern from overflowing its native stack on long Parse::RecDescent grammars. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Recognize line and block comment-only SQL before JDBC prepare and return DBI's 0E0 success value. This preserves generated migration comments as successful no-ops and unblocks SQL Translator's SQLite rename flow. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Remove the obsolete SQL-Translator skip policy after the complete upstream suite passes through a clean source-first jcpan run. Migrate stale owned preferences and separate CPAN metadata heap options from MakeMaker test-child options so large installer heaps do not multiply across test JVMs. Update dev/design/cpan-workaround-elimination.md with the clean 75-file, 1,947-assertion acceptance result and the DBIx::Class resumption point. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Request a root-based weak-reference sweep when a live blessed lexical is weakened with a positive residual selective refcount but no reachable registered owner. This handles DBIx::Class schema/parser lifetime drift while leaving ordinary weak-reference cleanup on the throttled fast path. Record passing SQL::Translator consumers in the workaround-elimination design: t/99dbic_sqlt_parser.t passes 179/179 and t/86sqlt.t passes 144/144. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Handle sparse list holes, leading-dot prototype arguments, parenthesized magic readline loops, failed handle duplication, File::Temp handle identity, byte-oriented environment values, and HTML entity defaults. CGI 4.72 now passes its complete unchanged 64-file source matrix. Update dev/design/cpan-workaround-elimination.md with the completed CGI follow-up and the LWP resumption point. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Implement request cookie header generation in the bundled HTTP::Cookies provider and preserve Max-Age as an absolute expiry. Add a focused standard-Perl-validated regression and record the passing libwww-perl 6.83 source matrix in the workaround-elimination design. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Store Java long values as integer scalars without losing precision, carry them through both backends, constant folding, arithmetic, comparisons, and increment operations, and add a standard-Perl-validated boundary regression. Record the remaining bitwise, pack, sprintf, unsigned, and Config gaps in the Phase 8 differential baseline. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Use a 64-bit word for shared shift operations and signed use-integer NOT, including negative shift reversal, overshift behavior, sign propagation, and the signed high bit. Add a standard-Perl-validated JVM/interpreter regression and document the exact unsigned scalar boundary that remains. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex@users.noreply.github.com>
Represent integer values above IV_MAX exactly and carry them through arithmetic, numeric comparison, and ordinary 64-bit bitwise operations. Add a standard-Perl-validated regression for UV_MAX, high-bit shifts, and bitwise precision on the JVM and interpreter backends. Update the Phase 8 design status with the upstream bop.t delta and the next migration gate. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Compile decimal literals through UV_MAX as exact integer scalars and preserve them through ordinary argument lists on both backends. Enable signed and unsigned q/Q pack and unpack with native and explicit byte orders. Add a standard-Perl-validated regression covering IV/UV boundaries, repeats, endian modifiers, native width, and literal propagation. Record the full upstream pack.t and make verification in the Phase 8 design status. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Accept Perl's ll, q, and L length modifiers for integer conversions and preserve signed and unsigned 64-bit bit patterns across decimal and alternate bases. Handle IV_MIN decimal magnitude without long overflow. Add a standard-Perl-validated boundary regression and record the focused, upstream sprintf2.t, and full make results in the Phase 8 design status. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Advertise the runtime's 64-bit IV, UV, quad, size, and NV model after completing exact literal, arithmetic, bitwise, pack, unpack, and sprintf behavior across JVM and interpreter backends. Bundle Scalar::Type's XS scalar probe as a Java-backed module so the unchanged Data::CompactReadonly source suite can pass without a CPAN workaround. Record the completed gates and the remaining Number::Phone module-selection blocker in the workaround-elimination design. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Cache physical line numbers by token index so parsing large generated Perl modules does not rescan the complete token stream for every quoted string. Invalidate the index when source filtering replaces the token list. Reduce Number::Phone's generated CN module load from over 60 seconds to 2.03 seconds and complete its unchanged 40-file, 13,609-assertion source suite. Mark Phase 8 complete in the workaround-elimination design. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Preserve the branch and master implementations while resolving their overlap, including regex byte views, CPAN preference lookup, 64-bit integer semantics, HTML entity defaults, and Storable UV serialization. Expose File::Temp's scalar glob slot so unchanged CGI upload metadata tests continue to work with the bundled hash-backed filehandle wrapper. Keep immediate global weak cleanup for DESTROY classes while deferring weak-observed wrappers without DESTROY to the targeted statement boundary. This preserves Hash::AutoHash cleanup without clearing SQL::Translator's unrelated weak index owner during nested construction. Update the CPAN workaround-elimination design with the post-rebase verification matrix and remaining CI handoff steps. Generated with [OpenAI Codex](https://openai.com/codex/) Co-Authored-By: OpenAI Codex <codex@openai.com>
Restore master parity across the reported parser, numeric, string, pack, regex, control-flow, taint, symbol-table, and lvalue test regressions while preserving the CPAN workaround-elimination module gates. Update dev/design/cpan-workaround-elimination.md with the verification matrix and the final rebase handoff. Generated with [OpenAI Codex](https://openai.com/codex/) Co-Authored-By: OpenAI Codex <codex@openai.com>
fglock
force-pushed
the
feature/cpan-workaround-cleanup
branch
from
August 10, 2026 15:43
1b7aabd to
205be6d
Compare
Tee CPAN test output live while retaining the complete stream used to detect canonical missing test prerequisites. Preserve the one-retry bound and avoid replaying the suite only after it exits. Add process-level timing coverage and CPAN integration coverage, and document the behavior repair in the workaround-elimination design. Generated with [OpenAI Codex](https://openai.com/codex/) Co-Authored-By: OpenAI Codex <codex@openai.com>
Resolve an omitted process-runner cwd from Perl's logical current directory before entering Java. This keeps retry-aware CPAN test commands in the distribution build directory instead of the outer JVM launch directory. Add system-Perl-validated coverage for implicit child cwd inheritance and document the follow-up in the workaround-elimination design. Generated with [OpenAI Codex](https://openai.com/codex/) Co-Authored-By: OpenAI Codex <codex@openai.com>
Expose the existing unit fixture library to the Java Perl test harness and add a minimal test-only HTTP::Request/URI object for the HTTP::Cookies regression. This removes its accidental dependency on the developer CPAN home without adding a production module shadow or changing the existing test. Document the clean-CI follow-up in the workaround-elimination design. Generated with [OpenAI Codex](https://openai.com/codex/) Co-Authored-By: OpenAI Codex <codex@openai.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
dev/design/cpan-workaround-elimination.mdConfig.pmPost-rebase update
All 55 branch commits are rebased onto master
2095f7b55. Rebase reconciliation preserves both branches' regex byte-view, CPAN prerequisite phase/prefs, lvalue/caller, 64-bit integer, HTML entity, Storable UV, interpreter regex-state, taint-mode, ICU regex-fold, and weak-lifecycle work. No commit was dropped.The bundled hash-backed File::Temp wrapper now exposes the scalar slot of the glob it emulates. The standard-Perl-validated regression passes under both PerlOnJava backends, and unchanged CGI 4.72 again passes all 64 files and 1,603 assertions, including
uploadInfo.t.Weak-observed blessed wrappers without
DESTROYnow defer their targeted cleanup to the next statement boundary instead of also launching an immediate global sweep. This preserves master's Hash::AutoHash cleanup while preventing an unrelated Moo weakindex -> tablelink from being cleared inside SQL::Translator's nested diff construction.The final sweep also found a regression already present on the new master: compile-time
ourdeclarations did not materialize their package glob slots, so Specio rejectedDateTime::Durationduring its circular load. PerlOnJava now matches standard Perl by creating scalar, array, and hash slots while compilingour; the focused 6-test regression passes on standard Perl and both backends, and DateTime again passes its complete suite.Verification highlights
make: pass (BUILD SUCCESSFUL)2095f7b55: 0 regressions, 17 equal, 10 improvedMaster now defaults MakeMaker test children to 768 MB. Number::Phone's generated 9.2 MB CN module exceeds that ceiling during weak-reference reachability sweeps; its unchanged complete suite passes with
PERLONJAVA_TEST_JPERL_OPTS=-Xmx4g. SQL::Translator continues to use the documented 2 GB CPAN parent and 768 MB test children.Live CPAN test output follow-up
The retry-aware CPAN test path now tees each output chunk to the current Perl STDOUT while retaining the complete stream for canonical missing-module detection. This restores immediate TAP visibility for long suites such as DBIx::Class without removing prerequisite promotion or its one-retry-per-command bound.
The shared process runner now also resolves an omitted working directory from PerlOnJava's logical current directory before entering Java. This prevents CPAN's
make testcommand from accidentally running the PerlOnJava checkout's own Makefile after CPAN changes into a distribution build directory.The process timing, implicit-cwd inheritance, CPAN integration, and canonical missing-module regressions pass under standard Perl, JVM, and interpreter execution. The final full
makegate passes.The first clean Ubuntu rerun exposed that
http_cookies_request_header.thad been resolving HTTP::Request only from the developer CPAN home. The unit harness now exposes its test-only fixture library, including a minimal request/URI fixture; the unchanged test passes without adding a production module shadow. The final fullmakegate passes after this correction.Removed workaround classes
Retired signed preferences and owned patch-cache files are removed safely during bootstrap upgrades; user-owned policy files remain untouched.
Remaining capability policy
Regexp::Common executable conditional/recursive patterns, Type::Tiny executable regex paths, Object::InsideOut/Logger::Simple, and ExtUtils::ParseXS remain explicit capability policies pending the required compiler/runtime callback interfaces.
Next step
Run the required Ubuntu and Windows CI jobs after the rebased branch is pushed, then resolve platform-specific failures without restoring distribution workarounds.
Generated with OpenAI Codex
Co-Authored-By: OpenAI Codex codex@openai.com