Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions quest/m0/ci/land.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,10 @@ Decided 2026-10-26 (maintainer):
review, and moq-bot joins that bypass list here. Decide with the bypass list
whether `main` keeps deploying to `publish`, or publishing narrows to
`release` and release tags. Ask the maintainer; settings changes are theirs.
- The gate tests each PR on the latest `main`, not the PR's own base. On
2026-10-29 [moq-dev/moq#7162](https://github.com/moq-dev/moq/pull/7162)
passed its own CI but broke in the queue on API renames that landed after
its last base merge; that is the case the gate must catch before `main`.

Work in this repository:

Expand Down
1 change: 1 addition & 0 deletions quest/m1/eager-encode/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ The epic's own work, once the children land:

## Required

- [The CLI picks each medium's mode](/quest/m1/eager-encode/cli-modes.md) - `--video`/`--audio` take `on|demand|off` in capture and `on|off` in export and play, replacing `--no-*` and `--on-demand`
- [Raw audio on demand](/quest/m1/eager-encode/raw-audio.md) - audio encodes on demand again, from raw frames kept up to `maxAge`

## Related
Expand Down
30 changes: 30 additions & 0 deletions quest/m1/eager-encode/cli-modes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# [S] The CLI picks each medium's mode with --video and --audio

## Goal

`moq import capture` takes `--video <on|demand|off>` and
`--audio <on|demand|off>`, default `on`, in place of `--no-video`,
`--no-audio`, and `--on-demand`. `export` and `play` take `--video <on|off>`
and `--audio <on|off>` in place of `--no-video` and `--no-audio`. One
vocabulary across the CLI.

## Plan

Decided 2026-10-29 (maintainer), right after
[moq-dev/moq#7188](https://github.com/moq-dev/moq/pull/7188) shipped
`--on-demand`, which reads vaguely and cannot say which medium it means.

- `on` encodes for the whole publish, `demand` only while subscribed (each
library's `Capture::on_demand`), and `off` publishes no track of that
medium. Rejected names: `always`, `never`, `none`, `--video-enabled`,
`--video-encode`.
- [Raw audio on demand](/quest/m1/eager-encode/raw-audio.md) later adds
`buffered` to `--audio` and makes it audio's default, so per-medium flags
avoid a second rename. If raw audio lands first, include `buffered` here.
- In `export` and `play`, `off` keeps today's `--no-*` meaning: select no
rendition of that medium. Keep the existing refusals, such as an
elementary-stream export with no video.
- Update `doc/bin/cli.md`, `--help`, the tests, and every in-tree script or
doc that passes the old flags.

Public API: breaking CLI flags, with an Impact migration note. Wire: none.
4 changes: 4 additions & 0 deletions quest/m1/eager-encode/raw-audio.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ on-demand saved, without losing the past.
- JS (`js/publish/src/audio/encoder.ts`) and Rust (`rs/moq-audio` capture)
both switch. The always-on default from their sibling quests becomes the
opt-out.
- The CLI's audio mode gains `buffered` as its default (decided
2026-10-29). If [The CLI picks each medium's mode](/quest/m1/eager-encode/cli-modes.md)
has landed, add it to `--audio`; otherwise that quest adds it. Update
`--help` and `doc/bin/cli.md`.

Tests: no subscriber for a few seconds, then a subscriber with `maxDelay`
covering the last second receives that second, timestamps matching capture
Expand Down
2 changes: 2 additions & 0 deletions quest/m2/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -254,3 +254,5 @@ lite-07; bitrate enforcement is not part of this release.
- [Clean ALSA playback onset](/quest/m2/audio-alsa-onset.md) - no onset restarts or clicks over PulseAudio
- [Interop audit](/quest/m2/audit-interop.md) - our interop runner entries match what we ship, and every red interop cell with a moq.dev side is fixed, reported, or noted as down or unsupported
- [Open-GOP MPEG-2 export](/quest/m2/mpeg2-open-gop-export.md) - a TS export resuming in an open GOP trims the B-pictures that reference the previous one
- [The HLS server follows each path once](/quest/m2/hls-follow-once.md) - `Following` reports synced absence, so moq-hls resolves with one follow
- [moq-bench pins the instances it measures](/quest/m2/bench-epoch-pin.md) - pooled requests pin their announced epoch, so a takeover is not counted as the same broadcast
16 changes: 16 additions & 0 deletions quest/m2/bench-epoch-pin.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# [XS] moq-bench pins the instances it measures

## Goal

moq-bench requests each pooled broadcast pinned to the epoch it saw
announced, so a takeover between gathering and requesting is not counted as
the same broadcast.

## Plan

Decided 2026-10-29 (maintainer), a follow-up of
[moq-dev/moq#7192](https://github.com/moq-dev/moq/pull/7192). Pass the
announced epoch to `request`. A pinned request that finds another instance is
refused; count that as a takeover, not a failure.

Public API: none. Wire: none.
22 changes: 22 additions & 0 deletions quest/m2/hls-follow-once.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# [S] The HLS server follows each path once

## Goal

The moq-hls server resolves a path once, with one `follow`, instead of a
`request` for the first answer and a separate follower for takeovers. It
still reports a path nothing serves once discovery has synced.

## Plan

Decided 2026-10-29 (maintainer), a follow-up of
[moq-dev/moq#7192](https://github.com/moq-dev/moq/pull/7192). The server needs
`request` today only because `Following` cannot say "discovery has synced and
nothing serves this path". Add that report to `Following`, the synced absence
`request` already answers with `Unroutable`, without making a follower give up.
Then move the server onto it. After the cut, since the double resolve works.

Tests: an unserved path is reported once discovery syncs, a takeover is
followed without a second resolution, and the hand-written resolve timeout
stays only a limit on a handler that never answers.

Public API: additive in moq-net. Wire: none.
1 change: 1 addition & 0 deletions quest/m2/release/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,6 @@ production stability proven merely because upstream artifacts published.
- [Retire the web-transport JS qmux](/quest/m2/release/qmux-js-retire.md) - once `@moq/qmux` publishes from `js/qmux`, deprecate `@moq/web-socket-stream` and stop the second publisher
- [moq.sh deployment](/quest/m2/release/moq-sh-deploy.md) - verify its release-triggered publication
- [Runner client bump](/quest/m2/release/runner-client-bump.md) - the upstream interop runner's Rust client moves to the published moq-tokio, so it stops stamping every object
- [Smoke clients use request and follow](/quest/m2/release/smoke-bindings-rename.md) - condition: a binding release ships the renames; then the native smoke clients move to them
- [Relay loader adoption](/quest/m2/release/relay-loader-adoption.md) - once their pins carry it, embedding consumers load relay config through `Config::merge` and refuse obsolete spellings
- [Release provenance](/quest/m2/release/provenance.md) - attached binary archives carry build provenance attestations
4 changes: 4 additions & 0 deletions quest/m2/release/migrate-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ m1 quest on 2026-10-22.
for its migration note, since squash commits drop the PR body. Write each
note into its package's guide. The API-diff report below catches breaks a
PR left unmarked; a behavior break with no `!` stays with PR review.
- Correct Unreleased entries that a later PR overturned. Known: `js/net/MIGRATE.md`
still describes `request(path, { announced: true })`, which
[moq-dev/moq#7173](https://github.com/moq-dev/moq/pull/7173) replaced with
`follow(path)` (decided 2026-10-29).
- Run the API-diff report on the cut PR and read the diff of the
hand-written binding wrappers (`py/moq-rs`, `kt/moq`, `dart/moq`,
`go/wrapper`, `swift`, `cpp/moq`, `cpp/obs`) and of each binary's flags,
Expand Down
19 changes: 19 additions & 0 deletions quest/m2/release/smoke-bindings-rename.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# [XS] Smoke clients use request and follow

## Goal

Condition: a binding release ships the `request` and `follow` names from
[moq-dev/moq#7193](https://github.com/moq-dev/moq/pull/7193). Check each
registry's latest moq-ffi-based package (Go, Python, Kotlin, Swift, C) for
`request`/`follow`. Then move `test/smoke/clients/{go,python,kotlin,swift,c}`
off `request_broadcast` and `announced_broadcast`, and delete this quest.

## Plan

Decided 2026-10-29 (maintainer). The smoke clients install published packages
(see `test/smoke/AGENTS.md`), so they cannot move until the rename ships.
[moq-dev/moq#7173](https://github.com/moq-dev/moq/pull/7173) handled the JS
smoke client the same way. If a client must run against both old and new
releases for a while, detect the method, as the JS compat client does.

Public API: none. Wire: none.
Loading