Summary
The Coop Next.js benchmark fixture (a production next build --webpack App Route compiled through Coop, benchmarks/next-small in PerryTS/coop) loads and serves on Perry 0.5.1516 (3885ba491) — that is the build every #8546 measurement was taken on — and on 0.5.1519 (41e8479a5) it dies at module init, before any request:
daemon: ReferenceError: identifier is not defined
daemon: at <anonymous>
One application is enough; this is not the multi-heap case. Coop's daemon exits during preload with status 1, so #8546 cannot currently be reproduced on main at all.
What it is not
Where the throw can come from
The message is the nameless form (js_throw_reference_error_unresolved_get). Its HIR emitters on 41e8479a5:
crates/perry-hir/src/lower_decl/helpers.rs:189, 204, 214, 218 (and the _unresolved_assignment sibling at 197)
crates/perry-hir/src/lower/expr_new.rs:1599
Between 3885ba491 and 41e8479a5 (127 commits) the HIR commits that touch binding/scope resolution are the first suspects:
Reproduction
PerryTS/coop main at 3e7180e (pin 0.5.1519, rust-toolchain.toml = nightly-2026-08-20):
scripts/build-perry-libraries.sh
cargo build --release -p coop-daemon -p coop-worker
scripts/prepare-next-benchmark.sh # next build --webpack, then the daemon compiles it (see the compile-time issue: budget with COOP_NEXT_COMPILE_TIMEOUT)
APP=$(find target/next-benchmark/coop-run/compiled/next-bench -name app.dylib | head -1)
COOP_BENCH_APP_COUNTS=1 COOP_BENCH_EXECUTION_MODE=in_process COOP_BENCH_APP_LIBRARY="$APP" \
cargo test --release -p coop-daemon --test resource_benchmark measure_in_process_startup_and_rss -- --ignored --nocapture
Same steps with perry-main.lock at 3885ba491 load the application (the #8546 runs).
The ask, again
#8730 asked for it and it is still the blocker for this class: name the identifier in the message. at <anonymous> with no name means the only way to attribute this is to instrument the five throw sites and recompile the bundle, which for this fixture is a multi-hour build on 0.5.1519. A name would make it a two-minute bisect.
Summary
The Coop Next.js benchmark fixture (a production
next build --webpackApp Route compiled through Coop,benchmarks/next-smallin PerryTS/coop) loads and serves on Perry0.5.1516(3885ba491) — that is the build every #8546 measurement was taken on — and on0.5.1519(41e8479a5) it dies at module init, before any request:One application is enough; this is not the multi-heap case. Coop's daemon exits during preload with status 1, so #8546 cannot currently be reproduced on
mainat all.What it is not
new <minified-local>()scope-resolution miss #8730'snew <minified-local>()class. fix(async): linearize await inside an async-generator finally; fix aliased native-class new #8739 is in this build, and the compile's "unknown identifier — assuming global" list for the whole bundle contains only genuine browser globals:window×112,location×30,document×20,__REACT_DEVTOOLS_GLOBAL_HOOK__×12,cookieStore×6,define×4,__non_webpack_require__×2. Nothing that resolves to a local.scripts/prepare-next-benchmark.shon every run, and the bundler is asserted (webpack-runtime.jspresent, no[turbopack]_runtime.js).Where the throw can come from
The message is the nameless form (
js_throw_reference_error_unresolved_get). Its HIR emitters on41e8479a5:crates/perry-hir/src/lower_decl/helpers.rs:189, 204, 214, 218(and the_unresolved_assignmentsibling at 197)crates/perry-hir/src/lower/expr_new.rs:1599Between
3885ba491and41e8479a5(127 commits) the HIR commits that touch binding/scope resolution are the first suspects:e2eee4048fix(hir): share function and var declaration bindings (fix(hir): share function and var declaration bindings #8753)98ecdc582fix(hir): resolve the Web Streams global constructor (fix(hir): resolve the Web Streams global constructor #8795)726f6e96eperf: static method literals, captured closure reuse, argument shape facts (perf: static method literals, captured closure reuse, argument shape facts #8796)8a55a26f1land perf: complete ECS benchmark specializations #8833: ECS specializations, with the argument-route guard restored (land #8833: ECS specializations, with the argument-route guard restored #8837)Reproduction
PerryTS/coop
mainat3e7180e(pin0.5.1519,rust-toolchain.toml= nightly-2026-08-20):Same steps with
perry-main.lockat3885ba491load the application (the #8546 runs).The ask, again
#8730 asked for it and it is still the blocker for this class: name the identifier in the message.
at <anonymous>with no name means the only way to attribute this is to instrument the five throw sites and recompile the bundle, which for this fixture is a multi-hour build on0.5.1519. A name would make it a two-minute bisect.