Skip to content

refactor(net): drop JS moq-transport FETCH serving - #8445

Merged
kixelated merged 11 commits into
mainfrom
quest/m2/ietf-scope/serving
Nov 11, 2026
Merged

kixelated merged 11 commits into
mainfrom
quest/m2/ietf-scope/serving

Conversation

@kixelated

@kixelated kixelated commented Nov 10, 2026 •

Copy link
Copy Markdown
Collaborator

Finishes quest/m2/ietf-scope/serving.md, part of the IETF scope freeze.

Summary

  • js/net no longer serves moq-transport FETCH. Every FETCH, standalone, filtered, or joining, gets NOT_SUPPORTED on its own stream; the session stays up. Deleted runFetch and its range, join registry, and FETCH_OK writer, plus the groupEnd hook only they used. The draft-20+ fill and #writeFetchGroup stay.
  • A JS draft-18 Next Object subscription carries its current group whole, from object 0. Without the joining FETCH answer, a draft-18 late joiner would lose the head of the current group, such as a catalog written once. Our subscribers already take a group stream that starts at object 0 as the whole group, and keep going after a refused joining FETCH, so this needs no subscriber change. A third-party subscriber that sends no joining FETCH also gets the head now. This brings back what the publisher did before moq-dev/moq#6945, but SUBSCRIBE_OK still reports the true Largest Object.
  • moq-net keeps listing a moq-transport peer's tracks with SUBSCRIBE_TRACKS. rs/ is unchanged from main. Cloudflare's relay (cloudflare/moq-rs, moq-transport/src/message/subscribe_tracks.rs and moq-relay-ietf/src/producer.rs) answers SUBSCRIBE_TRACKS with PUBLISH. Without our side we could no longer list tracks on that relay.
  • JS still refuses a received SUBSCRIBE_TRACKS with NOT_SUPPORTED. It now reads only the Request ID and skips the rest of the body, so JS's subscribe_tracks.ts is gone and the type is a bare SUBSCRIBE_TRACKS_ID constant. Rust still decodes the whole message, because it sends one when listing.
  • Docs (doc/concept/standard.md, doc/lib/js/net.md) and quest notes (m3/audit-interop.md, which lists FETCH cases with a moq-dev-js publisher as unsupported, and the m2/ietf-scope epic README, which now records that listing stays) describe the new scope.

Decisions

  • Track listing: ✅ keep moq-net's SUBSCRIBE_TRACKS listing as on main (rejected: delete it). Decided 2026-11-10 by the maintainer after the PR left the merge queue. The earlier premise that no third party consumes listings was wrong: Cloudflare's relay implements SUBSCRIBE_TRACKS.
  • What listing needs: ✅ restore everything this PR had deleted along with listing (rejected: restore listing alone). Against a real SUBSCRIBE_TRACKS publisher, each listed track arrives as a FORWARD=0 PUBLISH. So listing needs PUBLISH adoption in SubscribeOnce, the paused/resuming alias states that a reader resumes instead of subscribing again, and DUPLICATE_SUBSCRIPTION for a redundant draft-18 PUBLISH. Restoring rs/ whole from main is also the simplest result. It drops two of the earlier choices: the Rust "refuse SUBSCRIBE_TRACKS without decoding" and the IETF fuzz-kind renumbering, so the fuzz regression inputs are back as on main.
  • Epic remainder: ✅ title quest/m2/ietf-scope/README.md [S] and rewrite it as a standalone quest for the remaining docs work (doc/concept/, drafts/draft-lcurley-moq-ietf.md if it lists the extensions, the interop matrix) (rejected: finishing the docs in this PR, XS). Decided 2026-11-11 by the maintainer after the merge queue removed the PR: deleting the last child made the README a quest without a size, failing quest check.
  • ✅ Keep the JS changes as they were (FETCH refused, draft-18 group served whole, SUBSCRIBE_TRACKS refused without decoding), per the same decision.

Choices made without asking

  • Serve the draft-18 group whole instead of keeping the joining FETCH answer. The alternatives were to keep JS joining-FETCH serving (against the quest's plan, which names feat(js): serve cached IETF FETCH, including draft-18 joining FETCH #6945's joining FETCH), or to delete it and accept the draft-18 head loss, which broke about ten JS integration tests and would break a catalog written once. Serving extra objects departs from Next Object's start, but costs less than the joining FETCH did, and per AGENTS.md the IETF requirements give way when they add cost without benefit.
  • Skip, not keep, the moq-transport FETCH cells with a JS publisher. A relay fills a downstream miss with an upstream FETCH, so with a native JS publisher on moq-transport the interop CLI FETCH and CLI FETCH history lanes can no longer pass. They are skipped there with a named reason, and test/interop/README.md says so. Over moq-lite, which our JS publishers use, both lanes still run and pass. Also deleted quest/m3/ietf-js-joining-fetch.md, whose goal this PR makes moot.

Impact

Public API: none. Nothing in js/net's public API exposed FETCH serving; moq-net is unchanged.
Wire: no format change. A FETCH to a JS publisher (a relay's upstream fill included) gets NOT_SUPPORTED, an optional behavior in moq-transport. A JS draft-18 Next Object subscription now carries objects from 0 in its first group. Rust's SUBSCRIBE_TRACKS sending and both sides' refusal are unchanged.

Caused by

Not a bug fix: the freeze removes features added on purpose (moq-dev/moq#6945, moq-dev/moq#7793, moq-dev/moq#7794, moq-dev/moq#8117, moq-dev/moq#8231).

Checks

On the head that restores listing (just check rerun after merging main again on 2026-11-11, which also took main's new FETCH-serving tests out of fetch.test.ts):

  • just check: passed.
  • just test interop --all: everything passed except one moq-lite-06 rust -> js-native-bun cell, which received only audio before the connection closed under load. It passed on rerun. This PR does not touch moq-lite or rs/.
  • just test interop --all --versions ietf: everything passed except one js -> gst cell (a 20 ms audio timestamp gap), with the 12 JS-publisher CLI FETCH cells per draft skipped as above. Six reruns of js -> gst across the IETF drafts all passed.

Follow-ups

None. The earlier js-web rerun note is gone: main's rewrite of the interop audit already has it confirm every red cell after the runner client bump.

Models

Size: M
Implementer: Claude Code, Claude Opus 5.5, medium effort
Implementer: Claude Code, claude-opus-5-5, medium effort (iterate, M)
Implementer: Claude Code, claude-opus-5-5, low effort (iterate, S)

🤖 Generated with Claude Code

(Written by Claude Opus 5.5 with medium)

Review

Rewritten by quest review after each round.

  • Reviewer: Codex, gpt-6.1-sol, medium effort
  • Session: 01a1cc1d-600d-7ba1-9fb7-42f7f98d89ef, round 1
  • Head: f9cbd2e
  • Base: origin/main at c2a4749
  • Score: 8/10, The reduced FETCH-serving scope is consistently reflected in dispatch, documentation, and interop selection, with no actionable defects found; builds and tests were not run, as instructed.
  • Findings: none

kixelated and others added 4 commits November 10, 2026 01:56
…ting

js/net answers every moq-transport FETCH with NOT_SUPPORTED, so a draft-18
Next Object subscription carries its current group whole instead of a joining
FETCH head. moq-net no longer lists a moq-transport peer's tracks with
SUBSCRIBE_TRACKS: such a listing fails as unsupported, and a received
SUBSCRIBE_TRACKS is still refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated kixelated changed the title moq-transport FETCH serving in JS and track listing are gone refactor(net): drop JS moq-transport FETCH serving and Rust track listing Nov 10, 2026
@kixelated
kixelated marked this pull request as ready for review November 10, 2026 16:43

@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 the full patch at fa33c64 and the affected request, subscription, alias, and group-join paths. No actionable findings.

Direction: the removals match the agreed IETF scope. Unsupported requests retain request-ID admission and per-request refusals; ordinary Rust subscription alias ownership and cancellation remain intact. The draft-18 JavaScript fallback sends the current group's head on the subscription while retaining the real Largest Object, consistent with the existing whole-group receiver path. All 28 changed fuzz regression inputs preserve their payloads and select the same message types after renumbering.

Verification limits: GitHub-only static review. No builds, tests, fuzzing, or interop runs performed; author-reported checks were not independently verified. Third-party behavior with the draft-18 whole-group fallback remains for the documented interop follow-up.

@coderabbitai

coderabbitai Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Explain Change →

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 4 minutes.

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: 42a870ef-3285-4688-a314-d1ad7882b69d
Commits

Reviewing files that changed from the base of the PR and between fa33c64 and f9cbd2e.

Files selected for processing: 22

  • doc/concept/standard.md
  • doc/lib/js/net.md
  • js/justfile
  • js/net/bench/fetch.ts
  • js/net/src/group.test.ts
  • js/net/src/group.ts
  • js/net/src/ietf/connection.test.ts
  • js/net/src/ietf/connection.ts
  • js/net/src/ietf/fetch.test.ts
  • js/net/src/ietf/malformed.test.ts
  • js/net/src/ietf/publisher.test.ts
  • js/net/src/ietf/publisher.ts
  • js/net/src/ietf/subscribe_tracks.ts
  • js/net/src/integration.test.ts
  • js/net/src/internal.ts
  • quest/m2/ietf-scope/README.md
  • quest/m2/ietf-scope/serving.md
  • quest/m3/audit-interop.md
  • quest/m3/ietf-js-joining-fetch.md
  • sh/gh/nightly.sh
  • test/interop/README.md
  • test/interop/interop.sh

No actionable comments were generated in the recent review.

Walkthrough

The changes remove Rust upstream track listings and JavaScript FETCH serving. Both implementations refuse incoming SUBSCRIBE_TRACKS requests with NOT_SUPPORTED. JavaScript also refuses incoming FETCH requests. Rust subscriber setup no longer adopts held listing subscriptions, and incoming PUBLISH offers are declined. The changes remove related protocol types, helpers, tests, and benchmarks, and update documentation to describe the revised behavior.

Merge Risk: Minimal · previous review fa33c

This change removes JavaScript FETCH serving and Rust track listing, and refuses these requests with NOT_SUPPORTED while the session stays up. No concrete merge-blocking defect remains. The author still needs to rerun the js-web publisher interop cells behind a joining FETCH, as the PR notes.

Pre-merge checks: Passed 4

Check name Status Explanation
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.
Title check Passed The title clearly identifies the main JavaScript change: removing moq-transport FETCH serving. It is concise and directly related to the changeset, although it does not mention the Rust track-listing …
Description check Passed The pull request description directly addresses the changeset, including removal of JavaScript FETCH serving, SUBSCRIBE_TRACKS behavior, related code removal, documentation updates, and test results.
Full details: Title check

Explanation

The title clearly identifies the main JavaScript change: removing moq-transport FETCH serving. It is concise and directly related to the changeset, although it does not mention the Rust track-listing changes.

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: 3babe1a9-3791-4c5d-af01-73788f8e0e4d
Commits

Reviewing files that changed from the base of the PR and between cd560bd and fa33c64.

Files selected for processing: 63

  • doc/concept/standard.md
  • doc/concept/stats.md
  • js/justfile
  • js/net/bench/fetch.ts
  • js/net/src/group.test.ts
  • js/net/src/group.ts
  • js/net/src/ietf/connection.test.ts
  • js/net/src/ietf/connection.ts
  • js/net/src/ietf/fetch.test.ts
  • js/net/src/ietf/malformed.test.ts
  • js/net/src/ietf/publisher.test.ts
  • js/net/src/ietf/publisher.ts
  • js/net/src/ietf/subscribe_tracks.ts
  • js/net/src/integration.test.ts
  • js/net/src/internal.ts
  • quest/m2/ietf-scope/serving.md
  • quest/m3/audit-interop.md
  • quest/m5/net-wrap/e2ee.md
  • rs/moq-net/fuzz/regressions/ietf/draft18-invalid-group-order-0
  • rs/moq-net/fuzz/regressions/ietf/draft18-invalid-group-order-255
  • rs/moq-net/fuzz/regressions/ietf/draft18-invalid-group-order-3
  • rs/moq-net/fuzz/regressions/ietf/draft18-namespace-field-trailing-slash
  • rs/moq-net/fuzz/regressions/ietf/draft18-setup-envelope-truncated-unknown
  • rs/moq-net/fuzz/regressions/ietf/draft18-setup-envelope-unknown-bytes
  • rs/moq-net/fuzz/regressions/ietf/draft18-setup-envelope-unknown-varint
  • rs/moq-net/fuzz/regressions/ietf/draft18-setup-truncated-unknown
  • rs/moq-net/fuzz/regressions/ietf/draft18-setup-unknown-bytes
  • rs/moq-net/fuzz/regressions/ietf/draft18-setup-unknown-varint
  • rs/moq-net/fuzz/regressions/ietf/draft18-subscribe-empty-namespace-field
  • rs/moq-net/fuzz/regressions/ietf/draft18-subscribe-oversized-full-track-name
  • rs/moq-net/fuzz/regressions/ietf/draft18-subscribe-oversized-namespace
  • rs/moq-net/fuzz/regressions/ietf/draft22-invalid-fill-group-order-0
  • rs/moq-net/fuzz/regressions/ietf/draft22-invalid-fill-group-order-255
  • rs/moq-net/fuzz/regressions/ietf/draft22-invalid-fill-group-order-3
  • rs/moq-net/fuzz/regressions/ietf/draft22-invalid-group-order-0
  • rs/moq-net/fuzz/regressions/ietf/draft22-invalid-group-order-255
  • rs/moq-net/fuzz/regressions/ietf/draft22-invalid-group-order-3
  • rs/moq-net/fuzz/regressions/ietf/draft22-setup-envelope-truncated-unknown
  • rs/moq-net/fuzz/regressions/ietf/draft22-setup-envelope-unknown-bytes
  • rs/moq-net/fuzz/regressions/ietf/draft22-setup-envelope-unknown-varint
  • rs/moq-net/fuzz/regressions/ietf/draft22-setup-truncated-unknown
  • rs/moq-net/fuzz/regressions/ietf/draft22-setup-unknown-bytes
  • rs/moq-net/fuzz/regressions/ietf/draft22-setup-unknown-varint
  • rs/moq-net/fuzz/regressions/ietf/draft22-subscribe-empty-namespace-field
  • rs/moq-net/fuzz/regressions/ietf/draft22-subscribe-oversized-full-track-name
  • rs/moq-net/fuzz/regressions/ietf/draft22-subscribe-oversized-namespace
  • rs/moq-net/src/auth.rs
  • rs/moq-net/src/fuzz.rs
  • rs/moq-net/src/fuzz/request.rs
  • rs/moq-net/src/ietf/error.rs
  • rs/moq-net/src/ietf/message.rs
  • rs/moq-net/src/ietf/mod.rs
  • rs/moq-net/src/ietf/publish.rs
  • rs/moq-net/src/ietf/publisher.rs
  • rs/moq-net/src/ietf/request_stream.rs
  • rs/moq-net/src/ietf/session.rs
  • rs/moq-net/src/ietf/subscribe_namespace.rs
  • rs/moq-net/src/ietf/subscribe_tracks.rs
  • rs/moq-net/src/ietf/subscriber.rs
  • rs/moq-net/src/ietf/subscriber/datagrams.rs
  • rs/moq-net/src/ietf/subscriber/tracks.rs
  • rs/moq-net/tests/integration/tracks_ietf.rs
  • sh/gh/nightly.sh
Files with no reviewable changes: 13

  • js/net/src/ietf/subscribe_tracks.ts
  • rs/moq-net/src/ietf/mod.rs
  • js/net/src/internal.ts
  • rs/moq-net/src/ietf/subscribe_tracks.rs
  • rs/moq-net/src/ietf/publish.rs
  • quest/m2/ietf-scope/serving.md
  • rs/moq-net/src/ietf/error.rs
  • js/net/src/group.test.ts
  • rs/moq-net/src/fuzz/request.rs
  • js/net/bench/fetch.ts
  • rs/moq-net/src/ietf/subscriber/tracks.rs
  • js/net/src/group.ts
  • rs/moq-net/src/ietf/request_stream.rs

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

@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.

Important

Removing JS FETCH serving also removes the only path that fills a relay's upstream miss, which the IETF interop CLI FETCH history lane still exercises against a native JS publisher. One now-impossible m3 quest and a few removed-FETCH references are also left behind.

Reviewed changes

  • JS publisher stops serving FETCH. runFetch, the draft-18 join registry, the range and joining answer paths, and the groupEnd hook are gone; Connection refuses every FETCH NOT_SUPPORTED on its own stream while the session stays up. The draft-20+ fill path stays.
  • Draft-18 Next Object subscriptions carry the current group whole. filterRange now takes the version and starts a pre-draft-20 nextObject at {largest.group, 0}, so the head arrives without a joining FETCH while SUBSCRIBE_OK still reports the true Largest Object.
  • Rust stops listing a moq-transport peer's tracks. ietf/subscribe_tracks.rs and ietf/subscriber/tracks.rs are deleted with the paused/resuming alias states, PUBLISH adoption, and DUPLICATE_SUBSCRIPTION; a received PUBLISH is always declined and a local listing is aborted with Error::Unsupported without sending SUBSCRIBE_TRACKS.
  • SUBSCRIBE_TRACKS is a bare refusal. Rust and JS read only its Request ID and skip the body; the type is a SUBSCRIBE_TRACKS_ID constant in both.
  • Fuzz kinds renumbered from 27 to 25 with the committed regression inputs rewritten to the same effective decoder, plus the doc and quest notes.

⚠️ The IETF interop CLI FETCH history lane can no longer pass with a JS publisher

test/interop/README.md documents that a native JS publisher answers groups 0 through 2 of the CLI FETCH history lane from track.requests(), and that this "runs on moq-lite and every supported IETF draft". The relay fills a downstream miss by sending an upstream ietf::Fetch, so with every FETCH refused there is no path for those groups, and run_fetch_round <js-runtime> <sub> history keeps running unchanged.

The follow-up in the description only covers the joining-FETCH js-web cells, so this lane was not reconciled. Note that run_tails gates its native-JS publisher loops on needs (which also consults the subscriber list), so those cells also run on the PR lane where js-native-* are subscribers only.

Technical details
# The IETF `CLI FETCH history` lane still assumes a JS publisher answers FETCH

## Affected sites
- `test/interop/interop.sh:2684` — `run_fetch_round "$runtime" "$sub" history` still runs for `js-native-node` and `js-native-bun`.
- `test/interop/README.md:76-79` — states the JS publisher "answers groups 0 through 2, which it never cached" and that the lane runs on every supported IETF draft.
- `rs/moq-net/src/ietf/subscriber.rs:6998` — `ServeFill` fills a local miss by writing `ietf::Fetch::ID` upstream, a Standalone FETCH on draft-18 and a Filtered absolute FETCH from draft-20.
- `js/net/src/ietf/connection.ts:401-406` — every FETCH is now refused `NOT_SUPPORTED`.
- `quest/m3/audit-interop.md:101-104` — the audit note covers only the third-party `js-web` publisher cells behind a joining FETCH.

## Required outcome
- The IETF pass of this lane must not fail for an intended removal: either skip the `history` cells whose publisher is `js-native-*` with a named reason (the `run_finishes` quarantine comment is the local pattern), or record them as expected failures somewhere the harness reads.
- `test/interop/README.md` must stop claiming the lane covers moq-transport with a JS publisher.

## Open questions for the human
- Is the intent to drop the whole lane for moq-transport, or should the JS publisher keep serving cached/fill FETCH for upstream fills while only joining FETCH goes away?

ℹ️ Removed-FETCH references left behind

Three places still describe the deleted behavior. The first is an open quest whose goal this PR makes impossible; the other two are docs and comments that now contradict doc/concept/standard.md.

Technical details
# Stale references to JS FETCH serving

## Affected sites
- `quest/m3/ietf-js-joining-fetch.md` — goal is "the JS publisher answers a joining FETCH after a quick finish", which cannot happen any more. Still linked as open from `quest/m3/README.md:121`. The PR deletes `quest/m2/ietf-scope/serving.md`, so retiring this one in the same pass keeps the tree coherent.
- `doc/lib/js/net.md:53` — "This serves lite FETCH, single-group IETF FETCH, and lite-07 ranged subscriptions from the same track". js/net no longer serves IETF FETCH; only lite FETCH and lite-07 ranges still reach `track.requests()`.
- `js/net/src/ietf/publisher.ts:833-835` — the `SUBSCRIBE_OK.largest` comment says a Next Object subscription starts right after it and recovers the head with a fill or a joining FETCH. On draft-18 it now starts at object 0 of that group.
- `js/net/src/ietf/publisher.test.ts:2851-2854` — the same claim in the `LARGEST_OBJECT is the live edge` doc comment (the assertion itself is still correct).

## Required outcome
- The quest is deleted (or rewritten to a closed note), and the three references describe the draft-18 whole-group behavior or drop the IETF FETCH claim.

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

@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.

Important

The merge integration itself is clean, but the IETF interop CLI FETCH history concern from the previous review is unchanged, so this still is not mergeable as-is. run_fetch_round <js-runtime> <sub> history needs groups 0-2 that the relay can only obtain with an upstream ietf::Fetch (FetchRun at rs/moq-net/src/ietf/subscriber.rs:7148), while the JS publisher now serves track.requests() only through the SUBSCRIBE-fill path; PR CI's --publishers rust hides that, nightly's --all --versions ietf does not.

Reviewed changes

  • Listing removal re-applied to main's refactored state machine. OnceStep::Adopt, Write's held, Answering::held, OnceRequest::token_grant, Established::alias, the Paused/Resuming alias states, and pause/want/unwant/adopted/entry_info/entry_ended/is_entry/poll_listing/listen/poll_handoff/buffer_forward are all gone from ietf/subscriber.rs; nothing else from the merge was dropped.
  • Shared helpers inlined locally. tracks::TrackKey became type TrackKey = (Path, Arc<str>) and tracks::listing_end became a byte-identical done_end.
  • RunBroadcast refuses listings instead of serving them. It holds a broadcast::Lister and aborts each wanted listing with Error::Unsupported; the loop terminates because Lister::abort clears the readers, returning poll_wanted to Pending.
  • Secondary Rust files carry only the matching removals. RequestKind::Publish, DUPLICATE_SUBSCRIPTION, Publish::into_owned, request_stream::Cancel, and the SUBSCRIBE_TRACKS_ID wiring in session.rs/publisher.rs; datagrams.rs follows the new TrackKey.
  • Verified at 30d7aed1b: cargo check -p moq-net --all-features warning-free, cargo test -p moq-net --all-features --lib ietf:: → 838 passed, --test integration tracks_ietf → 1 passed. js/net/src/ietf/ is untouched since the prior review.

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

… stale FETCH claims

A relay fills a downstream miss with an upstream FETCH, which a JS publisher
now refuses on moq-transport, so the interop CLI FETCH and history cells with a
native JS publisher are skipped there with a named reason. The JS net docs, two
comments, and the m3 JS joining FETCH quest no longer describe IETF FETCH
serving.

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

@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 the updates through 453b165 against the prior review and current base, including the Rust subscriber merge integration. No new actionable findings.

Direction: the interop follow-up addresses the previously reported unsupported FETCH cells. The shared run_fetch_round guard records explicit skips for native-JS publishers on moq-transport in both cached and history modes, while retaining moq-lite and Rust-publisher coverage. Removing the obsolete joining-FETCH quest and correcting the related documentation is consistent with the scope reduction.

Verification limits: GitHub-only static review; no builds, tests, or interop runs performed. Author-reported passing runs were not independently verified. The documented third-party joining-FETCH interop follow-up remains.

@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 — the delta since the prior pullfrog review (30d7aed1b..453b165cf, 8 files, +17/−39):

  • Interop FETCH cells now skip a native JS publisher on moq-transport. run_fetch_round records a named skip when $VERSION is moq-transport-* and $pub is js-native-*, before opening a relay. Both the cached and history calls share the function, and run_tails only passes rust/js-native-node/js-native-bun, so no other publisher is affected.
  • The interop README states the skip. Both lanes run on moq-lite and every supported IETF draft except a native JS publisher's moq-transport cells, with the upstream-FETCH refusal named as the reason.
  • Stale FETCH-serving claims corrected. doc/lib/js/net.md, the SUBSCRIBE_OK.largest comment in publisher.ts, and the LARGEST_OBJECT doc comment in publisher.test.ts now describe the draft-18 whole-group start from object 0 instead of a joining FETCH.
  • The now-impossible joining-FETCH quest is gone. quest/m3/ietf-js-joining-fetch.md is deleted, its quest/m3/README.md link removed, and quest/m3/audit-ci.md notes that the JS half no longer exists.

The prior review's blocking finding is resolved by the first two bullets: the CLI FETCH and CLI FETCH history lanes no longer fail on an intended removal, and the README no longer claims coverage the publisher cannot provide. I verified the skip guard's version/publisher conditions against VERSION_LIST (set per pass), the two run_fetch_round call sites, and the absence of any remaining ietf-js-joining-fetch reference; bash -n test/interop/interop.sh passes. No Rust or TS behavior changed in this delta.

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 10, 2026
@kixelated
kixelated removed this pull request from the merge queue due to a manual request Nov 10, 2026
@moq-bot

moq-bot Bot commented Nov 10, 2026

Copy link
Copy Markdown
Contributor

quest land watch: the merge queue removed this pull request at 453b165 because kixelated removed it (manual).

A person's removal ends the pick: the watcher leaves this pull request alone until a maintainer enqueues it again.

(written by quest land watch)

Cloudflare's relay answers SUBSCRIBE_TRACKS, so restore moq-net's listing
and the PUBLISH adoption, paused/resuming states, and DUPLICATE_SUBSCRIPTION
it needs, as on main. Docs and the ietf-scope epic record why.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated kixelated changed the title refactor(net): drop JS moq-transport FETCH serving and Rust track listing refactor(net): drop JS moq-transport FETCH serving Nov 11, 2026
…erving

# Conflicts:
#	quest/m3/audit-ci.md
#	quest/m3/audit-interop.md

@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 the update from 453b165 through b87eb24 against the base. No new actionable findings.

Direction: retaining Rust SUBSCRIBE_TRACKS listing is consistent with the revised scope. The comparison confirms no remaining Rust changes relative to the base: PUBLISH adoption, paused/resuming aliases, request decoding, and fuzz dispatch/seeds are restored together. The previously reviewed JS FETCH refusal, draft-18 whole-group fallback, and explicit unsupported interop-cell skips remain unchanged; the documentation now distinguishes receiving a listing request from requesting a third-party listing.

Verification limits: GitHub-only static review; no builds, tests, fuzzing, or third-party interop runs performed. Author-reported checks were not independently verified. GitHub currently reports merge conflicts, so the eventual conflict resolution still needs review.

@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.

Important

The branch no longer merges into main (mergeable_state: dirty), and three of the quest edits target quest/m3 files that main rewrote or deleted since this branch's last merge. The Rust revert itself is clean: rs/ no longer appears in the PR diff, so the PR is now the 24 JS, doc, and interop files only.

Reviewed changes — the delta since the prior pullfrog review (453b165cf..b87eb2473, 48 files, +3382/−209; only the docs and one quest README survive in the PR diff):

  • The Rust listing removal is reverted whole. rs/moq-net (including ietf/subscribe_tracks.rs, ietf/subscriber/tracks.rs, request_stream::Cancel, RequestKind::Publish, DUPLICATE_SUBSCRIPTION) and the committed fuzz/regressions/ietf/* inputs are back to the base, along with IETF_KINDS = 27, so no Rust file is part of this PR any more.
  • The Rust listing claims return to the docs. doc/concept/standard.md, doc/concept/stats.md, and quest/m5/net-wrap/e2ee.md are base text again, and their statements about Rust answering FETCH and listing a peer's tracks with SUBSCRIBE_TRACKS match the restored code.
  • The listing decision is recorded. quest/m2/ietf-scope/README.md adds the "Kept (decided 2026-11-10, maintainer)" bullet, naming Cloudflare's relay as the consumer and noting that a received SUBSCRIBE_TRACKS stays refused.

The two doc lines that remain changed (the one-group-at-a-time paragraph and the "any FETCH to JavaScript" refusal list) still describe the shipped JS behavior, and nothing under quest/, doc/, or test/ refers to ietf-scope/serving any more.

⚠️ The quest notes now target files main has deleted or rewritten

main is at 114b14fb6 while this branch last merged it at 30d7aed1b. Since then the audit consolidation reshaped quest/m3, so the PR's note edits no longer apply: quest/m3/audit-ci.md does not exist on main, and the js-web paragraph in quest/m3/audit-interop.md that the PR rewrites is gone too. Resolving this by keeping the branch's side would resurrect deleted files and reword text main removed.

Technical details
# Quest notes target pre-#8437 audit files

## Affected sites
- `quest/m3/audit-ci.md:92-94` — the PR replaces the "JS joining FETCH owns the JS half" wording, but `main` deleted this file (#8437 merged the 13 recurring audits into six). Modify/delete conflict; the note has nowhere to land.
- `quest/m3/audit-interop.md:101-104` — main's version no longer contains the "Every `js-web` publisher cell behind a joining FETCH" paragraph this PR rewrites.
- `quest/m3/README.md:124` — `main` still links `/quest/m3/ietf-js-joining-fetch.md`, which this PR deletes; the link removal must be re-applied at the resolved head or the link breaks.
- `quest/m2/ietf-scope/README.md` — main changed only the `Related` link (`audit-simplify.md` → `audit-code.md`); the new "Kept" bullet is unaffected but the file is in conflict.
- `js/net/src/internal.ts`, `js/net/src/ietf/publisher.ts`, `js/net/src/integration.test.ts`, `js/justfile` — main also changed these, in unrelated regions (the `arrivalRuns` hook, `saturatingAdd`/`checkedAdd` in `#refusal`, the `until()` deadline, a `tla` recipe). Keep main's hunks.

## Required outcome
- Merge `main` and re-apply the PR's quest notes onto main's files: drop the `audit-ci.md` edit (or move the JS-half note to whichever consolidated audit now owns it), and re-target the `audit-interop.md` note to its new structure.
- `quest/m3/README.md` must not link the deleted `ietf-js-joining-fetch.md` at the resolved head.
- Confirm `rs/` still matches `main` after resolution: main changed `rs/moq-net/src/model/track.rs`, `ledger.rs`, `lite/publisher.rs`, `tests/integration/socket.rs` and added `rs/moq-net/verify/*` after this branch's merge, so a careless "keep ours" would resurrect pre-main code.

## Open questions for the human
- Does the "The JS half is gone" note still earn a home once the audits are consolidated, or is it covered by `doc/concept/standard.md` alone?

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

@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 — the delta since the prior pullfrog review (b87eb2473..6b65f945a, the merge of main at 114b14fb6; 4 quest/doc files):

  • The branch merges main cleanly again. GitHub now reports mergeable: MERGEABLE (was dirty), and the merge touches no code: git diff --name-status against main lists only the 23 intended PR files.
  • The quest/m3/audit-ci.md edit is dropped. main deleted that file when #8437 consolidated the audits, so the modify/delete conflict is resolved by keeping main's deletion rather than resurrecting the file; no "JS half" note is left orphaned.
  • The ietf-js-joining-fetch.md link removal is re-applied. quest/m3/README.md no longer links the quest this PR deletes, and main's new Cost audit entry is kept.
  • The audit-interop.md note is re-targeted onto main's structure. The FETCH-refusal bullet now extends main's "Unsupported or down" list instead of rewording the paragraph main removed; the resolved text has no duplicated lines.
  • quest/m2/ietf-scope/README.md keeps the "Kept" decision bullet on top of main's Related link change.

I verified that rs/ still matches main byte for byte (the prior run's "keep ours" risk), that main's own edits inside the touched JS files survived (arrivalRuns in internal.ts, until() in integration.test.ts, saturatingAdd/checkedAdd in publisher.ts's #refusal, the tla recipe in js/justfile), and that no conflict markers or references to ietf-js-joining-fetch, ietf-scope/serving, or audit-ci.md remain anywhere in the tree. No specialist dispatch was warranted: the delta is conflict resolution in quest notes, with no behavioral surface to probe.

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 11, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Nov 11, 2026
@moq-bot

moq-bot Bot commented Nov 11, 2026

Copy link
Copy Markdown
Contributor

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

…ork/_temp/git-credentials-21d3e558-98a4-4157-8e27-b23ab11f27ee.config
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --unset includeif.gitdir:/var/cache/github-runner-work/moq/moq/.git.path \/var\/cache\/github\-runner\-work\/_temp\/git\-credentials\-21d3e558\-98a4\-4157\-8e27\-b23ab11f27ee\.config
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --get-all includeif.gitdir:/var/cache/github-runner-work/moq/moq/.git/worktrees/*.path
/var/cache/github-runner-work/_temp/git-credentials-21d3e558-98a4-4157-8e27-b23ab11f27ee.config
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --unset includeif.gitdir:/var/cache/github-runner-work/moq/moq/.git/worktrees/*.path \/var\/cache\/github\-runner\-work\/_temp\/git\-credentials\-21d3e558\-98a4\-4157\-8e27\-b23ab11f27ee\.config
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git.path
/github/runner_temp/git-credentials-21d3e558-98a4-4157-8e27-b23ab11f27ee.config
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --unset includeif.gitdir:/github/workspace/.git.path \/github\/runner_temp\/git\-credentials\-21d3e558\-98a4\-4157\-8e27\-b23ab11f27ee\.config
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git/worktrees/*.path
/github/runner_temp/git-credentials-21d3e558-98a4-4157-8e27-b23ab11f27ee.config
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --unset includeif.gitdir:/github/workspace/.git/worktrees/*.path \/github\/runner_temp\/git\-credentials\-21d3e558\-98a4\-4157\-8e27\-b23ab11f27ee\.config
[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
Removing credentials config '/var/cache/github-runner-work/_temp/git-credentials-21d3e558-98a4-4157-8e27-b23ab11f27ee.config'
##[endgroup]
Prepare all required actions
Getting action download info
Download action repository 'taiki-e/install-action@1919c4a95903d2c33e4a221102edca87309fc14b' (SHA:1919c4a95903d2c33e4a221102edca87309fc14b)
##[group]Run ./.github/actions/just
env:
  BASE: 55b6d703ddca1f1347dec81541b179d9ab162b56
  CHECK_FAIL_FAST: 1
  NEXTEST_TEST_THREADS: 24
##[endgroup]
##[start-action display=Use the NixOS runner toolchain;id=__self.__run]
##[group]Run just --version
�[36;1mjust --version�[0m
shell: /nix/store/1mv3qz005gkbalxfghk4y3s8ayv4d2dl-bash-interactive-5.3p15/bin/bash --noprofile --norc -e -o pipefail {0}
env:
  BASE: 55b6d703ddca1f1347dec81541b179d9ab162b56
  CHECK_FAIL_FAST: 1
  NEXTEST_TEST_THREADS: 24
##[endgroup]
just 1.58.0
##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=20]
##[start-action display=Run taiki-e/install-action@1919c4a95903d2c33e4a221102edca87309fc14b;id=__self.__taiki-e_install-action]
##[end-action id=__self.__taiki-e_install-action;outcome=skipped;conclusion=skipped;duration_ms=0]
Prepare all required actions
Getting action download info
Download action repository 'jdx/mr-boxington-action@88acf2bb50552c7c508cbac13e5f8c576b95b1de' (SHA:88acf2bb50552c7c508cbac13e5f8c576b95b1de)
##[group]Run ./.github/actions/rust-cache
with:
env:
  BASE: 55b6d703ddca1f1347dec81541b179d9ab162b56
  CHECK_FAIL_FAST: 1
  NEXTEST_TEST_THREADS: 24
##[endgroup]
##[start-action display=Require main's merge queue on self-hosted runners;id=__self_2.__run]
##[end-action id=__self_2.__run;outcome=skipped;conclusion=skipped;duration_ms=0]
##[start-action display=Cache credentials;id=__self_2.__run_2]
##[end-action id=__self_2.__run_2;outcome=skipped;conclusion=skipped;duration_ms=0]
##[start-action display=Run jdx/mr-boxington-action@88acf2bb50552c7c508cbac13e5f8c576b95b1de;id=__self_2.mbx]
##[group]Run jdx/mr-boxington-action@88acf2bb50552c7c508cbac13e5f8c576b95b1de
with:
  version: 1.29.2
  backend: local
  remote-url: s3://mbx-moq-dev
  namespace: Linux-X64
  github-token: ***
  cache-generation: v1
  github-cache-mode: target
  isolate-objects-cache: false
  clean-target-before-export: false
  save-on-workflow-dispatch: false
  save-on-pull-request: false
  save-on-protected-branch: false
  working-directory: .
  cache-links: auto
env:
  BASE: 55b6d703ddca1f1347dec81541b179d9ab162b56
  CHECK_FAIL_FAST: 1
  NEXTEST_TEST_THREADS: 24
##[endgroup]
Set up mbx 1.29.2
##[end-action id=__self_2.mbx;outcome=success;conclusion=success;duration_ms=572]
##[start-action display=Drop another mbx version's private state;id=__self_2.__run_3]
##[group]Run : "${VERSION:?the mbx action reported no version}"
�[36;1m: "${VERSION:?the mbx action reported no version}"�[0m
�[36;1mstamp="$HOME/.cache/moq-mbx-versions$RUNNER_WORKSPACE"�[0m
�[36;1mif [ "$(cat "$stamp" 2>/dev/null)" != "$VERSION" ]; then�[0m
�[36;1m  mbx clean --under "$RUNNER_WORKSPACE"�[0m
�[36;1m  mkdir -p "${stamp%/*}"�[0m
�[36;1m  printf '%s\n' "$VERSION" > "$stamp"�[0m
�[36;1mfi�[0m
shell: /nix/store/1mv3qz005gkbalxfghk4y3s8ayv4d2dl-bash-interactive-5.3p15/bin/bash --noprofile --norc -e -o pipefail {0}
env:
  BASE: 55b6d703ddca1f1347dec81541b179d9ab162b56
  CHECK_FAIL_FAST: 1
  NEXTEST_TEST_THREADS: 24
  MBX_CACHE_LINKS: 1
  MBX_REMOTE_URL: 
  VERSION: 1.29.2
##[endgroup]
##[end-action id=__self_2.__run_3;outcome=success;conclusion=success;duration_ms=11]
##[start-action display=Sweep the cache before building;id=__self_2.__run_4]
##[group]Run config="$HOME/.config/mbx/config.toml"
�[36;1mconfig="$HOME/.config/mbx/config.toml"�[0m
�[36;1mmkdir -p "${config%/*}"�[0m
�[36;1mprintf '[gc]\nauto = false\n' > "$config"�[0m
�[36;1mmbx gc�[0m
shell: /nix/store/1mv3qz005gkbalxfghk4y3s8ayv4d2dl-bash-interactive-5.3p15/bin/bash --noprofile --norc -e -o pipefail {0}
env:
  BASE: 55b6d703ddca1f1347dec81541b179d9ab162b56
  CHECK_FAIL_FAST: 1
  NEXTEST_TEST_THREADS: 24
  MBX_CACHE_LINKS: 1
  MBX_REMOTE_URL: 
##[endgroup]
evicted 0 objects and 0 action results (0 B logical); 50.0 GiB logical remain
##[end-action id=__self_2.__run_4;outcome=success;conclusion=success;duration_ms=730]
##[start-action display=Check the cache;id=__self_2.__run_5]
##[end-action id=__self_2.__run_5;outcome=skipped;conclusion=skipped;duration_ms=0]
##[start-action display=Cargo shim;id=__self_2.__run_6]
##[group]Run mbx setup --yes
�[36;1mmbx setup --yes�[0m
�[36;1mshim=$(mbx setup --status 2>/dev/null | sed -n '1s/.*: //p' || true)�[0m
�[36;1mif [ ! -e "$shim" ]; then�[0m
�[36;1m  echo "::error::mbx setup installed no Cargo shim: $(mbx setup --status 2>&1)"�[0m
�[36;1m  exit 1�[0m
�[36;1mfi�[0m
�[36;1mecho "${shim%[/\\]*}" >> "$GITHUB_PATH"�[0m
shell: /nix/store/1mv3qz005gkbalxfghk4y3s8ayv4d2dl-bash-interactive-5.3p15/bin/bash --noprofile --norc -e -o pipefail {0}
env:
  BASE: 55b6d703ddca1f1347dec81541b179d9ab162b56
  CHECK_FAIL_FAST: 1
  NEXTEST_TEST_THREADS: 24
  MBX_CACHE_LINKS: 1
  MBX_REMOTE_URL: 
##[endgroup]
refreshed the Cargo shim at /var/cache/github-runner-home/.local/share/mbx/bin/cargo
##[end-action id=__self_2.__run_6;outcome=success;conclusion=success;duration_ms=40]
##[group]Run rm -rf target/cargo-timings
�[36;1mrm -rf target/cargo-timings�[0m
�[36;1mnix develop --command just ci "$BASE"�[0m
shell: /nix/store/1mv3qz005gkbalxfghk4y3s8ayv4d2dl-bash-interactive-5.3p15/bin/bash -e {0}
env:
  BASE: 55b6d703ddca1f1347dec81541b179d9ab162b56
  CHECK_FAIL_FAST: 1
  NEXTEST_TEST_THREADS: 24
  MBX_CACHE_LINKS: 1
  MBX_REMOTE_URL: 
##[endgroup]
warning: ignoring untrusted flake configuration setting 'extra-substituters'.
Pass '--accept-flake-config' to trust it
warning: ignoring untrusted flake configuration setting 'extra-trusted-public-keys'.
Pass '--accept-flake-config' to trust it
warning: ignoring untrusted flake configuration setting 'fallback'.
Pass '--accept-flake-config' to trust it
CI_STRICT=1 NEXTEST_PROFILE=ci sh/dispatch.sh ci "$BASE"
changed: base 55b6d703ddca1f1347dec81541b179d9ab162b56
ci: check biome started
ci: check quest started
ci: check shell started
ci: check quest failed in 2s
ci: check shell cancelled in 2s
##[group]check quest
Dev-shell quest: /nix/store/pwg8xw04qkakb329k00lfrw99vrb0rb9-quest-0.1.0/bin/quest
quest: quest/m2/ietf-scope/README.md: quest title must be '# [XS|S|M|L|XL] Title'
##[endgroup]
##[group]check shell
##[endgroup]
ci: check biome cancelled in 2s
##[group]check biome
uv run --no-project python sh/js/install.py frozen
[0.05ms] ".env"
bun install v1.4.2 (744846f84)
Resolving dependencies
Resolved, downloaded and extracted [1]
error: recipe `biome` failed on line 142 with exit code 143
##[endgroup]
##[error]ci: check quest failed
ci: wall and CPU seconds per module
     2       0  check biome (cancelled)
     2       2  check quest (failed)
     2       0  check shell (cancelled)
     2       3  whole run
error: recipe `ci` failed on line 119 with exit code 1
##[error]Process completed with exit code 1.
##[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: 55b6d703ddca1f1347dec81541b179d9ab162b56
  CHECK_FAIL_FAST: 1
  NEXTEST_TEST_THREADS: 24
  MBX_CACHE_LINKS: 1
  MBX_REMOTE_URL: 
##[endgroup]
No files were found with the provided path: target/cargo-timings/cargo-timing-*.html. No artifacts will be uploaded.
Post job cleanup.
##[start-action display=Run jdx/mr-boxington-action@88acf2bb50552c7c508cbac13e5f8c576b95b1de;id=__629ae705-9f49-4715-a203-51a06364d4d8.mbx]
##[end-action id=__629ae705-9f49-4715-a203-51a06364d4d8.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/d1a40350-85ec-4f24-a88e-a6bfc1ec9c69' 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
Cleaning up orphan processes

(written by quest land watch)

@moq-bot

moq-bot Bot commented Nov 11, 2026

Copy link
Copy Markdown
Contributor

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

The scratch merge with base reproduces the queue failure. Base alone passes nix develop --command bash sh/quest.sh check (518 documents). Base has quest/m2/ietf-scope/serving.md; this PR deletes it, leaving the README without children and requiring a sized title. Choosing the size of the remaining work needs a maintainer decision, and the fixer instructions say never to edit quest/. No PR branch was changed.

Failure log lines 300–304:

ci: check quest failed in 2s
Dev-shell quest: /nix/store/pwg8xw04qkakb329k00lfrw99vrb0rb9-quest-0.1.0/bin/quest
quest: quest/m2/ietf-scope/README.md: quest title must be '# [XS|S|M|L|XL] Title'

Ran the full selected gate with nix develop --command just ci base on the scratch merge. Every other selected module passed: Biome, JavaScript checks/builds/tests, audio quality, Markdown, repository tooling checks/tests, shell, large files, text, TOML, Nix, and justfile. Only check quest failed. The checkout is restored to base; the result file remains uncommitted.

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

@moq-bot

moq-bot Bot commented Nov 11, 2026

Copy link
Copy Markdown
Contributor

codex, gpt-6.1-sol, medium effort land fixer: nix develop --command just ci base fails: quest: quest/m2/ietf-scope/README.md: quest title must be '&#35; [XS|S|M|L|XL] Title'; deleting the last child makes the epic a standalone quest.. Recommendation: Choose a size for the remaining work and add its tag to the README title; the fixer may not edit quest/.

ci: check quest failed in 2s
ci: check shell cancelled in 2s
##[group]check quest
Dev-shell quest: /nix/store/pwg8xw04qkakb329k00lfrw99vrb0rb9-quest-0.1.0/bin/quest
quest: quest/m2/ietf-scope/README.md: quest title must be '# [XS|S|M|L|XL] Title'

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

@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 — the delta since the prior pullfrog review (442b6706b..f9cbd2e2b) is the quest README rewrite plus a merge of main; no JS behavior changed.

  • The epic README becomes a standalone [S] docs quest. quest/m2/ietf-scope/README.md retitles to [S] Docs state the frozen moq-transport scope, restates the goal as the remaining docs work (doc/concept/, the IETF draft, and the interop matrix), records the 2026-11-11 sizing decision, and gains the [S] bracket that a leaf quest needs once the last child is deleted. No child links remain, and its Related link to audit-code.md resolves.
  • The merge keeps main's newer changes inside the PR-touched files. #8444's in-band AUTH removal and #8474's MAX_CACHE_DURATION change sit alongside the PR's FETCH and SUBSCRIBE_TRACKS refusals, and git diff --name-status main...HEAD still lists only the 22 intended files (3 deletions); rs/ remains byte-identical to main.
  • Verified at the head: bunx tsc --noEmit -p net/tsconfig.json is clean, cd js && bun test net/src reports 3106 pass / 1 skip / 0 fail, bash -n passes on test/interop/interop.sh and sh/gh/nightly.sh, and nothing in the tree references ietf-scope/serving or ietf-js-joining-fetch.

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 11, 2026
Merged via the queue into main with commit 116a3d9 Nov 11, 2026
6 checks passed
@kixelated
kixelated deleted the quest/m2/ietf-scope/serving branch November 11, 2026 21:00
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