From c1aea421a68ea66397ce63a8d160ced812baf486 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Mon, 2 Nov 2026 22:59:13 -0800 Subject: [PATCH 1/6] chore(quest): claim quest/m1/vendor-sync/uniffi.md Quest-Claim: 78e0097f7ede9d45 From 24091b01da6f4fd2d21c23fdc577667f3936ccd3 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Mon, 2 Nov 2026 23:10:46 -0800 Subject: [PATCH 2/6] chore(uniffi): finish the vendor audit and fork CI follow-up Co-Authored-By: GPT-6.1 Sol --- quest/m1/vendor-sync/README.md | 26 ++++++++++++- quest/m1/vendor-sync/uniffi.md | 71 ---------------------------------- quest/m2/ffi-exporter.md | 4 +- 3 files changed, 27 insertions(+), 74 deletions(-) delete mode 100644 quest/m1/vendor-sync/uniffi.md diff --git a/quest/m1/vendor-sync/README.md b/quest/m1/vendor-sync/README.md index 3d40c771706..95ae397e6c9 100644 --- a/quest/m1/vendor-sync/README.md +++ b/quest/m1/vendor-sync/README.md @@ -48,6 +48,31 @@ This README's own work, once every child has merged: Only `/quest-delete` ends the recurrence. +UniFFI recurrence baseline, checked 2026-11-02: all four upstream default +branches are unchanged since the Oct31 ports, and all four public advisory lists +are empty. Carry these checked heads into the next child: + +| Upstream | Head checked | +|---|---| +| [mozilla/uniffi-rs](https://github.com/mozilla/uniffi-rs) | [`ef9625b6`](https://github.com/mozilla/uniffi-rs/commit/ef9625b68dd51207f55f024a27649e58edb52b09) | +| [NordSecurity/uniffi-bindgen-go](https://github.com/NordSecurity/uniffi-bindgen-go) | [`0b7fb4ce`](https://github.com/NordSecurity/uniffi-bindgen-go/commit/0b7fb4ceef12021bd7f790cc516fa9133e001813) | +| [Uniffi-Dart/uniffi-dart](https://github.com/Uniffi-Dart/uniffi-dart) | [`e644a4ad`](https://github.com/Uniffi-Dart/uniffi-dart/commit/e644a4ad980f72697aba211fd30cb4fbd8fc7324) | +| [livekit/uniffi-bindgen-cpp](https://github.com/livekit/uniffi-bindgen-cpp) | [`20bef754`](https://github.com/livekit/uniffi-bindgen-cpp/commit/20bef754391023df147267482513c35120dee343) | + +The Oct31 generator ports and pin updates already landed in +[moq-dev/moq#7461](https://github.com/moq-dev/moq/pull/7461), with their rust2 +mirror in [moq-dev/rust2#364](https://github.com/moq-dev/rust2/pull/364). +The Dart fork's [CI coverage](https://github.com/kixelated/uniffi-dart/blob/moq-0.32/README.md#fork-ci-coverage) +keeps the full fixture and lint suite plus Nix smoke checks. Its unrelated wallet +jobs are removed; MoQ's binding and cross-language checks own the downstream +integration. The fork changes only tests, CI, and documentation, so no generator +pin or regenerated binding changes were needed this run. Retain the +completed child's applicability decisions from its history; foreign traits, +custom types, dollar-bearing defaults, and recursive enum graphs still have no +MoQ consumer. Recheck that before importing their upstream fixes. Until the +exporter switch, mirror any generator fixes into rust2's maintenance fork too. +Drop the UniFFI child once [the exporter switch](/quest/m2/ffi-exporter.md) lands. + Out of scope: forks moq no longer consumes (moq-dev/quiche, moq-dev/noq, kixelated/cros-codecs, kixelated/openh264-rs, kixelated/fflate) and the `@kixelated/libavjs-webcodecs-polyfill` npm fork js/hang uses (maintainer, @@ -58,7 +83,6 @@ behavior follows quinn's fixes. ## Required -- [UniFFI generator forks are current](/quest/m1/vendor-sync/uniffi.md) - the generator forks carry upstream's fixes until rust2 replaces them - [moq-vaapi has every cros-codecs fix it needs](/quest/m1/vendor-sync/vaapi.md) - cros-libva and cros-codecs fixes reach moq-dev/vaapi ## Related diff --git a/quest/m1/vendor-sync/uniffi.md b/quest/m1/vendor-sync/uniffi.md deleted file mode 100644 index 7ee8889fd8c..00000000000 --- a/quest/m1/vendor-sync/uniffi.md +++ /dev/null @@ -1,71 +0,0 @@ -# [S] UniFFI generator forks are current - -## Goal - -moq's UniFFI forks carry every fix their upstreams have landed since the last -check that moq's generated bindings need, and moq pins the updated forks: - -- [kixelated/uniffi-rs](https://github.com/kixelated/uniffi-rs) from - [mozilla/uniffi-rs](https://github.com/mozilla/uniffi-rs), pinned in - `rs/uniffi-bindgen/Cargo.toml` -- [kixelated/uniffi-bindgen-go](https://github.com/kixelated/uniffi-bindgen-go) - from [NordSecurity/uniffi-bindgen-go](https://github.com/NordSecurity/uniffi-bindgen-go) -- [kixelated/uniffi-dart](https://github.com/kixelated/uniffi-dart) from - [Uniffi-Dart/uniffi-dart](https://github.com/Uniffi-Dart/uniffi-dart) -- [kixelated/uniffi-bindgen-cpp](https://github.com/kixelated/uniffi-bindgen-cpp) - from [livekit/uniffi-bindgen-cpp](https://github.com/livekit/uniffi-bindgen-cpp) - -## Plan - -Recurring child of the [vendor sync](/quest/m1/vendor-sync/README.md), which -says how each run works and recurs. Decided 2026-10-30 (maintainer): covered -only until [the switch to rust2's exporter](/quest/m2/ffi-exporter.md) lands. After that, -rust2 owns the generators, and the next run drops this child. Until then, a fix -landed here goes upstream into rust2's fork too, or rust2's import loses it. - -A port means a commit on the fork and a pin bump in moq (`flake.nix` and the -places its "five places" comments name), with regenerated bindings diffed and -each wrapper's check run. - -Last checked (2026-10-31), with each fork's base and pin: - -| Fork | Base | Pin | Upstream head checked | -|---|---|---|---| -| uniffi-rs | `v0.32.2` (`7bc621ee`) | `35209f3f` | [`ef9625b6`](https://github.com/mozilla/uniffi-rs/commit/ef9625b68dd51207f55f024a27649e58edb52b09) | -| uniffi-bindgen-go | `0b7fb4ce` | `v0.10.0-kixelated.2+v0.32.0` | [`0b7fb4ce`](https://github.com/NordSecurity/uniffi-bindgen-go/commit/0b7fb4ceef12021bd7f790cc516fa9133e001813) | -| uniffi-dart | `72d26c1f` | `v0.3.1-kixelated.7+v0.32.0` (`657cbff5`) | [`e644a4ad`](https://github.com/Uniffi-Dart/uniffi-dart/commit/e644a4ad980f72697aba211fd30cb4fbd8fc7324) | -| uniffi-bindgen-cpp | `20bef754` | `v0.11.0-kixelated.7+v0.32.2` | [`20bef754`](https://github.com/livekit/uniffi-bindgen-cpp/commit/20bef754391023df147267482513c35120dee343) | - -That run ([moq-dev/moq#7461](https://github.com/moq-dev/moq/pull/7461)) -ported Python's running-loop preference (`f903c36c`) in -[kixelated/uniffi-rs#1](https://github.com/kixelated/uniffi-rs/pull/1), and -Dart's nested input-scratch cleanup (`71dc9f8b`) and disposal status -reservation (`a2751c4c`) in -[kixelated/uniffi-dart#7](https://github.com/kixelated/uniffi-dart/pull/7). -Both landed on `moq-0.32` as merge commits, so the pinned heads stay -reachable. [moq-dev/rust2#364](https://github.com/moq-dev/rust2/pull/364) -mirrors both into rust2's fork. No upstream published a security advisory; -Go and C++ had no new upstream commits; Kotlin's checksum mask was already in -the pin (`2a8331b7`). - -Ruled out, so the next run can skip them unless MoQ starts using the feature: -MoQ exports no foreign-implementable traits, custom types, dollar-bearing -defaults, or recursive enum graphs, so Kotlin Throwable handling, Swift async -callback concurrency, Dart incoming callback buffers, custom FFI lowering, -string-default escaping, and recursive/custom-type fixes have no generated -MoQ consumer. Upstream main's parser, JNI backend, mutable bytes, and -library-mode removal are a redesign, not a port. - -Remaining: fork CI, added 2026-11-01 (maintainer, follow-up planning after the -2026-11-01 /quest-afk run). kixelated/uniffi-dart's `Testing` -(`.github/workflows/tests.yml`) and `Test Downstream` -(`.github/workflows/test-downstream.yml`) workflows fail on every fork PR -while `Nix` passes, so a red check on a fork PR, including a vendor sync's -own, says nothing. On kixelated/uniffi-dart#7, `Test Suite (stable)` and -`(1.91)` failed while nightly passed; stable's failure is -`fixtures/dart_async/test/futures_test.dart`'s `sleep`, which expects strictly -more than 200 ms from a 200 ms sleep. `Test bdk-dart Bindings` fails because -bdk-dart's `native/Cargo.lock` needs updating under `--locked`. Fix them, -or drop them where the fork's `Nix` job and moq's own binding checks already -cover what they test, and record which in the fork's README. Keep the fork's -CI read-only, as `quest guide`'s Reviews section requires. diff --git a/quest/m2/ffi-exporter.md b/quest/m2/ffi-exporter.md index 989589a00db..206e1683406 100644 --- a/quest/m2/ffi-exporter.md +++ b/quest/m2/ffi-exporter.md @@ -20,7 +20,8 @@ replaces the fork, which stays in maintenance; publishing `rust2-uniffi` to crates.io would commit permanent names to code already slated for retirement, and switching moq to it would be churn on the way to the exporter. Until the switch, moq keeps building from its pinned -`kixelated/uniffi-*` forks ([UniFFI generator forks are current](/quest/m1/vendor-sync/uniffi.md)). +`kixelated/uniffi-*` forks, checked each release cycle by +[the vendor sync](/quest/m1/vendor-sync/README.md). Not chosen: publish the fork and switch to it first; decide later. Carried over from the fork plan, where they still apply to the exporter's @@ -106,7 +107,6 @@ none. ## Related -- [UniFFI generator forks are current](/quest/m1/vendor-sync/uniffi.md) - keeps the forks this replaces synced with upstream until the switch; its fixes must reach rust2's fork - [Payload bytes](https://github.com/moq-dev/rust2/blob/main/quest/m1/ffi-bytes.md) - the first patch the fork carries - [Kotlin calls](https://github.com/moq-dev/rust2/blob/main/quest/m1/kt-ffi-calls.md) - a Kotlin generator patch the fork carries - [Foreign poll for hot reads](https://github.com/moq-dev/rust2/blob/main/quest/m1/ffi-poll-protocol.md) - a generated poll protocol the fork carries; dropping a future at cancel is optional here, since no moq quest waits on it From 8d55ed63a3bf77d1be4b9ec974f3f6d3e24799d2 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Mon, 2 Nov 2026 23:14:04 -0800 Subject: [PATCH 3/6] chore(quest): preserve completed child baselines until recurrence Co-Authored-By: GPT-6.1 Sol --- quest/m1/vendor-sync/README.md | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/quest/m1/vendor-sync/README.md b/quest/m1/vendor-sync/README.md index 95ae397e6c9..3e8a8b2e94e 100644 --- a/quest/m1/vendor-sync/README.md +++ b/quest/m1/vendor-sync/README.md @@ -49,8 +49,8 @@ This README's own work, once every child has merged: Only `/quest-delete` ends the recurrence. UniFFI recurrence baseline, checked 2026-11-02: all four upstream default -branches are unchanged since the Oct31 ports, and all four public advisory lists -are empty. Carry these checked heads into the next child: +branches were checked, and all four public advisory lists were empty. Carry +these checked heads into the next child: | Upstream | Head checked | |---|---| @@ -59,19 +59,14 @@ are empty. Carry these checked heads into the next child: | [Uniffi-Dart/uniffi-dart](https://github.com/Uniffi-Dart/uniffi-dart) | [`e644a4ad`](https://github.com/Uniffi-Dart/uniffi-dart/commit/e644a4ad980f72697aba211fd30cb4fbd8fc7324) | | [livekit/uniffi-bindgen-cpp](https://github.com/livekit/uniffi-bindgen-cpp) | [`20bef754`](https://github.com/livekit/uniffi-bindgen-cpp/commit/20bef754391023df147267482513c35120dee343) | -The Oct31 generator ports and pin updates already landed in -[moq-dev/moq#7461](https://github.com/moq-dev/moq/pull/7461), with their rust2 -mirror in [moq-dev/rust2#364](https://github.com/moq-dev/rust2/pull/364). -The Dart fork's [CI coverage](https://github.com/kixelated/uniffi-dart/blob/moq-0.32/README.md#fork-ci-coverage) -keeps the full fixture and lint suite plus Nix smoke checks. Its unrelated wallet -jobs are removed; MoQ's binding and cross-language checks own the downstream -integration. The fork changes only tests, CI, and documentation, so no generator -pin or regenerated binding changes were needed this run. Retain the -completed child's applicability decisions from its history; foreign traits, -custom types, dollar-bearing defaults, and recursive enum graphs still have no -MoQ consumer. Recheck that before importing their upstream fixes. Until the -exporter switch, mirror any generator fixes into rust2's maintenance fork too. -Drop the UniFFI child once [the exporter switch](/quest/m2/ffi-exporter.md) lands. +MoQ exports no foreign-implementable traits, custom types, dollar-bearing +defaults, or recursive enum graphs. Recheck these uses before importing the +related upstream fixes. Upstream's parser, JNI backend, mutable bytes, and +library-mode removal are redesigns outside this sync. Before changing Dart +fork CI, read its [coverage record](https://github.com/kixelated/uniffi-dart/blob/moq-0.32/README.md#fork-ci-coverage). +Until the exporter switch, mirror any generator fixes into rust2's maintenance +fork too. Drop the UniFFI child once +[the exporter switch](/quest/m2/ffi-exporter.md) lands. Out of scope: forks moq no longer consumes (moq-dev/quiche, moq-dev/noq, kixelated/cros-codecs, kixelated/openh264-rs, kixelated/fflate) and the From 1bf44f49f9e051c355a7b56caec88b1774d32611 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Mon, 2 Nov 2026 23:17:09 -0800 Subject: [PATCH 4/6] chore(quest): state the completed child recurrence rule Co-Authored-By: GPT-6.1 Sol --- quest/m1/vendor-sync/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/quest/m1/vendor-sync/README.md b/quest/m1/vendor-sync/README.md index 3e8a8b2e94e..3cf2e65ac0f 100644 --- a/quest/m1/vendor-sync/README.md +++ b/quest/m1/vendor-sync/README.md @@ -25,7 +25,9 @@ Each child, each run: dependency bumps. - Record the newest upstream commit checked where the next run will look: an `Upstream` section in the vendored crate's README (or module doc), or the - child's Plan for code outside this repository. + child's Plan for code outside this repository. When a child completes before + re-creation, move its checked heads and next-run decisions into this Plan. + Step 2 re-creates completed children from those records too. This README's own work, once every child has merged: From 5f58123cf860ca7192c4fb887a1dd23b3f608830 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Wed, 4 Nov 2026 14:55:24 -0800 Subject: [PATCH 5/6] chore(quest): retain generator fixes for the exporter switch Co-Authored-By: GPT-6.1 Sol --- quest/m1/vendor-sync/README.md | 4 +++- quest/m2/ffi-exporter.md | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/quest/m1/vendor-sync/README.md b/quest/m1/vendor-sync/README.md index 3cf2e65ac0f..4cb90cc928e 100644 --- a/quest/m1/vendor-sync/README.md +++ b/quest/m1/vendor-sync/README.md @@ -67,7 +67,9 @@ related upstream fixes. Upstream's parser, JNI backend, mutable bytes, and library-mode removal are redesigns outside this sync. Before changing Dart fork CI, read its [coverage record](https://github.com/kixelated/uniffi-dart/blob/moq-0.32/README.md#fork-ci-coverage). Until the exporter switch, mirror any generator fixes into rust2's maintenance -fork too. Drop the UniFFI child once +fork too and add them to the exporter quest's carried-over list, so the new +generators retain them. rust2's fork is maintenance-only since 2026-11-02. +Drop the UniFFI child once [the exporter switch](/quest/m2/ffi-exporter.md) lands. Out of scope: forks moq no longer consumes (moq-dev/quiche, moq-dev/noq, diff --git a/quest/m2/ffi-exporter.md b/quest/m2/ffi-exporter.md index 9e559255c4a..cc1aab51b83 100644 --- a/quest/m2/ffi-exporter.md +++ b/quest/m2/ffi-exporter.md @@ -100,6 +100,16 @@ which publishes `rust2-uniffi`, `rust2-uniffi-core`, `rust2-uniffi-macros`, and cancelled as the call completed, and completes a future cancelled while pending as `context.Canceled`. The exporter's Go bindings must do both, tested like the fork's `destroy` fixture, which counts live handles. +- Python running-loop preference and Dart buffer ownership (2026-10-31, from + [moq-dev/moq#7461](https://github.com/moq-dev/moq/pull/7461)): + [kixelated/uniffi-rs#1](https://github.com/kixelated/uniffi-rs/pull/1) + carries Python's running-loop preference (`f903c36c`), and + [kixelated/uniffi-dart#7](https://github.com/kixelated/uniffi-dart/pull/7) + carries Dart's nested input-scratch cleanup (`71dc9f8b`) and disposal status + reservation (`a2751c4c`). + [moq-dev/rust2#364](https://github.com/moq-dev/rust2/pull/364) mirrors them + into the maintenance fork. The exporter's generators must retain these + behaviors too, rechecking each against their design before the switch. - Update the quests that name a `kixelated/uniffi-*` fork ([Generated C bindings](/quest/m2/c/README.md)) to point at rust2, then archive the three forks. From 99d6633ca7af98c61f3bc747c9ab2bdbbe2241a2 Mon Sep 17 00:00:00 2001 From: quest fixer Date: Thu, 5 Nov 2026 00:02:00 -0800 Subject: [PATCH 6/6] docs(quest): add required size prefix to vendor sync title --- quest/m1/vendor-sync/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quest/m1/vendor-sync/README.md b/quest/m1/vendor-sync/README.md index e4699df044d..a825e7007fe 100644 --- a/quest/m1/vendor-sync/README.md +++ b/quest/m1/vendor-sync/README.md @@ -1,4 +1,4 @@ -# Vendored code has every upstream fix it needs +# [M] Vendored code has every upstream fix it needs ## Goal