Skip to content

P0 revert: strip the 156-file payload swept into the #5983 squash (regressed class lowering)#5994

Closed
proggeramlug wants to merge 1 commit into
mainfrom
fix/revert-5983-swept-payload
Closed

P0 revert: strip the 156-file payload swept into the #5983 squash (regressed class lowering)#5994
proggeramlug wants to merge 1 commit into
mainfrom
fix/revert-5983-swept-payload

Conversation

@proggeramlug

Copy link
Copy Markdown
Contributor

The #5983 squash (4500b5de4) was intended as one stdlib feature-list line + release metadata, but landed with 161 files (+8108/−745): unreviewed codegen changes (artifacts/closure/entry/function/helpers/method/new/property_get/this_super_call/…), ~30 new tests/*.sh, and a 5.1MB constv binary at the repo root — another workstream's WIP that was never part of the PR's review or CI.

The payload regressed class lowering on main: temporal_subclass_capture_writeback_inner_class (issue_5587 suite) fails — class X extends <param> flips from the static New path to ClassExprFresh/NewDynamic and the capture writeback is lost (called: 0). Verified two ways: HIR diff between a v0.5.1238-built compiler (static New, passes) and v0.5.1239 (fresh path, fails); and this revert restoring the suite to 6/6 green.

This PR restores every unintended path to its v0.5.1238 (532853f4a) state and deletes constv. The intended #5983 change — external-http-client-pump dropped from stdlib full — is kept (cargo test -p perry-stdlib links green). The swept-in work remains in history at 4500b5de4 for its author to re-land through review.

I'm still tracing how the payload entered the PR branch between CI-green and merge; full forensics to follow on the tracking issue. Metadata folded at merge as usual.

@coderabbitai

coderabbitai Bot commented Jul 4, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 153 files, which is 3 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: b58f348a-4dca-458a-a788-75b62d7472ad

📥 Commits

Reviewing files that changed from the base of the PR and between 5afa08f and 5a74594.

⛔ Files ignored due to path filters (3)
  • node_trace.1.log is excluded by !**/*.log
  • tests/release/packages/zod3-basic/package-lock.json is excluded by !**/package-lock.json
  • tests/release/packages/zod4-basic/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (153)
  • constv
  • crates/perry-codegen/src/codegen/artifacts.rs
  • crates/perry-codegen/src/codegen/closure.rs
  • crates/perry-codegen/src/codegen/entry.rs
  • crates/perry-codegen/src/codegen/function.rs
  • crates/perry-codegen/src/codegen/helpers.rs
  • crates/perry-codegen/src/codegen/method.rs
  • crates/perry-codegen/src/codegen/mod.rs
  • crates/perry-codegen/src/codegen/module_globals_emit.rs
  • crates/perry-codegen/src/codegen/opts.rs
  • crates/perry-codegen/src/expr/dyn_extern_i18n.rs
  • crates/perry-codegen/src/expr/index_get.rs
  • crates/perry-codegen/src/expr/instance_misc1.rs
  • crates/perry-codegen/src/expr/mod.rs
  • crates/perry-codegen/src/expr/property_get.rs
  • crates/perry-codegen/src/expr/this_super_call.rs
  • crates/perry-codegen/src/lower_call/console_promise.rs
  • crates/perry-codegen/src/lower_call/namespace_call.rs
  • crates/perry-codegen/src/lower_call/new.rs
  • crates/perry-codegen/src/lower_call/new_helpers.rs
  • crates/perry-codegen/src/lower_call/property_get.rs
  • crates/perry-codegen/src/lower_call/property_get/number_string.rs
  • crates/perry-codegen/tests/argless_builtin_extra_args.rs
  • crates/perry-codegen/tests/class_keys_gc_root.rs
  • crates/perry-codegen/tests/constructor_recursion.rs
  • crates/perry-codegen/tests/destructure_call_location.rs
  • crates/perry-codegen/tests/large_object_barriers.rs
  • crates/perry-codegen/tests/macos_bundle_chdir_gate.rs
  • crates/perry-codegen/tests/native_proof_buffer_views.rs
  • crates/perry-codegen/tests/native_proof_regressions.rs
  • crates/perry-codegen/tests/shadow_slot_hygiene.rs
  • crates/perry-codegen/tests/static_symbol_hygiene.rs
  • crates/perry-codegen/tests/typed_feedback.rs
  • crates/perry-codegen/tests/typed_shape_descriptor.rs
  • crates/perry-codegen/tests/typed_shape_descriptors.rs
  • crates/perry-hir/src/dynamic_import.rs
  • crates/perry-hir/src/dynamic_import/tests.rs
  • crates/perry-hir/src/dynamic_import/visitors.rs
  • crates/perry-hir/src/eval_classifier.rs
  • crates/perry-hir/src/lower/closure_analysis.rs
  • crates/perry-hir/src/lower/const_fold_fn.rs
  • crates/perry-hir/src/lower/expr_call/array_only_methods.rs
  • crates/perry-hir/src/lower/expr_call/imported_array_methods.rs
  • crates/perry-hir/src/lower/expr_function.rs
  • crates/perry-hir/src/lower/expr_new.rs
  • crates/perry-hir/src/lower/lower_expr/arm_class.rs
  • crates/perry-hir/src/lower/lower_module_fn.rs
  • crates/perry-hir/src/lower/module_decl.rs
  • crates/perry-hir/src/lower/module_decl/reexports.rs
  • crates/perry-hir/src/lower/stmt.rs
  • crates/perry-hir/src/lower_decl/block.rs
  • crates/perry-hir/src/lower_decl/body_stmt.rs
  • crates/perry-hir/src/lower_decl/enum_decl.rs
  • crates/perry-hir/src/lower_decl/mod.rs
  • crates/perry-hir/src/lower_decl/static_init.rs
  • crates/perry-hir/src/lower_patterns.rs
  • crates/perry-runtime/src/collection_iter.rs
  • crates/perry-runtime/src/json/replacer.rs
  • crates/perry-runtime/src/map.rs
  • crates/perry-runtime/src/node_submodules/blob.rs
  • crates/perry-runtime/src/object/array_object_ops.rs
  • crates/perry-runtime/src/object/class_registry.rs
  • crates/perry-runtime/src/object/class_registry/construct.rs
  • crates/perry-runtime/src/object/class_registry/parent_static.rs
  • crates/perry-runtime/src/object/class_registry/state.rs
  • crates/perry-runtime/src/object/descriptors.rs
  • crates/perry-runtime/src/object/field_get_set/get_field_by_name.rs
  • crates/perry-runtime/src/object/field_get_set/get_field_by_name_tail.rs
  • crates/perry-runtime/src/object/field_get_set/has_property.rs
  • crates/perry-runtime/src/object/global_this.rs
  • crates/perry-runtime/src/object/global_this/builtin_thunks.rs
  • crates/perry-runtime/src/object/global_this/proto_methods.rs
  • crates/perry-runtime/src/object/instanceof.rs
  • crates/perry-runtime/src/object/mod.rs
  • crates/perry-runtime/src/object/native_call_method.rs
  • crates/perry-runtime/src/object/native_call_method/collection_methods.rs
  • crates/perry-runtime/src/object/native_call_method/common_methods.rs
  • crates/perry-runtime/src/object/native_call_method/primitive_methods.rs
  • crates/perry-runtime/src/object/object_ops/define_properties.rs
  • crates/perry-runtime/src/object/object_ops/define_property.rs
  • crates/perry-runtime/src/object/object_ops/has_own.rs
  • crates/perry-runtime/src/object/object_ops/prototype.rs
  • crates/perry-runtime/src/object/to_string_tag.rs
  • crates/perry-runtime/src/proxy.rs
  • crates/perry-runtime/src/set.rs
  • crates/perry-runtime/src/string/char_ops.rs
  • crates/perry-runtime/src/string/format.rs
  • crates/perry-runtime/src/symbol/get.rs
  • crates/perry-runtime/src/url/mod.rs
  • crates/perry-runtime/src/url/parse.rs
  • crates/perry-runtime/src/value/dyn_index.rs
  • crates/perry-runtime/src/value/dynamic_arith.rs
  • crates/perry-runtime/src/value/nanbox.rs
  • crates/perry-stdlib/src/fetch/dispatch.rs
  • crates/perry/src/commands/compile/collect_modules.rs
  • crates/perry/src/commands/compile/object_cache.rs
  • crates/perry/src/commands/compile/run_pipeline.rs
  • direct
  • test-files/test_parity_bigint_switch.ts
  • test-files/test_parity_builtin_subclass_fields.ts
  • test-parity/known_failures.json
  • tests/_perry_test_lib.sh
  • tests/release/packages/zod3-basic/entry.ts
  • tests/release/packages/zod3-basic/expected.txt
  • tests/release/packages/zod3-basic/fixture.sh
  • tests/release/packages/zod3-basic/package.json
  • tests/release/packages/zod4-basic/entry.ts
  • tests/release/packages/zod4-basic/expected.txt
  • tests/release/packages/zod4-basic/fixture.sh
  • tests/release/packages/zod4-basic/package.json
  • tests/test_array_not_instanceof_error_subclass.sh
  • tests/test_bigint_samevalue_map.sh
  • tests/test_bigint_samevalue_set.sh
  • tests/test_builtin_prototype_and_fetch_reflection.sh
  • tests/test_builtin_subclass_implicit_ctor_fields.sh
  • tests/test_class_define_property_name.sh
  • tests/test_dynamic_arithmetic_bigint_any.sh
  • tests/test_dynamic_class_extends_once.sh
  • tests/test_dynamic_extends_class_binding.sh
  • tests/test_dynamic_function_probe_fallback_stderr.sh
  • tests/test_dynamic_import_package_registry.sh
  • tests/test_dynamic_parent_builtin_no_downgrade.sh
  • tests/test_error_subclass_arrow_field_init.sh
  • tests/test_export_enum_runtime_object.sh
  • tests/test_file_instanceof.sh
  • tests/test_forward_captured_let_box.sh
  • tests/test_function_prototype_instanceof.sh
  • tests/test_imported_default_named_reexport.sh
  • tests/test_imported_error_new_target.sh
  • tests/test_imported_static_field_alias_method.sh
  • tests/test_json_stringify_replacer_key_order.sh
  • tests/test_map_set_subclass_constructor_iterable.sh
  • tests/test_missing_error_property_undefined.sh
  • tests/test_namespace_default_alias_call.sh
  • tests/test_namespace_homonymous_class_export.sh
  • tests/test_namespace_homonymous_var_function_exports.sh
  • tests/test_namespace_reexport_binding.sh
  • tests/test_namespace_reexport_optional_arg.sh
  • tests/test_namespace_subobject_method_call.sh
  • tests/test_new_parameter_shadows_class.sh
  • tests/test_number_to_string_large_exponent.sh
  • tests/test_object_create_for_in_prototype.sh
  • tests/test_object_create_in_operator_prototype.sh
  • tests/test_object_create_inherited_constructor.sh
  • tests/test_object_prototype_method_call_fallback.sh
  • tests/test_own_to_string_method.sh
  • tests/test_prototype_cycle_has_property.sh
  • tests/test_reflect_set_frozen_array.sh
  • tests/test_string_computed_length.sh
  • tests/test_switch_bigint_case.sh
  • tests/test_unicode_regex_literal.sh
  • tests/test_url_href_normalization.sh
  • tests/test_url_instanceof_reflection.sh

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/revert-5983-swept-payload

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

Copy link
Copy Markdown
Contributor Author

Corrected forensics (the PR body's 'swept-in WIP' framing was wrong about provenance, right about effect): the payload is PR #5874 (Improve Zod compatibility support) — it merged to main, main was then force-rewound to remove it, but this PR's branch had rebased onto main during the in-between window and retained 849f297a8 in its history. The squash merge therefore silently re-landed the rolled-back content. The earlier bisect independently pins 849f297a8 as the commit that breaks temporal_subclass_capture_writeback_inner_class ('class X extends ' flips from static New to ClassExprFresh/NewDynamic and the capture writeback is lost), which is consistent with it having been rolled back.

So this revert restores main to the rollback's intended state while keeping #5983's pump-lockstep line. #5874's author: the work stays in history at 4500b5de4/849f297a8 — it needs the temporal/extends regression fixed before re-landing.

Process lesson for the merge choreography (mine included): after any pre-merge rebase, check git log <base>..HEAD --oneline for foreign commits before pushing — a rebase can resurrect force-rewound history and a squash will re-land it wholesale.

@proggeramlug proggeramlug force-pushed the fix/revert-5983-swept-payload branch from 2af54fa to afe5bb6 Compare July 4, 2026 20:29
@proggeramlug

Copy link
Copy Markdown
Contributor Author

Conflict resolved by rebuilding the branch as an inverse patch of the #5874 payload against current main (instead of the earlier snapshot-restore): the five fleet merges that landed meanwhile are preserved — including #5991 (extends Promise), which built on #5874's new.rs/new_helpers split; its promise_parent_runtime + emit_promise_subclass_init wiring is kept (verified against node), while #5874's map_set_default_super_kind scaffold goes with the rest. Both stray binaries (constv, direct) deleted. Re-verified: temporal suite 6/6, stdlib test link green, pump-lockstep line untouched.

@proggeramlug

Copy link
Copy Markdown
Contributor Author

Independently bisected this regression (good 28948ea44 .. bad 76cc2b996, witness = Boolean/Number/Temporal.Duration parity) and it lands on the same culprit this PR now targets — #5874 (849f297a8), one commit after 532853f4a/v0.5.1238. Confirmed 4f5bc6adb (this PR's diagnosis) is the last good state at 98.3% witness parity vs 93.9% at 849f297a8.

This branch is currently CONFLICTING because it's based on 95e481715 (6 commits behind 76cc2b996). I've rebased the exact inverse-patch onto current origin/main and opened #6015 (single dynamic_arith.rs conflict resolved: dropped #5874's dynamic_number_operand double-coercion, kept #5999's js_dynamic_mod fmod-sign fix; #5991 Promise-subclass preserved; constv/direct deleted). Verified on the witness slice: parity back to 98.3%, self-validated 100%, Temporal.Duration 100%.

Suggest closing this in favor of #6015, or I can force-update this branch to the rebased commit if you'd rather keep the PR number — your call.

@proggeramlug

Copy link
Copy Markdown
Contributor Author

Rebuilt against current main (11 more fleet merges had landed, re-conflicting the branch). The inverse-patch approach cleanly preserves all five later fixes that touched payload files: #5991 (extends Promise), #5999 (js_dynamic_mod fmod sign-of-zero — #5874's redundant dynamic_number_operand insertion removed, the a % b fix kept), and #6004/#6005/#6007 (native_call_method.rs/proxy.rs — 3-way removed only #5874's hunks). Behavioral probes for each pass against node (mod -0, promise subclass = 42, exotic-receiver dispatch, fn seal); temporal back to 6/6; stdlib links; both stray binaries deleted.

…main (preserves 5 later fixes)

The #5983 squash unknowingly re-landed force-rewound PR #5874 (Improve
Zod compatibility, 849f297, 161 files incl the constv/direct binaries
and a class-lowering change that regresses
temporal_subclass_capture_writeback_inner_class: 'class X extends
<param>' flips from static New to ClassExprFresh/NewDynamic and the
capture writeback is lost).

Inverse patch of the #5874 payload applied to CURRENT main via 3-way, so
the fleet merges that landed on top are preserved:
- #5991 (extends Promise): new.rs/new_helpers.rs taken from the prior
  working revert (unchanged by the 11 intervening merges); its
  promise_parent_runtime + emit_promise_subclass_init kept, #5874's
  map_set_default_super_kind scaffold dropped.
- #5999 (js_dynamic_mod fmod sign-of-zero): #5874's redundant
  dynamic_number_operand insertion removed, #5999's 'a % b' kept.
- #6004/#6005/#6007 (exotic-receiver dispatch, proxy get, seal on
  functions): 3-way removed ONLY #5874's hunks from
  native_call_method.rs/proxy.rs; the later fixes' additions stay.

Verified: temporal 6/6 (was 5/6 on main), 806 unchanged, stdlib links,
proxy e2e green, and behavioral probes for #5999 (mod -0), #5991
(promise subclass = 42), #6004/#6007 (exotic dispatch + fn seal) all
match node. Both stray binaries deleted. #5874 stays in history at
4500b5d for its author to re-land through review after fixing the
extends regression.
@proggeramlug proggeramlug force-pushed the fix/revert-5983-swept-payload branch from 808a3a6 to 5a74594 Compare July 5, 2026 07:10
@proggeramlug

Copy link
Copy Markdown
Contributor Author

Superseded by #6015, which landed the same #5874-payload revert (156 files, both binaries removed, class-lowering restored — and additionally documents the 322 test262 regressions #5874 caused). Main is clean; closing this as redundant. The independent verification here (temporal_subclass 6/6, #5991/#5999/#6004/#6005/#6007 behavior preserved) corroborates #6015's approach.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant