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
29 changes: 28 additions & 1 deletion quest/m2/c/consumers.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,40 @@

The C interop client (`test/interop/clients/c`) and the `doc/lib/c` samples use
the generated `moq-c` API and pass `just test interop --all` and the doc-sample
build. Nothing in the repository calls the hand-written ABI any more.
build. Nothing in the repository calls the hand-written ABI any more except
the smoke client (`test/smoke/clients/c`), which
[Published generated C](/quest/m2/release/c-publish.md) moves.

## Plan

- Port the interop client first; it is the smallest real consumer and proves
the callback and dispatcher shape end to end. It skips a disabled audio
rendition through the generated record's `enabled`, as js-native does; the
hand-written ABI has only `moq_consume_video_enabled` (decided 2026-10-23).
It stays subscribe-only (decided 2026-10-31): the C++ interop client already
covers moq-ffi's publish path, so a C publish lane would grow the matrix for
little new coverage.
- Rewrite `doc/lib/c` around the generated API, including a sample that runs
callbacks on the host's own loop through `moq_set_dispatcher`.

Waits for the cut and the generator switch (found when first started,
2026-10-28; decided 2026-10-31). Until the cut, [moq-c parity](/quest/m1/c/README.md) ships the
hand-written 0.7 and proves it with this interop client and the current
`doc/lib/c`, and `doc/` describes only what ships, so either half landing first
drops the shipping crate's proof and documents an unpublished API. The switch
re-cases every generated C type (`moq_session` becomes `MoqSession`), so a port
before it is written twice; `c/moq/test/probe.c` takes that rename with the
switch.

The generated API covers everything the client does, publishing included: the
C++ interop client already drives the same moq-ffi surface both ways.

`test/smoke/clients/c` checks the published archive with the hand-written ABI,
so it can move only once the generated archive publishes, after this quest;
[Published generated C](/quest/m2/release/c-publish.md) owns that move
(decided 2026-10-31).

## Required

- [Breaking release cut](/quest/m2/release/cut.md) - the hand-written 0.7 ships with this client and these docs as its proof
- [Switch to rust2's UniFFI](/quest/m2/uniffi-fork.md) - the generated C type names settle before consumers are written against them
10 changes: 10 additions & 0 deletions quest/m2/release/c-publish.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

The generated moq-c release archive installs, and every doc/lib/c sample and
the C interop client build and run against it from a clean consumer checkout.
The smoke client (`test/smoke/clients/c`) checks the published generated
archive instead of the hand-written one.

## Plan

Expand All @@ -14,6 +16,14 @@ ships at the m1 cut (decided 2026-10-25), so the generated 0.8 supersedes a
published package; its source stays until
[c-retire](/quest/m2/release/c-retire.md).

The smoke client moves here rather than with
[C consumers](/quest/m2/c/consumers.md) because it checks a published archive,
and the generated one publishes only after that quest (decided 2026-10-31).
Comment thread
kixelated marked this conversation as resolved.
Resolved
The move also takes the client off `moq_origin_announced_broadcast` onto the
generated `request`/`follow`, so
[Smoke clients use request and follow](/quest/m2/release/smoke-bindings-rename.md)
leaves the C client to this quest.

## Required

- [Breaking release cut](/quest/m2/release/cut.md) - prepared code reaches release before artifact publication and installed proof
Expand Down
4 changes: 2 additions & 2 deletions quest/m2/release/c-retire.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ served it are deleted once the generated `moq-c` publishes. The generated

## Required

- [Generated C publication](/quest/m2/release/c-publish.md) - the replacement is available and verified
- [Generated C publication](/quest/m2/release/c-publish.md) - the replacement is available and verified, and the smoke client checks it

- [C consumers](/quest/m2/c/consumers.md) - nothing in the repository still calls the hand-written ABI
- [C consumers](/quest/m2/c/consumers.md) - the interop client and `doc/lib/c` samples no longer call the hand-written ABI

## Related

Expand Down
9 changes: 7 additions & 2 deletions quest/m2/release/smoke-bindings-rename.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

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}`
registry's latest moq-ffi-based package (Go, Python, Kotlin, Swift) for
`request`/`follow`. Then move `test/smoke/clients/{go,python,kotlin,swift}`
off `request_broadcast` and `announced_broadcast`, and delete this quest.

## Plan
Expand All @@ -16,4 +16,9 @@ Decided 2026-10-29 (maintainer). The smoke clients install published packages
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.

The C smoke client is out of scope: it uses the hand-written `moq-c`, which
keeps `moq_origin_announced_broadcast`, and
[Published generated C](/quest/m2/release/c-publish.md) moves it onto the
generated API, which already names them `request` and `follow`.

Public API: none. Wire: none.