Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
0aff4ac
quest: open the cli-inspect line
kixelated Sep 24, 2026
25bd067
feat(moq-net)!: announce consumers yield a Live marker once caught up…
kixelated Sep 25, 2026
4f3a4ec
Merge origin/main into quest/m1/cli-inspect/README
kixelated Sep 25, 2026
17cec0c
Merge origin/main into quest/m1/cli-inspect/README
kixelated Sep 25, 2026
961822d
feat(cli): add `moq ls` to list what is live on a relay (#4121)
kixelated Sep 25, 2026
31dea0e
Merge remote-tracking branch 'origin/main' into quest/m1/cli-inspect/…
kixelated Sep 25, 2026
eacf376
test(moq-tokio): read the active flag from announce tuples after merg…
kixelated Sep 25, 2026
8017114
fix(cli): fetch a hidden broadcast such as .stats by name
kixelated Sep 25, 2026
bd6f5a0
docs: add the Inspect a relay guide and complete the cli-inspect line
kixelated Sep 25, 2026
c40a2d8
Merge remote-tracking branch 'origin/dev' into quest/m1/cli-inspect/R…
kixelated Sep 25, 2026
b00dfff
quest: scope JS announce interest and close sessions gracefully (#4209)
kixelated Sep 25, 2026
3e52c7c
fix(nvenc): commit rate changes and cleanup only once the driver acce…
kixelated Sep 25, 2026
9cb5416
feat(moq-net): sans-IO session benchmark over a relay mesh (#4160)
kixelated Sep 26, 2026
a05a2d5
fix(uring): bound io_uring tests by the shared memlock budget (#4167)
kixelated Sep 26, 2026
a1d993c
chore(skills): spawn-quests judges readiness from line branches (#4161)
kixelated Sep 26, 2026
394c755
docs(quest): plan partial moxygen compatibility (#4205)
kixelated Sep 26, 2026
bc051b7
fix(net): skip old groups without reporting them as lost (#4208)
kixelated Sep 26, 2026
f70eba8
fix(video): run the capture clock tests on a LocalSet (#4210)
kixelated Sep 26, 2026
322d887
fix(quic): pin noq 1.3.1 for the BBR correctness fixes (#4206)
kixelated Sep 26, 2026
c6412ee
quest: dropped sources, video keyframe flag, interop flakes (#4201)
kixelated Sep 26, 2026
43fa4f7
fix(transcode): choose a source rendition this host can decode (#4182)
kixelated Sep 26, 2026
e5d1f1c
fix(relay): bind smoke-test listeners on :0 instead of probing for a …
kixelated Sep 26, 2026
33c9c9f
quest: SETUP AUTHORIZATION TOKEN becomes a standalone m1 quest (#4211)
kixelated Sep 26, 2026
a0dc197
test: bind :0 up front instead of probing for a free port (#4212)
kixelated Sep 26, 2026
ad48f03
fix(net): resolve a lite fetch only once the publisher answers (#4164)
kixelated Sep 26, 2026
01e1e4d
fix(moq-net): serve only the lite routes a request woke, and bound ki…
kixelated Sep 26, 2026
d537caf
fix(uring): halve the completion queue and lift the relay's memlock l…
kixelated Sep 26, 2026
bb426d9
fix(watch): keep media-captions external so the package imports outsi…
kixelated Sep 26, 2026
cd379fe
feat(net): compress lite-07 announcements against live bases (#4196)
kixelated Sep 26, 2026
df392d8
fix(relay): bind every listener in Relay::load so tests read ports ba…
kixelated Sep 26, 2026
50313f2
chore: release (#4199)
moq-bot[bot] Sep 26, 2026
b99cad9
fix(net): end a track with its session's error when the session dies …
kixelated Sep 26, 2026
7461eca
chore(moq-net): bench lite-06, smoke-run benches nightly, refresh per…
kixelated Sep 26, 2026
b33e926
chore: bump package versions
kixelated Sep 26, 2026
bd0376f
fix(net): await the publisher answer for lite fetches (#4221)
kixelated Sep 26, 2026
c81aaae
fix(cli): keep delayed playback at the live edge (#4241)
kixelated Sep 26, 2026
ce123c8
feat(moq-mux): catalog delay measures cross-rendition encoder latenes…
kixelated Sep 26, 2026
c280683
chore(claude): share skills through kixelated/skills, tighten quest s…
kixelated Sep 26, 2026
ea7db01
perf(kio): keep a parked waiter that quiet lists still hold (#4240)
kixelated Sep 26, 2026
d2d5d78
fix(auth): keep accepted grants on fixed expiry deadlines (#4237)
kixelated Sep 26, 2026
f63b295
fix(net): retain retired counters in host snapshots (#4238)
kixelated Sep 26, 2026
3431e3d
fix(net): make JS origin refusals terminal to match moq-net (#4230)
kixelated Sep 26, 2026
eaa4793
Merge remote-tracking branch 'origin/dev' into HEAD
kixelated Sep 26, 2026
c166efc
Merge remote-tracking branch 'origin/main' into HEAD
kixelated Sep 26, 2026
ba989f1
test(tokio): wait past the Live marker in the max age relay test
kixelated Sep 26, 2026
9796b47
style: rustfmt the merged moq-auth and moq-cli sources
kixelated Sep 26, 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
  •  
  •  
  •  
20 changes: 20 additions & 0 deletions .claude/hooks/submodule.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/usr/bin/env bash
# The shared skills in .claude/skills are symlinks into the .claude/shared
# submodule. git leaves that unpopulated in a new worktree, and a dangling
# symlink is silently skipped. A checkout on the wrong commit stays stale too.

set -eu

# Require an explicit project dir so we never touch a stray checkout.
[ -n "${CLAUDE_PROJECT_DIR:-}" ] || exit 0
cd "$CLAUDE_PROJECT_DIR" || exit 0

# '-' is uninitialized. '+' is populated at a commit other than the gitlink.
# A matching checkout has no prefix.
case "$(git submodule status .claude/shared 2>/dev/null)" in
-* | +*) ;;
*) exit 0 ;;
esac

echo "submodule hook: updating .claude/shared to the pinned skills." >&2
git submodule update --init .claude/shared >&2
4 changes: 4 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/submodule.sh"
},
{
"type": "command",
"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/direnv.sh"
Expand Down
1 change: 1 addition & 0 deletions .claude/shared
Submodule shared added at 763fb4
1 change: 1 addition & 0 deletions .claude/skills/bump
1 change: 1 addition & 0 deletions .claude/skills/clean
1 change: 1 addition & 0 deletions .claude/skills/close
15 changes: 0 additions & 15 deletions .claude/skills/close/SKILL.md

This file was deleted.

4 changes: 0 additions & 4 deletions .claude/skills/close/agents/openai.yaml

This file was deleted.

1 change: 1 addition & 0 deletions .claude/skills/grill
1 change: 1 addition & 0 deletions .claude/skills/merge
18 changes: 0 additions & 18 deletions .claude/skills/merge/SKILL.md

This file was deleted.

4 changes: 0 additions & 4 deletions .claude/skills/merge/agents/openai.yaml

This file was deleted.

1 change: 1 addition & 0 deletions .claude/skills/peer-review
3 changes: 2 additions & 1 deletion .claude/skills/plan-quests/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,15 @@ When the work changes what a user sees (a wire, an API, a flag, a dashboard), as
When the frontier disagrees with a settled quest/plan, challenge the user and resolve the conflict.

Begin the interview by scoping the goal: the observable outcome, why it matters, and its important boundaries and non-goals.
Do not move on to implementation decisions until the goal is settled.
Restate the goal in one sentence and get it confirmed before moving on to implementation decisions.
If the goal contains independently completable outcomes, split them before planning.
Map the implementation plan as a design tree: every material decision branches into the decisions that hang off it.

The session is done when the frontier is empty.
The result may be one quest or multiple quests and questlines, split based on what can be completed independently.
Prefix each quest title with `[XS]`, `[S]`, `[M]`, `[L]`, or `[XL]`, including implementation, verification, and landing work.
Once complete, create, update, or delete the relevant quests and questlines.
Record each settled decision and its reason in the quest's Plan, so later sessions don't ask it again.
New work joins the milestone matching its priority, at its rank; a questline groups only quests that ship together, and its README holds the work no child owns (the end-to-end test, the docs page).

When done, commit and create a draft PR following `CONTRIBUTING.md`.
Expand Down
1 change: 1 addition & 0 deletions .claude/skills/recommended
1 change: 1 addition & 0 deletions .claude/skills/spawn-merge
28 changes: 0 additions & 28 deletions .claude/skills/spawn-merge/SKILL.md

This file was deleted.

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

This file was deleted.

11 changes: 8 additions & 3 deletions .claude/skills/spawn-quests/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,23 @@ If you are unsure of the best course of action, ask the user for clarification b

The scope consists of all ready quests that are not claimed.
Use the argument (if provided) to filter to specific quests/questlines.
Main's tree lags its lines: a child finished on its line branch, or on `dev`, still looks ready from `main`.
Judge readiness from each line branch's own quest directory, and treat a quest deleted on `dev` as done.
Inspect any blocked quests, and determine if they can be unblocked.
A line whose `Quests` list has emptied is a ready quest too: finishing it marks the line's PR ready.

One at a time, for each each quest, interactively prompt the user if we should /start-quest, /plan-quests, skip, or delete.
Include a short summary and your recommendation.
Recommend an action for each quest: /start-quest, /plan-quests, skip, or delete.
Start the quests you'd start with no open question right away.
Interactively prompt the user about the rest, a few per prompt, each with a short summary and your recommendation.

Spawn a background sub-agent for each /start-quest.
Create a fresh worktree on the base `quest branch` prints, creating that line branch first if it is missing.
Agents share no writable files: each keeps its scratch files in its own worktree's `.scratch/`, and anything you hand every agent goes in its prompt, not a shared file.
Each agent blocks on its own checks and reports back only when done or blocked.
Limit the concurrency to at most N agents in parallel, where N is half the number of physical CPU cores.
Other sessions share this machine: hold new agents while the load average exceeds the core count.

Monitor the sub-agents and report their final status, but do not monitor their PRs.
Report each sub-agent's final status, staying silent on interim notifications, but do not monitor their PRs.
Prompt the user if they want to /plan-quests for any suggested follow-ups.

Run /plan-quests for any selected quests in the foreground.
Expand Down
1 change: 1 addition & 0 deletions .claude/skills/takeover
16 changes: 0 additions & 16 deletions .claude/skills/takeover/SKILL.md

This file was deleted.

4 changes: 0 additions & 4 deletions .claude/skills/takeover/agents/openai.yaml

This file was deleted.

12 changes: 12 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,18 @@ retries = 0
# workload once, and the large origin fan-outs take ~20s each for no signal.
default-filter = "not kind(bench)"

# Every io_uring ring is charged to the user's `RLIMIT_MEMLOCK` (8 MiB by
# default), a budget shared with every other process that user runs, and
# desktop apps built on libuv already spend most of it. A worker's ring is
# ~84 KiB, so a parallel run of tests holding a few workers each exhausts it
# and fails with `ENOMEM`. Four at a time stays near 1 MiB.
[[profile.default.overrides]]
filter = "package(moq-uring) | binary_id(moq-relay::runtime_uring) | (binary_id(moq-relay::embed) & test(/uring/))"
test-group = "io-uring"

[test-groups]
io-uring = { max-threads = 4 }

# CI has noisier neighbours and cold caches, so give a test longer before
# calling it wedged.
[profile.ci]
Expand Down
11 changes: 10 additions & 1 deletion .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,15 @@ jobs:
nix develop --command bun install --frozen-lockfile
nix develop --command bun js/net/bench/broadcasts.ts

# Runs each moq-net Criterion routine once, so a bench that panics (an
# unparsable version, a shape that deadlocks) fails here instead of on the
# next manual run. Timing is not compared; nextest never runs a
# `harness = false` target. `fuzz` enables the announce bench, which the
# `'*'` glob otherwise refuses.
- name: moq-net benchmark smoke
if: ${{ !cancelled() }}
run: nix develop --command cargo bench --locked -p moq-net --features fuzz --bench '*' -- --test

- name: Audit
if: ${{ !cancelled() }}
run: nix develop --command just rs audit
Expand Down Expand Up @@ -224,7 +233,7 @@ jobs:
strategy:
fail-fast: false
matrix:
target: [lite, ietf, varint, path, pattern]
target: [lite, announce, ietf, varint, path, pattern]
steps:
- name: Free disk space
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # main
Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule ".claude/shared"]
path = .claude/shared
url = https://github.com/kixelated/skills
7 changes: 7 additions & 0 deletions .remarkignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,10 @@ doc/draft/

# Quests use a constrained Markdown dialect checked by the quest validator.
quest/

# Skills are symlinks into the kixelated/skills submodule, which formats its
# own files; remark would follow them (and .agents, Codex's link to the same
# directory) and rewrite the pinned checkout.
.claude/shared/
.claude/skills/
.agents/
Loading
Loading