Skip to content

test: close the resolve quest's cross-language lifecycle checks - #7753

Merged
moq-bot[bot] merged 3 commits into
mainfrom
quest/m1/api-audit/resolve/README
Nov 4, 2026
Merged

moq-bot[bot] merged 3 commits into
mainfrom
quest/m1/api-audit/resolve/README

Conversation

@kixelated

@kixelated kixelated commented Nov 3, 2026 •

Copy link
Copy Markdown
Collaborator

Implements Two broadcast resolutions and deletes the quest.

Every child has landed (Rust moq-dev/moq#7172, moq-dev/moq#7173; JS moq-dev/moq#7189; bindings moq-dev/moq#7193; callers moq-dev/moq#7192; later moq-dev/moq#7476, moq-dev/moq#7489, moq-dev/moq#7724). This PR does the README's own remaining work: the lifecycle and churn checks across languages, the Nix gate, and all-language interop.

Lifecycle and churn audit

Check Rust moq-net JS @moq/net Bindings
Request finds an unwatched peer broadcast, lite-05/06/07-wip tests/integration/lazy_discovery.rs requesting_an_unwatched_path_discovers_its_instance new integration.test.ts a request on an unwatched path resolves it, or fails Unroutable once the peer syncs (real lite sessions; before, only simulated wire) inherit moq-net
Unroutable only after sync lazy_discovery.rs an_unwatched_missing_path_is_unroutable_after_sync origin-request.test.ts a pending request fails Unroutable once its discovery syncs without a route, plus the new real-session test inherit
Retry route churn, never retarget a resolved instance origin.rs churn tests, route_change.rs better_route_restarts a pending request retries a route gap and never retargets after resolving inherit
Discovery retained, then released lazy_discovery.rs (release after drop) a request owns its scoped discovery until closed inherit
Pinned follow returns follow.rs announced_pinned_hands_out_its_instance_after_a_gap an instance-pinned follower resumes when its instance returns after a gap ffi/C pin tests
No follower on a blind peer n/a (Rust has no blind request) only a request can use a session without discovery, integration equivalent n/a
Selected handler's refusal is terminal, incl. a dropped Prepared handler_rejection_is_final, refusal_never_falls_through, dropping_a_prepared_claim_answer_refuses_the_request a follower retains a selected handler's explicit unroutable refusal, prepared-close tests Go, Python prepared-answer refusal tests

moq-ffi request/follow and moq-c run_request/run_follow delegate to moq-net and add only cancellation and error mapping, which their own tests cover.

Changes

  • JS test: a real-session check over lite-05/06/07-wip that a request with no watcher resolves a served path and fails Unroutable on a missing one once the peer syncs, mirroring Rust's lazy discovery tests.
  • JS doc and test: the audit found one cross-language difference. A Rust origin with no session answers for its own table at once (a request with no route fails Unroutable; poll_synced: "routes published on this origin itself never wait"). A JS origin with no session attached keeps a plain request pending (synced() is false when total === 0), since it usually fronts a reconnecting connection. Consumer.request's doc said it fails "once every session's discovery has synced", which reads as vacuously true with no session; it now says it waits with no session attached, and a unit test pins that.
  • moq-c test helper: request_broadcast retried Unroutable in a sleep loop, citing an asynchronous attach that no longer exists (moq_publication_announce announces synchronously). It now requests once, so a regression in the owned retry can no longer hide behind it.
  • Migration notes (from pullfrog's review): the ## Unreleased notes still said a request watches nothing and told callers to hold an announced() stream over the path first, which is the racy two-step this epic removed. None of the rename PRs had written notes. Every language's MIGRATE.md (moq-net, @moq/net, @moq/watch, moq-ffi, moq-c, c/moq, Python, Swift, Kotlin, Dart, Go, plus the moq-mux sample) now says request(path, instance) owns its path's discovery and fails Unroutable only after sync. Each also covers follow(path, instance) and the renames, with the removed names only on the old side: request_broadcast, routed, routed_broadcast, announced_broadcast/AnnouncedBroadcast, request(path, { announced: true }), and watch's announced. No CHANGELOG Unreleased entry had the stale text, so the CHANGELOGs are unchanged.
  • Quest: deletes quest/m1/api-audit/resolve/README.md and its link from the api-audit epic.

Impact

  • Public API: none. JS doc wording and migration notes only; behavior unchanged.
  • Wire: none.

Choices made without asking

  • Kept JS's no-session wait rather than matching Rust's immediate Unroutable, and documented it. Matching Rust would fail @moq/watch's plain request (js/watch/src/broadcast.ts) whenever it runs before its connection attaches or between reconnects. The alternative is to make JS conclude absence with no session, as Rust does; say so if you want that instead.
  • Did not add a Rust test for dropping a still-pending request releasing discovery: Requesting holds its Interest and Follow by value, so release is plain RAII, and a pending lite request cannot outlive its peer's sync to observe it.

Checks

All on this branch (origin/main at 2a0fcb6):

  • quest gate just test interop --all: passed (every client: Rust, JS, Python, Go, C, C++).
  • quest gate just gate (just ci --all, every module): 47 module steps passed; check flake failed building nixpkgs' github-runner image with unshare: write failed /proc/self/uid_map: Operation not permitted (this host sets apparmor_restrict_unprivileged_userns=1). just gate flake in a clean origin/main worktree fails identically on the same derivation, so it is pre-existing and already tracked by quest/m0/ci/userns-uid-map.md. This diff does not select the flake module.
  • quest gate just check origin/main on the head after the edits (the full gate started before them): passed, including all 139 moq-c test:: cases with the single-shot helper and js/net's suites.
  • quest gate just check origin/main on b3d61b7 (the migration-notes commit): passed, exit 0.
  • bun test src/integration.test.ts -t "unwatched path" (3 versions) and bun test src/origin-request.test.ts (42): passed.

Review

Round 1 (new session): Codex (quest review), gpt-6.1-sol, medium effort, on head b3d61b7 against origin/main c0d6cc4. No findings. (The earlier round on 9650fa5 also had no findings.)

Online: pullfrog's migration-notes finding is fixed in b3d61b7; the OpenAI review had no findings.

Suggested follow-ups

None. The one pre-existing failure is already quest/m0/ci/userns-uid-map.md.

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

kixelated and others added 2 commits November 3, 2026 12:32
JS gains a real-session check over lite-05/06/07-wip that a request on an
unwatched path resolves it, or fails Unroutable once the peer syncs, as
Rust's lazy discovery tests do. A JS request with no session attached
waits rather than concluding absence; document and test it, since a Rust
origin answers for its own table at once. The C test helper no longer
retries Unroutable, which hid whether the owned retry worked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated kixelated changed the title Two broadcast resolutions test: close the resolve quest's cross-language lifecycle checks Nov 3, 2026
@kixelated
kixelated marked this pull request as ready for review November 3, 2026 20:52
@coderabbitai

coderabbitai Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You'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 1 minute.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

Learn how review limits work.

Review configuration:

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: 20941136-6c6a-4a8a-8301-f5858733347e
Commits

Reviewing files that changed from the base of the PR and between 7b4f531 and b3d61b7.

Files selected for processing: 18
  • c/moq/MIGRATE.md
  • dart/moq/MIGRATE.md
  • go/wrapper/MIGRATE.md
  • js/net/MIGRATE.md
  • js/net/src/integration.test.ts
  • js/net/src/origin-request.test.ts
  • js/net/src/origin.ts
  • js/watch/MIGRATE.md
  • kt/moq/MIGRATE.md
  • py/moq-rs/MIGRATE.md
  • quest/m1/api-audit/README.md
  • quest/m1/api-audit/resolve/README.md
  • rs/moq-c/MIGRATE.md
  • rs/moq-c/src/test.rs
  • rs/moq-ffi/MIGRATE.md
  • rs/moq-mux/MIGRATE.md
  • rs/moq-net/MIGRATE.md
  • swift/MIGRATE.md
  • 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

CodeRabbit Verify

  • Run CodeRabbit Verify to test the changes in this pull request.

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Automated review by review (OpenAI)

Reviewed head 9650fa5 against base 7b4f531.

No actionable findings in the lifecycle checkpoint. The JS no-session documentation matches the existing sync behavior; the added tests exercise discovery and absence over Lite 05/06/07, and the C helper's single request still drains the terminal callback. The quest removal is consistent with the landed child work and recorded lifecycle coverage.

Static GitHub-only review; I did not run the tests or interop. The reported full gate had a Nix user-namespace failure also tracked separately, so this review does not independently establish a green full gate.

@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 critical issues. The new JS checks and the moq-c helper simplification hold up; one documentation gap is worth a look.

Reviewed changes

  • JS real-session lazy discovery test: adds a lite-05/06/07-wip test where a request on an unwatched path resolves a served broadcast and fails Unroutable on a missing one after the peer syncs, mirroring Rust's lazy_discovery.rs.
  • JS no-session wait test: pins that a plain request with no session attached stays pending, matching OriginState.synced (total === 0) and the new Consumer.request wording.
  • Consumer.request doc: now says absence needs at least one attached session, and that with none it waits. This matches synced() and blind().
  • moq-c request_broadcast: drops its sleep-retry loop for a single-shot request_once. moq_publication_announce inserts the route synchronously under the table lock before the spawned request task polls, and every call site publishes on the same local origin first, so no retry is needed.
  • Quest: deletes quest/m1/api-audit/resolve/README.md and its link from the api-audit epic.

ℹ️ The resolve audit left the unreleased migration notes describing the old request behavior

The closing quest requires migration notes for its breaks, but the ## Unreleased sections still tell users a request watches nothing and that they must hold an announced() stream over the path first. That is the racy two-step this quest removed, and several entries also name APIs that no longer exist (request_broadcast, routed_broadcast, announced_broadcast, request(path, { announced: true })). A user migrating on these notes would reintroduce the race the new Consumer.request doc says is gone. Since this PR declares the cross-language lifecycle audit complete, the migration sweep belongs here rather than a follow-up.

Technical details
# Stale request migration notes

## Affected sites
- `rs/moq-net/MIGRATE.md:278-280` — "`request_broadcast` watches nothing" and "hold an `announced()` stream while requesting"; also names removed `routed`/`routed_broadcast`/`announced_broadcast`.
- `js/net/MIGRATE.md:219-222` — "A `consume` origin stays empty until a reader watches it ... or `request(path, { announced: true })`" and "Code that called `request(path)` expecting a route without watching should hold an `announced(scope)` stream."
- `rs/moq-ffi/MIGRATE.md:133-134`, `rs/moq-c/MIGRATE.md:107-108`, `c/moq/MIGRATE.md:65-66`, `py/moq-rs/MIGRATE.md:107-108`, `swift/MIGRATE.md:102-103`, `kt/moq/MIGRATE.md:110-111`, `dart/moq/MIGRATE.md:119-120`, `go/wrapper/MIGRATE.md:113` — the same "watches nothing" paragraph in every wrapper.

## Required outcome
- The unreleased notes say a request owns discovery of its path and concludes absence only after sync, with no watch needed before it.
- A note documents the rename from `routed_broadcast`/`announced_broadcast`/`request(path, { announced: true })` to `request`/`follow`, so the removed names appear only as the old side of a rename.
</details>

(Written by deepseek-v4.1-flash-1017)

<!--
Pullfrog review metadata. These findings were written against 9650fa5;
if commits have landed on quest/m1/api-audit/resolve/README since, treat every specific bug, file, or
line callout as POTENTIALLY STALE and re-diff before acting on it.

- Mode: Review (initial)
- Files reviewed: 6
- Commits reviewed: 2
- Base: main (7b4f5316)
- Head: quest/m1/api-audit/resolve/README (9650fa5)
- Reviewed commits:
  - 9650fa595 — test: close the resolve quest's cross-language lifecycle checks
  - b8abb75cc — chore(quest): claim quest/m1/api-audit/resolve/README.md
- Prior pullfrog review: none
-->

The Unreleased notes still told callers that a request watches nothing
and to hold an announced() stream over its path first: the racy
two-step the resolve epic removed. None of the rename PRs wrote notes
either. Every language's MIGRATE.md now documents request(path,
instance) owning its discovery and failing Unroutable only after sync,
follow(path, instance), and the renames from request_broadcast,
routed, routed_broadcast, announced_broadcast, and
request(path, { announced: true }).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated

Copy link
Copy Markdown
Collaborator Author

Fixed in the next push. None of the epic's rename PRs had written migration notes (moq-dev/moq#7193 left them for the release cut, but AGENTS.md asks feature PRs to add them under ## Unreleased), so the #6165 paragraphs still taught the racy two-step.

Every language's MIGRATE.md now:

  • describes request(path, instance) as owning its path's discovery, retrying route churn, and failing Unroutable only after sync, with no announced() stream needed beside it;
  • documents the renames, with the removed names only on the old side: Rust request_broadcast/routed/routed_broadcast → request/follow (plus Requesting::is_queued gone), JS request(path, { announced: true }) → follow(path) and @moq/watch's announced → follow, and request_broadcast/announced_broadcast/AnnouncedBroadcast → request/follow/Following in moq-ffi, the C ABI (moq_origin_follow, plus the instance, instance_len arguments), Python, Swift, Kotlin, Dart, and Go;
  • renames the older Follow epochless restarts in exports and bindings #5700 headings and the moq-mux sample that still used the removed names.

I left the CHANGELOGs alone: no Unreleased CHANGELOG entry carries the stale text, and the released entries record what shipped at the time.

The epoch pin these notes call epoch is now instance (moq-dev/moq#7489), so the notes use instance.

(Written by Claude Opus 5.5)

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Automated review by review (OpenAI)

Reviewed head b3d61b7, following the review of 9650fa5.

The new migration notes remove the stale instruction to hold a separate announcement stream and describe the current request and follow APIs. No additional actionable findings in this documentation-only delta.

Verification: static GitHub inspection of the changed migration notes and representative binding signatures; I did not run tests or interoperability checks.

@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

  • Migration notes across languages: added or rewrote the ## Unreleased entries in every MIGRATE.md (moq-net, @moq/net, @moq/watch, moq-ffi, moq-c, c/moq, Python, Swift, Kotlin, Dart, Go) plus the rs/moq-mux sample to describe request/follow, the instance pin, and request owning its path's discovery.
  • Discovery paragraphs: the #6165 notes now say a request finds a broadcast the peer serves with nothing else watching and needs no announced() stream beside it.
  • Renames: removed names (request_broadcast, routed, routed_broadcast, announced_broadcast/AnnouncedBroadcast, request(path, { announced: true }), watch's announced) now appear only on the old side of each rename.
  • moq-net: added a Before/After resolution table and noted a dropped Prepared refusal stays terminal and Requesting::is_queued is gone.

I checked the new notes against the tree: the Rust request/follow signatures and Following::available, the C ABI's instance, instance_len placement, and the moq-ffi, Kotlin, Python, Swift, Dart, and Go names and argument shapes all match. The JS notes match the code as well (RequestOptions.announced removed, follow returning Origin.Following, and only the connect option and Established.discovery removed while Consumer.discovery remains). No stale "watches nothing" text or current-side removed names remain; the older request_broadcast snippets are inside historical release sections.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏

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

moq-bot Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

quest land watch: the merge queue removed this pull request at b3d61b7 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:

…  Compiling rcgen v0.14.10
   Compiling reqwest v0.13.5
   Compiling x509-parser v0.18.1
   Compiling sonora v0.2.0
   Compiling symphonia-codec-aac v0.6.1
   Compiling uniffi_macros v0.32.2
   Compiling openh264 v0.9.9
   Compiling moq-nvenc v0.1.2 (/var/cache/github-runner-work/moq/moq/rs/moq-nvenc)
   Compiling fast_image_resize v6.1.0
   Compiling ash v0.38.0+1.3.281
   Compiling web-transport-proto v0.6.4
   Compiling rustls-platform-verifier v0.7.1
   Compiling hmac v0.13.0
   Compiling sha2 v0.11.1
   Compiling web-transport-trait v0.5.2
   Compiling dns-lookup v4.0.2
   Compiling yuv v0.8.19
   Compiling uniffi v0.32.2
   Compiling moq-audio v0.1.10 (/var/cache/github-runner-work/moq/moq/rs/moq-audio)
   Compiling pollster v1.0.1
   Compiling moq-tokio v0.19.23 (/var/cache/github-runner-work/moq/moq/rs/moq-tokio)
   Compiling moq-ffi v0.4.12 (/var/cache/github-runner-work/moq/moq/rs/moq-ffi)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 21s
mbx[cache]: object cache: 344 hits, 1 misses, 1 bypassed; 0 B downloaded, 0 B uploaded, 33.4 KiB stored locally
mbx[cache]: 2m 23s session; 8m 29s estimated compiler time avoided (summed across compilations)
mbx[cache]: bypass reasons: 1 unsupported-crate-type
mbx[cache]: Cargo artifact reuse and CI cache archive transfers are not included above
mbx[savings]: 2.5 TiB of outputs exist once and appear everywhere. do not tell the checkouts.
[ 16%] Built target moq_ffi_cargo
[ 33%] Rendering the moq-ffi C bindings
[ 33%] Built target moq_c_ffi
[ 50%] Building C object CMakeFiles/moq-c.dir/src/shutdown.c.o
[ 66%] Building CXX object CMakeFiles/moq-c.dir/include/moq/ffi/moq.cpp.o
[ 83%] Building CXX object CMakeFiles/moq-c.dir/include/moq/ffi/moq_c.cpp.o
[100%] Linking CXX static library libmoq.a
[100%] Built target moq-c
-- Installing: /var/cache/github-runner-work/moq/moq/c/moq/build/prefix/lib64/libmoq.a
-- Installing: /var/cache/github-runner-work/moq/moq/c/moq/build/prefix/include/moq/moq.h
-- Installing: /var/cache/github-runner-work/moq/moq/c/moq/build/prefix/include/moq/ffi/moq.h
-- Installing: /var/cache/github-runner-work/moq/moq/c/moq/build/prefix/include/moq/version.h
-- Installing: /var/cache/github-runner-work/moq/moq/c/moq/build/prefix/lib64/libmoq_c_ffi.a
-- Installing: /var/cache/github-runner-work/moq/moq/c/moq/build/prefix/share/moq-c/MIGRATE.md
-- Installing: /var/cache/github-runner-work/moq/moq/c/moq/build/prefix/lib64/cmake/moq-c/moq-c-config.cmake
-- Installing: /var/cache/github-runner-work/moq/moq/c/moq/build/prefix/lib64/cmake/moq-c/moq-c-config-version.cmake
-- Installing: /var/cache/github-runner-work/moq/moq/c/moq/build/prefix/lib64/pkgconfig/moq-c.pc
-- The C compiler identification is GNU 16.2.0
-- The CXX compiler identification is GNU 16.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /nix/store/r5ri78axx1qggkjq3vawywlzglg70b5w-gcc-wrapper-16.2.0/bin/gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /nix/store/r5ri78axx1qggkjq3vawywlzglg70b5w-gcc-wrapper-16.2.0/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Configuring done (19.2s)
-- Generating done (0.0s)
-- Build files have been written to: /var/cache/github-runner-work/moq/moq/c/moq/build/superbuild
[100%] Building moq-ffi
    Blocking waiting for file lock on build directory
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 3m 16s
mbx[savings]: 2.5 TiB of outputs, one copy, several very confident checkouts.
[100%] Built target moq_ffi_cargo
-- The C compiler identification is GNU 16.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /nix/store/r5ri78axx1qggkjq3vawywlzglg70b5w-gcc-wrapper-16.2.0/bin/gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Configuring done (26.5s)
-- Generating done (0.0s)
-- Build files have been written to: /var/cache/github-runner-work/moq/moq/c/moq/build/test
[ 50%] Building C object CMakeFiles/probe.dir/probe.c.o
[100%] Linking C executable probe
make[2]: *** Deleting file 'probe'
error: recipe `check` was terminated on line 14 by signal 15
make[2]: *** [CMakeFiles/probe.dir/build.make:103: probe] Terminated
make[1]: *** [CMakeFiles/Makefile2:87: CMakeFiles/probe.dir/all] Terminated
make: *** [Makefile:91: all] Terminated
##[endgroup]
##[group]check cpp
python3 '/var/cache/github-runner-work/moq/moq/sh/cpp/ffi.test.py'
...........
----------------------------------------------------------------------
Ran 11 tests in 15.232s

OK
'/var/cache/github-runner-work/moq/moq/sh/cpp/check.sh' "$@"
-- The CXX compiler identification is GNU 16.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /nix/store/r5ri78axx1qggkjq3vawywlzglg70b5w-gcc-wrapper-16.2.0/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Configuring done (17.3s)
-- Generating done (0.0s)
-- Build files have been written to: /var/cache/github-runner-work/moq/moq/cpp/moq/build/package
[ 50%] Building moq-ffi
    Blocking waiting for file lock on build directory
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 36s
mbx[savings]: 4.9 TiB logical of target/ was waiting for checkouts that are never coming back. it has stopped waiting.
[ 50%] Built target moq_ffi_cargo
[100%] Rendering the moq-ffi C++ bindings
[100%] Built target moq_ffi
-- Installing: /var/cache/github-runner-work/moq/moq/cpp/moq/build/prefix/include/moq
-- Installing: /var/cache/github-runner-work/moq/moq/cpp/moq/build/prefix/include/moq/moq.hpp
-- Installing: /var/cache/github-runner-work/moq/moq/cpp/moq/build/prefix/include/moq/ffi/moq.hpp
-- Installing: /var/cache/github-runner-work/moq/moq/cpp/moq/build/prefix/include/moq/ffi/moq.cpp
-- Installing: /var/cache/github-runner-work/moq/moq/cpp/moq/build/prefix/include/moq/ffi/moq_scaffolding.hpp
-- Installing: /var/cache/github-runner-work/moq/moq/cpp/moq/build/prefix/include/moq/ffi/uniffi_expected.hpp
-- Installing: /var/cache/github-runner-work/moq/moq/cpp/moq/build/prefix/include/moq/version.hpp
-- Installing: /var/cache/github-runner-work/moq/moq/cpp/moq/build/prefix/share/moq-cpp/moq.cpp
-- Installing: /var/cache/github-runner-work/moq/moq/cpp/moq/build/prefix/lib/libmoq_ffi.a
-- Installing: /var/cache/github-runner-work/moq/moq/cpp/moq/build/prefix/lib/cmake/moq-cpp/moq-cpp-config.cmake
-- Installing: /var/cache/github-runner-work/moq/moq/cpp/moq/build/prefix/lib/cmake/moq-cpp/moq-cpp-config-version.cmake
-- Installing: /var/cache/github-runner-work/moq/moq/cpp/moq/build/prefix/lib/pkgconfig/moq-cpp.pc
-- The CXX compiler identification is GNU 16.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /nix/store/r5ri78axx1qggkjq3vawywlzglg70b5w-gcc-wrapper-16.2.0/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Configuring done (26.5s)
-- Generating done (0.0s)
-- Build files have been written to: /var/cache/github-runner-work/moq/moq/cpp/moq/build/test-17
[ 16%] Building CXX object CMakeFiles/moq-cpp.dir/var/cache/github-runner-work/moq/moq/cpp/moq/build/prefix/share/moq-cpp/moq.cpp.o
make[2]: *** [CMakeFiles/moq-cpp.dir/build.make:79: CMakeFiles/moq-cpp.dir/var/cache/github-runner-work/moq/moq/cpp/moq/build/prefix/share/moq-cpp/moq.cpp.o] Terminated
make[1]: *** [CMakeFiles/Makefile2:93: CMakeFiles/moq-cpp.dir/all] Terminated
error: recipe `check` was terminated on line 16 by signal 15
make: *** [Makefile:91: all] Terminated
##[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: 7e4ed936f3c2356d9251c22c1a68a37ace387fa0
  CHECK_FAIL_FAST: 1
  NEXTEST_TEST_THREADS: 24
  MBX_CACHE_LINKS: 1
  MBX_REMOTE_URL: 
##[endgroup]
With the provided path, there will be 1 file 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 85666
Finished uploading artifact content to blob storage!
SHA256 digest of uploaded artifact is 5d09f544da923003277ab25e0d78ec200d896eb979b2369e2e12de5afe411d71
Finalizing artifact upload
Artifact cargo-timings successfully finalized. Artifact ID 13279966409
Artifact cargo-timings has been successfully uploaded! Final size is 85666 bytes. Artifact ID is 13279966409
Artifact download URL: https://github.com/moq-dev/moq/actions/runs/41736459964/artifacts/13279966409
Post job cleanup.
##[start-action display=Run jdx/mr-boxington-action@47ce49b32025d93a7a2f4570815afaa2b7092240;id=__dd7cd9bc-e539-4b5b-ae93-f13c07ba238e.mbx]
##[end-action id=__dd7cd9bc-e539-4b5b-ae93-f13c07ba238e.mbx;outcome=skipped;conclusion=skipped;duration_ms=0]
Post job cleanup.
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git version
git version 2.55.0
Temporarily overriding HOME='/var/cache/github-runner-work/_temp/f2ae776b-70f9-433b-86fc-1f4b3162e0ce' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --global --add safe.directory /var/cache/github-runner-work/moq/moq
Removing SSH command configuration
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --name-only --get-regexp core\.sshCommand
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.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/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.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/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.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/gx2v6q84b0w43bafm0whkdx93qyxbpps-ci-cache-gc.sh/bin/ci-cache-gc.sh'
shell: /nix/store/1mv3qz005gkbalxfghk4y3s8ayv4d2dl-bash-interactive-5.3p15/bin/bash --noprofile --norc -e -o pipefail {0}
##[endgroup]
evicted 0 objects and 0 action results (0 B logical); 50.0 GiB logical remain
evicted 0 objects and 0 action results (0 B logical); 50.0 GiB logical remain
Cleaning up orphan processes

(written by quest land watch)

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

moq-bot Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

codex / Codex land fixer note:

The queue log reports embed::uring_custom_route_and_quic failing with “HTTP still accepted after the owner stopped” (lines 10442–10459). This PR does not change the relay implementation or embedding tests, so there is no evidence to blame it. The original test passed both individually and in the nextest run. All 6,285 selected Rust tests, Rust doc tests, 2,768 JavaScript tests, JavaScript build/type checks, and changed migration-file Markdown lint passed.

A preliminary plain cargo test --locked -p moq-c -p moq-ffi -p moq-mux -p moq-net -p moq-relay --features moq-relay/io-uring run failed in the different embedding test embed::worker_tokio_custom_route_and_quic with “the owner’s sockets outlived run”. That test passed with nextest, which CI uses to isolate tests in separate processes. Both shutdown-test observations merit follow-up. No source changes or commits were made; the PR head remains b3d61b7.

(written by codex / Codex)

@moq-bot

moq-bot Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

quest land watch: re-enqueued this pull request at b3d61b7, at the back of the merge queue, unchanged, since the land fixer judged the failure flaky: moq-relay::integration embed::uring_custom_route_and_quic.

(written by quest land watch)

Merged via the queue into main with commit 006dee0 Nov 4, 2026
8 of 9 checks passed
@moq-bot
moq-bot Bot deleted the quest/m1/api-audit/resolve/README branch November 4, 2026 00:09
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