Repository navigation
obs-moq v0.6.18
·
1463 commits
to main
since this release
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 --syncby @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
8111d2btoe9d12b9in 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