Repository navigation
test(net): pin handoff scenario 16316 as a plain test, and sweep 20,000 nightly - #8621
Conversation
Quest-Claim: 3365d83b78bc3708
…00 nightly Scenario 16316 of sweep_handoff failed its false-END assertion, not the revival one, at 688312b. #8540 fixed it: undoing that fix's one line brings the failure back. The shrunk case is now a plain test, and nightly runs the handoff sweeps over 20,000 scenarios. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
I reviewed the shrunk regression test, the nightly sweep wiring, and the quest deletion.
- Scenario 16316 pinned:
widening_while_the_relay_lost_the_origin_moves_the_claim_upuses the sameSimcalls as its #8540 sibling. In this test the relay↔origin session flaps instead of the client↔relay session, and the test asserts one presentation atlive/with no false END. - Nightly handoff sweep:
test/route-sweep.shnow runs theroute::tests::handoff::sweep_*tests under the existingsweepnextest profile, withMOQ_ROUTE_SCENARIOSset to 20,000 by default. The-P sweepflag passes throughjust rs testtocargo nextest run. The filter also matchessweep_requests_reach_a_quiet_origin, which runs a fixed 300 seeds and ignores the variable. Running it again is harmless. - Quest removed:
quest/m2/cluster-routes/handoff-revival.mdis deleted, and the nightly comment says the handoff sweeps now run there.
claude-opus-5-5 | 𝕏
|
No actionable comments were generated in the recent review. WalkthroughThe change adds a handoff test that checks claim presentation after a client widens its interest while the relay is disconnected from the origin. It removes a planning document about a reported claim-revival scenario. The route sweep script now uses release mode with the sweep profile and defaults to 20,000 scenarios. The nightly workflow comment states that nightly runs use 20,000 scenarios and PR runs use 150. Merge Risk:
|
|
quest land watch: the merge queue removed this pull request at 3d5ee10 because its The land fixer works on it in the background, and the watcher re-enqueues it at the back of the queue once it is fixed or judged flaky, or hands it back here with what it needs.
…p-browser test:
@moq/interop-browser test: ::endgroup::
@moq/interop-browser test:
@moq/interop-browser test: ::endgroup::
@moq/interop-browser test:
@moq/interop-browser test: 25 pass
@moq/interop-browser test: 0 fail
@moq/interop-browser test: 184 expect() calls
@moq/interop-browser test: Ran 25 tests across 7 files. [5.23s]
@moq/interop-browser test: Exited with code 0
js: test finished in 44.55s
##[endgroup]
##[group]check markdown
##[endgroup]
##[group]check gh
python3 sh/version.py
shared version: disabled until the release cut runs just version
actionlint
zizmor --offline --quiet .github
�[33m WARN�[0m �[2mzizmor::registry::input�[0m�[2m:�[0m failed to validate file://.github/workflows/dependabot.yml as dependabot config: input does not match expected validation schema
�[32mNo findings to report. Good job!�[39m (�[1m�[93m29�[39m ignored, �[93m118�[39m suppressed�[0m)
sh/gh/alert.sh check-coverage
alert.yml watches all 34 alertable workflows
bun test ./sh/gh/alert.test.ts
bun test v1.4.2 (744846f84)
##[group]sh/gh/alert.test.ts:
(pass) Discord alert policy for pull_request [0.18ms]
(pass) Discord alert policy for pull_request_target [0.10ms]
(pass) Discord alert policy for push [0.16ms]
(pass) Discord alert policy for schedule [0.01ms]
(pass) Discord alert policy for workflow_dispatch [0.02ms]
(pass) Discord alert policy for workflow_run [0.03ms]
(pass) cron workflows only alert on scheduled failures [8.13ms]
(pass) ordinary CI never subscribes to Discord alerts [0.08ms]
(pass) alert coverage excludes CI-only workflows and retains release and nightly workflows [41.37ms]
##[endgroup]
9 pass
0 fail
232 expect() calls
Ran 9 tests across 1 file. [55.00ms]
bun sh/gh/check-runs.ts
python3 sh/gh/test-inventory.py
python3 bench/relay.test.py
.......
----------------------------------------------------------------------
Ran 7 tests in 1.484s
OK
##[endgroup]
##[group]test gh
python3 sh/version.test.py
.......
----------------------------------------------------------------------
Ran 7 tests in 17.756s
OK
python3 sh/local.test.py
.........
----------------------------------------------------------------------
Ran 9 tests in 0.341s
OK
python3 test/smoke/runner.test.py
.......
----------------------------------------------------------------------
Ran 7 tests in 1.585s
OK
python3 sh/coverage.test.py
......
----------------------------------------------------------------------
Ran 6 tests in 2.425s
OK
python3 sh/size/report.test.py
.............
----------------------------------------------------------------------
Ran 13 tests in 0.651s
OK
python3 sh/size/release.test.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.208s
OK
python3 sh/size/nightly.test.py
.
----------------------------------------------------------------------
Ran 1 test in 0.214s
OK
python3 bench/compare.test.py
..................
----------------------------------------------------------------------
Ran 18 tests in 0.323s
OK
python3 bench/summary.test.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.075s
OK
python3 bench/profile.test.py
..................................s..
----------------------------------------------------------------------
Ran 37 tests in 2.538s
OK (skipped=1)
python3 bench/fanout.test.py
....
----------------------------------------------------------------------
Ran 4 tests in 0.005s
OK
python3 bench/lock.test.py
....
----------------------------------------------------------------------
Ran 4 tests in 0.232s
OK
python3 bench/local.test.py
./nix/store/xahxrjs30p3mw0a42bqg9ikgkikskw8m-python3-3.14.8/lib/python3.14/unittest/case.py:704: ResourceWarning: unclosed file <_io.TextIOWrapper name=4 encoding='UTF-8'>
function, args, kwargs = self._cleanups.pop()
ResourceWarning: Enable tracemalloc to get the object allocation traceback
.
----------------------------------------------------------------------
Ran 2 tests in 0.204s
OK
python3 sh/gh/gst-formula.test.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.016s
OK
python3 sh/changed.test.py
..................
----------------------------------------------------------------------
Ran 18 tests in 4.942s
OK
python3 sh/large-files.test.py
.......
----------------------------------------------------------------------
Ran 7 tests in 4.260s
OK
python3 sh/migrate.test.py
.....
----------------------------------------------------------------------
Ran 5 tests in 1.151s
OK
python3 sh/text.test.py
........
----------------------------------------------------------------------
Ran 8 tests in 1.260s
OK
python3 sh/coverage-tables.test.py
........
----------------------------------------------------------------------
Ran 8 tests in 0.516s
OK
python3 sh/dispatch-query.test.py
........................................
----------------------------------------------------------------------
Ran 40 tests in 42.718s
OK
python3 sh/gh/test-inventory.test.py
...................
----------------------------------------------------------------------
Ran 19 tests in 1.380s
OK
bun test ./sh/gh/setup.test.ts
bun test v1.4.2 (744846f84)
##[group]sh/gh/setup.test.ts:
(pass) check queries before setup and keeps its check name [0.50ms]
(pass) check keeps release checks on a hosted runner [0.02ms]
(pass) self-hosted queue jobs use local caches without R2 credentials [0.80ms]
(pass) one job runs one CI dispatch with one checkout and cache restore [0.07ms]
(pass) nightly fuzzing restores and saves minimized target-specific corpora [0.79ms]
##[endgroup]
5 pass
0 fail
161 expect() calls
Ran 5 tests across 1 file. [6.00ms]
bun sh/gh/queue.test.ts
queue event policy passed
python3 sh/gh/install-formula.test.py
.
----------------------------------------------------------------------
Ran 1 test in 0.011s
OK
sh/gh/release.test.sh
release.sh ffi-unreleased: ok
python3 sh/gh/ffi.test.py
.............
----------------------------------------------------------------------
Ran 13 tests in 7.281s
OK
bun test ./sh/gh/ffi.test.ts ./sh/gh/cpp.test.ts ./sh/gh/publish.test.ts
bun test v1.4.2 (744846f84)
##[group]sh/gh/ffi.test.ts:
(pass) shared default builds cover each consumer exactly once [3.14ms]
(pass) wrapper gates preserve trusted tag inputs and inspect only their publisher [1.08ms]
(pass) privileged workflow_run jobs require a protected release tag before running its code [1.88ms]
(pass) Nightly and alert chains retain packaged outputs with one shared producer [6.13ms]
##[endgroup]
##[group]sh/gh/cpp.test.ts:
(pass) OBS builds on branch dry runs, and on tags only after the C++ release succeeds [0.76ms]
##[endgroup]
##[group]sh/gh/publish.test.ts:
(pass) no workflow that runs as main names the publish Environment [12.15ms]
(pass) tag runs reach their publishers without workflow_run [0.88ms]
(pass) release dispatches name a release ref [0.31ms]
(pass) Python release retries share the release ref and FFI gates with pushes [0.43ms]
##[endgroup]
9 pass
0 fail
157 expect() calls
Ran 9 tests across 3 files. [127.00ms]
python3 sh/rs/package-rename.test.py
using deb packager...
created package: /var/cache/github-runner-work/_temp/tmpg5uwywq1/moq-nfpm.deb
using deb packager...
created package: /var/cache/github-runner-work/_temp/tmpg5uwywq1/moq-transition.deb
using rpm packager...
created package: /var/cache/github-runner-work/_temp/tmpg5uwywq1/moq-nfpm.rpm
.
----------------------------------------------------------------------
Ran 1 test in 1.846s
OK
python3 sh/dart/build.test.py
..
----------------------------------------------------------------------
Ran 2 tests in 1.370s
OK
python3 sh/kt/gradle.test.py
.....
----------------------------------------------------------------------
Ran 5 tests in 2.453s
OK
python3 sh/rs/select.test.py
..................sh/dispatch.sh: line 384: warning: run_pending_traps: bad value in trap_list[15]: 0x1
error: recipe `test` was terminated on line 94 by signal 15
##[endgroup]
##[error]ci: test rs failed
##[error]Process completed with exit code 100.
##[group]Run actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9
with:
name: cargo-timings
path: target/cargo-timings/cargo-timing-*.html
if-no-files-found: ignore
retention-days: 14
compression-level: 6
overwrite: false
include-hidden-files: false
archive: true
env:
BASE: 6aa4f9c1cad482aa86adcf3cf26bd7779697a01a
CHECK_FAIL_FAST: 1
NEXTEST_TEST_THREADS: 24
MBX_CACHE_LINKS: 1
MBX_REMOTE_URL:
##[endgroup]
With the provided path, there will be 3 files uploaded
Artifact name is valid!
Root directory input is valid!
Uploading artifact: cargo-timings.zip
Beginning upload of artifact content to blob storage
Uploaded bytes 200919
Finished uploading artifact content to blob storage!
SHA256 digest of uploaded artifact is 7faccb23b97cbe1eff695551bd2f8492de3c15cfad460bf40135de2a5f35ab1b
Finalizing artifact upload
Artifact cargo-timings successfully finalized. Artifact ID 14028022242
Artifact cargo-timings has been successfully uploaded! Final size is 200919 bytes. Artifact ID is 14028022242
Artifact download URL: https://github.com/moq-dev/moq/actions/runs/43406967200/artifacts/14028022242
Post job cleanup.
##[start-action display=Run jdx/mr-boxington-action@88acf2bb50552c7c508cbac13e5f8c576b95b1de;id=__868d46e4-590b-48f3-9bce-dc24f8eaea31.mbx]
##[end-action id=__868d46e4-590b-48f3-9bce-dc24f8eaea31.mbx;outcome=skipped;conclusion=skipped;duration_ms=0]
Post job cleanup.
[command]/nix/store/i2m3w4ly2w6grrmk1j59rb7zp09bssia-git-2.56.0/bin/git version
git version 2.56.0
Temporarily overriding HOME='/var/cache/github-runner-work/_temp/d4dbec41-0b4b-4ac5-9e39-3f8ccc7c7c3c' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
[command]/nix/store/i2m3w4ly2w6grrmk1j59rb7zp09bssia-git-2.56.0/bin/git config --global --add safe.directory /var/cache/github-runner-work/moq/moq
Removing SSH command configuration
[command]/nix/store/i2m3w4ly2w6grrmk1j59rb7zp09bssia-git-2.56.0/bin/git config --local --name-only --get-regexp core\.sshCommand
[command]/nix/store/i2m3w4ly2w6grrmk1j59rb7zp09bssia-git-2.56.0/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
Removing HTTP extra header
[command]/nix/store/i2m3w4ly2w6grrmk1j59rb7zp09bssia-git-2.56.0/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
[command]/nix/store/i2m3w4ly2w6grrmk1j59rb7zp09bssia-git-2.56.0/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
Removing includeIf entries pointing to credentials config files
[command]/nix/store/i2m3w4ly2w6grrmk1j59rb7zp09bssia-git-2.56.0/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
[command]/nix/store/i2m3w4ly2w6grrmk1j59rb7zp09bssia-git-2.56.0/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
A job completed hook has been configured by the self-hosted runner administrator
##[group]Run '/nix/store/h37f32kz1kajxkc8x86sq0pvi7k8sm60-ci-cache-gc.sh/bin/ci-cache-gc.sh'
shell: /nix/store/lfm00fnq66xfgbn099vqckabyl5jllz6-bash-interactive-5.3p20/bin/bash --noprofile --norc -e -o pipefail {0}
##[endgroup]
evicted 247 objects and 19 action results (4.6 GiB logical); 49.9 GiB logical remain
dropped 2 stale checkout records
dropped 13 session event streams
removed 0 learned incremental units and 2 checkout directories (3.7 KiB logical); 1 units (221.0 MiB logical) remain
evicted 0 objects and 0 action results (0 B logical); 49.9 GiB logical remain
removed 3 target directories (28.8 GiB logical, 2 abandoned and 1 live); 3.7 GiB logical remain
Cleaning up orphan processes
(written by quest land watch) |
|
codex, gpt-6.1-sol, medium effort land fixer note:
(written by codex, gpt-6.1-sol, medium effort) |
|
codex, gpt-6.1-sol, medium effort land fixer: FAIL [ 0.073s] ( 9721/13006) moq-relay::integration runtime_uring::uring_startup_reports_the_memlock_limit
stdout ───
running 1 test
running 1 test
test runtime_uring::uring_startup_reports_the_memlock_limit ... FAILED
failures:
---- runtime_uring::uring_startup_reports_the_memlock_limit stdout ----
thread 'runtime_uring::uring_startup_reports_the_memlock_limit' (550479) panicked at rs/moq-relay/tests/integration/runtime_uring.rs:1328:36:
a worker needs locked memory: ()
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
failures:
runtime_uring::uring_startup_reports_the_memlock_limit
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 153 filtered out; finished in 0.06s
(written by codex, gpt-6.1-sol, medium effort) |

Finishes quest/m2/cluster-routes/handoff-revival.md and deletes it.
Summary
The quest's premise was a misread. At
688312b9eb, scenario 16316 ofsweep_handofffails the sweep's false-END assertion (handoff.rs:1139), not the revival one on the line above it, and no scenario up to it revives. moq-dev/moq#8540 (widening an interest ends no live claim) fixed that false END the next day: undoing its one-linewas.presented ||fix on today's head brings scenario 16316's failure back.widening_while_the_relay_lost_the_origin_moves_the_claim_up: scenario 16316, shrunk to a plain test. A client presentedlive/atlive/bwidens to everything while its relay's session to the origin flaps and the claim's seed changes. It is a different path from fix(net): widening an interest ends no live claim #8540's own test, where the client's session flaps instead.test/route-sweep.sh(nightly) also runs the router's handoff sweeps over 20,000 fixed scenarios. PRs still run 150. It reuses the existingsweepnextest profile.Public API: none. Wire: none.
Validation
688312b9ebin a detached checkout: the realsweep_handoffraised to 16,317 scenarios fails atscenario 16316onfalse_ends. A step recorder replayingchurnfound no revival in scenarios 0 to 16,316 there or on today's head.688312b9ebby removing steps one at a time while the false END remained. It leaves 15 steps over one relay, the second origin, and the client. The client's reader seeslive/bstart, go offline, start, and END while the origin still has it. Then it seeslivestart, which is a different claim, so no revival. The new test is that case with redundant deliveries and an intermediate watch dropped.sweep_handoffat 16,317 scenarios all fail, the sweep atscenario 16316onfalse_ends. With the line restored, all pass.MOQ_ROUTE_SCENARIOS=20000over everyroute::tests::handoff::test in release: 33 passed, both sweeps included (53 s).MOQ_ROUTE_SCENARIOS=300): 3 sweeps passed under-P sweep.just check: everything passed except 4moq-benchconfig::teststhat timed out. Their stderr shows each spent its whole budget waiting for mbx's machine-wide scheduler capacity (host load average 25 to 45 from other sessions), and they time out the same way run alone. This branch doesn't touchmoq-bench.Decisions
Caused by
No single PR: this PR changes no behavior, and moq-dev/moq#8540 already fixed the false END it pins.
Follow-ups
None.
Models
Size: M
Implementer: Claude Code, claude-opus-5-5, unknown effort (iterate, M). Took over an interrupted session's uncommitted work (
refs/salvage/pr8621) and kept all of it: the test, the nightly line, its comment, and the quest deletion.🤖 Generated with Claude Code
Review
Rewritten by
quest reviewafter each round.Head: 3d5ee10
Base: origin/main at 6aa4f9c
Reviewer: Codex, gpt-6.1-sol, high effort
Session:
01a1d45f-0fba-77a0-a83d-1ac0ef6e4e38, round 1Score: 9/10,
The changes are focused and consistent with existing helpers, with no actionable defects found, though tests were not run as instructed.Findings: none