Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
f94d613
fix(net): decode PUBLISH_DONE Unauthorized and skip a dead source's s…
kixelated Sep 26, 2026
7de2a7b
chore: release (#4222)
moq-bot[bot] Sep 26, 2026
7910cc5
docs(quest): plan release size quests (#4257)
kixelated Sep 26, 2026
fa499be
perf(net): join fragmented reads once instead of per chunk (#4267)
kixelated Sep 26, 2026
f42f3ad
chore(skills): plan-quests hands off to /merge; drop just clean (#4258)
kixelated Sep 26, 2026
ed7e697
fix(pattern): subtree of a max-depth path is the path itself (#4284)
kixelated Sep 26, 2026
42959bd
docs: video resumes on a keyframe after discontinuity() (#4285)
kixelated Sep 26, 2026
6493a3e
quest: libmoq CMake finds the library cargo built (#4289)
kixelated Sep 26, 2026
aa1f8d5
test(auth): run the outage grant test on the real clock (#4291)
kixelated Sep 26, 2026
ae98450
quest: plan generated C bindings, park the hand-written libmoq quests…
kixelated Sep 26, 2026
8bc7e9c
fix(video): keep the CUDA context alive until the NVDEC decoder is de…
kixelated Sep 27, 2026
0c3cd80
fix(cli): finish the catalog at stdin EOF (#4303)
kixelated Sep 27, 2026
48096c4
fix(stats): keep an idle path in the frame while its counters live (#…
kixelated Sep 27, 2026
d555271
fix(egress): single-rendition egress serves the best rendition (#4293)
kixelated Sep 27, 2026
c2c4efd
docs(quest): plan signed priority (#4275)
kixelated Sep 27, 2026
c9c48ed
fix(fmp4): carry Opus pre-skip and gain through dOps (#4294)
kixelated Sep 27, 2026
34ba251
chore: pin shared skills; document package versions in CONTRIBUTING (…
kixelated Sep 27, 2026
11ede8d
docs: fix stale agent rules, the moq-net hop range, and the ffi unann…
kixelated Sep 27, 2026
57a5c83
quest: plan follow-ups from the current PR wave (#4304)
kixelated Sep 27, 2026
a19ebc5
test: fix three load-only test failures at the cause (#4286)
kixelated Sep 27, 2026
2eab1c3
feat(net): the SETUP AUTHORIZATION TOKEN option reaches the verifier …
kixelated Sep 27, 2026
3fb076a
feat(publish): encoders advertise catalog delay (#4260)
kixelated Sep 27, 2026
23ec0ff
fix(cli): close the relay connection on SIGINT and SIGTERM (#4287)
kixelated Sep 27, 2026
1d679a7
docs(quest): plan Firefox 155 WebTransport adoption (#4251)
kixelated Sep 27, 2026
a655cd2
fix(net): start a guarded group write only while the group is in budg…
kixelated Sep 27, 2026
c17b8e0
feat(kt): end a broadcast with end() (#4259)
kixelated Sep 27, 2026
d522812
test(interop): reattach clears the stale canvas frame (#4308)
kixelated Sep 27, 2026
7f48c9a
feat(mux): detect delay and jitter on JSON and binary tracks (#4270)
kixelated Sep 27, 2026
19c863b
feat(demo): publish a pre-encoded SD rendition of BBB (#4223)
kixelated Sep 27, 2026
500517f
fix(net): announce a covering route to a narrower prefix instead of p…
kixelated Sep 27, 2026
ceabaaf
quest: plan the follow-ups from PRs merged since 09-24 (#4307)
kixelated Sep 27, 2026
8ef17ee
fix(net): settle lite-07 tails on stream counts (#4224)
kixelated Sep 27, 2026
7458c85
fix(test): isolate concurrent interop harness runs (#4228)
kixelated Sep 27, 2026
8336c46
chore(deps-dev): bump ruff from 0.16.7 to 0.16.8 in the uv group (#4310)
dependabot[bot] Sep 27, 2026
3321bc5
chore(deps): bump code_assets from 2.0.0 to 2.1.0 in /dart/moq_ffi in…
dependabot[bot] Sep 27, 2026
e773259
chore(deps): bump the github-actions group with 2 updates (#4313)
dependabot[bot] Sep 27, 2026
6cc151f
quest: plan generated @moq/net from moq-net (rs2ts) (#4315)
kixelated Sep 27, 2026
df2fc83
perf(net): decode buffered group frames and objects synchronously (#4…
kixelated Sep 27, 2026
15514b8
chore(quest): run the standalone quest binary via the flake (#4252)
kixelated Sep 27, 2026
34e67d1
quest: restore 0.14 public rules and auth parity (#4317)
kixelated Sep 27, 2026
03f4b30
fix(auth): root public and mTLS rules at / (#4318)
kixelated Sep 27, 2026
b00be0f
chore: release (#4256)
moq-bot[bot] Sep 27, 2026
5908d35
fix(wasm): make free() safe while a call is pending (#4314)
kixelated Sep 27, 2026
735bc0e
chore(deps): bump the bun group across 4 directories with 9 updates (…
dependabot[bot] Sep 27, 2026
2a72b3a
fix(auth)!: restore 0.14 auth parity (#4319)
kixelated Sep 27, 2026
6a7262c
quest: plan cluster routing, update dedupe, and the local origin (#4213)
kixelated Sep 27, 2026
040d68c
chore(deps): bump the nix group across 1 directory with 3 updates (#4…
dependabot[bot] Sep 28, 2026
088cc2b
feat(net): read a subtree through an origin mount (#4271)
kixelated Sep 28, 2026
163fcda
perf(net): search the track timeline instead of scanning it (#4321)
kixelated Sep 28, 2026
2b689c2
fix: make BBR respond to classic ECN (#4265)
kixelated Sep 28, 2026
971a1a8
fix(net): keep a settled track's groups when it is aborted (#4351)
kidq330 Sep 28, 2026
ca47661
fix(libmoq): open extern "C" in the generated moq.h (#4350)
pwrwpw Sep 28, 2026
9adde58
chore: bump quest to 46d7fe8 (#4371)
kixelated Sep 28, 2026
8d2eb83
docs(contributing): wait for Codex on the final head before merging (…
kixelated Sep 28, 2026
3f3b061
fix(net): keep an aborted track's finished groups, expire ended track…
kixelated Sep 28, 2026
1a7a8ae
fix(pattern): JS subtree of a max-depth path is the path itself (#4360)
kixelated Sep 28, 2026
fa3aff6
fix(auth): admit a SETUP token equal to the jwt query (#4359)
kixelated Sep 28, 2026
6ecde63
fix(gst): keep waiting for a keyframe after a header-only buffer (#4356)
kixelated Sep 28, 2026
b4cc44b
fix(net): refuse chained and wildcard origin mounts in any order (#4362)
kixelated Sep 28, 2026
d9dc357
docs: say who requests Codex on fork PRs, add IPv6 TLS name quest (#4…
kixelated Sep 28, 2026
bec5b42
fix(libmoq): render moq.pc only when packaging (#4372)
kixelated Sep 28, 2026
61faa22
fix(cli): schedule play decode by the earliest owed picture (#4374)
kixelated Sep 28, 2026
3d2a7bd
chore: audit cleanup for PRs merged 09-26..09-28 (#4373)
kixelated Sep 28, 2026
5bd12e1
fix(cli): refuse a client CA under --auth-public on a listener (#4364)
kixelated Sep 28, 2026
3863a43
ci: keep the shared Rust cache inside the 10 GB budget (#4390)
kixelated Sep 28, 2026
a91bcb3
fix(net): settle an unanswered lite fetch when the subscriber closes …
kixelated Sep 28, 2026
b234a38
test(drill): retarget two mutations and check they apply in just chec…
kixelated Sep 28, 2026
e1b70c2
fix(net): select scoped routes after filtering, not before (#4363)
kixelated Sep 28, 2026
2b3f8a8
chore(quest): audit the quest tree (#4393)
kixelated Sep 28, 2026
4504163
ci: compile the Windows, macOS, and OBS plugin code on every PR (#4370)
kixelated Sep 28, 2026
166f9e8
fix(net): forget spliced tracks unread for the linger, finished ones …
kixelated Sep 28, 2026
e918038
fix(auth): make grant expiry exact, dropping the clock-skew grace (#4…
kixelated Sep 28, 2026
b43958c
fix(net): age out an ended JS track's groups, match Rust abort semant…
kixelated Sep 28, 2026
3ea7002
quest: watch refusal, auth outage clock, relay auth client CA (#4367)
kixelated Sep 28, 2026
dd89406
chore(quest): move the local origin to moq.pro (#4396)
kixelated Sep 28, 2026
c187811
docs: merge-commit PRs into non-main branches, keep scratch in .scrat…
kixelated Sep 28, 2026
c9028b0
ci: skip platform builds and CI setup for quest and docs-only diffs (…
kixelated Sep 28, 2026
7b81c83
fix(go): keep test origins alive until the test ends (#4402)
kixelated Sep 28, 2026
2d4ee77
feat(hang): reject catalog broadcast references escaping the consumer…
kixelated Sep 28, 2026
9e2b686
build(nix): move obs-studio to a .#obs shell, drop rust-docs (#4410)
kixelated Sep 28, 2026
b611b0c
fix(moq-net): hide routes through a peer that withdrew the prefix (#4…
kixelated Sep 28, 2026
5800ff2
fix(test): keep concurrent interop runs from rebuilding each other's …
kixelated Sep 28, 2026
4ad27e1
quest: resumed groups and SUBSCRIBE_DROP (#4392, #4365) (#4412)
kixelated Sep 28, 2026
7abf181
fix(tokio): accept a bare IPv6 TLS host name override on WebSocket (#…
kixelated Sep 28, 2026
e713c30
fix(net): resolve a relayed subscription's start from its source (#4387)
kixelated Sep 28, 2026
cdeed8f
Merge origin/main into dev
kixelated Sep 29, 2026
af583a0
Merge remote-tracking branch 'origin/dev' into pr-4428
kixelated Sep 29, 2026
ad8e3c0
fix(js/net): release a closed track's sinks when retention is unlimited
kixelated Sep 29, 2026
3d0b72a
test(max-age): wait for the publisher's route, not the first announce…
kixelated Sep 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 0 additions & 1 deletion .claude/skills/close

This file was deleted.

1 change: 0 additions & 1 deletion .claude/skills/merge

This file was deleted.

7 changes: 0 additions & 7 deletions .claude/skills/plan-issues/SKILL.md

This file was deleted.

4 changes: 0 additions & 4 deletions .claude/skills/plan-issues/agents/openai.yaml

This file was deleted.

44 changes: 0 additions & 44 deletions .claude/skills/plan-quests/SKILL.md

This file was deleted.

4 changes: 0 additions & 4 deletions .claude/skills/plan-quests/agents/openai.yaml

This file was deleted.

7 changes: 7 additions & 0 deletions .claude/skills/quest-audit/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: quest-audit
description: Audit outstanding quests for disagreements, conflicts, misaligned priorities, and stale plans, then resolve them with /quest-plan. Use when the user invokes /quest-audit or asks to check the quest tree for consistency.
---

Run `quest skill audit` and follow its output.
If `quest` is not installed, follow https://github.com/kixelated/quest/blob/main/SETUP.md first.
7 changes: 7 additions & 0 deletions .claude/skills/quest-convert/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: quest-convert
description: Convert Github issues to quests.
---

Run `quest skill convert` and follow its output.
If `quest` is not installed, follow https://github.com/kixelated/quest/blob/main/SETUP.md first.
7 changes: 7 additions & 0 deletions .claude/skills/quest-delete/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: quest-delete
description: Abandon a quest.
---

Run `quest skill delete` and follow its output.
If `quest` is not installed, follow https://github.com/kixelated/quest/blob/main/SETUP.md first.
7 changes: 7 additions & 0 deletions .claude/skills/quest-finish/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: quest-finish
description: Decide which open PRs to merge, then merge them in parallel.
---

Run `quest skill finish` and follow its output.
If `quest` is not installed, follow https://github.com/kixelated/quest/blob/main/SETUP.md first.
7 changes: 7 additions & 0 deletions .claude/skills/quest-merge/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: quest-merge
description: Merge a quest once reviews and CI pass.
---

Run `quest skill merge` and follow its output.
If `quest` is not installed, follow https://github.com/kixelated/quest/blob/main/SETUP.md first.
7 changes: 7 additions & 0 deletions .claude/skills/quest-plan/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: quest-plan
description: Scope and create quests through an interactive interview. Use when the user invokes /quest-plan, asks to plan a quest, or wants unsettled work split into quests.
---

Run `quest skill plan` and follow its output.
If `quest` is not installed, follow https://github.com/kixelated/quest/blob/main/SETUP.md first.
7 changes: 7 additions & 0 deletions .claude/skills/quest-spawn/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: quest-spawn
description: Start multiple quests in parallel.
---

Run `quest skill spawn` and follow its output.
If `quest` is not installed, follow https://github.com/kixelated/quest/blob/main/SETUP.md first.
7 changes: 7 additions & 0 deletions .claude/skills/quest-start/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: quest-start
description: Start work on a quest.
---

Run `quest skill start` and follow its output.
If `quest` is not installed, follow https://github.com/kixelated/quest/blob/main/SETUP.md first.
1 change: 0 additions & 1 deletion .claude/skills/spawn-merge

This file was deleted.

35 changes: 0 additions & 35 deletions .claude/skills/spawn-quests/SKILL.md

This file was deleted.

4 changes: 0 additions & 4 deletions .claude/skills/spawn-quests/agents/openai.yaml

This file was deleted.

22 changes: 0 additions & 22 deletions .claude/skills/start-quest/SKILL.md

This file was deleted.

4 changes: 0 additions & 4 deletions .claude/skills/start-quest/agents/openai.yaml

This file was deleted.

1 change: 0 additions & 1 deletion .claude/skills/takeover

This file was deleted.

4 changes: 2 additions & 2 deletions .github/actions/rust-cache/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ runs:
# even though it is kept in sync with the flake.
#
# Every segment the generated layout carries has to be carried here too:
# the runner pair, so the two architectures the warm job builds cannot
# read each other, and `target`, so changing `github-cache-mode` cannot
# the runner pair, so a job on an x86 runner cannot restore the ARM64
# store, and `target`, so changing `github-cache-mode` cannot
# restore the other payload. The trailing run id rolls the key on every
# run, which is what lets a repeated `workflow_dispatch` seed a cold
# cache against GitHub's immutable entries.
Expand Down
14 changes: 8 additions & 6 deletions .github/workflows/alert.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,14 @@ on:
workflow_run:
# Matched by workflow `name:`, not filename. Every workflow that can run
# outside a pull request belongs here; the pull-request-only ones (Check,
# macOS, Windows) are omitted so they don't spawn a skipped Alert run on
# every push to every PR. `just gh check` enforces both halves of that.
# Android) are omitted so they don't spawn a skipped Alert run on every
# push to every PR. `just gh check` enforces both halves of that.
#
# Swift is here despite also running on pull requests: it warms its own
# Rust cache on `main`, and that push run is nobody's check, so a break in
# it would otherwise go unseen. The cost is a skipped Alert run per Swift
# pull request.
# Swift and Platform are here despite also running on pull requests: Swift
# warms its own Rust cache on `main`, and Platform compiles every merge to
# `main` and `dev`. Those push runs are nobody's check, so a break in them
# would otherwise go unseen. The cost is a skipped Alert run per pull
# request.
workflows:
- apt-repo
- Cache
Expand All @@ -36,6 +37,7 @@ on:
- moq-gst
- moq-relay
- Nightly
- Platform
- release-brew
- Release Dart
- Release Dart FFI
Expand Down
11 changes: 9 additions & 2 deletions .github/workflows/android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,15 @@ jobs:

# No Rust cache: this workflow only runs on pull requests, which may not
# save one, so it would have nothing to restore.
- name: Install just and cargo-ndk
run: cargo install --locked "just@$JUST_VERSION" "cargo-ndk@$CARGO_NDK_VERSION"
- name: Install cargo-ndk
run: cargo install --locked "cargo-ndk@$CARGO_NDK_VERSION"

# A checksummed release binary, where `cargo install` would spend ~2 minutes
# building just from source.
- name: Install just
uses: taiki-e/install-action@4cef1412cce204788f482e778a0b9187f9626a29 # v2.87.21
with:
tool: just@${{ env.JUST_VERSION }}

- name: Check
run: just rs android
22 changes: 17 additions & 5 deletions .github/workflows/cache.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,14 @@ name: Cache
#
# Actions scopes cache reads to the current branch plus the default branch, so
# only caches written here on `main` are reachable from a pull request. This
# workflow is therefore the single trusted writer, with one store per runner
# architecture. The action refuses to publish from a pull request regardless.
# workflow is therefore the single trusted writer. The action refuses to publish
# from a pull request regardless.
#
# The Rust store is ARM64 only, because every job that restores it runs there.
# Each store is about 6 GB against the repository's 10 GB budget, and Actions
# evicts least recently used first, so an x86 store nobody on a pull request
# read was enough to push out the one they all do. The x86 leg still pushes its
# dev shell, which the x86 jobs substitute.
#
# This runs the unscoped suite rather than the diff-scoped one: the point is to
# leave artifacts for whatever a future PR happens to touch, not to check `main`
Expand Down Expand Up @@ -45,13 +51,17 @@ jobs:
strategy:
fail-fast: false
matrix:
runner: [ubuntu-24.04-arm, ubuntu-latest]
include:
- runner: ubuntu-24.04-arm
rust: true
- runner: ubuntu-latest
rust: false
runs-on: ${{ matrix.runner }}
timeout-minutes: 60

steps:
- name: Free disk space
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # main
uses: jlumbroso/free-disk-space@ceedf095f4ec1a097402bc6bd80831f2e1a6fde6 # main
with:
tool-cache: false

Expand Down Expand Up @@ -96,6 +106,7 @@ jobs:
# `workflow_dispatch` above prime a cold store; the action otherwise saves
# only on pushes to the default branch.
- name: Rust cache
if: matrix.rust
uses: ./.github/actions/rust-cache
with:
save-on-dispatch: true
Expand All @@ -104,12 +115,13 @@ jobs:
# and the test artifacts (codegen + linked test binaries). They share
# little, and a PR usually needs both.
- name: Check
if: matrix.rust
run: nix develop --command just ci check --all
env:
MOQ_STRICT: 1

- name: Test
if: ${{ !cancelled() }}
if: ${{ matrix.rust && !cancelled() }}
run: nix develop --command just ci test --all
env:
MOQ_STRICT: 1
Expand Down
Loading
Loading