Repository navigation
obs-moq v0.6.20
·
384 commits
to main
since this release
What's Changed
- feat(mux): follow referenced broadcasts' announcements by @kixelated in #6254
- quest: remove the SharedArrayBuffer audio ring by @kixelated in #6450
- perf(net): index sparse arrivals and retire shared gaps together by @kixelated in #6287
- ci(obs): run the OBS ThreadSanitizer suite nightly by @kixelated in #6469
- fix(watch): decode a reordered subscription head in timestamp order by @kixelated in #6523
- fix(net): a restarted publisher wins over its lingering session at once by @kixelated in #6452
- fix(net): honor JS subscription bounds on every delivery path by @kixelated in #6419
- perf(net): keep announce cursors linear under churn by @kixelated in #6422
- fix(signals): notify on every structural change by @kixelated in #6456
- chore(test): put interop selections on separate lines by @kixelated in #6408
- refactor(net)!: make track::Producer::largest a getter by @kixelated in #6440
- feat(watch)!: Sync.wait resolves whether to present the frame by @kixelated in #6438
- fix(moq-net): a refused joining FETCH waits for the next group by @kixelated in #6407
- fix(nix): a NixOS leaf dials its root via MOQ_CLUSTER_CONNECT by @kixelated in #6474
- docs(drafts): let a dual-decoder consumer present before warmup by @kixelated in #6494
- fix(hls): the segment cursor fails on a failed timeline by @kixelated in #6468
- quest: retire runner-cases, the cases pass upstream by @kixelated in #6505
- refactor(gateway): drop unused run entry points and share builder names by @kixelated in #6466
- test(interop): exercise real IETF control sessions by @kixelated in #6306
- refactor(auth): restore patterns-only access by @kixelated in #6448
- fix(mux): the TS export follows a PMT revision at the next version by @t0ms in #6289
- perf(net)!: box the transport so the session code compiles once by @kixelated in #6176
- fix(quic): bound blocked writers by send-stream lifetime by @kixelated in #6431
- fix(audio): release finished codec and input resources by @kixelated in #6421
- docs(go): define deterministic reservation release with Update(0) by @kixelated in #6424
- ci: hold the Rust cache at mbx 1.25 by @kixelated in #6515
- test: no test writes the process environment by @kixelated in #6434
- fix(tokio): find the HTTP/3 control stream in any arrival order by @kixelated in #6380
- fix(mux): pass fMP4 runs through with their own bytes by @kixelated in #6379
- fix(dart): cancel pending native reads when listeners leave by @kixelated in #6420
- fix(relay): keep cluster peers on a draining relay until it closes by @kixelated in #6423
- fix: bound the state and work a peer's counts can choose by @kixelated in #6488
- feat(gst): moqsrc follows referenced broadcasts' announcements by @kixelated in #6394
- fix(uring): reply from the local address a packet arrived on by @kixelated in #6400
- refactor: remove uncalled public items from moq-cli and moq-net by @kixelated in #6483
- refactor(stats): one name per stats track, reader, and CLI surface by @kixelated in #6472
- fix(watch): hold a buffered subscription's audio head and decode it in order by @kixelated in #6549
- test(net): settle refresh as a soft trigger by @kixelated in #6437
- fix(relay): expose accepted HTTP peers through ConnectInfo by @kixelated in #6430
- fix(hls): refuse a timestamp reset instead of retrying it by @kixelated in #6426
- fix(moq-mux): exporters follow a rendition moved to a new track by @kixelated in #6276
- fix(hang): bound CMAF parsing by the bytes behind it by @kixelated in #6378
- chore(lint): require a reason on every suppression and expect where unconditional by @kixelated in #6159
- feat(relay): bound advertised hop paths with a cluster setting by @kixelated in #6427
- feat(net): say whether a removed track finished in a listing by @kixelated in #6399
- refactor(ffi)!: separate announce input from route observation and trim the binding surface by @kixelated in #6473
- perf(net): drop a finished stream's reader instead of releasing its lock by @kixelated in #6479
- perf(quic): find retained send data by binary search by @kixelated in #6478
- quest: plan API Extractor checks and a generated JS API reference by @kixelated in #6553
- test(interop): wire-compat media lanes check the audio tone by @kixelated in #6531
- feat(watch,publish,video)!: trim unused outputs, re-export the clock, and make out.error an Error by @kixelated in #6481
- quest: plan writing MIGRATE.md at the breaking cut by @kixelated in #6551
- fix(net): write IETF data stream headers in one write by @kixelated in #6504
- fix(video): refuse Wayland display ids instead of a shared portal pick by @kixelated in #6491
- fix(relay): report the certificate-selecting SNI and keep certificates a fact by @kixelated in #6509
- ci: track the upstream mbx manifest fix as a pin bump by @kixelated in #6283
- fix(net): keep a backup for a group read from a single route by @kixelated in #6485
- fix(quic): let an oversized datagram step aside behind control frames by @kixelated in #6521
- quest: pace the gap slots after a short forward restart by @kixelated in #6506
- quest(m1): retire audio devices on ARM by @kixelated in #6544
- test(ci): cover hosted and local Rust selector commands by @kixelated in #6555
- fix(deps): update ctutils past timing advisory by @kixelated in #6559
- fix(net): release recovery leases when groups close by @kixelated in #6557
- docs(net): fix rustdoc without async features by @kixelated in #6556
- test(quic): await peer stop when checking receive eviction by @kixelated in #6564
- test(wasm): own local producer lifetimes through each case by @kixelated in #6565
- refactor(watch): play audio through the postMessage ring only by @kixelated in #6525
- quest: ascending order for buffered playback, and a buffered video poster by @kixelated in #6574
- fix(quic): refuse a foreign send group before taking the connection lock by @zshenker in #6370
- fix(bench): retain the track behind fetched readers by @kixelated in #6558
- bench: pair nightly Criterion runs against the previous nightly by @kixelated in #6511
- refactor(rs): parse catalogs and keys through FromStr by @kixelated in #6471
- quest: plan adopting the quest merge driver by @kixelated in #6579
- test(ietf): verify pinned Moxygen conformance under a relay profile by @kixelated in #6497
- quest: plan env-var, HLS teardown, HLS recorder, and RTMP TLS follow-ups by @kixelated in #6572
- perf: finish the release re-check with three hot-path fixes by @kixelated in #6294
- fix(net): use modeled mutexes in Loom runs by @kixelated in #6563
- quest: plan moq-net API audit follow-ups and retire the public-model goal by @kixelated in #6581
- quest: move the UniFFI fork and an rs2ts research track to kixelated/rust2 by @kixelated in #6578
- Tooling tests gate every merge by @kixelated in #6480
- quest: close the cpp -> js interop budget flake, fixed by #6231 by @kixelated in #6442
- feat(ffi)!: expose video rendition preference in bindings by @kixelated in #6410
- fix(hang): drop the libav polyfill's planar audio patches by @kixelated in #6492
- quest: import #6405 (lite draft close rules) by @kixelated in #6499
- quest: plan moq-congestion, a shared QUIC congestion-control crate by @kixelated in #6582
- ci: publish devshell caches after every merge by @kixelated in #6588
- fix(nix): keep crane's kio manifest in the dependency stage by @kixelated in #6586
- quest: plan follow-ups from three quest-complete runs by @kixelated in #6589
- quest: drop moq.dev's move into site/ by @kixelated in #6592
- test(audio): recalibrate Opus targets after reordered-frame correction by @kixelated in #6569
- refactor(mux)!: remove
export ts --syncby @kixelated in #6554 - fix(watch): ignore the worklet playhead before the ring anchors by @kixelated in #6514
- fix(mux): finished importers release their input storage by @kixelated in #6543
- fix(hls): refuse to import a playlist that has already ended by @kixelated in #6418
- fix(net): refuse navigation segments in published names by @kixelated in #6441
- chore(size): record post-erasure artifact audit by @kixelated in #6541
- quest: the JS namespace lifecycle cell waits on an @moq/net patch by @kixelated in #6503
- fix(watch): report fatal read and decode failures from the media loops by @kixelated in #6396
- chore(nix): bump quest by @kixelated in #6584
- fix(net): refuse partial lite groups and close the session on group violations by @kixelated in #6395
- fix(watch): keep full precision in buffered audio backpressure by @kixelated in #6462
- refactor(qmux): bind framing once at session establishment by @kixelated in #6528
- perf(net): borrow group transports and erase private parameters by @kixelated in #6539
- fix(mux): reject out-of-range Matroska track fields by @shermerL in #6532
- ci(smoke): run the upstream Docker interop runner nightly by @kixelated in #6257
- fix(uring): match tokio's MTU and honor quic.mtu_discovery by @kixelated in #6414
- fix(bench): draw relay ports below the ephemeral range by @kixelated in #6571
- fix(watch): classify every AAC spelling once by @kixelated in #6459
- test(net): wait on delivered datagrams instead of a single drain by @kixelated in #6593
- fix(net): a relative start on an idle copy counts from the live feed by @kixelated in #6278
- feat(clock): drive a Manual clock until work settles by @kixelated in #6513
- quest: move the fork's perf quests to rust2 and plan merge-queue speedups by @kixelated in #6594
- feat(audio,video)!: decoders read Frame, Gap, End like moq-mux by @kixelated in #6475
- quest: import open issues (64-bit hops, IETF AUTH_OK patterns, 0x16, H.265 aspect backport) by @kixelated in #6580
- quest: plan the broadcast lifecycle epic from the linger audit by @kixelated in #6570
- Shared watch and publish UI by @kixelated in #6512
- feat(ci): cap committed binary files at 500 KiB by @kixelated in #6591
- quest: hold the cut for unbounded groups by @kixelated in #6596
- feat(bindings)!: accept exact encoder rates and publication options by @kixelated in #6432
- perf(mux): m1 compile time audit by @kixelated in #6537
- feat(watch): play interlaced H.264 by decoding in software and deinterlacing by @kixelated in #6560
- refactor: distinct auth refusal names and mirrored clock names by @kixelated in #6510
- fix(mux): bound what the decode clock holds in MKV and TS export by @kixelated in #6417
- docs(quest): plan a finite drain cutoff for a replaced HLS recording by @kixelated in #6401
- fix(ffi): subscribe before reading in the await_grant test helper by @kixelated in #6605
- fix(net): bill buffered datagrams to the cache pool by @kixelated in #6413
- fix(net): dispose unpublished prepared answers by @kixelated in #6446
- fix(qmux): disable Nagle on every qmux stream socket by @kixelated in #6455
- feat(net)!: leave subscriptions and fetches to flow control by @kixelated in #6467
- feat(ffi): expose moq-json Window to the bindings by @kixelated in #6597
- fix(quic): stop a dropped WebTransport recv stream with a mapped code by @zshenker in #6369
- fix(relay): answer an expired /fetch group with 404, not 500 by @kixelated in #6562
- test(obs): resolve the sibling before expecting refusal by @kixelated in #6561
- refactor(rs): share moq-tokio's CLI duration type by @kixelated in #6489
- fix(qmux): split records into frames without copying the rest by @kixelated in #6381
- test(interop): check an AAC tone in every subscriber by @kixelated in #6516
- test: gate live epoch replacement through relays and players by @kixelated in #6548
- fix(net): sweep departed deadlines out of the expiry index by @kixelated in #6388
- quest: plan moq-quic's API reshape and its audit fixes by @kixelated in #6583
- fix(hls): preserve denied broadcast reference errors by @kixelated in #6495
- fix(mux): retire stale TS service information by @kixelated in #6533
- refactor: observe binding connection state coherently by @kixelated in #6487
- docs: write MIGRATE.md at the breaking cut, not per PR by @kixelated in #6610
- docs(quest): plan merge queue latency improvements by @kixelated in #6585
- fix(net): judge an evicted group by the successor its reader saw by @kixelated in #6493
- fix(net): never leave a torn request message on the stream by @kixelated in #6433
- fix(qmux): abort and close without the peer's help by @kixelated in #6458
- quest: close Nix package coverage provided by Nightly by @kixelated in #6603
- fix(py): rebuild generated API documentation stubs by @kixelated in #6606
- quest: complete qmux-0.5.3, published to crates.io by @kixelated in #6590
- refactor(relay)!: consolidate configuration loading and roles by @kixelated in #6535
- fix(hls)!: reject incomplete recordings by @kixelated in #6600
- refactor(mux): m1 simplification audit by @kixelated in #6527
- fix(hls)!: hold import resources and redirects to the playlist origin by @kixelated in #6374
- fix: bound decoded WebTransport CONNECT headers by @kixelated in #6601
- fix(net): release AUTH enforcement's reactions on the session close by @kixelated in #6386
- fix(ffi)!: request draining shutdown synchronously by @kixelated in #6436
- quest: plan the 2026-10-22 security audit follow-ups by @kixelated in #6402
- chore: remove stale lint suppressions found on the macOS and Windows targets by @kixelated in #6576
- feat(py,go,dart)!: mirror moq-ffi client config names and nesting by @kixelated in #6507
- fix(net)!: refuse native requests without stream credit by @kixelated in #6409
- refactor(net)!: remove Error::SessionClosed by @kixelated in #6482
- refactor(mux,video,audio)!: drop the phantom catalog type from producers by @kixelated in #6398
- fix(relay): isolate shared-process integration ownership by @kixelated in #6547
- refactor(cli,gst,publish)!: align flags and drop the publisher linger opt-ins by @kixelated in #6522
- fix(watch): keep audio above a fixed decoded floor encoded by @kixelated in #6484
- fix(net)!: ranges refuse what the wire drops by @kixelated in #6519
- perf(mux): parse an MPTS once for every program by @kixelated in #6371
- test(interop): fail a misapplied pre-skip; clip Opus pre-skip in moqsrc by @kixelated in #6490
- fix(cli)!: follow shared publisher instances by @kixelated in #6526
- fix(rate): finish bitrate recovery when the bandwidth grant goes quiet by @kixelated in #6416
- fix(py): package complete native sources within the archive budget by @kixelated in #6573
- feat(catalog)!: measure jitter and delay from timestamps, not the wall clock by @kixelated in #6595
- fix(net)!: stop one silent dial from stalling the reconnect loop by @kixelated in #6608
- refactor(time)!: use Wall for public Rust wall times by @kixelated in #6298
- fix: m1 interop audit by @kixelated in #6538
- refactor(net)!: trim moq-net and @moq/net exports to those with a consumer by @kixelated in #6470
- fix(watch): bound the caption cues and regions a publisher can accumulate by @kixelated in #6486
- feat(cpp)!: generate unprefixed free functions by @kixelated in #6476
- fix(mux): start a TS program only once its PMT describes it by @kixelated in #6463
- fix(quic): move a queued stream when its priority changes by @kixelated in #6615
- feat(net)!: one clean session close, recorded by the session by @kixelated in #6498
- quest: finish broadcast-epoch by @kixelated in #6620
- refactor!: stop shipping unused API surface by @kixelated in #6454
- fix(qmux): run the WebSocket keep-alive on moq-clock and retire the controlled-time epic by @kixelated in #6637
- chore(ci): build test rs once with the device features by @kixelated in #6616
- quest: finish the H.265 aspect backport by @kixelated in #6619
- fix(migrate)!: align guides with released APIs by @kixelated in #6624
- feat(net): carry patterns in IETF AUTH_OK by @kixelated in #6621
- fix(e2ee)!: hold generation lifecycle rules in both cores by @kixelated in #6622
- feat(net): peers advertise their implementation and version by @kixelated in #6520
- fix(carla): stop calling the removed TrackProducer.flush by @kixelated in #6639
- feat(mux)!: clock a declared catalog
reorderper group in TS, MKV and FLV by @kixelated in #6453 - feat(mux)!: keep a finished broadcast up for a fixed linger by @kixelated in #6636
- fix(qmux)!: return stream credit once both halves of a bidi stream end by @kixelated in #6644
- fix(quic): tiny frames cannot pin receive batches by @kixelated in #6613
- fix(net): open SUBSCRIBE_TRACKS PUBLISHes only as stream credit admits by @kixelated in #6641
- docs(drafts): forbidden lite control values close the session by @kixelated in #6645
- quest: plan typed codes for dropped e2ee datagrams by @kixelated in #6657
- quest: finish the HLS admission backport by @kixelated in #6638
- docs(e2ee): design reversible track names for undeclared requests by @kixelated in #6623
- ci: run check and ci modules in concurrent lanes by @kixelated in #6617
- quest: move pre-cut breaks and audit fixes into m1 by @kixelated in #6611
- fix: catalog readers follow a moved rendition by @kixelated in #6650
- fix(relay)!: keep the default stats interval when the CLI omits it by @kixelated in #6655
- 64-bit Hop IDs by @kixelated in #6614
- test(interop): keep the Rust publisher's media as long as the audio readers wait by @kixelated in #6658
- fix(net): every session close records its cause by @kixelated in #6651
- refactor(net)!: one with_range cursor setter by @kixelated in #6138
- fix(mux): share Annex-B rendition continuation by @kixelated in #6575
- fix(relay): io_uring listeners offer the configured listen.extensions by @kixelated in #6646
- fix(relay): ACME renewal honors the failed-validation budget by @kixelated in #6662
- feat(e2ee)!: drop bad datagrams with their typed code by @kixelated in #6666
- quest: audit the tree and open PRs by @kixelated in #6383
- feat(net)!: ask a moq-transport peer only about watched prefixes by @kixelated in #6530
- quest: plan JS undeclared e2ee names and decrypted listings by @kixelated in #6671
- fix(net)!: closing a derived origin handle releases only that handle by @kixelated in #6502
- fix(qmux): a request before the handshake waits for credit by @kixelated in #6687
- fix(mux): split the declared clock out so the decode_clock bench compiles by @kixelated in #6682
- docs(contributing): merge approval belongs to the enqueuing agent; queue jumps are the maintainer's by @kixelated in #6679
- moq-cli and moq-gst readers follow a broadcast's restarts by @kixelated in #6649
- test(stats): group linger ends held tracks by @kixelated in #6664
- Receive leases keep exact books by @kixelated in #6618
- refactor(congestion)!: extract controllers into moq-congestion by @kixelated in #6602
- fix(auth): drop the examples' stale clock lint expectations by @kixelated in #6688
- fix(watch): gate buffered playback on the shared startup floor by @shermerL in #6609
- fix(net): end SUBSCRIBE setup when the subscriber withdraws it by @kixelated in #6643
- feat(auth)!: an auth handle that outlives its session by @kixelated in #6109
- feat(e2ee)!: reversible physical track names by @kixelated in #6665
- fix(mux): apply fMP4 edit lists to frame timestamps by @kixelated in #6686
- quest: fold srt-end into the m2 srt-protocol driver by @kixelated in #6685
- feat(net)!: dynamic tracks serve fills for misses by @kixelated in #6171
- refactor(mux)!: container formats name inputs by @kixelated in #6449
- refactor!: consolidate transport configuration and session ownership by @kixelated in #6529
- quest: plan pure-Rust crypto, the C name clash, and the crate split rerun by @kixelated in #6659
- fix(net): stop a stalled group read spinning on closed routes by @kixelated in #6690
- refactor(media)!: trim the media crate surface (m1 api-audit) by @kixelated in #6517
- fix(net)!: every range and fetch starts at a group's first frame by @kixelated in #6465
- test(interop): the browser publisher sends its tone from a file, not a fake mic by @kixelated in #6647
- fix(net): open JS SUBSCRIBE_TRACKS PUBLISHes only as stream credit admits by @kixelated in #6663
- fix(tokio)!: resolve a WebRTC peer's mDNS candidates in one owned task by @kixelated in #6661
- fix(net): publish the send estimate before the connect by @kixelated in #6652
- build: pin uniffi-bindgen-cpp with C durations by @kixelated in #6683
- ci(obs): check OBS sources concurrently by @kixelated in #6684
- feat(mux)!: TS export follows by cause, and --linger is --follow by @kixelated in #6656
- quest: plan follow-ups from the m0/m1 spawn run by @kixelated in #6692
- quest: plan follow-ups from the 10-24 quest-complete run by @kixelated in #6691
- fix(hls)!: a failed catalog fails cursors with CatalogFailed by @kixelated in #6694
- quest: plan keeping only moq-transport drafts 18 and 22 by @kixelated in #6693
- quest: plan the moq-hls audit findings by @kixelated in #6695
- feat(net)!: broadcasts have no finished state by @kixelated in #6660
- quest: plan the moq-gst sibling-restart resume flake by @kixelated in #6696
- quest: plan skipping ProbeRTT after a near-floor RTT by @kixelated in #6699
- quest: plan HLS export tests over a session by @kixelated in #6700
- quest: drop the moq-ffi crate split quest by @kixelated in #6698
- docs: explain binding benchmark trends by @kixelated in #6675
- fix(net): log per-request lifecycle at debug by @kixelated in #6632
- perf(net): skip empty landing work on insertion by @kixelated in #6673
- fix(js): type-check against TypeScript 7.1's WebTransport types by @kixelated in #6625
- fix(net): keep a listing's finishes through its broadcast's clean end by @kixelated in #6577
- ci(fuzz): retain minimized corpus across Nightly runs by @kixelated in #6677
- refactor(net)!: use a fixed connection idle window by @kixelated in #6669
- chore(quest): retire Python setup work after concurrent lanes by @kixelated in #6667
- feat(hang): grade client health from stats and feedback by @t0ms in #6654
- fix(test): charge tone grace only during playback by @kixelated in #6668
- docs(quest): settle HLS recorder continuity by @kixelated in #6672
- fix(js): reject publishing unresolved MoQ dependencies by @shermerL in #6457
- fix(uring,sock): bound cmsg lengths; fuzz SETUP options by @kixelated in #6678
- fix(net): refuse a same-epoch route copy whose track info differs by @kixelated in #6460
- quest: plan unpaced hole refills for streaming groups by @kixelated in #6706
- fix(js): serve hosted worklets from the Vite dev server by @kixelated in #6626
- feat(relay): expose the resolved stats linger by @kixelated in #6705
- feat(cli): solicit viewer feedback with import --echo-path by @t0ms in #6552
- refactor(moq-video)!: rename Rate to FrameRate by @kixelated in #6653
- ci: share local check capacity across worktrees by @kixelated in #6256
- fix(net): drain a session on reconnect-loop teardown instead of aborting it by @kixelated in #6630
- feat(net)!: MALFORMED_AUTH_TOKEN session code by @kixelated in #6612
- quest: benchmark group storage and land the lock-free log in m1 by @kixelated in #6627
- fix(mux)!: assemble TS video across PES boundaries by @kixelated in #6534
- feat(net)!: only sessions accept an origin request by @kixelated in #6496
- fix(cli): keep audio output across broadcast runs by @kixelated in #6676
- fix(video): declare confirmed encoder reorder bounds by @kixelated in #6670
- feat(archive)!: serve a stored broadcast through archive::Consumer by @kixelated in #6262
- feat(quic): native bandwidth probing by resending in-flight STREAM data by @kixelated in #6635
- feat(stats)!: publish groups as tracks of one node broadcast by @kixelated in #6428
- build(deps): Bump rust-overlay from
e9d12b9to42076d1in the nix group by @dependabot[bot] in #6785 - build(deps-dev): Bump ruff from 0.17.0 to 0.17.1 in the uv group by @dependabot[bot] in #6786
- build(deps): Bump the bun group across 7 directories with 3 updates by @dependabot[bot] in #6787
- build(deps): Bump taiki-e/install-action from 2.87.28 to 2.87.29 in the github-actions group by @dependabot[bot] in #6788
- build(deps): Bump the cargo group with 5 updates by @dependabot[bot] in #6789
- feat(cli)!: refuse MOQ_* environment variables a binary does not read by @kixelated in #6633
- feat(ci): diff every published API against its last release on release PRs by @kixelated in #6477
- feat(net)!: separate publication control from broadcast filling by @kixelated in #6464
- quest: drop the routing identity proof by @kixelated in #6310
- fix(hls): refuse a byte range the origin ignored by @kixelated in #6768
- test(moq-mux): run the missing-sequence skip on a paused clock by @kixelated in #6735
- fix(docker)!: run the image unprivileged and pin its builder by digest by @kixelated in #6774
- fix(hls): refuse playlist numbers that overflow import arithmetic by @kixelated in #6766
- fix(net): report drops through a resumed JS subscriber by @kixelated in #6758
- test(net): benchmark range filling; scope fetch as a range by @kixelated in #6722
- feat(net)!: drop moq-transport drafts 19-21 by @kixelated in #6754
- fix(net): wait for credit on claimed group fetches by @kixelated in #6702
- fix(net): negotiate supported QMux in the startup benchmark by @kixelated in #6704
- fix(net): read SUBSCRIBE FINs that raced a peer's close by @kixelated in #6741
- fix(net): a minted source enforces its own request validity by @kixelated in #6748
- test(dart): measure moq's heap in the leak tests, not process RSS by @kixelated in #6739
- test(interop): hold the AAC tone to its phase by @kixelated in #6742
- bench(moq-quic): time resets into a shrunk receive window by @kixelated in #6710
- fix(net): never join a front resolving a beaten instance by @kixelated in #6737
- fix(hls): refuse renditions named "", ".", or ".." by @kixelated in #6772
- ci: sweep mbx only before a queue job builds, and name the Dart rebuild's cause by @kixelated in #6709
- fix(deps): bump crypto-bigint and override undici past open advisories by @kixelated in #6721
- quest: wait on the release gate backport and ruleset by @kixelated in #6725
- quest(ci): narrow the shared FFI release quest to the tag check by @kixelated in #6726
- chore(quest): adopt the quest merge driver by @kixelated in #6728
- quest: the JS namespace lifecycle cell waits on the runner's 0.4.6 bump by @kixelated in #6763
- chore(quest): wait on the release backport of the one-write data stream header by @kixelated in #6764
- chore(quest): finish the pinned consumer CLI flag migration by @kixelated in #6746
- feat(mux)!: take JSON snapshot encoder options as json::Options by @kixelated in #6760
- fix(hls): resolve playlist URIs against the redirected URL by @kixelated in #6770
- refactor(moq-ffi)!: carry durations as typed Duration by @kixelated in #6720
- fix(moq-c): refuse only the readers waiting on a group request by @kixelated in #6718
- fix(relay): never report a clean close as a revocation by @kixelated in #6779
- fix(mux): bound TS import state by retiring ended routes and admitting SI on the program clock by @kixelated in #6757
- fix(moq-net): subscription updates reach queued and taken fills by @kixelated in #6731
- feat(net)!: resolve the reload backoff the way moq-tokio does by @kixelated in #6756
- test(quic): count a raw stream's stop from the peer, not a failed write by @kixelated in #6732
- ci: check the bindings in separate lanes by @kixelated in #6716
- fix(mux): pin glibc's heap in the ts_schedule bench by @kixelated in #6727
- feat(moq-net): carry ranges on lite-07 SUBSCRIBE by @kixelated in #6715
- chore(bench): move the binding benchmark to rust2 by @kixelated in #6629
- feat(hls)!: record HLS to a directory with export hls --output by @kixelated in #6777
- fix(msf): refuse malformed initDataList references in every reader by @kixelated in #6773
- test(gst): wait on pad events in the pinned-instance replay test by @kixelated in #6738
- fix(js): never hold overlapping SUBSCRIBE_NAMESPACEs at a foreign peer by @kixelated in #6714
- style(moq-quic): take the workspace rustfmt by @kixelated in #6723
- fix(auth): present a lost AUTH stream's token again on the same session by @kixelated in #6734
- feat(net)!: name the request target once with Client::with_url by @kixelated in #6749
- fix(mux): start fMP4 passthrough video at a sync sample by @kixelated in #6743
- ci: prepare concurrent queue runners in the moq-ci container by @kixelated in #6712
- fix(hls): never print a signed URL in an import error by @kixelated in #6767
- fix(obs): stamp decoded pictures with their own timestamp and drain at EOF by @kixelated in #6711
- fix(obs)!: drop the unused audio-only and video-only outputs by @kixelated in #6762
- fix(auth)!: tiers are metric-safe names by @kixelated in #6778
- fix(nix): stop nix develop leaking nix-shell dirs; rename .scratch to .tmp by @kixelated in #6804
- test(rtsp): run the stall tests on a manual clock by @kixelated in #6736
- fix(net): a lowered resume floor backfills from the serving route by @kixelated in #6759
- perf(kio,net): lock-free append-only log for group frames by @kixelated in #6782
- feat(net): fetch missing runs as one FETCH, and serve multi-group FETCH by @kixelated in #6724
- test(hls): record and serve a broadcast across a moq-net session by @kixelated in #6776
- feat(bindings): every binding names itself in SETUP by @kixelated in #6775
- chore(quest): bump quest for the guide's workspace rules by @kixelated in #6803
- ci: check selected Rust feature shapes in the PR gate by @kixelated in #6703
- refactor(net)!: drop moq-net exports without a consumer by @kixelated in #6744
- quest: plan the 2026-10-24 pre-cut audit findings by @kixelated in #6707
- quest: record pre-cut follow-ups from the quest-spawn run by @kixelated in #6790
- feat(net): origin roots and request paths return PathOwned by @kixelated in #6808
- refactor(quic)!: trim unused APIs and scheduling domains by @kixelated in #6809
- fix(hls): never hold a DASH manifest on one rendition init by @kixelated in #6771
- docs(agents): skip IETF MUSTs a peer cannot enforce or the draft gets wrong by @kixelated in #6799
- quest: plan CI build sharing across moq's builds by @kixelated in #6812
- fix(nightly): build the paired-base test's own history by @kixelated in #6708
- test(ietf): moq-test conformance through a two-relay cluster by @kixelated in #6729
- chore(quest): move pure-Rust crypto to m1 and plan its upstream changes by @kixelated in #6811
- fix(net): build the schedule bench without scheduling domains by @kixelated in #6824
- feat(congestion): skip BBR3 ProbeRTT when app-limited by @kixelated in #6755
- feat(net)!: separate JS publication control from broadcast filling by @kixelated in #6795
- docs(agents): commit standing design rules kept in agent memory by @kixelated in #6825
- quest: plan follow-ups from the 2026-10-25 merge wave and Nightly by @kixelated in #6817
- quest: poll-first async, thin-generics build rules by @kixelated in #6814
- docs(quest): the generated C names follow GLib by @kixelated in #6793
- feat(auth)!: configured tokens ride SETUP and AUTH by @mriise in #6177
- fix(rtmp): read AMF0 strings and property names exactly by @kixelated in #6765
- fix(relay,video): unbreak the Windows platform build by @kixelated in #6821
- fix: never publish again under an ended track's name by @kixelated in #6780
- bench(relay): measure admitted sessions over memory by @kixelated in #6681
- fix(mux): give every TS PID a declared route by @kixelated in #6252
- feat(studio)!: moq-studio, moq-scene, and a moq-audio program bus by @kixelated in #6797
- refactor(congestion)!: make the controller trait transport-neutral by @kixelated in #6719
- feat(ffi)!: closing a binding broadcast ends its tracks by @kixelated in #6740
- quest: plan the overnight run's follow-ups by @kixelated in #6796
- feat(publish)!: drop announce="never" by @kixelated in #6761
- refactor(net)!: keep session-only model items private by @kixelated in #6747
- fix(quic): a repeated QMux transport parameter overwrites the earlier one by @kixelated in #6831
- quest: plan the uncovered Nightly failures from 10-25 by @kixelated in #6833
- quest: plan byte streams, the mesh, and fastest-reader pacing by @kixelated in #6832
- fix(net): a widened max age re-offers skipped cached groups by @kixelated in #6717
- quest: review Cargo features before each cut by @kixelated in #6838
- perf(moq-net): store large frames as sealed segments by @kixelated in #6628
- feat(moq-video): export the studio program to the encoder on the GPU by @kixelated in #6805
- quest: lean defaults with a release feature; Media Foundation adapter pick by @kixelated in #6835
- quest: plan studio autosave, scene editing, broadcast sync, Wayland sources by @kixelated in #6839
- fix(ci): isolate the Clippy fixture workspace by @kixelated in #6818
- perf(net): decode paths straight from the wire bytes by @kixelated in #6826
- quest: crate2nix replaces the crane layering quest by @kixelated in #6880
- quest: complete release API baseline seed by @kixelated in #6852
- quest: plan the 2026-10-25 quest-complete follow-ups and the C direction by @kixelated in #6850
- quest: kio::clock, libraries spawn nothing, drop the runtime trait by @kixelated in #6849
- refactor(quic)!: remove early-data connections by @kixelated in #6837
- quest: borrowed messages, announce fan-out allocations, axum tower-log by @kixelated in #6842
- quest: delete the stamp quest by @kixelated in #6858
- quest: audit the tree and record the 2026-10-25 decisions by @kixelated in #6798
- fix(mux)!: overwrite repeated IDs instead of tracking duplicates by @kixelated in #6827
- quest: plan addressing groups by timestamp by @kixelated in #6800
- ci: check selected Rust feature shapes in isolation by @kixelated in #6830
- fix(ci): select Cargo configuration and audit queue scope by @kixelated in #6853
- fix(quic): align ACK_FREQUENCY reordering with draft-14 and pin its thresholds by @zshenker in #6840
- quest: plan the studio's MoQ-native and OBS-polish backlog by @kixelated in #6876
- test(net): cover moq-transport-22 GOAWAY; fix a moq-quic bench lint by @kixelated in #6878
- quest: moq-quic owns its waits; poll traits on kio waiters by @kixelated in #6845
- fix(hang): refuse malformed H.264 codec fields by @kixelated in #6847
- fix(net): a lite-05/06 SUBSCRIBE_DROP ends its readers with Old by @kixelated in #6820
- quest: plan the cut's arrival stamp for held frames by @kixelated in #6844
- perf(clock): share the simulator test executor by @kixelated in #6846
- test(cli): run echo reporting on a paused clock by @kixelated in #6871
- fix(tokio): retain token grants through connection drains by @kixelated in #6859
- ci: restore and compile Loom models in the Rust gate by @kixelated in #6822
- feat(video)!: refuse GPU frames the renderer cannot import by @kixelated in #6806
- feat(net): end a covered bounded lite-07 subscription by @kixelated in #6807
- fix(hls): redact playlist credentials in discovery logs by @kixelated in #6868
- fix(elements): release media resources on disconnect by @kixelated in #6860
- fix(net): bound sparse ledger updates by touched gaps by @kixelated in #6869
- test(interop): load the local GStreamer plugin reliably by @kixelated in #6874
- feat(bindings)!: decoders read gaps and ends by @kixelated in #6745
- fix(json): refuse malformed Unicode and ambiguous MSF JSON by @kixelated in #6863
- quest: record the time-addressing spike as implementation quests by @kixelated in #6872
- fix(audio): bound catalog-driven buffer allocations by @kixelated in #6865
- fix(py): include optional workspace dependencies in sdist by @kixelated in #6867
- quest: delete media resource instrumentation by @kixelated in #6439
- fix(net): verify the model without async by @kixelated in #6851
- fix(rtmp): borrow incoming AMF0 values by @kixelated in #6862
- fix(quic): keep completion out of probe reset history by @kixelated in #6870
- fix(net): negotiate every moq-lite version in SETUP without a subprotocol by @kixelated in #6828
- quest: keep crane for Nix packages; drop crate2nix by @kixelated in #6886
- perf(bench): select worker runtime and base revision for profiles by @kixelated in #6680
- quest: park the lag histogram on the QUIC ACK hook by @kixelated in #6884
- quest: plan moving the public merge gates to a rented host by @kixelated in #6888
- quest: defer the graviola switch to m3, drop moq-auth's rsa crate in m1 by @kixelated in #6883
- fix(mux): judge held TS frames at the observed loss by @kixelated in #6873
- perf(mux): fix export regressions found by the main against release comparison by @kixelated in #6784
- chore(js): validate API declarations with API Extractor by @kixelated in #6794
- fix(ci): finish independent checks and report unavailable flake tests by @kixelated in #6823
- feat(c)!: ship the generated C API as the moq-c package by @kixelated in #6052
- test(relay): cover grant expiry before SETUP by @kixelated in #6857
- fix(net): refuse an unanswered epochless request once its instance is replaced by @kixelated in #6816
- build: disable axum tower-log by @kixelated in #6866
- test(obs): wait for the rejected candidate to retire by @kixelated in #6829
- feat(rate)!: native publishers disable simulcast rungs the grant cannot fund by @kixelated in #6781
- feat(net): update IETF subscription ranges by @kixelated in #6815
- fix(qmux)!: expose TCP statistics only on supported platforms by @kixelated in #6855
- fix(mux): share fMP4 sample resolution by @kixelated in #6864
- quest(ci): complete the release gate condition by @kixelated in #6901
- fix(ci): bump mbx past the remote manifest limit by @kixelated in #6889
- fix(js): declare api-extractor in every package whose build runs it by @kixelated in #6882
- fix(watch): keep supported renditions available by @kixelated in #6896
- fix(media): preserve reactive preview lifetimes by @kixelated in #6897
- fix(watch)!: keep mute independent from volume by @kixelated in #6895
- fix(net): bound IETF advertisements and close peer violations by @kixelated in #6899
- quest: halve the slowest tests, flatten nested Options by @kixelated in #6881
- quest: plan a batched merge gate, MIGRATE conflicts, and m0 flakes by @kixelated in #6854
- fix(flate): stop inflation at the group budget by @kixelated in #6900
- quest(ci): deprioritize moving unit tests out of moq-net by @kixelated in #6893
- fix(publish): keep cameras announced across capture gaps by @kixelated in #6894
- fix(tokio): check Unix allowlist before qmux negotiation by @kixelated in #6907
- fix(congestion): seed default BBR3 controllers in unit tests by @kixelated in #6902
- fix(moq-mux): sweep the catalog write-order bench without the removed rendition cap by @kixelated in #6911
- quest: plan MoQ on rind, a pure-Rust graviola fork by @kixelated in #6915
- quest: import the multi-object datagram and redundant-switch issues by @kixelated in #6887
- feat(elements)!: reflect state and refuse invalid configuration by @kixelated in #6904
- feat(auth)!: per-connection tokens with an answer, and a grant consumer by @kixelated in #6834
- feat(net)!: one lifecycle vocabulary for finish, abort, closed, and close by @kixelated in #6750
- fix(mux)!: refuse malformed container imports by @kixelated in #6908
- fix(net): refuse malformed complete announce bodies by @kixelated in #6909
- quest(rind): armv7 signs RSA PKCS#1 and P-384 too by @kixelated in #6917
- feat(auth)!: replace rsa key handling with aws-lc-rs by @kixelated in #6898
- fix(net): retain the highest group PTS by @kixelated in #6910
- refactor(net)!: moq-net names say one thing by @kixelated in #6751
- fix(net): align transport and reader behavior across runtimes by @kixelated in #6905
- feat(net)!: name request handlers requests() by @kixelated in #6752
- refactor(net)!: Path and Relative lose their lifetime by @kixelated in #6843
- feat(net)!: drop moq-transport drafts 14 through 17 by @kixelated in #6753
- fix(net)!: refuse empty path segments at construction by @kixelated in #6648
- feat(hang)!: opt-in per-rendition hls records replace the root archive by @kixelated in #6783
- quest(perf): ring storage for sent and lost packets by @kixelated in #6928
- quest: plan the quest-complete follow-ups by @kixelated in #6929
- fix(watch): round MSF video and audio jitter up by @michaelstuurman in #6924
- feat(bindings)!: surface encoded media gaps and ends by @kixelated in #6923
- fix(qmux): keep app-limited delivery-rate samples from lowering the estimate by @michaelstuurman in #6925
- fix(uring): reserve completion scratch before pumping by @kixelated in #6916
- fix(net): judge sparse misses from changed runs by @kixelated in #6921
- fix(tokio): keep the evicted test writer open for STOP by @kixelated in #6912
- fix(net): drop nonzero datagram objects on untyped surfaces by @kixelated in #6918
- docs: keep feature migration notes in PR Impact by @kixelated in #6913
- feat(e2ee)!: align producer finish abort and release by @kixelated in #6920
- quest(perf): name the accepted RFC 9002 deviations in the ring quest Goal by @kixelated in #6933
- test(boy): mock the audio worklet in the element test by @kixelated in #6935
- docs(quic): complete the #6809 migration notes and drop stale docs by @zshenker in https://github.com/moq-dev/moq/pull/6841
- fix(net)!: bound paths to the moq-transport namespace limit by @kixelated in https://github.com/moq-dev/moq/pull/6927
- quest: unblock m0/m1 chains from the 2026-10-27 audit by @kixelated in https://github.com/moq-dev/moq/pull/6938
- chore(smoke): refresh the toolchain and matching Playwright pin by @moq-bot[bot] in https://github.com/moq-dev/moq/pull/6879
- fix(mux): retain old program during stitched epoch acquisition by @kixelated in https://github.com/moq-dev/moq/pull/6919
- fix(watch): keep media holes on the current timeline by @kixelated in https://github.com/moq-dev/moq/pull/6903
- test(mux): reduce fixture CPU and checkpoint frozen cohort by @kixelated in https://github.com/moq-dev/moq/pull/6914
- chore(quest): retire announce-path-bytes, finished by #6927 by @kixelated in https://github.com/moq-dev/moq/pull/6926
- perf(quic): track sent and lost packets in chunked slots by @kixelated in https://github.com/moq-dev/moq/pull/6936
- fix(nix): declare moq-net-tests targets so crane's deps build loads by @kixelated in https://github.com/moq-dev/moq/pull/6931
- feat(net): exclude a subtree from an origin consumer by @kixelated in https://github.com/moq-dev/moq/pull/6932
- chore(quest): keep moq-net's model in rust2-ts's subset by @kixelated in https://github.com/moq-dev/moq/pull/6930
- quest: plan follow-ups from the 2026-10-27 PR pass by @kixelated in https://github.com/moq-dev/moq/pull/6944
- fix(nix): drop the background GC from .envrc by @kixelated in https://github.com/moq-dev/moq/pull/6953
- chore(quest): fold route epochs into routes by @kixelated in https://github.com/moq-dev/moq/pull/6948
- docs: render the JS API reference and reports with TypeDoc by @kixelated in https://github.com/moq-dev/moq/pull/6906
- chore(quest): bootstrap rind by @kixelated in https://github.com/moq-dev/moq/pull/6940
- quest: try CodSpeed simulation before a bare-metal bench host by @kixelated in https://github.com/moq-dev/moq/pull/6971
- fix(net): preserve transport frame bounds by @kixelated in https://github.com/moq-dev/moq/pull/6922
- perf(net): decoded messages borrow from the wire buffer by @kixelated in https://github.com/moq-dev/moq/pull/6952
- chore(quest): plan Rust IETF FETCH parity with the JS publisher by @kixelated in https://github.com/moq-dev/moq/pull/6984
- feat(mux)!: publish HLS records by default by @kixelated in https://github.com/moq-dev/moq/pull/6937
- fix(net): allow late groups after reported drops by @kixelated in https://github.com/moq-dev/moq/pull/6983
- fix(relay): keep test relays off process signals by @kixelated in https://github.com/moq-dev/moq/pull/6986
- refactor(net): unify resume route terminal state by @kixelated in https://github.com/moq-dev/moq/pull/6979
- fix(net): preserve epoch track verdicts by @kixelated in https://github.com/moq-dev/moq/pull/6977
- fix(net): cap lite datagram bodies end to end by @kixelated in https://github.com/moq-dev/moq/pull/6975
- fix(watch): switch the audio ring with buffer mode by @kixelated in https://github.com/moq-dev/moq/pull/6965
- fix(mux): defer fMP4 boundaries until sync samples by @kixelated in https://github.com/moq-dev/moq/pull/6963
- fix(net): end withdrawn IETF requests during resolution by @kixelated in https://github.com/moq-dev/moq/pull/6964
- feat(js): serve cached IETF FETCH, including draft-18 joining FETCH by @kixelated in https://github.com/moq-dev/moq/pull/6945
- quest: plan the second batch of 2026-10-27 follow-ups by @kixelated in https://github.com/moq-dev/moq/pull/6998
- chore(quest): bump CLI to ship quest land by @kixelated in https://github.com/moq-dev/moq/pull/6941
- fix(ci): restore the Rust dependency audit by @kixelated in https://github.com/moq-dev/moq/pull/6943
- refactor(net): name the dial credential presentation by @kixelated in https://github.com/moq-dev/moq/pull/6962
- refactor(tokio)!: accept incoming connections explicitly by @kixelated in https://github.com/moq-dev/moq/pull/6956
- refactor(tokio)!: accept Unix peers only through server policy by @kixelated in https://github.com/moq-dev/moq/pull/6960
- docs(quest): remove the completed media-kind fix by @kixelated in https://github.com/moq-dev/moq/pull/6968
- docs(contributing): drop the merge-queue jump rule by @kixelated in https://github.com/moq-dev/moq/pull/7001
- fix(net): unlink stale fronts without scanning the cache by @kixelated in https://github.com/moq-dev/moq/pull/6980
- quest: plan the 2026-10-27 performance sweep's findings by @kixelated in https://github.com/moq-dev/moq/pull/7007
- docs(quest): plan the release audit's unowned findings by @kixelated in https://github.com/moq-dev/moq/pull/7003
- fix(smoke): call the installed client interfaces by @kixelated in https://github.com/moq-dev/moq/pull/6981
- fix(ci): select a merge group's changes from main by @kixelated in https://github.com/moq-dev/moq/pull/6991
- fix(runner): accept earlyoom's SIGKILL in the memory-hog subtest by @kixelated in https://github.com/moq-dev/moq/pull/7005
- fix(lite): align version gates and refuse malformed ranges by @kixelated in https://github.com/moq-dev/moq/pull/6976
- docs(quest): finish mux import backport publication by @kixelated in https://github.com/moq-dev/moq/pull/6957
- chore(quest): plan the gate hang and release version automation by @kixelated in https://github.com/moq-dev/moq/pull/7020
- fix(net)!: preserve errors when closing unfinished work by @kixelated in https://github.com/moq-dev/moq/pull/6978
- fix(rtmp): bound sessions to one publish or play by @kixelated in https://github.com/moq-dev/moq/pull/7011
- fix(smoke): preserve fixes missed by the repository move by @kixelated in https://github.com/moq-dev/moq/pull/7002
- docs(quest): record IETF22 fallback baseline by @kixelated in https://github.com/moq-dev/moq/pull/7013
- docs(quest): record JS SETUP rejection ownership investigation by @kixelated in https://github.com/moq-dev/moq/pull/6997
- chore(quest): finish the IETF close-code release backport by @kixelated in https://github.com/moq-dev/moq/pull/6954
- quest: cut records-free HLS on a broadcast join interval by @kixelated in https://github.com/moq-dev/moq/pull/7041
- chore(quest): plan follow-ups from the 2026-10-27 spawn by @kixelated in https://github.com/moq-dev/moq/pull/7021
- fix(quic): back off a probe target the path can't reach by @kixelated in https://github.com/moq-dev/moq/pull/7025
- feat(bindings)!: announce through publication handles by @kixelated in https://github.com/moq-dev/moq/pull/7044
- refactor(net)!: transport polls take kio waiters through &self by @kixelated in https://github.com/moq-dev/moq/pull/7042
- feat(js): honor IETF FILL_TIMEOUT on FETCH and fills by @kixelated in https://github.com/moq-dev/moq/pull/7051
- fix(net): a finished bounded copy leaves the largest group open by @kixelated in https://github.com/moq-dev/moq/pull/7053
- test(net): check a moved group outlives its replaced copy in Rust resume by @kixelated in https://github.com/moq-dev/moq/pull/7098
- fix(net): mock resets carry only codes; ietf publisher cancels with CANCELLED by @kixelated in https://github.com/moq-dev/moq/pull/7099
- fix(congestion): age an app-limited BBR3 bandwidth estimate by @kixelated in https://github.com/moq-dev/moq/pull/7017
- test(interop): cover late join and FETCH of a past group by @kixelated in https://github.com/moq-dev/moq/pull/7015
- quest: report the kio poll-macro spike by @kixelated in https://github.com/moq-dev/moq/pull/7057
- fix(moq-mux): TS programs follow the PAT as it changes by @t0ms in https://github.com/moq-dev/moq/pull/6689
- quest: plan kio::machine and its straight-line conversions by @kixelated in https://github.com/moq-dev/moq/pull/7109
- feat(quic)!: plain configs, endpoint-owned sockets, v1-only QUIC by @kixelated in https://github.com/moq-dev/moq/pull/7045
- quest: plan follow-ups from net-poll, binding-publication and fill-timeout-js by @kixelated in https://github.com/moq-dev/moq/pull/7111
- fix(mux): drop the old program's tail at a stitched switch by @kixelated in https://github.com/moq-dev/moq/pull/7049
- quest: plan follow-ups from settled-copies by @kixelated in https://github.com/moq-dev/moq/pull/7113
- fix(net): prove model handles Send once at their shared state by @kixelated in https://github.com/moq-dev/moq/pull/6890
- fix(net): close the relay demand gaps by @kixelated in https://github.com/moq-dev/moq/pull/7052
- quest: moq-bench scores only gaps at or after a subscription's start by @kixelated in https://github.com/moq-dev/moq/pull/7115
- fix(net): finish legacy tracks whose FIN races a graceful close by @kixelated in https://github.com/moq-dev/moq/pull/6969
- chore(quest): bump quest so forks with their own quests claim on themselves by @kixelated in https://github.com/moq-dev/moq/pull/7107
- quest: plan follow-ups from #7015 and #7016 by @kixelated in https://github.com/moq-dev/moq/pull/7103
- quest: compare the extra-acked filter in the BBR study by @kixelated in https://github.com/moq-dev/moq/pull/7106
- quest: the HLS target duration is the join interval by @kixelated in https://github.com/moq-dev/moq/pull/7112
- chore(quest): plan read-only pull-request CI by @kixelated in https://github.com/moq-dev/moq/pull/7116
- fix(mux)!: publish a new track when a rendition's decoder identity changes by @kixelated in https://github.com/moq-dev/moq/pull/7110
- feat(net)!: own broadcast discovery during resolution by @kixelated in https://github.com/moq-dev/moq/pull/6445
- quest(m1): sans-IO compared on the lite upstream SUBSCRIBE by @kixelated in https://github.com/moq-dev/moq/pull/7058
- fix(moq-mux): a TS export places its first SI after its PMT and a PCR interval by @kixelated in https://github.com/moq-dev/moq/pull/7048
- chore(quest): plan adopting local reviews by @kixelated in https://github.com/moq-dev/moq/pull/7125
- quest: plan uncovered October 28 nightly failures by @kixelated in https://github.com/moq-dev/moq/pull/7119
- feat(net): restore broadcast demand and document the demand chain by @kixelated in https://github.com/moq-dev/moq/pull/6934
- docs: encourage AI-assisted contributions by @kixelated in https://github.com/moq-dev/moq/pull/7127
- docs: add REVIEW.md for adversarial, approach-first reviews by @kixelated in https://github.com/moq-dev/moq/pull/7126
- quest: import #7067, #7088, #7101 and #7102 by @kixelated in https://github.com/moq-dev/moq/pull/7124
- build(ffi): define moq-ffi's default build once by @kixelated in https://github.com/moq-dev/moq/pull/7055
- fix(ts): restore the scheduled TS workflow by @kixelated in https://github.com/moq-dev/moq/pull/7047
- fix(mux): bound the HLS segmenter's pending cuts to two by @kixelated in https://github.com/moq-dev/moq/pull/7105
- refactor!: one compressed track per name by @kixelated in https://github.com/moq-dev/moq/pull/7046
- quest: plan a VMAF video quality harness with GoP pop detection by @kixelated in https://github.com/moq-dev/moq/pull/7129
- test(net): a short-budget reader never settles a refused group for a longer one by @kixelated in https://github.com/moq-dev/moq/pull/7097
- feat(tokio)!: start a fallback runtime outside tokio by @kixelated in https://github.com/moq-dev/moq/pull/7123
- fix(size): admit new shipping artifacts without dropping history by @kixelated in https://github.com/moq-dev/moq/pull/7132
- feat(container): bound decoded lookahead by a max buffer by @kixelated in https://github.com/moq-dev/moq/pull/7056
- quest: split the resolve rollout and plan the TS table rework by @kixelated in https://github.com/moq-dev/moq/pull/7167
- fix(js): re-enabling an audio encoder reuses its Opus probe by @kixelated in https://github.com/moq-dev/moq/pull/7163
- fix(net): an unbounded max delay no longer ends a track short of its tail by @kixelated in https://github.com/moq-dev/moq/pull/7169
- feat(moq-audio): capture and encode while enabled, with an on-demand opt-in by @kixelated in https://github.com/moq-dev/moq/pull/7159
- fix(net): fill no history below a subscription's start that its reader skips by @kixelated in https://github.com/moq-dev/moq/pull/7168
- fix(mux): the export re-acquires an unmarked timeline step by @kixelated in https://github.com/moq-dev/moq/pull/7165
- refactor(tokio,wasm,ffi): iroh and browser backends implement moq-net's poll traits by @kixelated in https://github.com/moq-dev/moq/pull/7160
- chore(quest): plan the 2026-10-27 security audit findings by @kixelated in https://github.com/moq-dev/moq/pull/7014
- refactor(net)!: follow(path) replaces request's announced option by @kixelated in https://github.com/moq-dev/moq/pull/7173
- refactor(mux): lay the TS export's tables from current state by @kixelated in https://github.com/moq-dev/moq/pull/7171
- Keep pull-request CI read-only by @kixelated in https://github.com/moq-dev/moq/pull/7166
- chore: drop the peer-review skill link by @kixelated in https://github.com/moq-dev/moq/pull/7178
- chore(quest): plan the 2026-10-28 audit follow-up's findings by @kixelated in https://github.com/moq-dev/moq/pull/7177
- fix(moq-mux): an HLS viewer starts on-demand capture by @kixelated in https://github.com/moq-dev/moq/pull/7054
- chore(quest): plan #7168's start-budget and draft-22 floor follow-ups by @kixelated in https://github.com/moq-dev/moq/pull/7179
- feat(moq-video)!: capture encodes while enabled, on demand as an opt-in by @kixelated in https://github.com/moq-dev/moq/pull/7164
- fix(mux): settle catalog estimates before they churn by @kixelated in https://github.com/moq-dev/moq/pull/7161
- docs: count automated reviews posted from the maintainer's account by @kixelated in https://github.com/moq-dev/moq/pull/7180
- quest: plan the watch follow prop and a TS export step back by @kixelated in https://github.com/moq-dev/moq/pull/7184
- test(js): drive the remaining fake-timer tests through Manual by @kixelated in https://github.com/moq-dev/moq/pull/7076
- feat(net)!: name the Rust resolutions request and follow by @kixelated in https://github.com/moq-dev/moq/pull/7172
- chore: drop the kixelated/skills submodule by @kixelated in https://github.com/moq-dev/moq/pull/7183
- fix(js): yield host tasks through the injected clock by @kixelated in https://github.com/moq-dev/moq/pull/6988
- quest: plan test, clock, and publishing follow-ups by @kixelated in https://github.com/moq-dev/moq/pull/7191
- feat(watch)!: name the resolution choice
followinstead ofannouncedby @kixelated in https://github.com/moq-dev/moq/pull/7189 - feat(moq-cli)!: capture encodes while publishing, --on-demand as an opt-in by @kixelated in https://github.com/moq-dev/moq/pull/7188
- fix(moq-c): keep the bandwidth wait's callback, and record the C async contract by @kixelated in https://github.com/moq-dev/moq/pull/7087
- quest: plan narrowing moq-transport to what's worth supporting by @kixelated in https://github.com/moq-dev/moq/pull/7194
- feat(relay): count inflated bytes and prove compressed catalog fan-out end to end by @kixelated in https://github.com/moq-dev/moq/pull/7162
- fix(ci): select crates whose targets sit outside them by @kixelated in https://github.com/moq-dev/moq/pull/7142
- quest: finish incremental compilation for moq-net (it already pays off) by @kixelated in https://github.com/moq-dev/moq/pull/7146
- fix(moq-bench): score only gaps at or after a subscription's start by @kixelated in https://github.com/moq-dev/moq/pull/7147
- fix(test): start streams on the private null sink in tens of milliseconds by @kixelated in https://github.com/moq-dev/moq/pull/7138
- perf(net): resolve the paired network microbenchmark regressions by @kixelated in https://github.com/moq-dev/moq/pull/7139
- feat(c)!: announce through moq_announce_route by @kixelated in https://github.com/moq-dev/moq/pull/7151
- perf(net): write each object's header in one stream write by @kixelated in https://github.com/moq-dev/moq/pull/7133
- refactor!: callers resolve each broadcast once by @kixelated in https://github.com/moq-dev/moq/pull/7192
- feat!: Rust consumers hold a disabled rendition by @kixelated in https://github.com/moq-dev/moq/pull/7156
- quest: plan byte streams and E2EE in moq-ffi for T3 Code by @kixelated in https://github.com/moq-dev/moq/pull/7198
- build(go): fail
just go checkon unformatted Go by @kixelated in https://github.com/moq-dev/moq/pull/7158 - fix(net): an aborted live copy doesn't hold a track's end open by @kixelated in https://github.com/moq-dev/moq/pull/7149
- fix(net): a mid-stream priority change reaches the publisher by @kixelated in https://github.com/moq-dev/moq/pull/7145
- fix(kio): order a log read before the thread's next epoch pin by @kixelated in https://github.com/moq-dev/moq/pull/7134
- test(net): acknowledge upstream FINs on arrival in relay_upstream_close by @kixelated in https://github.com/moq-dev/moq/pull/7066
- test(mux): encode the recovery clips once per FFmpeg build by @kixelated in https://github.com/moq-dev/moq/pull/7074
- fix(ci): exclude scratch trees from TOML formatting by @kixelated in https://github.com/moq-dev/moq/pull/7114
- fix(dart): isolate publish checks from scratch ignores by @kixelated in https://github.com/moq-dev/moq/pull/7117
- fix(mux): preserve Opus timing in fMP4 exports by @kixelated in https://github.com/moq-dev/moq/pull/7118
- fix(tokio): gate incoming refusal with its callers by @kixelated in https://github.com/moq-dev/moq/pull/7120
- fix(quic): keep the connection_blocked bench blocked by @kixelated in https://github.com/moq-dev/moq/pull/7128
- test(drill): reject fuzzy mutation patches by @kixelated in https://github.com/moq-dev/moq/pull/7121
- bench: add CodSpeed CPU simulation for the deterministic Criterion benches by @kixelated in https://github.com/moq-dev/moq/pull/7130
- feat(publish): encode while enabled, with an onDemand opt-in by @kixelated in https://github.com/moq-dev/moq/pull/7143
- perf(net): stream a frame's single delivery without extra allocations by @kixelated in https://github.com/moq-dev/moq/pull/7141
- bench(net): isolate SETUP parameters from message codecs by @kixelated in https://github.com/moq-dev/moq/pull/7153
- fix(libav): give ffmpeg's configure a host compiler on darwin by @kixelated in https://github.com/moq-dev/moq/pull/7170
- quest: plan a runtime-free QUIC driver by @kixelated in https://github.com/moq-dev/moq/pull/7197
- chore(quest): finish draft-18 tail validation by @kixelated in https://github.com/moq-dev/moq/pull/7059
- fix(net): report a JS IETF FETCH group evicted after listing as unknown by @kixelated in https://github.com/moq-dev/moq/pull/7150
- quest: plan cutting epoch over moq-transport and a shared serving core by @kixelated in https://github.com/moq-dev/moq/pull/7203
- chore(quest): finish the frame-start release backport by @kixelated in https://github.com/moq-dev/moq/pull/6958
- fix(video): end a PipeWire capture when its node goes, and retire leases on removed buffers by @barafael in https://github.com/moq-dev/moq/pull/6939
- quest: plan Biome 2.6, YAML/Markdown formatting, and a bun fmt/lint evaluation by @kixelated in https://github.com/moq-dev/moq/pull/7214
- chore(quest): finish swapped-js-opus, fixed by #6820 by @kixelated in https://github.com/moq-dev/moq/pull/6989
- feat(carla): ship the player as a element by @kixelated in https://github.com/moq-dev/moq/pull/7065
- docs(drafts): trim moq-lite-07 to what a peer observes by @kixelated in https://github.com/moq-dev/moq/pull/7040
- fix(mux): a TS export drains a left publisher's buffered tail before it ends by @kixelated in https://github.com/moq-dev/moq/pull/7137
- fix(audio): hold a latest join's whole budget from the start by @kixelated in https://github.com/moq-dev/moq/pull/6990
- docs: align upgrade notes with supported behavior by @kixelated in https://github.com/moq-dev/moq/pull/7064
- quest: plan follow-ups from the 2026-10-28 m0/m1 spawn by @kixelated in https://github.com/moq-dev/moq/pull/7195
- test(js): a joining FETCH times out on a pending SUBSCRIBE by @kixelated in https://github.com/moq-dev/moq/pull/7079
- test(net): a JS SETUP refusal has one rejection owner by @kixelated in https://github.com/moq-dev/moq/pull/7083
- quest: bound groups at a 32 MB tail and replay through paced flights by @kixelated in https://github.com/moq-dev/moq/pull/7212
- fix(net): refuse SETUP paths on URI bindings by @kixelated in https://github.com/moq-dev/moq/pull/7206
- quest: plan the 2026-10-27 refactor audit's new findings by @kixelated in https://github.com/moq-dev/moq/pull/7008
- quest: plan the API audit's honesty findings by @kixelated in https://github.com/moq-dev/moq/pull/7000
- docs(quest): plan the coverage audit's findings by @kixelated in https://github.com/moq-dev/moq/pull/7010
- quest: plan CLI media modes and the resolve follow-ups by @kixelated in https://github.com/moq-dev/moq/pull/7205
- ci(release): attest build provenance for moq and moq-relay archives by @kixelated in https://github.com/moq-dev/moq/pull/7224
- fix(gst): hold disabled moqsrc renditions while muted by @kixelated in https://github.com/moq-dev/moq/pull/7240
- chore(quest): finish m2/c/name-clash now that rust2#66 merged by @kixelated in https://github.com/moq-dev/moq/pull/7231
- test(kio): isolate log reclamation tests sharing the epoch collector by @kixelated in https://github.com/moq-dev/moq/pull/7244
- chore(quest): plan per-test temp directories by @kixelated in https://github.com/moq-dev/moq/pull/7006
- quest: plan follow-ups from the spawn merges by @kixelated in https://github.com/moq-dev/moq/pull/7208
- perf(moq-quic): decode a PADDING run as one frame by @kixelated in https://github.com/moq-dev/moq/pull/7075
- feat(mux): a TS clock step restarts the import under a new epoch by @kixelated in https://github.com/moq-dev/moq/pull/7144
- fix(bindings)!: name every registered session error by @kixelated in https://github.com/moq-dev/moq/pull/6966
- fix(video): test both render output paths on the software driver by @kixelated in https://github.com/moq-dev/moq/pull/7136
- quest: delete release-versions (backports may share one version) by @kixelated in https://github.com/moq-dev/moq/pull/7100
- fix(relay)!: isolate outbound HTTP trust by @kixelated in https://github.com/moq-dev/moq/pull/7199
- test(net): cover batch-boundary and mid-batch write refusals by @kixelated in https://github.com/moq-dev/moq/pull/7154
- test(moq-net): a stalled reader keeps every group its budget covers by @kixelated in https://github.com/moq-dev/moq/pull/7080
- feat(js): join moq-transport tracks at the current group by @michaelstuurman in https://github.com/moq-dev/moq/pull/7089
- fix(net): end moq-transport requests stalled on send credit by @kixelated in https://github.com/moq-dev/moq/pull/7016
- quest: plan follow-ups from the 2026-10-28 merges by @kixelated in https://github.com/moq-dev/moq/pull/7122
- feat(moq-c)!: supply bitrate and group duration hints by @michaelstuurman in https://github.com/moq-dev/moq/pull/7068
- feat(moq-mux): a live TS export follows a moved PMT PID by @kixelated in https://github.com/moq-dev/moq/pull/7182
- feat(kio): #[kio::machine] writes straight-line poll bodies by @kixelated in https://github.com/moq-dev/moq/pull/7148
- perf(net): skip the clock and grace on an unchanged miss probe by @kixelated in https://github.com/moq-dev/moq/pull/7140
- feat(bindings)!: name the resolutions request and follow by @kixelated in https://github.com/moq-dev/moq/pull/7193
- fix(moq-c): wrap handle allocation and document callback safety by @kixelated in https://github.com/moq-dev/moq/pull/7209
- feat(net): lite-07 SUBSCRIBE_OK names where each range starts, replacing Group by @kixelated in https://github.com/moq-dev/moq/pull/6951
- fix(watch): hold a disabled rendition while no enabled one remains by @kixelated in https://github.com/moq-dev/moq/pull/7155
- chore(quest): adopt local reviews by @kixelated in https://github.com/moq-dev/moq/pull/7175
- quest: plan the audio groupDuration backport to release by @kixelated in https://github.com/moq-dev/moq/pull/7268
- chore(quest): plan refusing VM checks without KVM by @kixelated in https://github.com/moq-dev/moq/pull/7269
- quest: plan follow-ups from the main-vs-release audit by @kixelated in https://github.com/moq-dev/moq/pull/7004
- test(mux): cover TS replacement cancellation after follow expiry by @kixelated in https://github.com/moq-dev/moq/pull/7249
- fix(net)!: one strict path rule, minted and parsed by @kixelated in https://github.com/moq-dev/moq/pull/7037
- fix(relay): refuse unsupported io_uring listen settings by @kixelated in https://github.com/moq-dev/moq/pull/7022
- fix(bench): expect stable MSF catalogs during estimate churn by @kixelated in https://github.com/moq-dev/moq/pull/7264
- fix(tokio): keep persisted iroh keys private by @kixelated in https://github.com/moq-dev/moq/pull/7213
- docs(quest): verify the Nix dev-shell cache by @kixelated in https://github.com/moq-dev/moq/pull/7031
- fix(ci): let the Kotlin wrapper publish after Release FFI by @kixelated in https://github.com/moq-dev/moq/pull/7026
- feat(c)!: decoders choose where to start by @kixelated in https://github.com/moq-dev/moq/pull/7033
- refactor(net): limit IETF publishers to one-group history by @kixelated in https://github.com/moq-dev/moq/pull/7204
- docs(concept): add the identity and recovery guide by @kixelated in https://github.com/moq-dev/moq/pull/7039
- quest: gate each diff in under five minutes by @kixelated in https://github.com/moq-dev/moq/pull/7265
- ci: prepare batched landing through Quest by @kixelated in https://github.com/moq-dev/moq/pull/7024
- fix(land): pass the base to the check job instead of needing jq on the worker by @kixelated in https://github.com/moq-dev/moq/pull/7289
- chore(quest): point rind links at moq-dev/rind by @kixelated in https://github.com/moq-dev/moq/pull/7271
- fix(mux): bound jitter admission by @kixelated in https://github.com/moq-dev/moq/pull/7012
- Verify the R2 Rust cache by @kixelated in https://github.com/moq-dev/moq/pull/7030
- fix(net): yield peer-driven receive loops on a per-message budget by @kixelated in https://github.com/moq-dev/moq/pull/7034
- fix(net)!: a local session close cancels received tracks like a remote close by @kixelated in https://github.com/moq-dev/moq/pull/7081
- feat(moq-c): JSON window producer and consumer by @kixelated in https://github.com/moq-dev/moq/pull/7082
- feat(net)!: list only full-name matches by default, with a covering view for routing by @kixelated in https://github.com/moq-dev/moq/pull/7266
- fix(carla): unwrap timed driver commands by @kixelated in https://github.com/moq-dev/moq/pull/7270
- chore: point quest and rust2 references at moq-dev by @kixelated in https://github.com/moq-dev/moq/pull/7272
- infra: token.moq.dev issues scoped moq-bot tokens by OIDC by @kixelated in https://github.com/moq-dev/moq/pull/7275
- test(net): check resume against a model of one logical track by @kixelated in https://github.com/moq-dev/moq/pull/6947
- feat(quic)!: namespace QUIC streams as send, recv, and stream by @kixelated in https://github.com/moq-dev/moq/pull/6950
- feat(net)!: shed group fronts past a 32 MB tail or under pool debt by @kixelated in https://github.com/moq-dev/moq/pull/6993
- fix(quic): unbreak moq-quic's all-features rustdoc by @kixelated in https://github.com/moq-dev/moq/pull/7069
- test: stop tracing-test forcing TRACE across the build by @kixelated in https://github.com/moq-dev/moq/pull/7071
- feat(json): a public snapshot group budget, refusing an oversized snapshot before parsing by @kixelated in https://github.com/moq-dev/moq/pull/7072
- fix(smoke): hold the Cloudflare probe's track reader; gate the runner on moq-dev pairs by @kixelated in https://github.com/moq-dev/moq/pull/7073
- fix(bindings)!: null max delay means no limit, with a default subscription constructor by @kixelated in https://github.com/moq-dev/moq/pull/7077
- fix(hls): pin EXT-X-TARGETDURATION to the declared duration by @kixelated in https://github.com/moq-dev/moq/pull/7018
- quest: plan follow-ups from the 2026-10-29 /quest-complete merges by @kixelated in https://github.com/moq-dev/moq/pull/7274
- fix(quic): keep the probe's inflight and stall check from costing media beside a queue by @kixelated in https://github.com/moq-dev/moq/pull/6942
- ci: keep the nightly gate inside its job and name each running phase by @kixelated in https://github.com/moq-dev/moq/pull/7070
New Contributors
- @michaelstuurman made their first contribution in #6924
- @barafael made their first contribution in https://github.com/moq-dev/moq/pull/6939
Full Changelog: obs-moq-v0.6.18...obs-moq-v0.6.20