Skip to content

fix(release): restore main release readiness - #7218

Open
proggeramlug wants to merge 19 commits into
mainfrom
audit/release-readiness
Open

fix(release): restore main release readiness#7218
proggeramlug wants to merge 19 commits into
mainfrom
audit/release-readiness

Conversation

@proggeramlug

@proggeramlug proggeramlug commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Summary

Restores release readiness after the contributor PR queue landed: fixes compiler/runtime regressions, synchronizes generated evidence, and makes the release/parity gates fail honestly.

Changes

  • fixes Windows UI link inputs and archive ordering
  • fixes GC rooting, pointer classification, computed accessor receivers, stream option lowering, sloppy Function-constructor arguments, Axios execution, and JWT dynamic algorithms
  • aligns parity fixtures, package fixtures, expected output, and public benchmark provenance
  • hardens the release workspace tier against empty package lists, metadata failures, and shared-library cleanup
  • advances maintainer-owned release metadata to 0.5.1279 after the accidental 0.5.1277 regression

Related issue

Release-readiness consolidation; includes regressions covered by #340, #3558, #3580, #562, #915, and #1074.

Test plan

Completed locally:

In progress: full pre-tag/release tiers and the GitHub PR matrix. This PR will be force-merged only after the release gates are green or independently reproduced locally where the macOS runner queue is unavailable.

Screenshots/output

Not applicable; this is compiler/runtime and release-tooling work. Test output is recorded in the PR checks and release-sweep reports.

Checklist

  • Formatting and diff checks pass
  • Focused regressions pass
  • Generated evidence validates
  • Changelog fragment included
  • Full PR/release matrix complete

Summary by CodeRabbit

  • New Features

    • Added synchronous raw deflate/inflate support.
    • Added runtime-selectable JWT signing and verification for HS256, ES256, and RS256.
    • Improved Uint8Array sorting and reversing to return independent copies.
    • Added EventTarget subclass construction, bundled Cheerio dispatch, and improved Windows UI linking.
  • Bug Fixes

    • Fixed JSON serialization of objects with overflow properties.
    • Improved Promise callbacks, stream handling, iterator dispatch, and dynamic property access safety.
    • Refined performance API validation, cluster-worker detection, native constructors, and String method behavior.
  • Documentation

    • Updated version information, release-readiness guidance, and benchmark documentation.

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The PR updates compiler and runtime behavior, native extensions, benchmark and parity tooling, release sweeps, fixtures, documentation, version metadata, and generated benchmark evidence.

Changes

Runtime, compiler, and native extensions

Layer / File(s) Summary
Constructor, dispatch, and lowering behavior
crates/perry-codegen/..., crates/perry-hir/..., crates/perry-runtime/src/object/..., crates/perry/src/commands/compile/...
Native superclass handling, class-object constructor replay, imported constructor arities, String prototype method tracking, native-module dispatch, and receiver preservation were updated.
Runtime safety and built-ins
crates/perry-runtime/..., crates/perry-codegen/src/expr/...
Pointer validation, GC store audits, typed-array transforms, iterator dispatch, JSON serialization, promise callbacks, argument validation, and stream scheduling were updated.
Native extensions and platform linking
crates/perry-ext-*/..., crates/perry/src/commands/compile/link/...
Raw zlib APIs, JWT algorithm entry points, blocking Axios requests, cached cluster-worker detection, and Windows WebView2 linking were added or updated.

Benchmark, parity, and release execution

Layer / File(s) Summary
Benchmark execution and evidence
benchmarks/...
Polyglot benchmarks support single-benchmark selection. README replacement can be optional. Public benchmark evidence was regenerated.
Parity and release harnesses
run_parity_tests.sh, scripts/release_sweep*.sh, tests/test_compiler_output_regression.py
Parity builds use isolated packages and support skip reasons. Tier 1 release tests run per host-compatible workspace package with package-specific failure reporting.
Fixtures and expected results
test-files/..., test-parity/..., tests/release/packages/date-fns-format/...
Parity annotations, expected outputs, snapshots, known failures, compatibility checks, and the date-fns release fixture were updated.

Metadata, documentation, and maintenance

Layer / File(s) Summary
Version and release records
Cargo.toml, CLAUDE.md, changelog.d/..., benchmarks/suite/results/...
The workspace version, release instructions, changelog notes, and benchmark summary were updated.
Documentation and maintenance records
docs/src/..., scripts/addr_class_*, scripts/check_file_size.sh, .github/workflows/...
Documentation fences, address-class baselines, file-size allowances, and GC measurement settings were synchronized.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related issues

Possibly related PRs

Suggested labels: bug, tooling, ready

Suggested reviewers: thehypnoo, andrewtdiz

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly identifies the primary change: restoring release readiness through compiler, runtime, parity, and release-gate fixes.
Description check ✅ Passed The description includes the required sections and gives clear changes, related issues, validation steps, and checklist status.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch audit/release-readiness

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@proggeramlug
proggeramlug force-pushed the audit/release-readiness branch from 643d969 to 890d711 Compare August 1, 2026 21:00
@proggeramlug proggeramlug added the run-extended-tests Opt PR into compile-smoke/parity/doc-tests/drizzle-mysql-smoke label Aug 1, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
crates/perry-runtime/src/fs/dirent.rs (1)

132-141: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Root options_value before creating key.

obj_ptr is derived before js_string_from_bytes allocates key. If that allocation triggers moving GC, obj_ptr becomes stale because options_with_file_types has no handle scope. The later js_object_get_field_by_name can read the old address. Reuse options_field_value, which already roots and reloads the object, or add the same root/reload sequence.

Based on learnings, options_field_value is the GC-safe helper for options-object field reads in this file.

Proposed fix
-    let key = crate::string::js_string_from_bytes(b"withFileTypes".as_ptr(), 13);
-    let val = crate::object::js_object_get_field_by_name(obj_ptr, key);
-    crate::value::js_is_truthy(f64::from_bits(val.bits())) != 0
+    options_field_value(options_value, b"withFileTypes")
+        .map(|val| crate::value::js_is_truthy(f64::from_bits(val.bits())) != 0)
+        .unwrap_or(false)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/perry-runtime/src/fs/dirent.rs` around lines 132 - 141, Update the
options-object lookup in the surrounding options_with_file_types flow to use the
GC-safe options_field_value helper for reading “withFileTypes” instead of
deriving obj_ptr before allocating the field-name key. Remove the stale
raw-pointer access path and preserve the existing truthiness result.

Source: Learnings

crates/perry-runtime/src/array/push_pop.rs (1)

127-153: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Keep the GC-header boundary probe for low macOS array pointers.

HEAP_MIN is 0x1000, so arr >= HEAP_MIN + GC_HEADER_SIZE still admits HEAP_MIN + GC_HEADER_SIZE, and js_array_grow later evaluates (*old_header).obj_type. Use the magnitude-classified helper/probe or a small-handle rejection before reading/punting on GcHeader fields.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/perry-runtime/src/array/push_pop.rs` around lines 127 - 153, Update
the low-pointer guard in js_array_grow so pointers at or near HEAP_MIN are
validated with the existing magnitude-classified helper or rejected as small
handles before any GcHeader field access. Ensure (*old_header).obj_type is never
evaluated for these low macOS array pointers, while preserving growth forwarding
for valid heap objects.
🧹 Nitpick comments (8)
tests/test_public_baseline.py (2)

46-48: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the benchmark name that this PR adds.

This PR adds regex_replace to EXPECTED_COMPONENT_BENCHMARKS["app_patterns"]. The new test asserts only batch, which was already present. Assert the added name too, so the contract test guards the change.

💚 Proposed test change
     def test_app_pattern_contract_includes_batch_workload(self):
         self.assertIn("batch", EXPECTED_COMPONENT_BENCHMARKS["app_patterns"])
+        self.assertIn("regex_replace", EXPECTED_COMPONENT_BENCHMARKS["app_patterns"])
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_public_baseline.py` around lines 46 - 48, Update
test_app_pattern_contract_includes_batch_workload to also assert that
regex_replace is present in EXPECTED_COMPONENT_BENCHMARKS["app_patterns"],
preserving the existing batch assertion.

155-160: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Optional: also cover a README that has only the end marker.

Line 159 covers a text with README_START only. The complementary case, README_END only, exercises the other branch of _replace_block.

💚 Proposed test addition
         with self.assertRaisesRegex(ArtifactError, "markers are missing"):
             _replace_optional_block(f"{README_START}\n", "generated")
+        with self.assertRaisesRegex(ArtifactError, "markers are missing"):
+            _replace_optional_block(f"{README_END}\n", "generated")
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_public_baseline.py` around lines 155 - 160, Add the complementary
assertion in test_generated_marker_replacement_is_optional_but_not_partial for
input containing only README_END, and verify _replace_optional_block raises
ArtifactError with the existing "markers are missing" message, matching the
README_START-only case.
benchmarks/polyglot/bench.py (1)

136-142: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Optional: make selected a single type.

Line 140 assigns either a list or the BENCHMARKS dict. The loop works because iterating a dict yields keys. A single type makes the intent explicit.

♻️ Proposed refactor
-    selected = [sys.argv[1]] if len(sys.argv) == 2 else BENCHMARKS
+    selected = [sys.argv[1]] if len(sys.argv) == 2 else list(BENCHMARKS)
     for name in selected:
         BENCHMARKS[name]()
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@benchmarks/polyglot/bench.py` around lines 136 - 142, Update the selected
benchmark construction in the __main__ block so selected always uses one
collection type, preferably a list of benchmark names, while preserving the
current behavior of selecting either the requested benchmark or all BENCHMARKS
entries. Keep the subsequent for name in selected loop invoking BENCHMARKS[name]
unchanged.
benchmarks/public_baseline.py (1)

501-505: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Make a marker-free README visible in the drift gate.

_replace_optional_block returns the text unchanged when both markers are absent. check then reports no drift. If someone removes the generated block from the README, the public evidence gate stays green and the removal is silent. Emit a warning on stderr in that case so the skip is visible in CI logs.

♻️ Proposed change
 def _replace_optional_block(text: str, block: str) -> str:
     """Replace the generated block when present, or preserve an unmarked README."""
     if README_START not in text and README_END not in text:
+        print("warning: README has no generated markers; skipping table check", file=sys.stderr)
         return text
     return _replace_block(text, block)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@benchmarks/public_baseline.py` around lines 501 - 505, Update
_replace_optional_block so that when both README_START and README_END are absent
it emits a warning to stderr before returning the original text unchanged. Keep
the existing _replace_block behavior for marked READMEs and ensure the warning
clearly indicates the generated block is missing or the README is marker-free.
tests/test_compiler_output_regression.py (2)

1358-1378: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Assert the skip directive on each fixture.

This test checks parity-skip: only in run_parity_tests.sh. It does not check the directive in effect, fastify, or date_fns. Removing any fixture annotation would leave this test green.

Add per-file assertions or exercise the skip-selection path.

Proposed test fix
         self.assertIn("parity-skip:", runner)
+        self.assertIn("parity-skip:", effect)
+        self.assertIn("parity-skip:", fastify)
+        self.assertIn("parity-skip:", date_fns)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_compiler_output_regression.py` around lines 1358 - 1378,
Strengthen test_parity_sweep_supports_specialized_fixture_exclusions by
asserting the parity-skip: directive in each loaded fixture: effect, fastify,
and date_fns, alongside their existing reason assertions. Keep the runner and
date-fns fixture-file checks unchanged.

1380-1391: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Make the combined-build guard order-independent.

The negative assertion rejects only one contiguous package order. A combined build with a different -p order or a shell line continuation would pass.

Parse the build invocations and assert that each runtime archive command targets one package.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_compiler_output_regression.py` around lines 1380 - 1391, Update
test_parity_sweep_isolates_runtime_archive_features to parse the build
invocations in run_parity_tests.sh instead of checking for one exact
package-order substring. For each runtime archive build command, assert that its
package arguments target exactly one package, regardless of argument order or
shell line continuations, while preserving the existing required-command and
feature assertions.
test-files/test_gap_2159_defineproperty_class_prototype.ts (1)

31-34: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low value

Remove troubleshooting output from the parity fixture.

test-gap-2159 is tracked as a standing parity gap with no matching expected output. The new console.log calls add runtime stdout that is not part of the fixture contract. Replace them with assertions or disable them through an explicit diagnostic flag.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test-files/test_gap_2159_defineproperty_class_prototype.ts` around lines 31 -
34, Remove the troubleshooting console.log calls from the then method in the
test-gap-2159 parity fixture. Preserve the checks by replacing them with
assertions, or guard the diagnostics behind an explicit disabled-by-default
diagnostic flag so normal fixture execution produces no extra stdout.
crates/perry/src/commands/compile/run_pipeline.rs (1)

105-148: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Scope synthesized parent arity resolution by the child’s source module.

fill_imported_synthesized_constructor_arities replaces extends parent constructor_param_count by finding any imported_classes entry whose local name matches parent_name. Since the same name can refer to different classes across modules, a same-named, constructor-less parent from another module can be selected and can propagate the wrong arity to the synthesized standalone constructor. Prefer the same-module parent (using child_src_path/source_prefix) before relying on bare-name matching.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/perry/src/commands/compile/run_pipeline.rs` around lines 105 - 148,
Update fill_imported_synthesized_constructor_arities to resolve each child’s
parent within the same source module first, using child_src_path/source_prefix
to scope candidate imported_classes entries before matching local_alias or name.
Only fall back to bare-name matching when no same-module parent is available,
preserving the existing ancestor traversal and arity propagation behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@benchmarks/results/public-node-bun-v1.json`:
- Around line 4169-4176: Replace the machine-local absolute Perry executable
paths in the benchmark results, including all identified occurrences, with the
repository-relative form used by the other components, such as
target/release/perry. Preserve the command arguments and ensure no
sandbox-specific temporary directory remains in the published evidence.
- Around line 34-41: Correct the top-level node provenance block in
public-node-bun-v1.json so its version and resolved_executable identify the same
Node build. Align resolved_executable with the recorded v22.23.1 version and the
path used by the component blocks, or regenerate the block from the matching
benchmark run.

In `@CLAUDE.md`:
- Line 11: Revert the release metadata changes: in CLAUDE.md line 11 restore the
pre-PR Current Version, in Cargo.toml line 295 restore
[workspace.package].version to 0.5.1277, and in
changelog.d/7218-release-readiness.md lines 7-8 remove the premature version
statement.

In `@crates/perry-runtime/src/array/immutable.rs`:
- Around line 5-16: Move the arr.is_null() guard in both
js_array_to_sorted_default and js_array_to_sorted_with_comparator to before
calling uint8array_buffer_snapshot(arr), matching js_array_to_reversed. Preserve
the existing null handling and snapshot behavior for non-null arrays.

In `@scripts/release_sweep_tiers/tier01_cargo_workspace.sh`:
- Around line 90-91: Update the cleanup command in the release sweep script to
preserve shared-library artifacts on every platform by excluding .so and .dll
files alongside the existing .dylib exclusion. Keep deleting other executable
files and retain the current error-suppression behavior.
- Around line 53-60: Move the existing set +e before the package_list assignment
that runs cargo metadata, so failures are captured in metadata_rc and execution
reaches the tier’s log-handling and structured-result logic. Keep the current
metadata_rc and rc flow unchanged after disabling errexit.

---

Outside diff comments:
In `@crates/perry-runtime/src/array/push_pop.rs`:
- Around line 127-153: Update the low-pointer guard in js_array_grow so pointers
at or near HEAP_MIN are validated with the existing magnitude-classified helper
or rejected as small handles before any GcHeader field access. Ensure
(*old_header).obj_type is never evaluated for these low macOS array pointers,
while preserving growth forwarding for valid heap objects.

In `@crates/perry-runtime/src/fs/dirent.rs`:
- Around line 132-141: Update the options-object lookup in the surrounding
options_with_file_types flow to use the GC-safe options_field_value helper for
reading “withFileTypes” instead of deriving obj_ptr before allocating the
field-name key. Remove the stale raw-pointer access path and preserve the
existing truthiness result.

---

Nitpick comments:
In `@benchmarks/polyglot/bench.py`:
- Around line 136-142: Update the selected benchmark construction in the
__main__ block so selected always uses one collection type, preferably a list of
benchmark names, while preserving the current behavior of selecting either the
requested benchmark or all BENCHMARKS entries. Keep the subsequent for name in
selected loop invoking BENCHMARKS[name] unchanged.

In `@benchmarks/public_baseline.py`:
- Around line 501-505: Update _replace_optional_block so that when both
README_START and README_END are absent it emits a warning to stderr before
returning the original text unchanged. Keep the existing _replace_block behavior
for marked READMEs and ensure the warning clearly indicates the generated block
is missing or the README is marker-free.

In `@crates/perry/src/commands/compile/run_pipeline.rs`:
- Around line 105-148: Update fill_imported_synthesized_constructor_arities to
resolve each child’s parent within the same source module first, using
child_src_path/source_prefix to scope candidate imported_classes entries before
matching local_alias or name. Only fall back to bare-name matching when no
same-module parent is available, preserving the existing ancestor traversal and
arity propagation behavior.

In `@test-files/test_gap_2159_defineproperty_class_prototype.ts`:
- Around line 31-34: Remove the troubleshooting console.log calls from the then
method in the test-gap-2159 parity fixture. Preserve the checks by replacing
them with assertions, or guard the diagnostics behind an explicit
disabled-by-default diagnostic flag so normal fixture execution produces no
extra stdout.

In `@tests/test_compiler_output_regression.py`:
- Around line 1358-1378: Strengthen
test_parity_sweep_supports_specialized_fixture_exclusions by asserting the
parity-skip: directive in each loaded fixture: effect, fastify, and date_fns,
alongside their existing reason assertions. Keep the runner and date-fns
fixture-file checks unchanged.
- Around line 1380-1391: Update
test_parity_sweep_isolates_runtime_archive_features to parse the build
invocations in run_parity_tests.sh instead of checking for one exact
package-order substring. For each runtime archive build command, assert that its
package arguments target exactly one package, regardless of argument order or
shell line continuations, while preserving the existing required-command and
feature assertions.

In `@tests/test_public_baseline.py`:
- Around line 46-48: Update test_app_pattern_contract_includes_batch_workload to
also assert that regex_replace is present in
EXPECTED_COMPONENT_BENCHMARKS["app_patterns"], preserving the existing batch
assertion.
- Around line 155-160: Add the complementary assertion in
test_generated_marker_replacement_is_optional_but_not_partial for input
containing only README_END, and verify _replace_optional_block raises
ArtifactError with the existing "markers are missing" message, matching the
README_START-only case.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ffebd7b3-baca-4e65-897f-a0362c0b6a13

📥 Commits

Reviewing files that changed from the base of the PR and between dd83c7e and 890d711.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • tests/release/packages/date-fns-format/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (86)
  • CLAUDE.md
  • Cargo.toml
  • benchmarks/json_polyglot/run.sh
  • benchmarks/polyglot/bench.py
  • benchmarks/polyglot/run_all.sh
  • benchmarks/public_baseline.py
  • benchmarks/results/public-node-bun-v1.json
  • benchmarks/suite/results/RESULTS.md
  • changelog.d/7218-release-readiness.md
  • crates/perry-codegen/src/codegen/method.rs
  • crates/perry-codegen/src/expr/index.rs
  • crates/perry-codegen/src/expr/index_set.rs
  • crates/perry-codegen/src/expr/instance_misc1.rs
  • crates/perry-codegen/src/expr/property_set.rs
  • crates/perry-codegen/src/expr/proven_view_access.rs
  • crates/perry-codegen/src/expr/this_super_call.rs
  • crates/perry-codegen/src/lower_call/native_table/node_core/util_buffer.rs
  • crates/perry-codegen/src/lower_call/new_helpers.rs
  • crates/perry-codegen/src/stmt/mod.rs
  • crates/perry-ext-fastify/src/cluster_bind.rs
  • crates/perry-ext-http/src/server/cluster_bind.rs
  • crates/perry-ext-zlib/src/lib.rs
  • crates/perry-runtime/src/array/alloc.rs
  • crates/perry-runtime/src/array/immutable.rs
  • crates/perry-runtime/src/array/indexing.rs
  • crates/perry-runtime/src/array/push_pop.rs
  • crates/perry-runtime/src/child_process/value_util.rs
  • crates/perry-runtime/src/cluster.rs
  • crates/perry-runtime/src/fs/dirent.rs
  • crates/perry-runtime/src/gc/tests/copying/pointer_publish_7154.rs
  • crates/perry-runtime/src/gc/tests/oldgen.rs
  • crates/perry-runtime/src/iterator_helpers.rs
  • crates/perry-runtime/src/json/mod.rs
  • crates/perry-runtime/src/json/stringify.rs
  • crates/perry-runtime/src/object/class_constructors.rs
  • crates/perry-runtime/src/object/global_this/fetch_globals.rs
  • crates/perry-runtime/src/object/instanceof.rs
  • crates/perry-runtime/src/perf_hooks.rs
  • crates/perry-runtime/src/promise/combinators.rs
  • crates/perry-runtime/src/string/iter_object.rs
  • crates/perry-runtime/src/typedarray/transform.rs
  • crates/perry-runtime/src/util_settracesigint.rs
  • crates/perry-runtime/src/value/dynamic_object.rs
  • crates/perry-stdlib/src/streams/tee.rs
  • crates/perry/src/commands/compile/run_pipeline.rs
  • docs/src/cli/flags.md
  • docs/src/container/determinism.md
  • docs/src/container/overview.md
  • docs/src/internals/explicit-memory.md
  • docs/src/language/limitations.md
  • docs/src/plugins/native-extensions.md
  • docs/src/testing/node-compat-matrix.md
  • run_parity_tests.sh
  • scripts/addr_class_allowlist.txt
  • scripts/addr_class_ratchet_baseline.txt
  • scripts/check_file_size.sh
  • scripts/release_sweep.sh
  • scripts/release_sweep_tiers/tier01_cargo_workspace.sh
  • test-files/demo_claude_code_tui.ts
  • test-files/test_class_field_layout.ts
  • test-files/test_compat_buffers_typed.ts
  • test-files/test_date_fns_format.ts
  • test-files/test_effect_pipe_map.ts
  • test-files/test_fastify_integration.ts
  • test-files/test_gap_2159_defineproperty_class_prototype.ts
  • test-files/test_gap_2514_settracesigint.ts
  • test-files/test_gap_prop_plan_cache_invalidation.ts
  • test-files/test_hono_bundle.ts
  • test-files/test_http_server_unref_5011.ts
  • test-parity/expected/test_ads_compile_smoke.txt
  • test-parity/expected/test_better_sqlite3_raw.txt
  • test-parity/expected/test_better_sqlite3_v8_bridge.txt
  • test-parity/expected/test_fastify_in_process.txt
  • test-parity/expected/test_gap_4510_enum_forward_ref.txt
  • test-parity/expected/test_gap_derived_param_props.txt
  • test-parity/expected/test_gap_enum_in_function_body.txt
  • test-parity/expected/test_issue_1021_rxjs_reexport_methods.txt
  • test-parity/gap_snapshot.json
  • test-parity/known_failures.json
  • tests/release/README.md
  • tests/release/packages/date-fns-format/entry.ts
  • tests/release/packages/date-fns-format/expected.txt
  • tests/release/packages/date-fns-format/fixture.sh
  • tests/release/packages/date-fns-format/package.json
  • tests/test_compiler_output_regression.py
  • tests/test_public_baseline.py
💤 Files with no reviewable changes (2)
  • test-parity/gap_snapshot.json
  • test-parity/known_failures.json

Comment thread benchmarks/results/public-node-bun-v1.json Outdated
Comment thread benchmarks/results/public-node-bun-v1.json
Comment thread CLAUDE.md
Comment thread crates/perry-runtime/src/array/immutable.rs
Comment thread scripts/release_sweep_tiers/tier01_cargo_workspace.sh
Comment thread scripts/release_sweep_tiers/tier01_cargo_workspace.sh Outdated
@proggeramlug
proggeramlug force-pushed the audit/release-readiness branch from 890d711 to 2097d1b Compare August 1, 2026 23:52

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
benchmarks/results/public-node-bun-v1.json (1)

5532-5542: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Pin the HTTP kernel runtimes to the same executables as the other commands.

Lines 5514 and 5519 record absolute, pinned tool paths for node and bun. Lines 5533 and 5539 record bare node and bun for node_http and bun_http. The bare names resolve from PATH, so the HTTP measurements cannot be attributed to the pinned Node and Bun builds recorded in runtime_metadata. Record the resolved executables for these two commands.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@benchmarks/results/public-node-bun-v1.json` around lines 5532 - 5542, Update
the node_http and bun_http command entries in the benchmark results to use the
same absolute, pinned Node and Bun executable paths recorded by the node and bun
entries near lines 5514 and 5519, while preserving their existing runtime
arguments.
♻️ Duplicate comments (3)
scripts/release_sweep_tiers/tier01_cargo_workspace.sh (1)

90-91: 🚀 Performance & Scalability | 🟠 Major | ⚡ Quick win

Shared-library artifacts are still deleted on Linux and Windows.

-perm -111 matches executable .so and .dll files. The exclusion at Line 91 preserves only macOS .dylib files. The host case at Lines 32-33 supports linux and windows, so this path removes proc-macro and dynamic-library artifacts between package tests. That forces avoidable rebuilds for each later package.

♻️ Proposed fix to preserve shared libraries
         find "$REPO_ROOT/target/release/deps" -maxdepth 1 -type f -perm -111 \
-            ! -name '*.dylib' -delete 2>/dev/null || true
+            ! -name '*.dylib' ! -name '*.so' ! -name '*.dll' \
+            -delete 2>/dev/null || true
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/release_sweep_tiers/tier01_cargo_workspace.sh` around lines 90 - 91,
Update the executable-artifact cleanup command in the tier01 workspace sweep to
exclude Linux .so and Windows .dll files as well as macOS .dylib files. Preserve
deletion of other executable artifacts while retaining shared libraries across
package tests.
benchmarks/results/public-node-bun-v1.json (2)

4170-4176: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Machine-local audit paths are still recorded in public evidence.

The Perry command remains /private/tmp/perry-pr-audit.lhpUNK/repo/target/release/perry. The same absolute sandbox path appears at Lines 4374, 5508, and 5527. Other blocks record target/release/perry or ../../target/release/perry, including the runtime_metadata entries at Lines 4192 and 5560 in the same components. The absolute path is not reproducible and it exposes a one-off temporary directory name. Normalize these command paths to repository-relative form.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@benchmarks/results/public-node-bun-v1.json` around lines 4170 - 4176, Replace
the machine-local absolute Perry executable paths in the public benchmark
evidence, including the entries corresponding to the perry command and the
additional occurrences, with the repository-relative form used by nearby entries
such as target/release/perry or ../../target/release/perry. Preserve the command
arguments and runtime_metadata structure.

36-41: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

The top-level Node provenance is still inconsistent.

Line 36 records "version": "v22.23.1". Line 41 records resolved_executable under node-v26.5.1-darwin-arm64. Every component block resolves Node to /private/tmp/perry-public-tools/node-v22.23.1-darwin-arm64/bin/node (Lines 3420, 4196, 5564). The published evidence still cannot be attributed to a single Node build. Correct the resolved path or regenerate this block.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@benchmarks/results/public-node-bun-v1.json` around lines 36 - 41, Update the
top-level Node provenance block so resolved_executable points to the Node
v22.23.1 binary, matching the recorded version and component blocks;
alternatively regenerate that block using the consistent Node build.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/perry-ext-axios/src/lib.rs`:
- Around line 11-13: Remove the nested Handle::current().block_on usage from the
spawn_blocking_with_reactor closure. Spawn the axios request/fetch work as a
child task on the existing runtime, then keep the match result { ... }
promise-resolution logic in the original closure, propagating the child task’s
result without starting a runtime inside an active runtime.

In `@crates/perry/src/commands/compile/link/build_and_run.rs`:
- Around line 924-926: Update the Windows UI linking flow around ctx.needs_ui so
WebView2LoaderStatic.lib is added after the perry_ui_windows.lib input (ui_lib),
preserving the required left-to-right archive resolution order; alternatively
force-include the loader archive.

In `@scripts/release_sweep_tiers/tier01_cargo_workspace.sh`:
- Around line 73-92: Track the number of packages actually tested within the
package-processing loop, incrementing the counter only after a package passes
the existing empty and is_excluded checks. After the loop driven by package_list
completes, fail the tier when the counter is zero so empty or fully excluded
package lists cannot report success; preserve the existing package failure
handling and rc behavior otherwise.

In `@test-files/test_parity_crypto.ts`:
- Around line 166-175: Make the crypto parity fixture fail when required
algorithms are unavailable: after each lookup in the getCiphers, getCurves, and
getHashes try blocks, enforce that aes-256-gcm, prime256v1, and sha256 are
present respectively by asserting or throwing when includes returns false. Keep
the existing diagnostic logging and error handling.

---

Outside diff comments:
In `@benchmarks/results/public-node-bun-v1.json`:
- Around line 5532-5542: Update the node_http and bun_http command entries in
the benchmark results to use the same absolute, pinned Node and Bun executable
paths recorded by the node and bun entries near lines 5514 and 5519, while
preserving their existing runtime arguments.

---

Duplicate comments:
In `@benchmarks/results/public-node-bun-v1.json`:
- Around line 4170-4176: Replace the machine-local absolute Perry executable
paths in the public benchmark evidence, including the entries corresponding to
the perry command and the additional occurrences, with the repository-relative
form used by nearby entries such as target/release/perry or
../../target/release/perry. Preserve the command arguments and runtime_metadata
structure.
- Around line 36-41: Update the top-level Node provenance block so
resolved_executable points to the Node v22.23.1 binary, matching the recorded
version and component blocks; alternatively regenerate that block using the
consistent Node build.

In `@scripts/release_sweep_tiers/tier01_cargo_workspace.sh`:
- Around line 90-91: Update the executable-artifact cleanup command in the
tier01 workspace sweep to exclude Linux .so and Windows .dll files as well as
macOS .dylib files. Preserve deletion of other executable artifacts while
retaining shared libraries across package tests.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ce4b268c-3474-4ba9-bd93-6e989f346bf2

📥 Commits

Reviewing files that changed from the base of the PR and between 890d711 and 2097d1b.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • tests/release/packages/date-fns-format/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (164)
  • .github/workflows/gc-ratchet.yml
  • CLAUDE.md
  • Cargo.toml
  • benchmarks/json_polyglot/run.sh
  • benchmarks/polyglot/bench.py
  • benchmarks/polyglot/run_all.sh
  • benchmarks/public_baseline.py
  • benchmarks/results/public-node-bun-v1.json
  • benchmarks/suite/results/RESULTS.md
  • changelog.d/7218-release-readiness.md
  • crates/perry-codegen/src/codegen/method.rs
  • crates/perry-codegen/src/expr/index.rs
  • crates/perry-codegen/src/expr/index_set.rs
  • crates/perry-codegen/src/expr/instance_misc1.rs
  • crates/perry-codegen/src/expr/new_dynamic.rs
  • crates/perry-codegen/src/expr/property_set.rs
  • crates/perry-codegen/src/expr/proven_view_access.rs
  • crates/perry-codegen/src/expr/static_field_meta.rs
  • crates/perry-codegen/src/expr/this_super_call.rs
  • crates/perry-codegen/src/lower_call/native_table/node_core/util_buffer.rs
  • crates/perry-codegen/src/lower_call/new_helpers.rs
  • crates/perry-codegen/src/stmt/mod.rs
  • crates/perry-ext-axios/src/lib.rs
  • crates/perry-ext-fastify/src/cluster_bind.rs
  • crates/perry-ext-http/src/server/cluster_bind.rs
  • crates/perry-ext-jsonwebtoken/src/lib.rs
  • crates/perry-ext-zlib/src/lib.rs
  • crates/perry-hir/src/lower/const_fold_fn.rs
  • crates/perry-hir/src/lower/context.rs
  • crates/perry-hir/src/lower/expr_call/intrinsics.rs
  • crates/perry-hir/src/lower/expr_call/intrinsics/apply_call.rs
  • crates/perry-hir/src/lower/lower_expr/arm_optchain.rs
  • crates/perry-hir/src/lower/lowering_context.rs
  • crates/perry-hir/src/lower/pre_scan.rs
  • crates/perry-runtime/src/array/alloc.rs
  • crates/perry-runtime/src/array/immutable.rs
  • crates/perry-runtime/src/array/indexing.rs
  • crates/perry-runtime/src/array/push_pop.rs
  • crates/perry-runtime/src/child_process/value_util.rs
  • crates/perry-runtime/src/cluster.rs
  • crates/perry-runtime/src/fs/dirent.rs
  • crates/perry-runtime/src/gc/tests/copying/pointer_publish_7154.rs
  • crates/perry-runtime/src/gc/tests/oldgen.rs
  • crates/perry-runtime/src/iterator_helpers.rs
  • crates/perry-runtime/src/json/mod.rs
  • crates/perry-runtime/src/json/stringify.rs
  • crates/perry-runtime/src/object/class_constructors.rs
  • crates/perry-runtime/src/object/class_registry/construct.rs
  • crates/perry-runtime/src/object/global_this/fetch_globals.rs
  • crates/perry-runtime/src/object/instanceof.rs
  • crates/perry-runtime/src/perf_hooks.rs
  • crates/perry-runtime/src/promise/combinators.rs
  • crates/perry-runtime/src/string/iter_object.rs
  • crates/perry-runtime/src/typedarray/transform.rs
  • crates/perry-runtime/src/util_settracesigint.rs
  • crates/perry-runtime/src/value/dynamic_object.rs
  • crates/perry-stdlib/src/cheerio.rs
  • crates/perry-stdlib/src/common/dispatch/method_dispatch.rs
  • crates/perry-stdlib/src/streams/tee.rs
  • crates/perry/src/commands/compile/link/build_and_run.rs
  • crates/perry/src/commands/compile/link/windows_link.rs
  • crates/perry/src/commands/compile/run_pipeline.rs
  • docs/src/cli/flags.md
  • docs/src/container/determinism.md
  • docs/src/container/overview.md
  • docs/src/internals/explicit-memory.md
  • docs/src/language/limitations.md
  • docs/src/plugins/native-extensions.md
  • docs/src/testing/node-compat-matrix.md
  • run_parity_tests.sh
  • scripts/addr_class_allowlist.txt
  • scripts/addr_class_ratchet_baseline.txt
  • scripts/check_file_size.sh
  • scripts/release_sweep.sh
  • scripts/release_sweep_tiers/tier01_cargo_workspace.sh
  • test-files/demo_claude_code_tui.ts
  • test-files/test_class_field_layout.ts
  • test-files/test_compat_buffers_typed.ts
  • test-files/test_date_fns_format.ts
  • test-files/test_effect_pipe_map.ts
  • test-files/test_fastify_integration.ts
  • test-files/test_gap_2159_defineproperty_class_prototype.ts
  • test-files/test_gap_2514_settracesigint.ts
  • test-files/test_gap_prop_plan_cache_invalidation.ts
  • test-files/test_hono_bundle.ts
  • test-files/test_http_server_unref_5011.ts
  • test-files/test_issue_1120_fastify_buffer.ts
  • test-files/test_issue_1140_buffer_index_runtime.ts
  • test-files/test_issue_1240_fastify_request_json.ts
  • test-files/test_issue_1293_fastify_request_json_as_any.ts
  • test-files/test_issue_1425_gc_unsafe_zones.ts
  • test-files/test_issue_1495_image_systemname.ts
  • test-files/test_issue_1867_audio_playback.ts
  • test-files/test_issue_2022_canvas_draw_image.ts
  • test-files/test_issue_351_media_playback.ts
  • test-files/test_issue_358_perry_tui_phase1.ts
  • test-files/test_issue_358_perry_tui_phase2_counter.ts
  • test-files/test_issue_358_perry_tui_phase3_flexbox.ts
  • test-files/test_issue_358_perry_tui_phase4_5_widgets.ts
  • test-files/test_issue_358_perry_tui_phase4_widgets.ts
  • test-files/test_issue_402_403_404_405_406_holistic.ts
  • test-files/test_issue_402_perry_tui_table_tabs.ts
  • test-files/test_issue_403_404_animated_input.ts
  • test-files/test_issue_405_perry_tui_phase3_5.ts
  • test-files/test_issue_442_inline_button_bg.ts
  • test-files/test_issue_449_new_target.ts
  • test-files/test_issue_5268_native_ctor_prototype_undefined.ts
  • test-files/test_issue_553_mobile_widgets.ts
  • test-files/test_issue_556_table_array.ts
  • test-files/test_issue_556_table_concat.ts
  • test-files/test_issue_610_foreach.ts
  • test-files/test_issue_610_smoke.ts
  • test-files/test_issue_640_navstack_textfield.ts
  • test-files/test_issue_645_chained_method_on_null_obj.ts
  • test-files/test_issue_679_box_runtime_children.ts
  • test-files/test_issue_679_perry_tui_hooks.ts
  • test-files/test_issue_679_perry_tui_text_styling.ts
  • test-files/test_issue_679_useState_gc_root.ts
  • test-files/test_issue_699_runtime_ui_surface.ts
  • test-files/test_issue_763_reactive_textfield.ts
  • test-files/test_jose_sign.ts
  • test-files/test_jose_signverify_roundtrip.ts
  • test-files/test_parity_cluster.ts
  • test-files/test_parity_crypto.ts
  • test-parity/expected-exit/test_issue_645_chained_method_on_null_obj.txt
  • test-parity/expected/test_ads_compile_smoke.txt
  • test-parity/expected/test_better_sqlite3_raw.txt
  • test-parity/expected/test_better_sqlite3_v8_bridge.txt
  • test-parity/expected/test_fastify_in_process.txt
  • test-parity/expected/test_gap_4510_enum_forward_ref.txt
  • test-parity/expected/test_gap_derived_param_props.txt
  • test-parity/expected/test_gap_enum_in_function_body.txt
  • test-parity/expected/test_issue_1021_rxjs_reexport_methods.txt
  • test-parity/expected/test_issue_1140_buffer_index_runtime.txt
  • test-parity/expected/test_issue_1193_cheerio_chain.txt
  • test-parity/expected/test_issue_1723_require_stdlib_subnamespace.txt
  • test-parity/expected/test_issue_2656_weakref_finalization_gc.txt
  • test-parity/expected/test_issue_339_sqlite_stmt_all_bound_params.txt
  • test-parity/expected/test_issue_341_typed_field_native.txt
  • test-parity/expected/test_issue_4034_object_literal_semantics.txt
  • test-parity/expected/test_issue_4449_thread_promise_void.txt
  • test-parity/expected/test_issue_4831_stripe_proto_methods.txt
  • test-parity/expected/test_issue_4913_atomics_cross_thread.txt
  • test-parity/expected/test_issue_4977_gc_toplevel_locals.txt
  • test-parity/expected/test_issue_538_background_tasks.txt
  • test-parity/expected/test_issue_617_inline_await_fetch_with_auth.txt
  • test-parity/expected/test_issue_645_chained_method_on_null_obj.txt
  • test-parity/expected/test_issue_764_state_at_module_init.txt
  • test-parity/expected/test_issue_859_native_promise_pin.txt
  • test-parity/expected/test_issue_915_jwt_sign.txt
  • test-parity/expected/test_issue_915_native_module_after_async_resume.txt
  • test-parity/expected/test_issue_927_jwt_verify_returns_object.txt
  • test-parity/expected/test_issue_pino_sorting_order_undefined.txt
  • test-parity/expected/test_lodash_max_min.txt
  • test-parity/expected/test_lodash_sum.txt
  • test-parity/gap_snapshot.json
  • test-parity/known_failures.json
  • tests/release/README.md
  • tests/release/packages/date-fns-format/entry.ts
  • tests/release/packages/date-fns-format/expected.txt
  • tests/release/packages/date-fns-format/fixture.sh
  • tests/release/packages/date-fns-format/package.json
  • tests/test_compiler_output_regression.py
  • tests/test_public_baseline.py
💤 Files with no reviewable changes (3)
  • crates/perry-hir/src/lower/lower_expr/arm_optchain.rs
  • test-parity/gap_snapshot.json
  • test-parity/known_failures.json
🚧 Files skipped from review as they are similar to previous changes (81)
  • crates/perry-codegen/src/lower_call/native_table/node_core/util_buffer.rs
  • scripts/release_sweep.sh
  • docs/src/container/overview.md
  • benchmarks/json_polyglot/run.sh
  • Cargo.toml
  • test-files/demo_claude_code_tui.ts
  • test-parity/expected/test_fastify_in_process.txt
  • test-parity/expected/test_gap_4510_enum_forward_ref.txt
  • crates/perry-codegen/src/expr/index_set.rs
  • crates/perry-codegen/src/codegen/method.rs
  • crates/perry-codegen/src/expr/proven_view_access.rs
  • crates/perry-codegen/src/expr/property_set.rs
  • tests/release/packages/date-fns-format/fixture.sh
  • crates/perry-codegen/src/expr/index.rs
  • test-files/test_gap_2514_settracesigint.ts
  • test-parity/expected/test_issue_1021_rxjs_reexport_methods.txt
  • tests/test_public_baseline.py
  • docs/src/internals/explicit-memory.md
  • crates/perry-runtime/src/gc/tests/copying/pointer_publish_7154.rs
  • crates/perry-codegen/src/expr/instance_misc1.rs
  • crates/perry-ext-http/src/server/cluster_bind.rs
  • test-files/test_class_field_layout.ts
  • test-files/test_gap_2159_defineproperty_class_prototype.ts
  • test-parity/expected/test_gap_enum_in_function_body.txt
  • benchmarks/public_baseline.py
  • tests/release/packages/date-fns-format/package.json
  • test-files/test_effect_pipe_map.ts
  • docs/src/container/determinism.md
  • test-parity/expected/test_gap_derived_param_props.txt
  • crates/perry-runtime/src/util_settracesigint.rs
  • crates/perry-codegen/src/expr/this_super_call.rs
  • test-parity/expected/test_better_sqlite3_v8_bridge.txt
  • crates/perry-runtime/src/array/indexing.rs
  • changelog.d/7218-release-readiness.md
  • test-files/test_compat_buffers_typed.ts
  • tests/test_compiler_output_regression.py
  • crates/perry-runtime/src/array/immutable.rs
  • crates/perry-runtime/src/json/mod.rs
  • crates/perry-stdlib/src/streams/tee.rs
  • test-files/test_date_fns_format.ts
  • crates/perry-runtime/src/object/instanceof.rs
  • crates/perry-runtime/src/iterator_helpers.rs
  • crates/perry-ext-fastify/src/cluster_bind.rs
  • tests/release/README.md
  • docs/src/testing/node-compat-matrix.md
  • scripts/addr_class_allowlist.txt
  • scripts/check_file_size.sh
  • crates/perry-runtime/src/cluster.rs
  • test-files/test_gap_prop_plan_cache_invalidation.ts
  • test-parity/expected/test_ads_compile_smoke.txt
  • crates/perry-runtime/src/object/global_this/fetch_globals.rs
  • crates/perry-runtime/src/value/dynamic_object.rs
  • crates/perry-runtime/src/typedarray/transform.rs
  • crates/perry-codegen/src/lower_call/new_helpers.rs
  • tests/release/packages/date-fns-format/entry.ts
  • crates/perry-codegen/src/stmt/mod.rs
  • crates/perry-runtime/src/child_process/value_util.rs
  • docs/src/plugins/native-extensions.md
  • benchmarks/polyglot/run_all.sh
  • crates/perry-runtime/src/gc/tests/oldgen.rs
  • test-files/test_hono_bundle.ts
  • CLAUDE.md
  • crates/perry-runtime/src/array/push_pop.rs
  • crates/perry-runtime/src/json/stringify.rs
  • benchmarks/suite/results/RESULTS.md
  • crates/perry-runtime/src/string/iter_object.rs
  • crates/perry/src/commands/compile/run_pipeline.rs
  • crates/perry-runtime/src/perf_hooks.rs
  • docs/src/language/limitations.md
  • crates/perry-ext-zlib/src/lib.rs
  • crates/perry-runtime/src/promise/combinators.rs
  • benchmarks/polyglot/bench.py
  • run_parity_tests.sh
  • crates/perry-runtime/src/fs/dirent.rs
  • tests/release/packages/date-fns-format/expected.txt
  • docs/src/cli/flags.md
  • test-parity/expected/test_better_sqlite3_raw.txt
  • crates/perry-runtime/src/object/class_constructors.rs
  • crates/perry-runtime/src/array/alloc.rs
  • scripts/addr_class_ratchet_baseline.txt
  • test-files/test_fastify_integration.ts

Comment thread crates/perry-ext-axios/src/lib.rs Outdated
Comment thread crates/perry/src/commands/compile/link/build_and_run.rs Outdated
Comment thread scripts/release_sweep_tiers/tier01_cargo_workspace.sh
Comment thread test-files/test_parity_crypto.ts Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
crates/perry-codegen/tests/native_proof_regressions.rs (2)

13235-13238: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add PR-visible unit coverage for this contract.

If this is the only assertion for the no-mask contract, add equivalent coverage in a #[cfg(test)] unit module. Keep this integration regression test, but do not rely on it as the sole acceptance gate.

As per coding guidelines, integration suites under crates/**/tests/*.rs must not be the sole PR acceptance coverage; prefer cargo-test-visible unit tests.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/perry-codegen/tests/native_proof_regressions.rs` around lines 13235 -
13238, Add equivalent unit coverage for the no-mask property-id read contract in
a #[cfg(test)] module within the relevant implementation crate, while retaining
the existing integration assertion in native_proof_regressions.rs. Ensure the
unit test is cargo-test-visible and verifies generated IR does not contain the
i64 bitwise-and mask pattern for boxed receiver tags.

Source: Coding guidelines


13235-13238: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Scope the negative IR assertion to the property-get call.

ir.contains(" = and i64 ") scans the entire module. An unrelated mask can fail this test without changing js_object_get_field_by_property_id_f64. Inspect the instructions around that call or assert its receiver operand directly.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/perry-codegen/tests/native_proof_regressions.rs` around lines 13235 -
13238, Update the regression assertion near the property-get call to inspect
only the IR instruction or receiver operand associated with
js_object_get_field_by_property_id_f64, rather than scanning the entire ir
string. Preserve the check that the boxed receiver tag is not masked by an and
i64 operation while ignoring unrelated masks elsewhere in the module.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/perry-runtime/src/symbol/properties.rs`:
- Around line 297-302: Update set_symbol_property around invoke_accessor_setter
to protect values across user code and moving GC: create a RuntimeHandleScope
for the accessor-setter path, root obj_f64 and value_f64, then refresh the
receiver and derive obj_ptr from the rooted value before reading or returning
it. Preserve the existing setter invocation semantics and symbol-property
behavior.

---

Nitpick comments:
In `@crates/perry-codegen/tests/native_proof_regressions.rs`:
- Around line 13235-13238: Add equivalent unit coverage for the no-mask
property-id read contract in a #[cfg(test)] module within the relevant
implementation crate, while retaining the existing integration assertion in
native_proof_regressions.rs. Ensure the unit test is cargo-test-visible and
verifies generated IR does not contain the i64 bitwise-and mask pattern for
boxed receiver tags.
- Around line 13235-13238: Update the regression assertion near the property-get
call to inspect only the IR instruction or receiver operand associated with
js_object_get_field_by_property_id_f64, rather than scanning the entire ir
string. Preserve the check that the boxed receiver tag is not masked by an and
i64 operation while ignoring unrelated masks elsewhere in the module.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 61c7f94e-19f0-4d29-842b-480fcf747c0d

📥 Commits

Reviewing files that changed from the base of the PR and between 2097d1b and 58f33b2.

📒 Files selected for processing (3)
  • crates/perry-codegen/src/expr/property_get/helpers.rs
  • crates/perry-codegen/tests/native_proof_regressions.rs
  • crates/perry-runtime/src/symbol/properties.rs

Comment thread crates/perry-runtime/src/symbol/properties.rs Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
crates/perry-runtime/src/array/push_pop.rs (1)

129-154: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Use the canonical heap-address classifier for the forwarding-stub guard.

This duplicates the native-handle-band rule. After clean_arr_ptr_mut, use crate::value::addr_class::is_plausible_heap_addr(arr as usize) for the growth forwarding-stub guard instead of the inline HEAP_MIN comparison.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/perry-runtime/src/array/push_pop.rs` around lines 129 - 154, In the
growth forwarding-stub guard after clean_arr_ptr_mut, replace the duplicated
platform-specific HEAP_MIN constants and comparison with
crate::value::addr_class::is_plausible_heap_addr(arr as usize). Remove the
inline address-range configuration and preserve the existing guard behavior
around forwarding-stub installation.

Source: Learnings

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/release_sweep_tiers/tier01_cargo_workspace.sh`:
- Around line 53-55: Update the sourced script’s completion path after the
metadata-failure handling to restore the caller’s prior errexit state before
returning. Preserve the intentional set +e behavior during structured-result
processing, and ensure normal completion does not leave callers that entered
with errexit disabled or enabled in the wrong state.

---

Outside diff comments:
In `@crates/perry-runtime/src/array/push_pop.rs`:
- Around line 129-154: In the growth forwarding-stub guard after
clean_arr_ptr_mut, replace the duplicated platform-specific HEAP_MIN constants
and comparison with crate::value::addr_class::is_plausible_heap_addr(arr as
usize). Remove the inline address-range configuration and preserve the existing
guard behavior around forwarding-stub installation.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 20101dfc-74e4-4723-91ff-0c42a23563f1

📥 Commits

Reviewing files that changed from the base of the PR and between 86837e1 and 153ec5e.

📒 Files selected for processing (17)
  • benchmarks/results/public-node-bun-v1.json
  • crates/perry-ext-axios/src/lib.rs
  • crates/perry-hir/src/lower/const_fold_fn.rs
  • crates/perry-runtime/src/array/immutable.rs
  • crates/perry-runtime/src/array/push_pop.rs
  • crates/perry-runtime/src/array/tests.rs
  • crates/perry-runtime/src/fs/dirent.rs
  • crates/perry-runtime/src/symbol/properties.rs
  • crates/perry-runtime/src/value/dynamic_object.rs
  • crates/perry/src/commands/compile/link/build_and_run.rs
  • scripts/addr_class_ratchet_baseline.txt
  • scripts/release_sweep_tiers/tier01_cargo_workspace.sh
  • test-files/test_issue_340_axios_response_props.ts
  • test-files/test_issue_915_jwt_sign_after_async_route.ts
  • test-files/test_parity_crypto.ts
  • test-parity/expected/test_jwt_sign_dynamic_alg.txt
  • tests/test_public_baseline.py
💤 Files with no reviewable changes (1)
  • scripts/addr_class_ratchet_baseline.txt
🚧 Files skipped from review as they are similar to previous changes (8)
  • test-files/test_parity_crypto.ts
  • crates/perry-runtime/src/symbol/properties.rs
  • crates/perry-hir/src/lower/const_fold_fn.rs
  • tests/test_public_baseline.py
  • crates/perry-runtime/src/fs/dirent.rs
  • crates/perry-runtime/src/array/immutable.rs
  • crates/perry-runtime/src/value/dynamic_object.rs
  • benchmarks/results/public-node-bun-v1.json

Comment thread scripts/release_sweep_tiers/tier01_cargo_workspace.sh
@proggeramlug

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 2, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@proggeramlug
proggeramlug force-pushed the audit/release-readiness branch 3 times, most recently from e6b8b7b to 674855d Compare August 2, 2026 06:59
@proggeramlug
proggeramlug force-pushed the audit/release-readiness branch from 8898b39 to c6fe3c1 Compare August 2, 2026 07:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

run-extended-tests Opt PR into compile-smoke/parity/doc-tests/drizzle-mysql-smoke

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant