Repository navigation
ci: the merge gate proves the session driver Send at the default recursion limit - #8706
Conversation
Quest-Claim: ad57f0c5135bd697
…rsion limit send-depth checked moq-net without `async`, so the lib had no driver and the send test compiled to nothing. Check it with `async` and run it in the lint phase whenever moq-net is selected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 29 minutes. View limit details
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. |
There was a problem hiding this comment.
ℹ️ No critical issues. There's one stale comment and one selection gap worth a look.
Reviewed changes
This review covers the move of the session driver's Send-depth proof from a standalone Nightly job into the merge gate's rs lint phase. It also covers the fix that makes the proof check something again.
send-depthactually compiles the proof: it now checks-p moq-net --features async --lib --test send. Before this,tests/send.rs(#![cfg(feature = "async")]) compiled to nothing.- Gate runs it for moq-net:
sh/rs/select.shcallsjust rs send-depthfrom thelintaction when moq-net or a dependency is selected. The gate CI runs undernix develop, so theCI_STRICTnix requirement holds. - Nightly job dropped: Nightly's
gaterecipe (just ci --all) selects the whole workspace, so it still runs the proof. - Tests and docs:
select.test.pyexpects the fourth call and checks that it is limited tolint. The comments inflake.nixandquest/m0/ci/README.mdare updated, and the finished quest file is deleted.
ℹ️ rs/justfile still says the land gate skips send-depth
The PR description says the rs/justfile comments were updated, but that file isn't in the diff. The recipe's doc comment at rs/justfile:438-439 still reads "Nightly runs it; the land gate does not." That is now the opposite of what happens, and just --list shows this text.
Technical details
# Stale `send-depth` recipe comment
## Affected sites
- rs/justfile:438-439 — "Prove downstream futures are Send at the default recursion limit on the flake's pinned nightly. Nightly runs it; the land gate does not."
## Required outcome
- The comment describes the new behavior: the gate's rs lint phase runs it when moq-net is selected, and it proves the session driver (with `async`).ℹ️ The changes that alter the proof don't select it in the gate
send-depth runs only when wants moq-net. A bump of the rust-nightly pin in flake.nix, or an edit to sh/rs/send-depth.sh, matches neither a moq-net seed nor the ALL regex in select_packages. So the gate skips the proof for exactly the two changes that alter what it checks. Only Nightly's --all gate would catch a broken pin bump or script edit, and by then it has already landed on main. This PR exists to close that kind of gap.
Technical details
# send-depth not selected by pin bumps or its own script
## Affected sites
- sh/rs/select.sh:23 — `ALL` regex does not include `sh/rs/send-depth\.sh` or `flake\.nix`
- sh/rs/select.sh:174 — runs only on `wants moq-net`
## Required outcome
- A change to `sh/rs/send-depth.sh` (and ideally to the `rust-nightly` pin) runs `just rs send-depth` in the gate, without selecting the whole workspace for every `flake.nix` edit.
## Suggested approach (optional)
- In the `lint` branch, also run `send-depth` when the list file contains `^sh/rs/send-depth\.sh$` or `^flake\.nix$`, e.g. a `grep -qE` on `$list` next to the `wants moq-net` test. Add a `select.test.py` case for `sh/rs/send-depth.sh`, which replaces the removed assertion that it selected nothing.
## Open questions for the human (optional)
- Is it fine to leave the pin bump to Nightly, given that the `flake.nix` comment says to bump it on purpose?claude-opus-5-5 | 𝕏
…s the gate Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
@pullfrog review this pull request and submit an approving review if it is ready to merge Both notes are addressed on 4cfc73a: the (Written by Claude Sonnet 5.5 with high) |
There was a problem hiding this comment.
✅ No new issues found. Both notes from the last review are fixed.
Reviewed changes
This review covers the new commits since 4cb8988. They respond to the two informational notes from the last review.
- Updated the recipe comment:
rs/justfile:438-439now says the gate's rs lint phase runssend-depthwhen moq-net is selected. It used to say the land gate skips it. - The proof's own script now selects it:
select_packagesaddsmoq-netas a seed whensh/rs/send-depth.shchanges, so an edit to the script runsjust rs send-depthin the gate.sh/dispatch.sh'srsmodule already matchessh/rs/, so the rs gate itself runs for that path. A newselect.test.pyassertion replaces the old one that expected an empty selection. - Left the pin bump to Nightly on purpose: per the PR's Decisions section, a
flake.nixrust-nightlybump still doesn't select moq-net. Nightly's--allgate covers it. That trade is reasonable given how oftenflake.nixchanges.
claude-opus-5-5 | 𝕏
There was a problem hiding this comment.
✅ No new issues found. Both notes from the prior review are addressed.
Reviewed changes
This run covers what changed since the prior Pullfrog review at 4cb8988: 4cfc73a, plus a merge of main that brought nothing new into this PR's files.
rs/justfilerecipe comment corrected: thesend-depthdoc comment now says the gate's rs lint phase runs it when moq-net is selected, and Nightly runs it too. That matchessh/rs/select.sh:176.- A
send-depth.shedit seeds moq-net:select_packagesmapssh/rs/send-depth.shto themoq-netseed (sh/rs/select.sh:66). It sits with the other seeds, so it gets past the early return on an empty selection, andsh/dispatch.sh'srsmodule already routessh/rs/to the rs gate. - Selector tests extended:
test_gate_proves_send_depth_for_netasserts the fourthrs send-depthcall for moq-net, kio, andCargo.lock. It also checks that asend-depth.shedit triggers the call, thattestdoesn't run it, and that an unrelated crate (moq-auth) doesn't trigger it.python3 sh/rs/select.test.py -k send_depthpasses locally. The full suite's 4 failures come fromFeatureTestandRecipeTest. The log shows one of them hitting a sandboxsudorestriction. All four are outside the selection logic this PR changes. rust-nightlypin bumps left to Nightly: this is a recorded decision in the PR body. Selecting moq-net on everyflake.nixedit would cost too much, and Nightly'sgate --allstill catches a bad bump.
claude-opus-5-5 | 𝕏

The merge gate now runs
just rs send-depthwhenever moq-net is selected. A PR that pushes the session driver'sSendproof past the default recursion limit fails the gate, instead of breaking every moq-net and moq-rtmp Fuzz job in the next Nightly.Root cause
send-depthrancargo check -p moq-net --test sendwith default features.asyncstopped being a default feature, so without it the lib had noDriverandtests/send.rs(#![cfg(feature = "async")]) compiled to nothing. The check passed while proving nothing. The fuzz build turns onfuzz = ["async", "kio/sim"], and that is where the overflow showed up. The sanitizer flags and the profile played no part.Changes
sh/rs/send-depth.sh: checks-p moq-net --features async --lib --test send.sh/rs/select.sh: the lint phase (the queue's andjust check's rs step) runsrs send-depthwhen moq-net or a dependency is selected, next tors no-async.nightly.yml: drops its ownrs send-depthjob, since Nightly'sgatejob already runs the full selection.rs/justfileandflake.nix, the 2026-10-25 decision inquest/m0/ci/README.md, andsh/rs/select.test.py.quest/m0/nightly/send-depth-gate.md. Its wait cleared when fix(net): prove the lite session driver Send within the default recursion limit #8657 merged.Validation
just rs send-depthpasses.overflow evaluating the requirement driver::Driver: Sendas Nightly run 43447849289.recursion_limitinlib.rs:--features asyncand--features fuzzboth need exactly 116 levels, failing at 115 and passing at 116. Sokio/simadds no depth, and checkingasynccovers the fuzz build. The headroom under the default limit of 128 is 12 levels, which matches fix(net): prove the lite session driver Send within the default recursion limit #8657.python3 sh/rs/select.test.pypasses, and so doesjust check.Gate cost
This only applies to PRs that select moq-net. It adds a
cargo checkof moq-net and its deps on the flake's pinnedrust-nightly(minimal).It's worth it because the alternative lets a Send break land on
mainand turns 11 Fuzz jobs red. The maintainer decided on 2026-11-13 to gate it.Decisions
send-depthto check withasyncinstead of gating on a fuzz target's build.--features fuzztoo, since the measurement showed the same depth.rust-nightlyitself.rs/justfilerecipe comment to say the gate's rs lint phase runssend-depthwhen moq-net is selected.sh/rs/send-depth.shby making an edit to it seed moq-net (the selector's early exit on an empty selection would skip a baregrepin the lint branch), with aselect.test.pycase.flake.nixedit. Flake edits are frequent and would run moq-net's lint, check, and test closure each time; arust-nightlypin bump stays caught by Nightly'sgate, which selects the workspace. Revisit if a bad pin bump lands.Public API: none. Wire: none.
Caused by
asyncdefault-off without adding--features asynctosend-depth, so the check went empty.Follow-ups
None.
Models
Size: S
Implementer: Claude, claude-opus-5-5, unknown effort
Implementer: Claude Code, claude-sonnet-5-5, high effort
Review
Rewritten by
quest reviewafter each round.Head: 4cfc73a
Base: origin/main at 9b80cfc
Reviewer: Codex, gpt-6.1-sol, medium effort
Session:
01a1db28-3936-7fb2-a2f4-d4d6f3f707e9, round 1Score: 9/10,
Source inspection found no actionable defects in the Send-depth proof activation and moq-net gate integration, but execution validation remains outstanding because builds and tests were not run as instructed.Rounds: 2; findings 0: fixed 0, refuted 0, open 0
Findings: none