Repository navigation
Bump the build benchmark's moq pin past poll-first - #646
Conversation
Quest-Claim: 1b78c0bd989c3ff1
…rypto moq main moved moq-relay's crypto onto rind, so the moq corpus is now the pure-crypto build: it takes moq-pure-crypto's no-c guard and that corpus goes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
rind's naked_asm! takes sym operands, which cg_clif cannot compile yet (rust-lang/rustc_codegen_cranelift#1620). A variant's new `config` key passes cargo --config values, so the cranelift variant picks its backend by profile and overrides it for rind; RUSTFLAGS would come after any per-package flag. The README's ra-jit notes now come from the run at the new pin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cargo drops a --config given before an external subcommand, so nextest built the cranelift variant's tests with LLVM. Every cargo command now takes the config last, and `sub` holds only the subcommand again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed head: 59c3a2a
Base: efa6300
No actionable correctness findings.
Direction and coverage:
- The new moq pin puts the async edit on Session::closed's poll_closed wrapper, matching the benchmark's updated description. Retiring the separate pure-crypto corpus and moving its no-C guard onto moq keeps the comparison aligned with the new corpus rather than retaining a different historical tree.
- Variant config is rebuilt for each variant and passed as individually quoted trailing arguments in the warm-up, edit preparation, and timed cargo commands. This also reaches the external nextest subcommand. The Cranelift profile override leaves rind on LLVM instead of allowing a global backend RUSTFLAGS value to override it.
- Documentation identifies the changed corpus and mixed-backend caveat, and keeps the Cranelift failures tracked rather than treating a successful benchmark workflow as passing tests.
Verification limits: GitHub-only static inspection of the diff, complete benchmark runner, and pinned moq session/profile configuration. Workflow run 42357544525 is recorded as successful at 5015a6e, but I did not execute builds, benchmarks, graph checks or tests, or independently reproduce its timing and failure-count measurements. COMMENT only, not approval.
(Written by review (OpenAI))
|
No actionable comments were generated in the recent review. WalkthroughThe build benchmark updates the moq corpus, removes the separate moq-pure-crypto corpus and its matrix entry, and configures Cranelift through Cargo profile settings. The runner now passes variant Cargo configuration to timed, warm-up, and edit-scenario commands. The documentation and quest notes record updated benchmark results and Cranelift limitations. The m4 quest no longer includes the moq-pin task. Merge Risk:
|

Finishes quest/m4/bench-moq-pin.md, planned in moq-dev/rust2#631 from moq-dev/rust2#615's report.
Problem
The
moqcorpus pinnedf36c848, from before poll-first (moq-dev/moq#7607). The benchmark was measuring a moq its developers no longer edit: the hub edit rebuilt 8 crates instead of main's 10, and the async body edit hit a pre-poll-firstasync fn.Approach
leaf,hub,sync, andasynctargets still match verbatim.Session::closedis nowkio::wait(|waiter| self.poll_closed(waiter)).await, and the comment says so.moq-pure-cryptoand markmoqasno-c. Since the pin, moq main has moved moq-relay's crypto onto rind, its own pure-Rust fork of graviola, through rind-rustls, rind-rcgen, and rind-jsonwebtoken. At142b03b, moq-relay's build graph has no aws-lc-sys, ring, cc, cmake, orlinkskey. Somoqitself is now the pure-crypto build, and the comparison the spike corpus existed for (aws-lc-rs against pure Rust) no longer has two sides at main. Theno-cguard moves tomoq, and the workflow'smoq pure-cryptojob goes with the corpus.testlist from the workspace crates moq-relay builds at the pin. moq-clock and moq-flate are gone. kio-macros, moq-congestion, and moq-crypto are new.kiono longer needs its version.moq-patternjoinsmoq-authas unnameable: moq-auth's dev-dependency on its published self brings a published moq-pattern at the same version, socargo pkgid -p moq-pattern@0.1.2is ambiguous. All 12 remaining specs resolve to workspace crates (cargo tree -p ...at the pin).craneliftvariant building moq. rind'snaked_asm!takessymoperands, which cg_clif cannot compile yet (rust-lang/rustc_codegen_cranelift#1620, open). The first bench run at the new pin failed there. A variant gains aconfigkey of cargo--configvalues, andcraneliftpicks its backend by profile, with LLVM forrindalone. A RUSTFLAGS backend can't do this: cargo passes RUSTFLAGS after the profile's per-package flag, so it would win. Each cargo command takes the values last: cargo drops a--configgiven before an external subcommand, so a leading one would have left nextest building with LLVM. The Cranelift retrial quest reads these moq rows, so dropping moq from the variant would have lost its signal.edit-asyncnote, the Cranelift note, and the ra-jit notes, taken from the run at the new pin. ra-jit serves everyedit-leaf,edit-hub, andedit-syncrun. It hands everyedit-asyncrun to cargo on usage-argv'sparsed_values_given, at 50.6 s and 196 CPU-s against cargo's 10.5 s and 14.5 CPU-s. The aws-lc-sys fallback note goes with aws-lc. Thecargo ra-jit checknote is dated tof36c848, since nothing reruns it.Impact
just bench --corpus moq-pure-cryptois now an unknown corpus.Alternatives
spike/pure-cryptobranch in moq-dev/moq and pin that. I tried it. Merging main into the spike conflicts in 60 files across 1478 commits, because main replaced the same crypto code the spike patched (graviola became rind, built-in ACME was removed in moq-dev/moq#7803). Even resolved, it would reproduce what main already ships. I pushed nothing to moq-dev/moq.Choices made without asking
moq-pure-cryptocomparing a different tree, no longer holds, sincemoqis that tree.craneliftvariant with rind on LLVM, rather than dropping moq from it until rust-lang/rustc_codegen_cranelift#1620 lands. The moq Cranelift numbers now include one crate built with LLVM, which is how a Cranelift user would build moq today.test-*rather than naming it by apath+file://spec, which would depend on the checkout path.Validation
nix develop --command just check: passed.nix develop --command just ci: only the two known path-dependent TypeId snapshots fail (lang/dynsids.ts,lang/panics/hooklib.ts). They fail the same way on bare origin/main, and moq-dev/rust2#633 fixes them.moq stable,moq ra-jit, andpurepassed, so theno-cguard and the body edits hold at the new pin.moq nightlyfailed in thecraneliftwarm-up on rind, which led to the fix above.configpath on regex:just bench --corpus regex --variant nightly --variant cranelift --runs 1passed, andcargo -vwith the same values shows-Z codegen-backend=cranelifton every regex crate, with no warning for the unmatchedrind. On moq's rind alone, rind getsllvmand its dependencies and build scripts getcranelift.craneliftbuilds moq 15.8% cheaper in CPU thannightly, and its test builds 18.6% cheaper. Test runs cost 26.9% more, and 58 of 6379 tests fail, from the same two causes as before: 27 catch a panic cg_clif builds as an abort, and 31 hitllvm.x86.sse2.pmulhu.w. Under LLVM, 1 test fails.Follow-ups
None.
Models
Size: S
Implementer: Claude Code, claude-opus-5-5, high effort
(Written by Claude Opus 5.5 with high effort)
🤖 Generated with Claude Code
Review
Rewritten by
quest reviewafter each round.01a1b524-ea63-75c2-8a20-9cad88c366a6, round 3The new documentation matches the recorded benchmark results, the configuration-forwarding fix remains intact, and no actionable defects were found in the full branch diff.