diff --git a/quest/m2/c/consumers.md b/quest/m2/c/consumers.md index bef0ad0bcb0..88e4c96d55f 100644 --- a/quest/m2/c/consumers.md +++ b/quest/m2/c/consumers.md @@ -4,7 +4,9 @@ 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 @@ -12,5 +14,30 @@ build. Nothing in the repository calls the hand-written ABI any more. 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 diff --git a/quest/m2/release/c-publish.md b/quest/m2/release/c-publish.md index 0e0755de89a..20347715707 100644 --- a/quest/m2/release/c-publish.md +++ b/quest/m2/release/c-publish.md @@ -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 @@ -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). +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 diff --git a/quest/m2/release/c-retire.md b/quest/m2/release/c-retire.md index d69e75d37f2..d81dbf830bb 100644 --- a/quest/m2/release/c-retire.md +++ b/quest/m2/release/c-retire.md @@ -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 diff --git a/quest/m2/release/smoke-bindings-rename.md b/quest/m2/release/smoke-bindings-rename.md index ed19a6df13b..0c21301a6fb 100644 --- a/quest/m2/release/smoke-bindings-rename.md +++ b/quest/m2/release/smoke-bindings-rename.md @@ -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 @@ -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.