Skip to content

test(net): pin handoff scenario 16316 as a plain test, and sweep 20,000 nightly - #8621

Merged
kixelated merged 2 commits into
mainfrom
quest/m2/cluster-routes/handoff-revival
Nov 13, 2026
Merged

kixelated merged 2 commits into
mainfrom
quest/m2/cluster-routes/handoff-revival

Conversation

@kixelated

@kixelated kixelated commented Nov 13, 2026 •

Copy link
Copy Markdown
Collaborator

Finishes quest/m2/cluster-routes/handoff-revival.md and deletes it.

Summary

The quest's premise was a misread. At 688312b9eb, scenario 16316 of sweep_handoff fails 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-line was.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 presented live/ at live/b widens 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 existing sweep nextest profile.
  • Deletes the quest. Nothing linked to it.

Public API: none. Wire: none.

Validation

  • Reproduced at 688312b9eb in a detached checkout: the real sweep_handoff raised to 16,317 scenarios fails at scenario 16316 on false_ends. A step recorder replaying churn found no revival in scenarios 0 to 16,316 there or on today's head.
  • Shrank 16316 at 688312b9eb by 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 sees live/b start, go offline, start, and END while the origin still has it. Then it sees live start, which is a different claim, so no revival. The new test is that case with redundant deliveries and an intermediate watch dropped.
  • On today's head with fix(net): widening an interest ends no live claim #8540's line reverted: the new test, fix(net): widening an interest ends no live claim #8540's test, and sweep_handoff at 16,317 scenarios all fail, the sweep at scenario 16316 on false_ends. With the line restored, all pass.
  • Goal: MOQ_ROUTE_SCENARIOS=20000 over every route::tests::handoff:: test in release: 33 passed, both sweeps included (53 s).
  • The nightly line ran as written under the script's release-with-checks build (MOQ_ROUTE_SCENARIOS=300): 3 sweeps passed under -P sweep.
  • just check: everything passed except 4 moq-bench config::tests that 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 touch moq-bench.

Decisions

  • Recorded by this session: the quest is finished rather than rewritten. Its Goal (no revival over 20,000 scenarios, and 16316 as a plain test) holds, and the bug behind 16316 was the false END fix(net): widening an interest ends no live claim #8540 already fixed. ✅ delete the quest (rejected: rewrite it to hunt a revival no sweep shows).
  • Recorded by this session: ✅ keep the 20,000-scenario handoff sweeps in nightly, about a minute of runner time (rejected: leave them to manual runs, which is how 16316 sat unnoticed).

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 review after each round.

  • Head: 3d5ee10

  • Base: origin/main at 6aa4f9c

  • Reviewer: Codex, gpt-6.1-sol, high effort

  • Session: 01a1d45f-0fba-77a0-a83d-1ac0ef6e4e38, round 1

  • Score: 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

…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>
@kixelated kixelated changed the title The handoff sweep revives no ended claim test(net): pin handoff scenario 16316 as a plain test, and sweep 20,000 nightly Nov 13, 2026
@kixelated
kixelated marked this pull request as ready for review November 13, 2026 10:07
@kixelated
kixelated enabled auto-merge November 13, 2026 10:07

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 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_up uses the same Sim calls as its #8540 sibling. In this test the relay↔origin session flaps instead of the client↔relay session, and the test asserts one presentation at live/ with no false END.
  • Nightly handoff sweep: test/route-sweep.sh now runs the route::tests::handoff::sweep_* tests under the existing sweep nextest profile, with MOQ_ROUTE_SCENARIOS set to 20,000 by default. The -P sweep flag passes through just rs test to cargo nextest run. The filter also matches sweep_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.md is deleted, and the nightly comment says the handoff sweeps now run there.

Pullfrog  | View workflow run | Using claude-opus-5-5 | 𝕏

@moq-bot
moq-bot Bot added this pull request to the merge queue Nov 13, 2026
@coderabbitai

coderabbitai Bot commented Nov 13, 2026

Copy link
Copy Markdown
Contributor

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

The 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: Minimal · up to 3d5ee

This change adds test coverage and larger nightly handoff sweeps without altering runtime behavior. No actionable merge risk remains.

Pre-merge checks: Passed 4

Check name Status Explanation
Title check Passed The title names the two main changes: a plain test pinning handoff scenario 16316 and a nightly sweep raised to 20,000 scenarios. The changeset adds that test, changes the nightly workflow and script,…
Description check Passed The description states the purpose of the PR. It explains the misread premise behind the quest and the new widening test. It describes the nightly 20,000-scenario sweep, the deletion of the quest docu…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Title check

Explanation

The title names the two main changes: a plain test pinning handoff scenario 16316 and a nightly sweep raised to 20,000 scenarios. The changeset adds that test, changes the nightly workflow and script, and deletes the quest document. The title uses the test(net) prefix and states the primary changes concisely.

Full details: Description check

Explanation

The description states the purpose of the PR. It explains the misread premise behind the quest and the new widening test. It describes the nightly 20,000-scenario sweep, the deletion of the quest document, and the validation runs. This matches the changeset.

Finishing Touches

Simplify code

  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

Share

Recent review info

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 561810d6-252a-4ed1-bc68-3802f700de74
Commits

Reviewing files that changed from the base of the PR and between e7abef8 and 3d5ee10.

Files selected for processing: 4

  • .github/workflows/nightly.yml
  • quest/m2/cluster-routes/handoff-revival.md
  • rs/moq-net/src/route/tests/handoff.rs
  • test/route-sweep.sh
Files with no reviewable changes: 1

  • quest/m2/cluster-routes/handoff-revival.md

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 3 remain after this review.

@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Nov 13, 2026
@moq-bot

moq-bot Bot commented Nov 13, 2026

Copy link
Copy Markdown
Contributor

quest land watch: the merge queue removed this pull request at 3d5ee10 because its merge_group build failed (failed_checks).

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.

Queue / Queue (job) failure at step Check:

…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)

@moq-bot

moq-bot Bot commented Nov 13, 2026

Copy link
Copy Markdown
Contributor

codex, gpt-6.1-sol, medium effort land fixer note:

The queue failure reproduces on base alone, without this PR. The PR changes routing tests and nightly sweep coverage; it does not modify the memlock test or relay startup.

Failure log lines 10300–10320 include:

FAIL moq-relay::integration runtime_uring::uring_startup_reports_the_memlock_limit
panicked at rs/moq-relay/tests/integration/runtime_uring.rs:1328:36:
a worker needs locked memory: ()

The base-only test fails with that same message using nix develop --command just rs test -p moq-relay --features io-uring --test integration -E 'test(=runtime_uring::uring_startup_reports_the_memlock_limit)'. The assertion expects startup to fail after setting RLIMIT_MEMLOCK to zero, but startup succeeds. Changing that expectation or startup behavior requires review. The PR branch remains at its pinned head.

Validation on a clean scratch merge with base: nix develop --command just ci base exits 100 on the same memlock assertion. Rust lint, JavaScript checks and tests, and the other repository checks completed; the Rust test runner stopped after the memlock failure. No source changes or PR branch commits were made.

(written by codex, gpt-6.1-sol, medium effort)

@moq-bot

moq-bot Bot commented Nov 13, 2026

Copy link
Copy Markdown
Contributor

codex, gpt-6.1-sol, medium effort land fixer: Base alone fails &#96;nix develop --command just rs test -p moq-relay --features io-uring --test integration -E 'test(=runtime_uring::uring_startup_reports_the_memlock_limit)'&#96;: &#96;a worker needs locked mem. Recommendation: Review and correct the base memlock test assumption or relay startup contract for this kernel, then rerun the landing gate for the unchanged PR.

        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)

@kixelated
kixelated added this pull request to the merge queue Nov 13, 2026
Merged via the queue into main with commit ae0880e Nov 13, 2026
6 checks passed
@kixelated
kixelated deleted the quest/m2/cluster-routes/handoff-revival branch November 13, 2026 14:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant