Skip to content

Verify #8078 removes the split-module unknown-wrapper collision #8064

Description

@proggeramlug

Status

The code fix is merged on main:

  • PR: Scope split unknown-function fallback wrappers by module #8078
  • audited head: 6772b8111aeeb047d4ebbcebcfce7a0e8a7e9736
  • merge commit: 5c27d1ad9b588f69fa2677acd8ae99dc5303e712
  • focused emitted-IR regression: passed
  • two separately split modules + real shared object link regression: passed
  • landing-tree perry-codegen suite: 996/996 passed

The original global symbol ___perry_wrap_perry_unknown_func is replaced by stable module-scoped fallback names while unsplit copies retain internal linkage.

This ticket now has one bounded purpose: verify that the original production-sized duplicate-symbol boundary is gone. It is not a tracker for every later Next.js, provider, GC, or App Route problem.

Original production boundary

On b0f13fb5ef39eb26463d4bc82f7cd6812acea69f, the pinned Next.js 16.3.0 webpack App Route graph from #8034:

  • passed the byte-identical 21-request Node oracle;
  • collected and emitted 91/91 Perry module objects;
  • cleared the former split-unit ptrtoint failures;
  • failed the final app-only dylib link because four objects exported the same ___perry_wrap_perry_unknown_func.

The old local replay log was:

/Users/amlug/cargo-targets/next-prod-gate/evidence/perry-route-compile-b0f13fb5.log

Do not depend on that path existing. Regenerate the pinned fixture from #8034 when necessary.

Remaining worker task

  1. Fetch current main and record the exact commit/tree.

  2. Generate/build the pinned Next.js 16.3.0 webpack fixture from [Next.js/dylib] Add a pinned production App Route parity fixture and CI gate #8034. Confirm the Node oracle inputs are the generated production route graph; a direct call to the user GET export is not a substitute.

  3. Build one coherent release artifact set from that same Perry SHA in an isolated target:

    cargo build --release -p perry -p perry-runtime-static -p perry-stdlib-static -p perry-ext-http -p perry-ext-net

  4. Record SHA-256, size, and mtime for perry, libperry_runtime.a, libperry_stdlib.a, libperry_ext_http.a, and libperry_ext_net.a; prove no writer remains before the replay.

  5. Compile the same app-only graph from scratch with the isolated release directory pinned:

    PERRY_RUNTIME_DIR=<target>/release PERRY_NO_AUTO_OPTIMIZE=1 PERRY_NO_CACHE=1 <target>/release/perry compile --no-cache --no-auto-optimize --output-type dylib perry-host.js -o next-app-route-current.dylib

  6. Preserve the full module-emission/final-link log and report the exact final boundary.

Closure rule

Close #8064 after exactly one of these outcomes:

Do not keep #8064 open for:

  • executing the 21 Perry requests;
  • AppRouteRouteModule.handle behavior;
  • provider ABI/runtime behavior after a successful link;
  • moving-GC or verifier evidence;
  • performance.

Those belong to #8034/#8040 or a new dedicated blocker. This issue is complete once the collision itself is disproved on the pinned production graph.

Refs #8034 and #8040.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugConfirmed defect or regressionhelp wantedExtra attention is neededtriagedMaintainer reviewed; type, scope, and next step are clear

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions