Skip to content

obs-moq v0.6.18

Choose a tag to compare

@github-actions github-actions released this 23 Oct 06:22
· 1463 commits to main since this release
ab2e35d

What's Changed

  • docs: per-package MIGRATE.md as the single source for breaking changes by @kixelated in #5801
  • chore(nix): bump quest for the review-round caps by @kixelated in #5887
  • test(net): hold demand in the loom models now that bare handles are lazy by @kixelated in #5888
  • docs(agents): keep scratch in .scratch/, not target/ by @kixelated in #5816
  • test(net): wait out the jittered retry after a reset renewal by @kixelated in #5865
  • feat(rtsp): moq-rtsp crate and moq import rtsp by @kixelated in #5859
  • quest: compressed tracks in moq-net by @kixelated in #5885
  • test(gst): take the relay down on its live listener instead of rebinding its port by @kixelated in #5873
  • quest(ci): record platform queue measurements by @kixelated in #5684
  • refactor(quic)!: send options for streams and datagrams, private send domains by @kixelated in #5872
  • quest: replan archives around SUBSCRIBE_ALL by @kixelated in #5883
  • quest(m1): plan exact timestamps in every binding by @kixelated in #5890
  • quest: plan a wrapper seam over moq-net by @kixelated in #5875
  • quest: realtime uplink congestion control on receive timestamps by @kixelated in #5889
  • feat(mux): derive same-epoch importers' clock and eras from the epoch by @t0ms in #5625
  • Key session stats by a grant label instead of the auth root by @kixelated in #5731
  • docs(agents): judge impaired paths with bufferbloat, not random loss by @kixelated in #5867
  • quest: plan follow-ups from the quest-spawn round by @kixelated in #5869
  • quest(m2): fold mp4-atom dOps mapping into CMAF surround Opus by @kixelated in #5891
  • feat(e2ee)!: name tracks semantically through broadcast wrappers by @kixelated in #5876
  • fix(quic): send a client's queued Finished ahead of its close by @kixelated in #5721
  • ci(bench): publish measured nightly benchmark trends by @kixelated in #5759
  • quest(m2): plan a probe epic so sessions probe up to their target bitrate by @kixelated in #5863
  • feat(net)!: stream the largest track location by @kixelated in #5725
  • bench(net): measure unroutable requests under route churn by @kixelated in #5766
  • feat(quic)!: report acknowledged send-stream offsets, replacing Checkpoint with offsets by @kixelated in #5817
  • fix(net): consumers see the source's real error, never Dropped by @kixelated in #5729
  • chore(deps): Bump the nix group with 2 updates by @dependabot[bot] in #5896
  • chore(deps): Bump the github-actions group with 6 updates by @dependabot[bot] in #5901
  • chore(deps-dev): Bump ruff from 0.16.10 to 0.17.0 in the uv group by @dependabot[bot] in #5897
  • chore(deps): Bump the gradle group in /kt with 2 updates by @dependabot[bot] in #5900
  • chore(deps): Bump test from 1.32.0 to 1.33.0 in /dart/moq_ffi in the pub group across 1 directory by @dependabot[bot] in #5898
  • chore(deps): Bump the cargo group with 7 updates by @dependabot[bot] in #5902
  • quest(m1): plan a non-Clone group producer by @kixelated in #5892
  • obs: follow a broadcast's publisher restarts in the MoQ source by @kixelated in #5914
  • fix(rs): match wasm-bindgen to the nix dev shell's 0.2.129 CLI by @zshenker in #5911
  • feat(video)!: make the OpenH264 fallback opt-in, enabled for releases by @kixelated in #5771
  • fix(net): a fetch keeps its track read while it reads an open group by @kixelated in #5809
  • fix(net): hold JS readers for a track's pending tail by @kixelated in #5915
  • chore(deps): Bump the bun group across 4 directories with 10 updates by @dependabot[bot] in #5899
  • fix(quic): accept non-minimally encoded integer transport parameters by @zshenker in #5905
  • fix(quic): refuse a FIN below received stream data by @zshenker in #5906
  • fix(quic): leave moq-clock's runtime out of moq-quic's dependencies by @zshenker in #5904
  • fix(quic): issue stream credit when stop frees a stream by @zshenker in #5908
  • fix(relay): gate the systemd extension constant on unix by @kixelated in #5933
  • test(relay): a failed drill names a shaper that stopped forwarding by @kixelated in #5935
  • fix(quic): a discarded Retry no longer blocks the genuine one by @kixelated in #5916
  • ci(ts): derive ts.yml's crate filters from the harness's Cargo closure by @kixelated in #5913
  • fix(mux): import container display aspect ratios by @shermerL in #5893
  • feat(mux): cut passthrough groups and sections on the epoch's grid by @t0ms in #5894
  • fix(net): a session's close is not a grant revocation by @kixelated in #5939
  • fix(tokio): install a crypto provider before an http:// dial's certificate fetch by @kixelated in #5940
  • fix(net): an expired unfinished group fails with Old, never a clean end by @kixelated in #5944
  • feat(relay): serve a Connection over any moq-net transport by @kixelated in #5917
  • feat(json)!: refuse duplicate keys in every decoder by @kixelated in #5941
  • quest(m1): the ring forwards the SETUP token to auth by @kixelated in #5957
  • fix(quic): a stateless reset keeps a closed connection's reason by @kixelated in #5936
  • feat(net): follow the aggregate subscriber priority on moq-transport upstreams by @kixelated in #5922
  • quest: delete gst-redial-port, already landed by @kixelated in #5934
  • quest: recurring hygiene audits and a recurring release cut by @kixelated in #5956
  • quest: run redundant importers on distinct epochs by @kixelated in #5963
  • feat(net): forward unknown moq-transport track properties through a relay by @kixelated in #5923
  • fix(mux): start a live export at the publisher's largest group by @kixelated in #5947
  • test(ts): judge the export on a congested path, not random loss by @kixelated in #5918
  • quest: scope the redundant failover promise; give the startup PES drop its own reason by @kixelated in #5964
  • quest: import ten open issues by @kixelated in #5969
  • docs(agents): treat network input as untrusted by @kixelated in #5961
  • fix(video): propagate the Windows resize plan's error by @kixelated in #5966
  • fix(auth): measure a grant's life on moq-clock by @kixelated in #5920
  • quest: lite drops per-request auth; plan the request-behind-its-token race by @kixelated in #5972
  • fix(net): release TRACK holds when their broadcast withdraws by @kixelated in #5973
  • fix(quic): 0-RTT streams adopt a raised stream window by @kixelated in #5937
  • fix(transcode): finish the open live group when demand ends by @kixelated in #5938
  • feat(quic): plaintext crypto for the connection fuzz target and benches by @kixelated in #5946
  • fix(ffi): a track's read_frame skips a group its max delay gives up on by @kixelated in #5962
  • feat(ffi)!: fold the container stream importer into ContainerProducer by @kixelated in #5919
  • feat(moq-mux): import private PES whole as pesPacket tracks by @kixelated in #5921
  • feat(net): carry broadcast epochs over moq-transport by @kixelated in #5932
  • fix(shaper): open the ingress gate on offered bytes, not loss survivors by @kixelated in #5943
  • quest(m1): bound what a stalled subscriber makes a publisher hold by @kixelated in #5965
  • fix(net): a route reader never parks on an end it has not read by @kixelated in #5948
  • fix(quic)!: write TLS key logs only when quic.keylog asks by @zshenker in #5907
  • test(quic): replay BBR marking from one seed, with packet-number skips on by @kixelated in #5945
  • fix(net): a resumed group keeps the head the replaced route received by @kixelated in #5958
  • fix(mux)!: a container decode error ends the reader in Rust and JS by @kixelated in #5942
  • feat(net): resume JS tracks across same-epoch route swaps; keep a replaced route feeding until its successor delivers by @kixelated in #5836
  • feat(uring)!: run the worker on moq-clock, reading the clock once per turn by @kixelated in #5926
  • fix(relay): forward SETUP tokens through io_uring auth by @kixelated in #5984
  • fix(bench): report monotonic confirmed group loss by @kixelated in #5988
  • test(ts): audit random-loss decisions with bufferbloat by @kixelated in #6000
  • chore(nix): bump quest for the review design checkpoint by @kixelated in #6017
  • fix(test): refresh draft-22 release compatibility verification by @kixelated in #5968
  • ci(bench): cover omitted nightly targets and checkpoint performance audit by @kixelated in #5971
  • chore: audit dependency advisories and refresh compatible packages by @kixelated in #5975
  • refactor(json): share the byte stream consumer lifecycle by @kixelated in #5977
  • fix(clock): migrate auth, RTMP, and archive clocks by @kixelated in #5987
  • test(quic): exercise cancellation and migration in seeded workloads by @kixelated in #5989
  • test(media): run track identity coverage independently by @kixelated in #5994
  • feat(clock): add Manual.fire() to step to the next timer by @kixelated in #5952
  • fix(watch): report catalogs that need a newer player by @kixelated in #5995
  • test(net): isolate max sequences from timestamp overflow by @kixelated in #6002
  • fix(mux): place TS sections on the PCR clock by @kixelated in #6005
  • fix(cpp): check release archives and OBS during dry runs by @kixelated in #6006
  • quest(m1): replace SUBSCRIBE_ALL with a TRACKS listing by @kixelated in #5985
  • feat(net)!: track demand reports the wanted group, with refresh on join by @kixelated in #5930
  • quest(m1): plan the hidden floor below a resolved relay copy by @kixelated in #5986
  • fix(hls)!: list a rendition only once its own timeline is advertised by @kixelated in #6009
  • fix: catch spinning sim tasks and yield cached FETCH writes by @kixelated in #5990
  • docs: fix stale examples and checkpoint documentation audit by @kixelated in #5974
  • docs(quest): reconcile stale plans and checkpoint the tree audit by @kixelated in #5980
  • fix(mux): keep access unit delimiters before injected parameter sets by @kixelated in #6001
  • test: extend coverage reporting and fix untested DOM helpers by @kixelated in #5978
  • quest: plan five follow-ups from the 2026-10-19 batch by @kixelated in #6021
  • fix(ts): stabilize export acquisition and capture probes by @kixelated in #5997
  • fix(quic): lint cleanly without default features by @kixelated in #6023
  • test(ci): repair stalled benchmarks and stale fixtures by @kixelated in #5976
  • refactor: remove unused internal code and build dependencies by @kixelated in #5970
  • fix(mux): report how imported TS streams are carried by @kixelated in #6004
  • feat(net): negotiate IETF subscriber max age by @kixelated in #5993
  • feat(net)!: offer one versions list on every browser transport by @kixelated in #5979
  • feat(auth): carry typed refusal reasons and verified attribution by @kixelated in #5996
  • fix(net): register subscriptions before exposing track demand by @kixelated in #5991
  • quest(m0): cloud CI only in the merge queue, one pass, then runners by @kixelated in #6033
  • feat(lite)!: restore SUBSCRIBE_DROP on unpublished lite-07 by @kixelated in #5983
  • fix(mux): bound sequence hole waits by max delay by @kixelated in #5999
  • fix(auth): wait for tokens before uncovered requests by @kixelated in #5992
  • refactor(cli): give independent importers distinct epochs by @kixelated in #5967
  • chore(quest): move maintainer issues into quests by @kixelated in #6018
  • chore(quest): clear the resolved nixpkgs lld condition by @kixelated in #6025
  • ci: run cloud CI only in the merge queue by @kixelated in #6038
  • quest(m0): drop the discarded-Retry backport by @kixelated in #6043
  • fix(net)!: report a reader's largest within its local bounds by @kixelated in #5924
  • quest: retire quests their own merged PRs left behind by @kixelated in #6044
  • ci(bench): publish nightly history and checkpoint the performance audit by @kixelated in #6045
  • quest(m0): checkpoint the artifact size audit by @kixelated in #6047
  • refactor: dedupe IETF request errors and binding-layer plumbing by @kixelated in #6049
  • test: finish the m0 coverage audit and run ignored tests nightly by @kixelated in #6050
  • fix(ci): repair red nightly gates and the ACME port race by @kixelated in #6056
  • feat(moq-net): serve each subscriber its own ranges, with time anchors by @kixelated in #5929
  • docs: finish the m0 documentation audit by @kixelated in #6055
  • fix(net): renew draft-16 announcements in place by @kixelated in #6051
  • feat(demo): add a CARLA teleop demo by @kixelated in #5621
  • ci: cache Rust builds in R2, written from the merge queue by @kixelated in #5685
  • chore: add an Anthropic OSS Scanner image, threat model, and nightly check by @kixelated in #6035
  • chore(uring): remove redundant dependency audit suppression by @kixelated in #6039
  • test(tokio): reserve the failing redial listener by @kixelated in #6032
  • fix(shaper): verify reorder only on admitted datagrams by @kixelated in #6037
  • fix(net): handle GOAWAY throughout IETF request lifetimes by @kixelated in #5998
  • fix(net): read lower buffered groups across route copies by @kixelated in #6019
  • fix(net): let resumed subscriber forks follow route swaps by @kixelated in #6024
  • feat(lite): mark initial announcements with ordered SYNCED by @kixelated in #6029
  • chore(deps)!: adopt usage-rs 7 by @kixelated in #6060
  • feat(data)!: data consumers return each value's timestamp by @kixelated in #5677
  • fix(net): ignore replayed frames when waiting for group readiness by @kixelated in #6026
  • fix(nix): select wasm-bindgen CLI from Cargo.lock by @kixelated in #6031
  • quest(m0): finish the dependency and alternatives audit by @kixelated in #6053
  • docs(agents): fix the Go wrapper path by @kixelated in #6063
  • fix(net): resolve subscription starts past skipped groups by @kixelated in #6028
  • refactor(net)!: give each group one writer by @kixelated in #6020
  • feat(video): force a keyframe when a joiner wants a fresh group by @kixelated in #6048
  • test(ffi): order pending connect cancellation in place by @kixelated in #6034
  • ci: serve the Nix cache from nix.moq.dev instead of Cachix by @kixelated in #5693
  • chore(deps): Bump the bun group across 5 directories with 6 updates by @dependabot[bot] in #6070
  • chore(deps): Bump the nix group with 2 updates by @dependabot[bot] in #6069
  • fix(test): keep the --full clip's audio at ffmpeg's placement by @kixelated in #6066
  • quest: plan resume through an undetected outage by @kixelated in #6065
  • chore(deps): Bump the github-actions group with 2 updates by @dependabot[bot] in #6071
  • ci: add reusable runner VMs with persistent local caches by @kixelated in #6040
  • fix(net): strip properties from status datagrams a newer draft can't carry by @kixelated in #6068
  • chore(deps): Bump the cargo group with 3 updates by @dependabot[bot] in #6073
  • chore(py): bump moq-rs to 0.6.0 and require moq-ffi 0.5 by @kixelated in #6067
  • feat(lite): carry refresh demand through relays by @kixelated in #6030
  • quest(m1): record ietf provenance as the ingress version by @kixelated in #6072
  • fix(bench): give every session bench id argument a placeholder by @kixelated in #6076
  • fix(ci): allow execution in runner cache directories by @kixelated in #6077
  • fix(ci): use the NixOS runner toolchain by @kixelated in #6080
  • quest: abandon the draft-22 release notices by @kixelated in #6042
  • quest: record maintainer decisions on blocked quests by @kixelated in #6041
  • ci: list every nightly report on the Pages root by @kixelated in #6079
  • fix(ci): give the runner VM IPv6 loopback and procps by @kixelated in #6089
  • feat(lite): ietf extension carries moq-transport state between relays by @kixelated in #6058
  • fix(net): tolerate reordered group arrivals during recovery by @kixelated in #6003
  • fix(quic): preserve receive state on illegal ordered reads by @zshenker in #6011
  • docs: record compile-time audit baselines by @kixelated in #6022
  • test(smoke): move moq-dev/smoke into test/smoke by @kixelated in #6046
  • docs: add a security policy by @kixelated in #6078
  • fix(security): resolve CodeQL redos and workflow_run checkout alerts by @kixelated in #6084
  • quest: plan the CI workflow audit, benchmark table, and interop report by @kixelated in #6081
  • chore(deps): Bump certifi from 2026.7.22 to 2026.10.19 by @dependabot[bot] in #6093
  • quest: plan load flakes, GOAWAY follow-ups, and the moq-quic transport direction by @kixelated in #6083
  • fix(quic): drop already-read duplicates when switching to unordered by @zshenker in #6010
  • test(smoke): drop the Python abort retry and the browser reload by @kixelated in #6064
  • quest(m1): a supported QUIC driver in moq-tokio without moq-net by @zshenker in #5903
  • chore(ci): run the Linux gate in one pass by @kixelated in #6086
  • quest: plan moving moq.dev into site/ by @kixelated in #6098
  • fix(quic)!: reset driver send streams dropped before finish by @zshenker in #5909
  • fix(quic): refuse a Requested Max Ack Delay of 2^14 ms or more by @zshenker in #6008
  • feat(bench): replace the nightly charts with a regression table by @kixelated in #6099
  • docs: explain redundant ingest and route failover by @kixelated in #6085
  • perf(net): load the IETF session code on demand; finish the m0 size audit by @kixelated in #6101
  • fix(ci): run the runner VM as a static user so HOME has no symlink by @kixelated in #6097
  • feat(lite): TRACKS lists a broadcast's tracks on lite-07 by @kixelated in #6057
  • feat(moq-net): time anchors for subscription ranges by @kixelated in #6074
  • fix(relay): bound auth admission by the handshake deadline by @mriise in #5765
  • feat(hang): VR projection, stereo, and ambisonic catalog metadata by @nuts-rice in #5543
  • feat(cli): report import stats and export feedback by @t0ms in #5848
  • fix(tokio): clean up mDNS daemons when discovery setup fails by @shermerL in #6075
  • test(media): finish the browser rename check by @kixelated in #6100
  • fix(quic): account for application close error code width by @zshenker in #6015
  • feat(net): follow announced instances in moq-net by @kixelated in #5925
  • fix(hls): drain retained media after broadcast End by @kixelated in #6087
  • fix(sock): keep a dual-stack ephemeral port free on the IPv4 side by @kixelated in #6110
  • refactor(moq-mux): read hang catalogs through hang's consumer by @kixelated in #6114
  • fix(net): escalate the backoff when GOAWAY redirects loop between peers by @kixelated in #6115
  • fix(ci): cancel a destroyed merge group's queued Check run by @kixelated in #6105
  • quest(m1): abandon native-noq-feature by @kixelated in #6120
  • fix(runner): return idle VM memory to the host by @kixelated in #6104
  • quest(m0): recurring lint override and deprecation audit by @kixelated in #6118
  • fix(net): one namespace's stream error ends only its own advertisement by @kixelated in #6126
  • test(audio-quality): re-measure the AAC browser budgets after the reorder fix by @kixelated in #6128
  • refactor(net): one owner and one closer per IETF request stream by @kixelated in #6130
  • test(tokio): keep probed ports reserved in the failed-listen and refused-dial tests by @kixelated in #6125
  • quest: plan converting the blog's hand-drawn PNGs to SVG by @kixelated in #6119
  • quest(m1): settle dynamic range requests and split out fetch as a range by @kixelated in #6123
  • fix(quic): count ignored receive errors toward the receive work budget by @zshenker in #6013
  • feat(ffi): report why a client's first dial is retrying by @kixelated in #6131
  • moq-net: compressed tracks by @kixelated in #5928
  • quest(m1): TS semantic fidelity profile and implementation quests by @kixelated in #6122
  • feat(quic)!: derive the stateless reset key from listen.reset.secret by @zshenker in #5910
  • fix(hang): accept the cml-utils version cml-iso-bmff 1.0.7 peers on by @kixelated in #6095
  • test(net): wait out the retry jitter in the draft-16 cancel-ahead test by @kixelated in #6127
  • feat(mux): report TS health and the export's release clock by @t0ms in #5849
  • fix(quic): separate datagram wire limits from receive memory budgets by @zshenker in #6012
  • fix(net): allow host-clock reads in the group bench by @kixelated in #6117
  • fix(net): withdraw timed-out draft 14-16 advertisements by @kixelated in #6133
  • fix(net): keep a replaced route copy while a group it may carry is needed by @kixelated in #6141
  • fix(net): refuse a revoked subscription while its SUBSCRIBE is still pending by @mriise in #6061
  • quest: repoint stream-routes at the landed TS health stats by @kixelated in #6179
  • perf(net): keep the IETF message parameter codec out of the first load; checkpoint the m1 size audit by @kixelated in #6172
  • test(media): give Firefox an audio device and fix the WebKit player crash by @kixelated in #6173
  • quest(m1): finish the test coverage audit by @kixelated in #6175
  • docs(js): document the UI packages' public surface and enforce it in the build by @kixelated in #6163
  • quest: plan the release shutdown backport by @kixelated in #6134
  • fix(net): give up on a group stream whose FIN never completes once the age budget convicts it by @wrangelvid in #6059
  • docs(quest): plan JS timers firing at their own deadlines by @kixelated in #6082
  • docs(mux): document the public Rust API by @kixelated in #6088
  • Publish claim answers under their own epochs by @kixelated in #5678
  • fix(quic): query IPV6_V6ONLY only on IPv6 sockets by @zshenker in #6014
  • quest(m1): plan frame arrival stamps for TS export lateness by @kixelated in #6147
  • fix(relay): sessions closed at the drain deadline finish their cleanup by @kixelated in #6144
  • quest(m1): build @moq/qmux from js/qmux by @kixelated in #6124
  • fix(moq-net): a subscriber reads only the frames its ranges cover by @kixelated in #6129
  • feat(bindings): read the session grant and present tokens in band by @kixelated in #6137
  • fix(net): a stalled subscriber holds one parked group per subscription by @kixelated in #6140
  • feat(gst): opt-in moqsink linger at end of stream by @kixelated in #6152
  • fix(hls)!: a failed export timeline answers its listings with an error by @kixelated in #6153
  • test(bench): the foreign-listener holder reports a busy port instead of hanging by @kixelated in #6121
  • quest: plan follow-ups from the m0/m1 spawn run by @kixelated in #6186
  • fix(js/qmux): document the exported members the build now requires by @kixelated in #6191
  • feat(tokio)!: build the QUIC driver without moq-net by @kixelated in #6132
  • docs(bindings): document the public Rust and C surfaces by @kixelated in #6091
  • fix(quic): make the wasm ring dependency optional by @zshenker in #6016
  • perf(runner)!: boot persistent guests on XFS by @kixelated in #6198
  • feat(hang): catalog references may name their broadcast instance by @kixelated in #5699
  • quest: finish the m0 compile-time audit by @kixelated in #6106
  • fix(auth): refuse a duplicate jwt query in moq auth serve by @kixelated in #6182
  • fix(net): a resume through a silent outage keeps the backlog its max age holds by @kixelated in #6183
  • quest: plan follow-ups from the 2026-10-20 handoff by @kixelated in #6116
  • docs(contributing): quest, test, and CI PRs jump to the front of the merge queue by @kixelated in #6185
  • docs(agents): require a named consumer for every change by @kixelated in #6189
  • ci: gate release PRs behind one Release gate context by @kixelated in #6154
  • fix(quest): repoint links to the deleted resume-outage quest by @kixelated in #6205
  • quest: plan Legacy fMP4 import and on-demand CMAF decode by @kixelated in #6096
  • quest(m0): a browser publisher stall ratchets viewer latency by @kixelated in #6149
  • feat(lite): readers see SUBSCRIBE_DROP and cut groups end with their error by @kixelated in #6143
  • ci(interop): publish the nightly results to git.moq.dev/interop by @kixelated in #6180
  • feat(lite): the ietf extension records provenance as the ingress version by @kixelated in #6107
  • fix(tokio): escalate the backoff when GOAWAY redirects loop between peers by @kixelated in #6162
  • test(relay): control admission and drain timing by @kixelated in #6221
  • fix(nix): restore Linux release links by @kixelated in #6090
  • fix(audio): cap one observation's weight in the jitter estimator by @kixelated in #6164
  • quest(m1): plan the application claim request type by @kixelated in #6195
  • feat(ffi): finish a broadcast cleanly in every binding by @kixelated in #6157
  • test(net): update SUBSCRIBE_DROP fixture for ServeLoop framing by @kixelated in #6223
  • fix(runner): kill a job that fills guest memory before it thrashes by @kixelated in #6184
  • test(ts): grade recovery from missing MoQ content against a delivery ledger by @kixelated in #6139
  • fix(quic): refuse STOP_SENDING and MAX_STREAM_DATA above the stream limit by @zshenker in #6146
  • quest: plan the m1 probe chain, evicted-group staleness, and review follow-ups by @kixelated in #6102
  • quest(m1): finish the C++ and OBS nightly package proof by @kixelated in #6161
  • feat(archive)!: archive::Producer records every track of a broadcast by @kixelated in #6160
  • perf(net): finish the m0 performance audit and restore the nightly bench legs by @kixelated in #6112
  • fix(quic): stop counting an unanswered handshake as active once it closes by @kixelated in #6201
  • quest(m0): finish the CI pipeline audit by @kixelated in #6155
  • fix(json): treat a publisher-reset group as a lost group by @kixelated in #6204
  • chore: drop the recommended skill link by @kixelated in #6200
  • fix(moq-hls): answer 404 for a gone broadcast without waiting out the resolve timeout by @kixelated in #6190
  • test(rs): fix the slow tests' clocks and waits, move real-time ones to nightly by @kixelated in #6192
  • docs(agents): tests cover edge cases, not old bugs by @kixelated in #6181
  • test(carla): drive the watchdog on a fake clock by @kixelated in #6202
  • fix(net): enforce GOAWAY deadlines despite blocked writes by @kixelated in #6211
  • fix(moq-mux): clock TS programs without video by @kixelated in #6212
  • quest: plan audio test parity with video by @kixelated in #6148
  • docs: finish the m1 documentation audit by @kixelated in #6170
  • test: delete tests that cover nothing beyond their neighbors by @kixelated in #6187
  • fix(quest): follow the performance audit into m1 by @kixelated in #6238
  • quest: recurring interop audit and moq-transport interop coverage by @kixelated in #6203
  • fix(net): abandon parked group opens on expiry and eviction by @kixelated in #6214
  • chore(lint): make tool warnings fatal by @kixelated in #6145
  • test: delete low-value and trivial Rust tests by @kixelated in #6193
  • chore(smoke): update the flake and Playwright pin together by @kixelated in #6210
  • fix(net): start the GOAWAY deadline at the poll that sees the send by @kixelated in #6239
  • test(js): run real-timer unit tests on the manual clock by @kixelated in #6188
  • quest(m1): finish the test cost audit by @kixelated in #6174
  • quest: audit the tree against main (2026-10-20) by @kixelated in #6092
  • fix(net): preserve source start for descending JS subscriptions by @kixelated in #6206
  • fix(test): sample audio RTT and bootstrap interop dependencies by @kixelated in #6213
  • feat(js)!: finish a broadcast cleanly, serving its tail until stale by @kixelated in #6151
  • fix(quic): size datagrams against the exact frame overhead by @zshenker in #6007
  • build(nix): pin Quest with the local command gate by @kixelated in #6215
  • quest(m1): finish the dependency and alternatives audit by @kixelated in #6169
  • feat(ietf): answer SUBSCRIBE_TRACKS through the TRACKS hook by @kixelated in #6167
  • docs(agents): steer by the corrections agents keep needing by @kixelated in #6194
  • fix(net): deduplicate resumed datagrams by identity by @kixelated in #6209
  • fix(net): drain received group tails after session close by @kixelated in #5762
  • build(deps): Bump the nix group with 2 updates by @dependabot[bot] in #6264
  • build(deps-dev): Bump the bun group across 6 directories with 4 updates by @dependabot[bot] in #6265
  • build(deps): Bump the github-actions group with 6 updates by @dependabot[bot] in #6267
  • build(deps): Bump the cargo group with 2 updates by @dependabot[bot] in #6269
  • quest(m0): take web-transport-proto 0.6.3 for the QPACK bound by @kixelated in #6220
  • quest: plan the main-vs-release performance regressions by @kixelated in #6225
  • fix(quic): send the next probe when a silent peer is heard again by @t0ms in #6178
  • fix(deps): bump rustls-webpki and webpki-root-certs for RUSTSEC-2026-0382 and -0383 by @zshenker in #6197
  • fix(quic): resolve SendStream::stopped after a local reset by @zshenker in #6196
  • fix(ci): clear stale Pages artifacts before report reruns by @kixelated in #6207
  • ci: compile moq.cpp once per C++ standard and keep Gradle warm by @kixelated in #6247
  • fix(relay): catch shutdown signals before serving by @kixelated in #6245
  • refactor: finish the m1 dead code audit by @kixelated in #6166
  • feat(ffi)!: bindings carry and honor catalog reference epochs by @kixelated in #6244
  • chore(quest): retire completed TRACK_STATUS reporting by @kixelated in #6260
  • fix(mux): retire TS tracks a PMT revision drops or changes by @t0ms in #6208
  • quest: plan native browser compression support by @kixelated in #6227
  • feat(hang)!: load CMAF decoding on demand by @kixelated in #6219
  • quest(m1): plan FETCH_OK whole-group and IETF SUBSCRIBE pause by @kixelated in #6272
  • feat(lite): drop lite-05/06 timestamps so receivers check received groups by @kixelated in #6150
  • refactor(rs): move every crate onto moq-clock by @kixelated in #6135
  • fix(net): enforce the IETF grant on what we publish, not what we received by @kixelated in #6259
  • feat(net): probe up to the sum of a session's reservations by @kixelated in #6248
  • feat(gateways)!: HLS, RTMP, SRT and RTC imports linger at a clean end by @kixelated in #6253
  • feat(net): negotiate IETF compressed tracks from draft17 by @kixelated in #6228
  • fix(net): cancel IETF requests throughout setup by @kixelated in #6237
  • test(interop): run the matrix on each even moq-transport draft by @kixelated in #6246
  • quest: close the silent-peer drain quest (landed in #6201) by @kixelated in #6240
  • fix(publish): drop realtime video input while the codec is busy by @kixelated in #6218
  • fix(net): omit URL userinfo from reconnect endpoint keys by @kixelated in #6226
  • fix(net): refetch a resumed group only when its route failed delivering it by @kixelated in #6251
  • fix(mux): redundant TS failover survives a killed importer behind bufferbloat by @kixelated in #6113
  • fix(test): use Nix Chromium for Playwright checks by @kixelated in #6216
  • fix(mux)!: judge export lateness on each frame's arrival stamp by @kixelated in #6249
  • feat(moq-mux): render identical TS legs with export ts --sync by @t0ms in #5949
  • feat(hang): decode AAC in the libav fallback via a Nix-built @moq/libav by @kixelated in #6243
  • feat(qmux): run qmux in tree on the QUIC stream state machine by @kixelated in #6231
  • feat(json)!: window consumers return each event's frame timestamp by @kixelated in #6274
  • chore(quest): retire merged binding linger work by @kixelated in #6229
  • feat(net): publish and consume compressed lite-07 tracks in JavaScript by @kixelated in #6230
  • build(deps): Bump rust-overlay from 8111d2b to e9d12b9 in the nix group by @dependabot[bot] in #6303
  • test(cli): cover listener admission deadlines in process by @kixelated in #6234
  • fix(clock)!: advance manual time through each timer deadline by @kixelated in #6222
  • feat(moq-mux)!: unwrap fMP4 import to Legacy by default by @kixelated in #6250
  • quest(m1): reconcile the outstanding quest tree by @kixelated in #6268
  • feat(net): ask a client's peer only about watched prefixes on moq-lite by @kixelated in #6165
  • fix(js): await advance in the compression test after the clock rename by @kixelated in #6308
  • quest: audit the tree against main (2026-10-22) by @kixelated in #6273
  • fix(video): keep CMAF in the tests that read a CMAF rendition by @kixelated in #6309
  • feat(net): receive lite07 padding streams by @kixelated in #6233
  • feat(js/net): list a broadcast's tracks over lite-07 TRACKS by @kixelated in #6158
  • feat!: signed track priorities with a publisher tiebreak by @kixelated in #6142
  • quest: plan focused release backports by @kixelated in #6331
  • fix(quic): end a GSO batch when the first datagram is too small by @kixelated in #6279
  • fix(net): restore the minimal-feature build by @kixelated in #6312
  • test(watch): load CMAF before draining playback microtasks by @kixelated in #6313
  • test(relay): exercise cluster bursts with deterministic bufferbloat by @kixelated in #6314
  • fix(deps): remove vulnerable JavaScript build dependencies by @kixelated in #6315
  • fix(bench): resolve declared runtime defaults per checkout by @kixelated in #6316
  • quest: scope benchmark-first performance audit findings by @kixelated in #6318
  • docs(quest): record first capped audio nightly evidence by @kixelated in #6319
  • docs: improve discovery for users and coding agents by @kixelated in #6320
  • ci: install Firefox audio client runtime by @kixelated in #6321
  • fix(test): recognize a completed relay drain by @kixelated in #6322
  • fix(quest): drop the link to the finished priority-scope quest by @kixelated in #6357
  • chore(deps): document pending upstream maintenance migrations by @kixelated in #6317
  • chore(quest): record release readiness audit findings by @kixelated in #6311
  • fix(obs): stop-drain test fits the drain deadline; TSan suite runs again by @kixelated in #6277
  • quest: plan the API audit of main against release by @kixelated in #6340
  • fix(net): contain failed IETF group stream opens by @kixelated in #6337
  • refactor(net)!: public ingest by @kixelated in #6111
  • quest: plan owned stream transports and ring TCP by @kixelated in #6351
  • quest: plan the TS root causes ahead of more support rows by @kixelated in #6334
  • fix(ffi): keep incoming handshakes off foreign thread stacks by @kixelated in #6323
  • refactor: finish the m0 simplification audit by @kixelated in #6108
  • quest: qmux receive leases and the pre-draft-20 join after a quick finish by @kixelated in #6352
  • feat(json)!: roll snapshot and window groups on joiner demand by @kixelated in #6054
  • fix(net): release losing subscription signal waits by @kixelated in #6341
  • chore(quest): finish the TLS release backport quest by @kixelated in #6344
  • quest: plan connection-blocked writer fixes from the QUIC audit by @kixelated in #6363
  • chore(quest): plan media audit findings by @kixelated in #6364
  • ci: permit runner image user namespaces on Ubuntu by @kixelated in #6324
  • chore(quest): plan Rust resume gaps from the failover audit by @kixelated in #6365
  • feat(net): answer SUBSCRIBE_TRACKS in JavaScript by @kixelated in #6336
  • test(ci): align setup and feature fixtures with current workflows by @kixelated in #6325
  • chore(quest): keep nightly benchmarks hosted; pull bench-ci into m1 by @kixelated in #6368
  • docs(quest): plan interim cluster announce fixes and stats group tracks by @kixelated in #6358
  • test(interop): every subscriber decodes and checks the audio tone by @kixelated in #6284
  • quest: plan the release audit's unowned follow-ups by @kixelated in #6342
  • fix(audio): bound the jitter reference history by @kixelated in #6359
  • chore(quest): plan JS subscription bounds and partial lite group fixes by @kixelated in #6362
  • fix(net): join pre-draft-20 subscriptions at the live group by @kixelated in #6348
  • fix(qmux): drain peer data during graceful stream shutdown by @kixelated in #6339
  • fix(ci): restore complete nightly benchmark reporting by @kixelated in #6326
  • quest: plan the API changes worth making before the breaking cut by @kixelated in #6346
  • quest(runner-cases): land the runner cases upstream and classify the relay failures by @kixelated in #6275
  • quest(m1): plan five refactors from the 2026-10-22 audit by @kixelated in #6338
  • quest: finish the release FFI cancellation backport by @kixelated in #6345
  • quest: plan the security audit findings by @kixelated in #6361
  • quest: plan follow-ups from the 2026-10-22 quest spawn by @kixelated in #6354
  • fix(flate): hold a compressed group to the group budget by @kixelated in #6353
  • feat(quic)!: bound incomplete messages with receive leases by @kixelated in #5878
  • quest: plan the repository improvement audit's findings by @kixelated in #6327
  • fix(qmux): refuse over-limit creates when waitUntilAvailable is false by @kixelated in #6271
  • chore(quest): finish the JS parsing backport and the release backports epic by @kixelated in #6343
  • feat(ietf): list a moq-transport peer's tracks with SUBSCRIBE_TRACKS by @kixelated in #6280
  • quest: plan io_uring correctness and measurement from the audit by @kixelated in #6350
  • quest: record the 2026-10-22 runtime matrix and CDN profiles by @kixelated in #6372
  • ci: run merge queue tests with 24 workers by @kixelated in #6290
  • quest: record subscription update traffic and wait on a camera check by @kixelated in #6391
  • quest: plan a native streaming studio (m3) by @kixelated in #6377
  • fix(net): end a resumed track the way a direct one ends by @kixelated in #6136
  • fix(bench): pair Criterion samples by full IDs by @kixelated in #6297
  • perf(net): avoid redundant stats drain synchronization by @kixelated in #6293
  • quest: apply maintainer fixes to merged quest plans by @kixelated in #6385
  • docs(quest): typecheck with bun check once nixpkgs ships bun 1.4.4 by @kixelated in #6389
  • quest: plan follow-ups from the 2026-10-22 merge run by @kixelated in #6367
  • chore(quest): plan binding and OBS audit findings by @kixelated in #6366
  • quest: audit memory retention and kernel settings by @kixelated in #6332
  • quest: cover late review findings on rate-recovery and OBS renditions by @kixelated in #6403
  • quest(m2): derive keep-alive inside moq-quic from the negotiated idle timeout by @zshenker in #6328
  • quest(m2): add leak-free poll forms for the QUIC driver's waits by @zshenker in #6329
  • fix(audio-quality): replay recorded codec durations by @kixelated in #6282
  • fix(net): skip delivered resume copies without consuming groups by @kixelated in #6292
  • ci: finish the m1 workflow signal and cost audit by @kixelated in #6266
  • ci: update compiler cache to MBX 1.26 by @kixelated in #6404
  • fix(bench): drive churn readers until the relay subscribes by @kixelated in #6285
  • test(hang): run the libav copy test after the AAC fallback test by @kixelated in #6382
  • ci: skip flake checks for Rust source-only changes by @kixelated in #6412
  • fix(net)!: bound timestamps to 2^61 - 1 so lite-05/06 can carry every one by @kixelated in #6168
  • test(media): pin the fixture to mono again and finish publish-audio-channel-count by @kixelated in #6302
  • fix(net): align whole-group IETF FETCH end locations by @kixelated in #6295
  • fix: m0 interop audit by @kixelated in #6255
  • fix(mux): run the TS recovery arms clean at a 500 ms delay by @kixelated in #6236
  • fix(net): retain resume bounds across route copies by @kixelated in #6224
  • fix(net): an empty replacement track ends past its predecessor's groups by @kixelated in #6376
  • fix(pattern): index whole-union operations so a peer's grant costs its size by @kixelated in #6356
  • quest(m2): make the ack hook concrete in the QUIC drivers by @zshenker in #6330
  • fix(net): request compressed prefixes for mid-group application ranges by @kixelated in #6242
  • test(interop): exercise clean media finish across clients by @kixelated in #6307
  • perf(net): skip empty cache deadline clock reads by @kixelated in #6291
  • fix(hls): end eviction tasks with the server by @kixelated in #6393
  • fix(uring): a failed send costs its packet, not the socket by @kixelated in #6397
  • quest: re-plan TS decode time as one clock with a declared reorder depth by @kixelated in #6390
  • perf(net): serve whole cached groups from a parked track's copy by @kixelated in #6286
  • perf(net): skip timestamp scans on accepted untimed tracks by @kixelated in #6296
  • test(js): build a one-line worklet fixture in the worklet plugin test by @kixelated in #6461
  • feat(relay): expose wire and control byte counters by @kixelated in #6235
  • fix(net): preserve IETF timestamps across negotiated lite hops by @kixelated in #6300
  • fix(net): convert IETF object timestamps with Timestamp.as by @kixelated in #6387
  • fix(cli): announce a finite HLS import that ends as its catalog goes out by @kixelated in #6392
  • test(net): cover lagging replicas on epoch wires by @kixelated in #6232
  • perf: finish the m1 performance audit by @kixelated in #6281
  • quest: keep the old tail on both 2022-7 legs across a restart by @kixelated in #6451
  • chore(quest): retire queue-allgreen by @kixelated in #6415
  • fix(watch): hold buffered audio while the ring refills by @kixelated in #6425
  • test(audio): verify native decode conformance and exact duration by @kixelated in #6261
  • fix(auth): refuse auth server redirects instead of resending the credential by @kixelated in #6384
  • quest: peers advertise their implementation and version by @kixelated in #6444
  • fix(net): pause an IETF SUBSCRIBE and resume it as a new subscriber by @kixelated in #6299

New Contributors

Full Changelog: obs-moq-v0.6.17...obs-moq-v0.6.18