Repository navigation
Conversation
fglock
force-pushed
the
wip/object-lifetime-ownership-20261015-124922
branch
6 times, most recently
from
October 17, 2026 18:38
0ca8e24 to
a190027
Compare
fglock
added a commit
that referenced
this pull request
Oct 18, 2026
Record the passing local make and latest Linux and Windows CI evidence for PR #1816, including the added weak-slot rescue regression. Keep the remaining Catalyst destruction warnings and Phase 2 ownership boundary explicit. Generated with [OpenAI Codex](https://openai.com/codex/) Co-Authored-By: OpenAI Codex <codex@openai.com>
fglock
added a commit
that referenced
this pull request
Oct 18, 2026
Record that the WebSocket release regression is now part of draft PR #1816. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: OpenAI Codex <chatgpt-codex@users.noreply.github.com>
fglock
force-pushed
the
wip/object-lifetime-ownership-20261015-124922
branch
from
October 20, 2026 01:21
de68ca5 to
781648e
Compare
fglock
added a commit
that referenced
this pull request
Oct 20, 2026
Record the passing local make and latest Linux and Windows CI evidence for PR #1816, including the added weak-slot rescue regression. Keep the remaining Catalyst destruction warnings and Phase 2 ownership boundary explicit. Generated with [OpenAI Codex](https://openai.com/codex/) Co-Authored-By: OpenAI Codex <codex@openai.com>
fglock
added a commit
that referenced
this pull request
Oct 20, 2026
Record that the WebSocket release regression is now part of draft PR #1816. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: OpenAI Codex <chatgpt-codex@users.noreply.github.com>
fglock
force-pushed
the
wip/object-lifetime-ownership-20261015-124922
branch
from
October 20, 2026 17:47
772d19e to
5667a35
Compare
fglock
added a commit
that referenced
this pull request
Oct 20, 2026
Record the passing local make and latest Linux and Windows CI evidence for PR #1816, including the added weak-slot rescue regression. Keep the remaining Catalyst destruction warnings and Phase 2 ownership boundary explicit. Generated with [OpenAI Codex](https://openai.com/codex/) Co-Authored-By: OpenAI Codex <codex@openai.com>
fglock
added a commit
that referenced
this pull request
Oct 20, 2026
Record that the WebSocket release regression is now part of draft PR #1816. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: OpenAI Codex <chatgpt-codex@users.noreply.github.com>
fglock
force-pushed
the
wip/object-lifetime-ownership-20261015-124922
branch
from
October 21, 2026 12:52
4eebdf5 to
44c0ed9
Compare
fglock
added a commit
that referenced
this pull request
Oct 21, 2026
Record the passing local make and latest Linux and Windows CI evidence for PR #1816, including the added weak-slot rescue regression. Keep the remaining Catalyst destruction warnings and Phase 2 ownership boundary explicit. Generated with [OpenAI Codex](https://openai.com/codex/) Co-Authored-By: OpenAI Codex <codex@openai.com>
fglock
added a commit
that referenced
this pull request
Oct 21, 2026
Record that the WebSocket release regression is now part of draft PR #1816. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: OpenAI Codex <chatgpt-codex@users.noreply.github.com>
fglock
force-pushed
the
wip/object-lifetime-ownership-20261015-124922
branch
from
October 21, 2026 17:59
a0c1449 to
70e715d
Compare
fglock
added a commit
that referenced
this pull request
Oct 21, 2026
Record the passing local make and latest Linux and Windows CI evidence for PR #1816, including the added weak-slot rescue regression. Keep the remaining Catalyst destruction warnings and Phase 2 ownership boundary explicit. Generated with [OpenAI Codex](https://openai.com/codex/) Co-Authored-By: OpenAI Codex <codex@openai.com>
fglock
added a commit
that referenced
this pull request
Oct 21, 2026
Record that the WebSocket release regression is now part of draft PR #1816. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: OpenAI Codex <chatgpt-codex@users.noreply.github.com>
fglock
force-pushed
the
wip/object-lifetime-ownership-20261015-124922
branch
from
October 21, 2026 23:51
565e0bd to
bd3e3d6
Compare
fglock
added a commit
that referenced
this pull request
Oct 21, 2026
Record the passing local make and latest Linux and Windows CI evidence for PR #1816, including the added weak-slot rescue regression. Keep the remaining Catalyst destruction warnings and Phase 2 ownership boundary explicit. Generated with [OpenAI Codex](https://openai.com/codex/) Co-Authored-By: OpenAI Codex <codex@openai.com>
fglock
added a commit
that referenced
this pull request
Oct 21, 2026
Record that the WebSocket release regression is now part of draft PR #1816. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: OpenAI Codex <chatgpt-codex@users.noreply.github.com>
fglock
force-pushed
the
wip/object-lifetime-ownership-20261015-124922
branch
from
October 22, 2026 15:47
2810e89 to
d0ca160
Compare
fglock
added a commit
that referenced
this pull request
Oct 22, 2026
Record the passing local make and latest Linux and Windows CI evidence for PR #1816, including the added weak-slot rescue regression. Keep the remaining Catalyst destruction warnings and Phase 2 ownership boundary explicit. Generated with [OpenAI Codex](https://openai.com/codex/) Co-Authored-By: OpenAI Codex <codex@openai.com>
fglock
added a commit
that referenced
this pull request
Oct 22, 2026
Record that the WebSocket release regression is now part of draft PR #1816. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: OpenAI Codex <chatgpt-codex@users.noreply.github.com>
Move global CODE owner release ahead of the generic undefineCodeReference return, which previously bypassed the slot cleanup path. Keep saved coderef aliases observing the undefined CV and retain the legacy bridge fallback. Generated with OpenAI Codex (https://openai.com/codex) Co-Authored-By: OpenAI Codex <codex@openai.com>
Restore localized CODE refs through their scalar owner slot when present, retiring the slot with the count before lifecycle dispatch. Keep the legacy count bridge for older cells and add a focused restoration regression. Generated with OpenAI Codex (https://openai.com/codex) Co-Authored-By: OpenAI Codex <codex@openai.com>
Document that current hash and array slots provide reachability identity while scalar cells still carry counted ownership. Record the coordinated store and release work required before aggregate recovery can be removed. Generated with OpenAI Codex (https://openai.com/codex) Co-Authored-By: OpenAI Codex <codex@openai.com>
Defer the tracked reference and I/O owner release after removing a non-final array element, preserving the delete result until callers can retain it. Add a regression for DESTROY timing across both execution backends and system Perl, and document the compatibility fix. Generated with Codex (https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Update the ownership migration notes with the confirmed middle-array-delete lifetime bug, regression evidence, and the still-open recovery callers. Generated with Codex (https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Record the issue-specific controller, WebSocket, and Catalyst tempfile tests passing on both execution backends after the array owner-release fix. Generated with Codex (https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Only defer the deleted scalar's owner release when the array owns that particular element. This keeps borrowed @_ aliases from releasing a caller's reference while retaining cleanup for ordinary array elements. Add a system-Perl-validated regression for DESTROY timing and update the ownership notes and changelog. Full nice -n 19 make passes. Generated with Codex (https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Remember whether a localized array element was borrowed or owned and restore that classification after reinstating the slot. Otherwise restoring an @_ alias marks it as owned and argument-frame cleanup releases the caller's reference. Add a DESTROY timing regression verified on system Perl and both backends. Update the ownership migration notes and changelog. Generated with Codex (https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Verify that delete local preserves a genuinely owning array slot after its returned value is dropped, and that clearing the restored slot releases the object. Record the system Perl, JVM, interpreter, and full-gate results. Generated with Codex (https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Keep the scalar cell's existing value owner while a strong scalar refalias survives hash or array clear and deletion. Release that owner when the final alias disappears, without adding a duplicate referent count. Weak aliases and borrowed array slots retain their existing cleanup behavior. Add an 18-assertion regression validated with system Perl, JVM, and interpreter. Update the ownership progress notes and changelog. Full `nice -n 19 make` passes in 15m57s. Generated with Codex (https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Record which Perl owner edges use counted slots and which remain identity proofs for aggregate recovery. Keep the scan until a generic deferred-release producer is tied to a reproducible Perl-visible mismatch. Generated with Codex (https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Record the acquisition and release pairing for every generic deferred referent decrement and narrow the remaining recovery audit to zero transitions at the two production scan callers. Generated with Codex (https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Aggregate recovery already counted rooted hash cells, scalar values, and tie wrappers, but omitted distinct reachable scalar-reference contents cells. When another rooted aggregate owner made recovery succeed, the scalar overwrite fallback could not restore the omitted contents owner. Count reachable contents cells once per underlying cell while excluding weak and non-counting aliases, and cover the mixed-owner recovery state. Generated with Codex (https://openai.com/codex) Co-Authored-By: Codex <codex@openai.com>
Preserve the pending ownership design update before continuing the Phase 2 owner-slot migration. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Route thread-cloned scalar references and blessed glob aliases through the SCALAR_VALUE owner-slot API so their legacy count and identity ledger move together. Add focused release assertions for both paths. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Document the cloned-scalar and blessed-glob owner acquisitions now routed through SCALAR_VALUE slots, their verification, and the remaining recovery boundary. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Promote wrapper owner slots during untracked-to-tracked handler transitions when their owning tied container is rooted. This accounts for the wrapper edge directly instead of relying on aggregate recovery to restore it. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Document the promotion path for rooted tie wrappers and retain the remaining recovery callers as open Phase 2 work. Generated with [Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Add opt-in, class-filtered diagnostics for the two aggregate owner recovery paths. Record the pending release source and the rooted slot kinds used to reconstruct an owner count, so the remaining recovery scan can be audited against the controller and tempfile lifetime regressions. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: OpenAI Codex <chatgpt.com>
Record extended-access controller, WebSocket, Catalyst global-destruction, and focused ownership results across both backends. Correct the earlier File::Temp trace note with the observed weak-walker and rooted-slot mismatch, which still requires owner-container tracing before recovery changes. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: OpenAI Codex <chatgpt.com>
Extend class-filtered aggregate recovery diagnostics with the owner container, scalar cell, value type, ownership flags, and destruction state for each slot. This allows the File::Temp weak-walker miss to be mapped to its actual Perl owner cells without changing the default runtime path. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: OpenAI Codex <chatgpt.com>
Record that the recovered File::Temp count is backed by two owned glob reference cells with active scalar-value slots. The remaining mismatch is between weak-walker reachability and these rooted aggregate owner edges. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: OpenAI Codex <chatgpt.com>
Extend the opt-in recovery diagnostics with sweep-live membership, root flags, and immediate parent owner slots for each recovery container. This identifies which root proof accepts an aggregate that the weak sweep does not reach. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Add diagnostic reachability query counters to the filtered owner recovery trace so conservative budget exhaustion can be distinguished from a proven root path. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Expose whether a filtered destruction owner root query returned through its conservative node or edge budget. This distinguishes a discovered root path from an incomplete reachability proof in the diagnostic trace. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Add a test-only environment filter that skips the owner recovery scan for named Perl classes. The default remains unchanged; focused lifetime tests can now expose ownership paths that still depend on the migration bridge. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Record that the focused #1794/#1795, aggregate alias, and DESTROY regressions pass with their class-filtered recovery scan bypassed. Keep the recovery scan because synthetic recovery tests and both production callers remain. Remove the temporary bypass switch after the audit. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Record the uncapped negative aggregate root proof, successful class-filtered recovery-bypass regressions, and the remaining source audit target. Refresh the PR head and local gate status while keeping Phase 2 open. Generated with [OpenAI Codex](https://openai.com/codex) Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
This was referenced Oct 27, 2026
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
Internals::SvREFCNTcompatibility, with a unit regression test validated against blead Perl and both PerlOnJava backends.1 → 2 → 1), final release, weak clearing, and exactly-onceDESTROY.refaliasingcoverage proving aliases to aggregate cells do not add an extra referent owner.DESTROYresurrection checks; Java regressions verify nested owner chains require zero root queries and snapshots.B::svref_2objectcount and final destruction on restoration.make cicreates the Windows runner's root-relativetmpdirectory for existing tests that use POSIX/tmppaths and uses four Gradle workers on Windows to finish the full shard set within the step budget. Unix worker defaults remain two.Current progress (2026-10-23)
origin/masterthroughaeda28344, preserving the Catalyst Catalyst upload tempfile is deleted during request in #1642 integration #1795 fix and overlapping owner-slot reachability changes.85daddac0passesnice -n 19 makein 17m20s. The array-tail and hash-tail Perl regressions each pass 4/4 on system Perl, JVM, and interpreter.c1167ffbd. GitHub has not attached a check run to current PR head993d5875e; this PR remains draft. Phase 2 is incomplete because lifecycle dispatch still usesRuntimeBase.refCountand owner-slot accounting is not yet the default across scalar/proxy and aggregate paths.Validation
nice -n 19 make— passed on immutable code commit85daddac0in 17m20s. All unit shards, the WebSocket task, and Joni packaging passed.MortalListAggregateOwnerSlotRootChainTest— passed in the full unit gate; nested hash owner slots restored the count with zero root queries and zero graph snapshots.DestroyDispatchOwnerSlotRootChainTest— passed in the full unit gate; a nested hash owner proves resurrection with zero root queries and zero graph snapshots.scalar_reference_return_owner_lifetime.t— 7/7 on blead Perl 5.45.4, JVM, and interpreter; the unfixed PerlOnJava candidate failed the aggregate-retention assertion on both backends.scalar_reference_localized_owner_lifetime.t— 6/6 on blead Perl 5.45.4, JVM, and interpreter, including an exact refcount match during localization and exactly-once destruction after restoration.hash_element_scalar_reference_lifetime.t— 3/3 on blead Perl 5.45.4, JVM, and interpreter.hash_element_scalar_reference_refcount.t— 6/6 on blead Perl 5.45.4, JVM, and interpreter; exact1 → 2 → 1ownership counts matched Perl.array_element_scalar_reference_refcount.t— 6/6 on blead Perl 5.45.4, JVM, and interpreter; exact counts and final release matched Perl.aggregate_scalar_alias_refcount.t— 8/8 on blead Perl 5.45.4, JVM, and interpreter; array and hash refaliases preserve Perl counts and release once.59d14d58c.nice -n 19 make check-links— passed after the ownership design status update on5550984a1.dev/tools/tests/ci_workflow_contract.t— 23/23 passed on blead Perl 5.45.4.make -n ci OS=Windows_NT— confirms Windows temp setup precedes the build and Gradle is configured for four workers.make ciin 52m13s and the focused Windows thread gate; Ubuntumake ci, thread compatibility, and SBOM gates.b3f963739: Windowsmake ciin 68m21s and the focused thread gate; Ubuntu build, thread compatibility, and SBOM gates.internals_svrefcnt_write.t— 6/6 on blead Perl; the unfixed PerlOnJava parent failed all six assertions; fixed JVM and interpreter backends pass.ordinary_aggregate_element_owner_refcount.t— 11/11 on blead Perl 5.45.4, JVM, and interpreter.mojolicious_controller_destroy_after_finish.t— passed on JVM and interpreter in the post-fix focused runner; full Make also passed.mojolicious_websocket_server_push_lifetime.t— passed on JVM and interpreter in the post-fix focused runner; the full Make WebSocket lifetime integration test passed.catalyst_request_body_tempfile_lifetime.t— 24/24 on JVM and interpreter after the ownership fix.refcount/issue_1794_controller_owner_release.t— 3/3 on blead Perl 5.45.4, JVM, and interpreter.timeout 1800 nice -n 19 ./jcpan -t HTML::Tree— 23 files / 989 tests passed, including unchangedt/refloop.t(8/8).catalyst_request_body_tempfile_global_destroy.t— 3/3 on JVM and interpreter after the ownership fix.list_assignment_array_tail_lifetime.t— 4/4 on system Perl, JVM, and interpreter.list_assignment_hash_tail_lifetime.t— 4/4 on system Perl, JVM, and interpreter; all four assertions fail on the unfixed JVM/interpreter parent.nice -n 19 make check-links— passed after the progress and changelog updates.Test plan
Internals::SvREFCNTon blead Perl, JVM, and interpreter, including parent failure evidence.nice -n 19 makeon immutable code commitecc5efd37.refaliasingcounts and cleanup on blead Perl and both backends.t/refloop.t.make check-linksafter the design-doc update.993d5875e.