diff --git a/.github/workflows/cache.yml b/.github/workflows/cache.yml index ceabd2cdd0..639de6c3f0 100644 --- a/.github/workflows/cache.yml +++ b/.github/workflows/cache.yml @@ -104,7 +104,7 @@ jobs: # and the test artifacts (codegen + linked test binaries). They share # little, and a PR usually needs both. - name: Check - run: nix develop --command just check-all + run: nix develop --command just check --all env: MOQ_STRICT: 1 diff --git a/.github/workflows/smoke.yml b/.github/workflows/smoke.yml index f351660800..761441f51e 100644 --- a/.github/workflows/smoke.yml +++ b/.github/workflows/smoke.yml @@ -81,7 +81,7 @@ jobs: shell: bash -leo pipefail {0} - name: Smoke (full matrix) - run: nix develop --command just test smoke-full + run: nix develop --command just test smoke --all shell: bash -leo pipefail {0} - name: Negative control diff --git a/.gitignore b/.gitignore index 8d90ed6bc9..414686073c 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ # Claude Code scratch space. These are untracked working directories, and # `just _changed` counts untracked files, so leaving them visible pushes the # changed-file list past its cap and silently turns every scoped `just check` -# into `check-all`. The worktrees also carry their own biome.jsonc, which the +# into `check --all`. The worktrees also carry their own biome.jsonc, which the # unscoped run then rejects as a nested root config. /.claude/cache/ /.claude/tmp/ diff --git a/CLAUDE.md b/CLAUDE.md index 536d21798a..5166fb605c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -107,6 +107,6 @@ These diff the branch against its base and only run the affected packages. Any wire-format change updates its matching IETF draft in the same PR, including framing, message fields, enum values, and version negotiation. Use the feature-specific draft for extensions and validate with `just drafts check`. See `drafts/CLAUDE.md`. -For wire, `moq-ffi`, or gateway changes, also run `just test smoke-full` for cross-language interop; plain `smoke` is Rust-only. +For wire, `moq-ffi`, or gateway changes, also run `just test smoke --all` for cross-language interop; plain `smoke` is Rust-only. When a CLI interface changes, search the whole repo for the binary name and update every example invocation, including docs and demo recipes. Check examples against `--help`. diff --git a/README.md b/README.md index 63b25a0daa..af82693845 100644 --- a/README.md +++ b/README.md @@ -132,9 +132,9 @@ just test just fix # Same as the above, over every package -just check-all +just check --all just test all -just fix-all +just fix --all ``` CI runs these same two recipes, so they cover the same ground locally. It sets two things you don't: `MOQ_STRICT=1`, which turns a missing tool into an error instead of a skipped check, and `NEXTEST_PROFILE=ci`, which allows a longer hang timeout. diff --git a/doc/setup/dev.md b/doc/setup/dev.md index 823966c061..9aaf57bad6 100644 --- a/doc/setup/dev.md +++ b/doc/setup/dev.md @@ -16,7 +16,7 @@ match CI. | `just fix` | Format and lint the packages this branch changed. | | `just check` | Compile and lint the same scope. This is what CI runs. | | `just test` | Run tests for the same scope. | -| `just fix-all`, `just check-all`, `just test all` | The same, over every package. | +| `just fix --all`, `just check --all`, `just test all` | The same, over every package. | | `just pub bbb ` | Publish Big Buck Bunny (also `tos`, `clock`, `gst`, `hls`). | | `just sub gst bbb ` | Play a broadcast through GStreamer. | | `just relay` | Run a local relay on its own. | diff --git a/justfile b/justfile index 2f802df985..a48833cafe 100644 --- a/justfile +++ b/justfile @@ -364,7 +364,7 @@ _changed-test $LIMIT=changed_max: fail() { echo "changed: _changed-test: $1" >&2; exit 1; } # Synthetic sizes rather than whatever the working tree happens to hold: a - # clean checkout has no diff at all, and `check-all` runs there (cache.yml + # clean checkout has no diff at all, and `check --all` runs there (cache.yml # warms the cache from `main`), so a test keyed on the real list would take # down the one job allowed to write the shared Rust cache. [[ "$(printf 'aaaa' | just _changed-cap 3)" == ALL ]] || fail "over budget must print ALL" @@ -424,7 +424,7 @@ _echo $VALUE: # Required per scope, mirroring what `check` actually dispatches for a given # diff: demanding gradle on a docs-only PR would fail a run that was never going # to invoke it. Takes the same file list as the dispatch, or `ALL` to require -# everything (`check-all`). +# everything (`check --all`). # # One deliberate absence: swift exists only on macOS, and `swift check` skips # off-macOS by design; swift.yml is its real gate. @@ -480,36 +480,49 @@ _tools $FILES="": # Lints and compiles only the packages the branch changed plus everything # depending on them, so several worktrees can build at once. This is also what # CI runs (with MOQ_STRICT=1), so there is no second, drifting definition of -# "checked". Tests are the sibling `just test`; `check-all` is the unscoped suite. +# "checked". Tests are the sibling `just test`; `check --all` is the unscoped suite. # Lint and compile what the branch changed since BASE, plus its dependents. -check $BASE="": +check $BASE="" *args: #!/usr/bin/env bash set -euo pipefail - files=$(just _changed "$BASE") + if [[ "$BASE" == --all ]]; then + files=ALL + else + files=$(just _changed "$BASE") + fi # `_changed` says ALL when the list outgrew what argv can carry. The unscoped # suite is the path that passes no list at all, so it is the one that works. - if [[ "$files" == ALL ]]; then - just check-all - exit 0 - fi - - just _tools "$files" - # The dispatch below lives in these two files, and neither matches any # language scope, so a PR that rewrites how CI dispatches would otherwise - # validate none of it. Hand off to the unscoped suite instead. - if grep -qE '^(justfile|test/justfile)$' <<< "$files"; then - echo "check: root orchestration changed; checking everything." >&2 - just check-all - exit 0 + # validate none of it. Widen to the unscoped suite instead. + if [[ "$files" != ALL ]] && grep -qE '^(justfile|test/justfile)$' <<< "$files"; then + echo "check: root orchestration changed; checking everything." >&2 + files=ALL fi - # An empty list means "force-run" to the per-lang recipes, which is the - # wrong semantic here, so don't dispatch at all. - if [[ -n "$files" ]]; then + just _tools "$files" + + if [[ "$files" == ALL ]]; then + just js check + just drafts check + just rs check --workspace --exclude moq-net-fuzz {{ args }} + just rs tokio-features + just --justfile bench/justfile check + cargo run --quiet --locked --package quest -- check + # Not covered by the line above: moq-wasm only exists on the wasm32 target. + just rs wasm + just py check + just kt check + just swift check + just go check + just dart check + just obs check + just obs compile + just _flake + elif [[ -n "$files" ]]; then just js check "$files" just rs check-changed "$files" if echo "$files" | grep -q '^bench/'; then @@ -560,27 +573,6 @@ check $BASE="": just _check-common -# Check every package in every language, plus moq-wasm. -check-all *args: - just _tools ALL - just js check - just drafts check - just rs check --workspace --exclude moq-net-fuzz {{ args }} - just rs tokio-features - just --justfile bench/justfile check - cargo run --quiet --locked --package quest -- check - # Not covered by the line above: moq-wasm only exists on the wasm32 target. - just rs wasm - just py check - just kt check - just swift check - just go check - just dart check - just obs check - just obs compile - just _flake - just _check-common - # Skips when nix is absent: the flake is not a precondition for working on the # repo, and `_tools` already makes it required under MOQ_STRICT. @@ -589,7 +581,7 @@ check-all *args: _flake: @if command -v nix >/dev/null 2>&1; then nix flake check; fi -# Repository-wide non-compiling checks shared by `check` and `check-all`. +# Repository-wide non-compiling checks shared by scoped and unscoped `check`. # Optional shell, workflow, TOML, Nix, and justfile lints skip if missing. # # `bun install` because remark-cli lives in node_modules and `just js check` is @@ -745,7 +737,7 @@ _markdown-test: echo "markdown: check/fix regression ok" -# Repository-wide lints, shared by `check` and `check-all`. +# Repository-wide lints, shared by scoped and unscoped `check`. [private] _check-common: just _changed-test @@ -759,22 +751,27 @@ _check-common: just gh check # Scoped exactly like `check`, because `clippy --fix` compiles what it fixes. -# `fix-all` is the unscoped version. +# Pass `--all` for the unscoped version. # Auto-fix lint and formatting for what the branch changed since BASE. fix $BASE="": #!/usr/bin/env bash set -euo pipefail - files=$(just _changed "$BASE") + if [[ "$BASE" == --all ]]; then + files=ALL + else + files=$(just _changed "$BASE") + fi # Mirrors `check`: too long for argv means fix everything instead. if [[ "$files" == ALL ]]; then - just fix-all - exit 0 - fi - - if [[ -n "$files" ]]; then + just js fix + just rs fix --workspace --exclude moq-net-fuzz + just py fix + just dart fix + just obs fix + elif [[ -n "$files" ]]; then just js fix "$files" just rs fix-changed "$files" just py fix "$files" @@ -788,19 +785,10 @@ fix $BASE="": just _fix-common -# Auto-fix every JavaScript workspace and every default Rust member. -fix-all: - just js fix - just rs fix --workspace --exclude moq-net-fuzz - just py fix - just dart fix - just obs fix - just _fix-common - # Optional tools skip if missing locally. `bun install` for the same reason as # `_check-common`. -# Repository-wide fixes, shared by `fix` and `fix-all`. +# Repository-wide fixes, shared by scoped and unscoped `fix`. [private] _fix-common: bun install diff --git a/quest/dev/api-origin-scopes.md b/quest/dev/api-origin-scopes.md index 626202c16a..fc814bd8fd 100644 --- a/quest/dev/api-origin-scopes.md +++ b/quest/dev/api-origin-scopes.md @@ -19,7 +19,7 @@ cross-language binding mirror that PR explicitly left unfinished. with `captures` on `MoqAnnounceUpdate`; `rs/libmoq` (`moq_announce_update` gains the captures under the existing string-out convention), the `py`, `swift`, `kt`, `dart`, and `go` wrappers, - `doc/lib/*` for each, and `just test smoke-full`. + `doc/lib/*` for each, and `just test smoke --all`. - `announced_broadcast(path)` keeps its shape; it is the literal case. Public API: breaking on moq-ffi, libmoq, and every binding, so on dev. diff --git a/quest/dev/merge-dev.md b/quest/dev/merge-dev.md index 9fd3ad2c07..da006815a6 100644 --- a/quest/dev/merge-dev.md +++ b/quest/dev/merge-dev.md @@ -11,8 +11,8 @@ adopts. ## Plan main is merged into dev as of 2026-09-12, so the merge PR opens from dev with -the list below as closing keywords once the gates clear. Run `just check-all`, -`just test all`, `just test smoke-full`, and `just bench origin/main` on the +the list below as closing keywords once the gates clear. Run `just check --all`, +`just test all`, `just test smoke --all`, and `just bench origin/main` on the merged tree, and record the revision the proof ran on. Resolve by behavior, never by side. The traps the last main-into-dev merge diff --git a/quest/next/3021-moq-gst-anchor-generated-media-timelines-to-wall-clock.md b/quest/next/3021-moq-gst-anchor-generated-media-timelines-to-wall-clock.md index a58ac1f826..ec036d3b4c 100644 --- a/quest/next/3021-moq-gst-anchor-generated-media-timelines-to-wall-clock.md +++ b/quest/next/3021-moq-gst-anchor-generated-media-timelines-to-wall-clock.md @@ -30,7 +30,7 @@ delayed first buffers, multiple pads, timescale conversion, numeric limits, source restarts, idle gaps, and a system-clock adjustment. Existing timeline records remain unchanged. Consume the prerequisite's catalog format; no new transport TIMESTAMP/TIMESCALE semantics, synchronization protocol, or drift -correction is introduced here. Run the GStreamer CI and smoke-full lanes. +correction is introduced here. Run the GStreamer CI and `smoke --all` lanes. ## Required diff --git a/quest/next/README.md b/quest/next/README.md index ccffb47203..cefaba7348 100644 --- a/quest/next/README.md +++ b/quest/next/README.md @@ -34,7 +34,7 @@ Implementation that depends on a dev contract requires - [@moq/net additive](/quest/next/js-net-additive.md) - a live-broadcasts getter, `Table.dynamic`, credential refresh before redial, inferred `share` - [Last frame duration](/quest/next/mux-last-frame-duration.md) - a group's final frame keeps its duration on 90 kHz and nanosecond imports - [Snapshot clobber](/quest/next/json-modify-clobber.md) - a snapshot edit fails on a shape mismatch instead of seeding a default -- [Binding audio tests](/quest/next/binding-audio-tests.md) - every binding proves the Opus frame duration and throwing setters it exposes, and smoke-full publishes audio with an explicit config +- [Binding audio tests](/quest/next/binding-audio-tests.md) - every binding proves the Opus frame duration and throwing setters it exposes, and `smoke --all` publishes audio with an explicit config - [Decode format](/quest/next/ffi-decode-format.md) - the C-only decode pixel format knob reaches every uniffi binding - [JSON mutate](/quest/next/json-mutate.md) - Rust gains the closure edit JS already has, beside the guard - [Publisher clocks](/quest/next/publisher-clock.md) - wire the shared clock through native and browser publisher restarts diff --git a/quest/next/auth/moq-transport.md b/quest/next/auth/moq-transport.md index 35e84d1cd2..031c05db16 100644 --- a/quest/next/auth/moq-transport.md +++ b/quest/next/auth/moq-transport.md @@ -96,7 +96,7 @@ union without disconnecting, cancelling only work that loses authorization; an out-of-scope new publication aborts before any PUBLISH_NAMESPACE is written; a peer without the option (the relay built without it, and the interop runner's reference relay) sees no AUTH stream and keeps working. Run -`just test smoke-full`. +`just test smoke --all`. On main, additive. diff --git a/quest/next/binding-audio-tests.md b/quest/next/binding-audio-tests.md index c9f9fdc066..4ebf4a5838 100644 --- a/quest/next/binding-audio-tests.md +++ b/quest/next/binding-audio-tests.md @@ -7,7 +7,7 @@ consumer's. Today only Python asserts a sub-millisecond Opus frame duration (`py/moq-rs/tests/test_local.py`), Go pins only the 20 ms default, Kotlin and Swift never set one, no Kotlin test proves the fallible configuration setters throw (#3642 added the Python and Swift cases and skipped `kt/`), and -`smoke-full` publishes audio from no binding with an explicit codec config. +`smoke --all` publishes audio from no binding with an explicit codec config. ## Plan @@ -18,7 +18,7 @@ refuses a value outside the Opus set. Add a Kotlin test that a setter called during an in-flight connect throws and the client is cancelled, mirroring `py/moq-rs/tests/test_server.py`. Give the smoke publishers under `test/smoke/` an Opus config with a non-default frame duration so -`just test smoke-full` exercises the audio path across bindings. Dart omits +`just test smoke --all` exercises the audio path across bindings. Dart omits audio by design ([Dart codecs](/quest/next/dart-codecs.md)). Public API: none. Wire: none. diff --git a/quest/next/check-uring-feature.md b/quest/next/check-uring-feature.md index ac08a2e4bd..5ec8fc0572 100644 --- a/quest/next/check-uring-feature.md +++ b/quest/next/check-uring-feature.md @@ -13,7 +13,7 @@ feature for days (fixed in #3749) with every PR green. In `rs/justfile`, `check-changed` runs the feature clippy from the nightly `uring` recipe (`--features io-uring`, `-D warnings`, no tests) when -`_select` includes moq-relay; `check-all` already covers it through `bench +`_select` includes moq-relay; `check --all` already covers it through `bench check`. Keep the nightly `uring` matrix for the tests. Verify by breaking the feature on a scratch branch and watching `just check` fail on an `rs/moq-relay` diff, and by timing the added compile on a warm cache. diff --git a/quest/next/cpp/package.md b/quest/next/cpp/package.md index 614bd04888..251fae49ce 100644 --- a/quest/next/cpp/package.md +++ b/quest/next/cpp/package.md @@ -5,7 +5,7 @@ `find_package(moq)` or the tarball's `moq.pc` gives a C++17 program ``, and the program publishes and subscribes through the full moq-ffi surface with futures and `moq::expected`, `co_await`-able on C++20. -A `test/smoke/clients/cpp` client joins `just test smoke-full`, and +A `test/smoke/clients/cpp` client joins `just test smoke --all`, and `doc/lib/cpp` documents the package the way `doc/lib/go` does Go. ## Plan diff --git a/quest/next/cs/package.md b/quest/next/cs/package.md index 3ba638a0f2..508b37d589 100644 --- a/quest/next/cs/package.md +++ b/quest/next/cs/package.md @@ -6,7 +6,7 @@ with the mocking library on NuGet) gives a .NET 8 program the full moq-ffi surface as `await`-able classes, with `runtimes//native` libraries for the release matrix. A `test/smoke/clients/cs` client joins `just test -smoke-full` and `doc/lib/cs` documents the package. +smoke --all` and `doc/lib/cs` documents the package. ## Plan diff --git a/quest/next/decoded-frames.md b/quest/next/decoded-frames.md index 44fda0b3e1..5987004b50 100644 --- a/quest/next/decoded-frames.md +++ b/quest/next/decoded-frames.md @@ -35,7 +35,7 @@ fields to a published C struct is not automatically additive. Test handle release, conversion failures, cancellation, delayed consumption, and retained ownership through the existing libmoq/FFI test lanes. Platform adapters own their hardware import proof. Update `moq.h`, affected wrappers, -and C/binding documentation; run `just test smoke-full` in CI. +and C/binding documentation; run `just test smoke --all` in CI. Public API: owned frame access and conversion at the binding boundary. Wire: none. Consume the settled main frame/output contracts without replacing them. diff --git a/quest/next/ffi-websocket-fallback.md b/quest/next/ffi-websocket-fallback.md index d5d81636a7..3b2cf2e0c2 100644 --- a/quest/next/ffi-websocket-fallback.md +++ b/quest/next/ffi-websocket-fallback.md @@ -49,4 +49,4 @@ Cross-package sync from the root CLAUDE.md table, with the lines that mirror Tests: a moq-ffi unit test that each setter lands in `config.websocket`, and a wrapper test where the tls setter is covered today -(`py/moq-rs/tests/test_server.py`). `just test smoke-full` for the bindings. +(`py/moq-rs/tests/test_server.py`). `just test smoke --all` for the bindings. diff --git a/quest/next/flate/bindings.md b/quest/next/flate/bindings.md index 04e7eeab8d..f01ca4ea54 100644 --- a/quest/next/flate/bindings.md +++ b/quest/next/flate/bindings.md @@ -46,7 +46,7 @@ sibling. Document in `doc/lib/{c,py,swift,kt,go,dart}` beside the JSON entry. Tests: a moq-ffi round trip next to `json_snapshot_roundtrip`, a libmoq C round trip in `src/test.rs`, and one cross-language check that a C-published group decodes with the shared vector from the track quest. Run -`just test smoke-full`. +`just test smoke --all`. Public API impact: additive on moq-ffi, libmoq, and every wrapper; `main`. Wire impact: none. diff --git a/quest/next/intra-refresh/bindings.md b/quest/next/intra-refresh/bindings.md index c4eff0ebe4..318855a30e 100644 --- a/quest/next/intra-refresh/bindings.md +++ b/quest/next/intra-refresh/bindings.md @@ -20,7 +20,7 @@ and changes the libmoq C struct layout, so it targets `dev`. - Hand-written wrappers and docs per the cross-package table: `py/moq-rs`, `swift/`, `kt/`, `dart/moq`, `go/wrapper/moq`, and `doc/lib/{py,swift,kt,go,dart,c}`. Go gets no uniffi default, so its zero value must read as keyframe mode. -- Run `just test smoke-full` for the cross-language check. +- Run `just test smoke --all` for the cross-language check. ## Required diff --git a/quest/next/js-fetch.md b/quest/next/js-fetch.md index 16eb1d0096..0509c52e25 100644 --- a/quest/next/js-fetch.md +++ b/quest/next/js-fetch.md @@ -30,7 +30,7 @@ Use an in-memory application responder for verification, without OPFS or an archive writer. A browser publisher serves a native subscriber after a group is evicted or was never cached; verify exact group/frame replay, empty groups, missing groups, concurrent requests, and cancellation while awaiting a reply. -Run the supported-draft matrix and `just test smoke-full` through CI. +Run the supported-draft matrix and `just test smoke --all` through CI. Public API: a producer-side on-demand group request surface in `@moq/net`, matching Rust's lifecycle. Wire: implement the existing supported IETF FETCH diff --git a/quest/next/js-hotpath/publish-audio.md b/quest/next/js-hotpath/publish-audio.md index c45b50d6af..75edaad701 100644 --- a/quest/next/js-hotpath/publish-audio.md +++ b/quest/next/js-hotpath/publish-audio.md @@ -30,7 +30,7 @@ Choose a group duration only from those comparisons; retain one-frame groups if the overhead saving does not justify the latency or loss tradeoff. Add CI regressions for final-group completion, discontinuity, late join, -reconnect, and audio delivery on stream-only sessions. Run smoke-full for the +reconnect, and audio delivery on stream-only sessions. Run `smoke --all` for the cross-language delivery paths. Reuse the audio quality harness's metrics and impairment fixtures when available rather than creating a second definition. diff --git a/quest/next/mobile/ffi-video-consumer.md b/quest/next/mobile/ffi-video-consumer.md index 4463023d42..42163c4367 100644 --- a/quest/next/mobile/ffi-video-consumer.md +++ b/quest/next/mobile/ffi-video-consumer.md @@ -28,7 +28,7 @@ owns mobile capture; native mobile surface views remain deferred. its usable wrapper, codec-enabled artifacts, and decode proof to Dart codec parity. Document the temporary omission rather than shipping a stub. - Verify on an iOS simulator and an Android emulator with the smoke media, - and on macOS through libmoq so `just test smoke-full` covers it. + and on macOS through libmoq so `just test smoke --all` covers it. Dart codec parity requires this quest and owns the remaining Dart integration. This quest must not require Dart artifact enablement, which would create a cycle. diff --git a/quest/next/rtmp-interleaving.md b/quest/next/rtmp-interleaving.md index 2d03f16f8f..4ff5ba51fb 100644 --- a/quest/next/rtmp-interleaving.md +++ b/quest/next/rtmp-interleaving.md @@ -36,7 +36,7 @@ workloads before implementation is accepted. Test each limit independently, including many incomplete IDs, and verify reclamation on completion, teardown, and repeated ID reuse. Keep this correctness repair separate from shared-buffer or copy optimizations. Add the regression and fragmented/header-format cases to normal -RTMP CI tests and run smoke-full for gateway interoperability. +RTMP CI tests and run `smoke --all` for gateway interoperability. ## Related diff --git a/quest/next/tooling/justfiles.md b/quest/next/tooling/justfiles.md index ecee8b6dd2..5ff60cfd0d 100644 --- a/quest/next/tooling/justfiles.md +++ b/quest/next/tooling/justfiles.md @@ -47,7 +47,7 @@ Dispatch: - Passing a path instead of the list kills the argv budget: `changed_max`, `_changed-cap`, `_changed-test`, `_echo`, and the E2BIG commentary go. -- `check-all`, `fix-all`, and `test all` keep their names; cache.yml, +- `check --all`, `fix --all`, and `test all` keep their names; cache.yml, nightly.yml, and the docs call them. Delete: @@ -90,7 +90,7 @@ and `preset` bodies. Docs: `doc/setup/dev.md`, `CONTRIBUTING.md`, `test/README.md`, and the `CLAUDE.md` mentions of `just wasm` follow the survivors. Verify with `just -check`, `just test`, and `just check-all`, and confirm every recipe name +check`, `just test`, and `just check --all`, and confirm every recipe name check.yml, cache.yml, nightly.yml, smoke.yml, wasm.yml, obs.yml, swift.yml, and release-*.yml invoke still resolves. diff --git a/quest/next/uniffi-cli-feature.md b/quest/next/uniffi-cli-feature.md index 65b69c1de6..8268802052 100644 --- a/quest/next/uniffi-cli-feature.md +++ b/quest/next/uniffi-cli-feature.md @@ -26,7 +26,7 @@ Every caller moves to the new package: `rs/moq-ffi/build.sh`, end. The Python wheel goes through maturin and does not run the binary. Verify with `cargo tree -p moq-ffi -e normal | grep -c uniffi_bindgen` at zero -and a before/after size of `libmoq_ffi.a`, then `just test smoke-full` for the +and a before/after size of `libmoq_ffi.a`, then `just test smoke --all` for the generated bindings. ## Related diff --git a/rs/justfile b/rs/justfile index 29b1b31dad..bfecde4795 100644 --- a/rs/justfile +++ b/rs/justfile @@ -13,7 +13,7 @@ set working-directory := '..' # needs a nightly toolchain and sanitizer flags, so `just rs fuzz` is the one recipe # that may compile it. Every `--workspace` below therefore carries this, and a new # one that forgets it pays a vendored C++ libFuzzer build for nothing. The root -# justfile's `check-all` and `fix-all` spell it out, since a module cannot read this. +# justfile's `check --all` and `fix --all` spell it out, since a module cannot read this. no_fuzz := "--exclude moq-net-fuzz" default: diff --git a/rs/moq-ffi/CLAUDE.md b/rs/moq-ffi/CLAUDE.md index 6ceb845008..e1b8f55192 100644 --- a/rs/moq-ffi/CLAUDE.md +++ b/rs/moq-ffi/CLAUDE.md @@ -7,7 +7,7 @@ Mirror every change in the same PR: - `rs/libmoq`: the C staticlib (`cbindgen` emits `moq.h`). If the C ABI moved, also `cpp/obs`. - Hand-written wrappers: `py/moq-rs`, `go/wrapper/moq`, `dart/moq`, `swift/Sources`, `kt/moq`. The `go/ffi` and `dart/moq_ffi` layers regenerate, but a new method still needs its ergonomic wrapper. - Docs under `doc/lib/{py,go,dart,swift,kt,c}`. -- Then `just test smoke-full` for the interop matrix. +- Then `just test smoke --all` for the interop matrix. Keep the wrappers thin and their names aligned with the Rust API. Swift and Python extend additively through labeled/keyword args with defaults; Go, Kotlin, and Dart take an options struct like Rust. diff --git a/rs/moq-net/CLAUDE.md b/rs/moq-net/CLAUDE.md index 8d3807cde1..74e9359b01 100644 --- a/rs/moq-net/CLAUDE.md +++ b/rs/moq-net/CLAUDE.md @@ -13,4 +13,4 @@ The wire layer. Generic over the transport and media-agnostic: the relay never i - `just rs fuzz ` (`lite`, `ietf`, `varint`, `path`) needs nightly. The target bodies live in `src/fuzz.rs`; `fuzz/regressions//` replays under `just test`, so commit every crash input there. - `just rs loom` model-checks the concurrent handoffs. A hang is a lost wakeup, not a flake. -- `just test smoke-full` runs the cross-language interop matrix after a wire change. +- `just test smoke --all` runs the cross-language interop matrix after a wire change. diff --git a/test/justfile b/test/justfile index 5f90659310..52932ff6cf 100644 --- a/test/justfile +++ b/test/justfile @@ -66,19 +66,21 @@ all: just py test # Cross-language media interop smoke test, built from this checkout. Stands up a -# relay and runs the publisher x subscriber matrix. Default: rust only. Pass -# flags through, e.g. - -# just test smoke --publishers rust,python,js --subscribers rust,c +# relay and runs the publisher x subscriber matrix. Default: rust only (fast +# sanity check). `smoke --all` runs the full matrix: rust + python + go + +# browser publish; everyone subscribes (incl. native node/bun JS, the C libmoq +# client, and the GStreamer moqsrc plugin). --timeout 30 gives headless Chromium +# cold-start headroom. Other flags pass through, e.g. +# `just test smoke --publishers rust,python --subscribers rust,c`. smoke *args: - ./smoke/smoke.sh {{ args }} - -# Full interop matrix: rust + python + go + browser publish; everyone subscribes -# (incl. native node/bun JS, the C libmoq client, and the GStreamer moqsrc - -# plugin). --timeout 30 gives headless Chromium cold-start headroom. -smoke-full: - ./smoke/smoke.sh --publishers rust,python,go,js --subscribers rust,python,go,js,js-native-node,js-native-bun,c,gst --timeout 30 + #!/usr/bin/env bash + set -euo pipefail + if [[ "${1:-}" == --all ]]; then + shift + ./smoke/smoke.sh --publishers rust,python,go,js --subscribers rust,python,go,js,js-native-node,js-native-bun,c,gst --timeout 30 "$@" + else + ./smoke/smoke.sh "$@" + fi # Negative control: no publisher, every subscriber must time out (proves the diff --git a/test/smoke/README.md b/test/smoke/README.md index acc4cc2de9..8761cd33ce 100644 --- a/test/smoke/README.md +++ b/test/smoke/README.md @@ -69,7 +69,7 @@ Playwright's Chromium, which just test smoke # Full matrix: rust/python/go/browser publish; everyone subscribes. -just test smoke-full +just test smoke --all # Pick your own axes: just test smoke --publishers rust,python --subscribers rust,c,js-native-bun