Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions quest/m0/interop-green/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,24 @@ above, on `moq-lite-07-wip` in Chromium, which the IETF22 fallback quest
owns. Scheduled run 42062226837 (2026-11-05) failed only P2P and the same
fallback audio stall in Chromium (`audioStalled:true`).

Scheduled run
[42245660435](https://github.com/moq-dev/moq/actions/runs/42245660435)
(2026-11-06, at 01d4edbe59, before the P2P fix
[moq-dev/moq#8001](https://github.com/moq-dev/moq/pull/8001) merged) had no
media, P2P, or fallback failure. It failed three deterministic steps, fixed in
this quest's PR:

- Harness regressions: `staging.test.py` stubbed only the examples
`interop.sh` runs itself, but `interop-socket-js` is built there and run
only by `socket.sh` since
[moq-dev/moq#7884](https://github.com/moq-dev/moq/pull/7884). The fixture
now stubs every example in the build list.
- Subscription termination: `just test bare-fin` built moq-net's lib tests
without the `async` feature its tests need, a configuration no other job
compiles, so dead code under it broke the build. The recipe now enables
`async`.
- Wire-compat: moq-cli 0.14.13 and moq-relay 0.17.13 made the
`moq-lite-07-wip` planned break stale again; remeasured, with the same 16
cells failing.

Public API: none. Wire: none.
6 changes: 3 additions & 3 deletions test/interop/compat/planned-breaks.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"moq-lite-07-wip": {
"reason": "Re-accepted by the maintainer (2026-10-13): this draft is unpublished and its wire is still changing. Remeasured 2026-11-03 against these releases, with the media lanes checking the audio tone: all 16 cross-version lite-07-wip media, publication, and FETCH cells fail, while its FETCH capability check and the stable lite-01 through lite-06 cells pass, including the Opus phase check (moq-cli keeps the Opus edit list since 0.14.10). Current and released lite-07-wip framing differs (long buffer, invalid value, protocol violation). Reassess when any affected release changes.",
"reason": "Re-accepted by the maintainer (2026-10-13): this draft is unpublished and its wire is still changing. Remeasured 2026-11-06 against these releases, with the media lanes checking the audio tone: all 16 cross-version lite-07-wip media, publication, and FETCH cells fail, while its FETCH capability check and the stable lite-01 through lite-06 cells pass, including the Opus phase check (moq-cli keeps the Opus edit list since 0.14.10). Current and released lite-07-wip framing differs (long buffer, invalid value, protocol violation). Reassess when any affected release changes.",
"releases": {
"moq-cli": "0.14.12",
"moq-relay": "0.17.12",
"moq-cli": "0.14.13",
"moq-relay": "0.17.13",
"@moq/net": "0.4.7"
}
}
Expand Down
4 changes: 3 additions & 1 deletion test/interop/staging.test.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,9 @@ def test_interop_consumers_survive_collection(self):
source = (ROOT / "test/interop/interop.sh").read_text()
setup, runtime = source.split("# ── setup", 1)
setup = re.sub(r"^INTEROP_DIR=.*$", "INTEROP_DIR=" + shlex.quote(str(ROOT / "test/interop")), setup, flags=re.M)
for name in re.findall(r"\$EXAMPLES/(interop-[\w-]+)", runtime):
# Stage every example the build list names, including those only helper scripts run.
built = re.search(r"examples=\(([^)]*)\)", source).group(1).split()
for name in set(built) | set(re.findall(r"\$EXAMPLES/(interop-[\w-]+)", runtime)):
executable(self.profile / "examples" / name, "echo owned-example\n")
# Exercise dereferencing, including a symlink to a cache outside target.
cached = self.root / "cache"
Expand Down
2 changes: 1 addition & 1 deletion test/justfile
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ receive-credit:

# Cross-language subscription termination over in-memory transports.
bare-fin:
just rs test -p moq-net --lib bare_fin_interop owed_tail_death_interop --run-ignored all
just rs test -p moq-net --features async --lib bare_fin_interop owed_tail_death_interop --run-ignored all

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.

The sibling interop recipe at line 70 runs the same moq-net lib tests without --features async and only builds because selecting -p moq-crypto unifies in that crate's dev-dependency's moq-net/async; if that dev-dependency or the package selection changes, this exact failure returns there with the same misleading compile error. Naming moq-net/async there as well would make the requirement explicit instead of accidental.

Technical details
# `moq-net` lib tests need `async` in every recipe that selects them

## Affected sites
- `test/justfile:70` — `interop` runs `just rs test -p moq-net -p moq-crypto --lib ...` without `--features async`, and compiles only because `rs/moq-crypto/Cargo.toml:54` declares `moq-net = { path = "../moq-net", features = ["async"] }` as a dev-dependency, which the shared invocation unifies in. The run log shows it building `moq-net` and passing 10 tests at the same commit where `bare-fin` alone failed.
- `rs/moq-net/src/model/group.rs:5480` — `mebibytes` and its siblings are async-only test helpers that are compiled in feature-off test builds; that dead-code warning is what `build.warnings = deny` turned into the `bare-fin` failure.

## Required outcome
- Any recipe that builds `moq-net` lib tests requests the `async` feature itself rather than inheriting it from another selected package's dev-dependency.

## Suggested approach (optional)
- Add `--features moq-net/async` to the `interop` recipe's `just rs test` line (package-qualified, since `moq-crypto` also has an `async` feature).
- Optionally gate `mebibytes` behind `#[cfg(feature = "async")]`, so the feature-off config that `sh/rs/net-features.sh` compiles stays warning-free too.


# Explore JSON snapshot codec sequences with a fresh replayable seed.
json-properties:
Expand Down