Exercise ergonomic bindings (Go/Kotlin/Swift) + bump client dev tooling#21
Conversation
The moq packages under test stay unpinned (freshness.sh enforces "always latest"); these are the third-party toolchain pins, refreshed to current: - js: esbuild ^0.27 -> ^0.28.1, vite ^7.3 -> ^8.1.5 - js-native: zod ^4.0 -> ^4.4.3, tsx ^4.0 -> ^4.23.1 - kotlin: Kotlin 2.0.21 -> 2.4.10, coroutines 1.9.0 -> 1.11.0 - go: moq-go seed 0.2.15 -> 0.2.32 (smoke.sh re-resolves @latest anyway) playwright is intentionally left pinned: freshness.sh requires it to match the Nix-provided Chromium (PLAYWRIGHT_VERSION), so it only moves with the toolchain. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
These three subscribers were built against the raw uniffi-bindgen surface
(MoqClient, MoqOriginProducer, .Destroy(), .Next()), which isn't what a real
user of the published packages writes. Convert each to the ergonomic wrapper the
package actually ships as its front door, so the smoke test proves that surface:
- go: moq.Dial / CreateBroadcast / PublishMediaStream / SubscribeMedia +
range-over-func frame iterators (github.com/moq-dev/moq-go pkg moq).
The raw surface now lives in github.com/moq-dev/moq-go-ffi.
- kotlin: dev.moq.Moq.connect facade + dev.moq Flow extensions, dropping the
uniffi.moq.* handles.
- swift: Moq module's Client/Session/BroadcastConsumer + AsyncSequence streams,
dropping the direct MoqFFI import.
Kotlin and Swift compile against the currently published wrappers. Go needs the
ergonomic moq-go wrapper (v0.4.x) which hasn't published yet -- the mirror still
serves the pre-split raw v0.2.x -- so the go cell stays red until it ships, then
self-heals since smoke.sh re-resolves moq-go@latest each run.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Sorry @kixelated, you have reached your weekly rate limit of 500000 diff characters.
Please try again later or upgrade to continue using Sourcery
|
Warning Review limit reached
Next review available in: 53 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
WalkthroughThe Go smoke client now uses the ergonomic moq-go wrapper for publishing and subscribing, with context-based cancellation and media iteration. Kotlin and Swift smoke clients migrate from raw FFI APIs to their published ergonomic APIs for connection, broadcast discovery, video-track lookup, and media subscription. Go, JavaScript, and Kotlin dependency and tooling versions are also updated. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches✨ Simplify code
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@clients/go/go.mod`:
- Line 5: Update the moq-go dependency in go.mod from v0.2.32 to the published
v0.4.x release that provides the github.com/moq-dev/moq-go/moq package and the
APIs used by smoke.go, including Dial, CreateBroadcast, PublishMediaStream, and
BroadcastConsumer.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 9096809c-3cac-4043-9c75-c14db6f47c9b
📒 Files selected for processing (7)
clients/go/go.modclients/go/smoke.goclients/js-native/package.jsonclients/js/package.jsonclients/kotlin/build.gradle.ktsclients/kotlin/src/main/kotlin/Main.ktclients/swift/Sources/smoke/main.swift
The ergonomic moq-go wrapper (v0.5.0+) depends on the moq-go-ffi module, which the old raw moq-go did not. smoke.sh ran `go get moq-go@latest && go build`, which records only moq-go's own checksum; the readonly build then fails with "missing go.sum entry for github.com/moq-dev/moq-go-ffi/moq". Add `go mod tidy` between the get and the build so the transitive checksum is fetched (no go.sum is committed -- freshness bans lockfiles -- so it's regenerated each run). The required `go get "...moq-go@latest"` literal freshness asserts is preserved. Seed clients/go/go.mod at the resolved v0.5.0 + moq-go-ffi indirect so a local build matches CI; smoke.sh re-resolves @latest regardless. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
What & why
Two independent changes to the language clients, one commit each.
1. Exercise the ergonomic bindings in Go / Kotlin / Swift
The Go, Kotlin, and Swift subscribers were written against the raw uniffi-bindgen surface (
MoqClient,MoqOriginProducer,.Destroy(),.Next()) — generated FFI glue, not the API a real user of the published package reaches for. Python and both JS clients already use their ergonomic surfaces; these three were the gap. Each is converted to the wrapper the package ships as its front door, so the smoke test actually proves that surface works:moq.Dial/CreateBroadcast/PublishMediaStream/SubscribeMedia+ range-over-func frame iterators (github.com/moq-dev/moq-go, pkgmoq). Raw surface moved tomoq-go-ffi.dev.moq.Moq.connectfacade +dev.moqFlow extensions (dropped theuniffi.moq.*handles).Moqmodule'sClient/Session/BroadcastConsumer+ AsyncSequence streams (dropped the directMoqFFIimport).2. Bump client dev tooling to latest
The moq packages under test stay unpinned (
freshness.shenforces "always latest"). These are the third-party toolchain pins, refreshed:^0.27→^0.28.1, vite^7.3→^8.1.5^4.0→^4.4.3, tsx^4.0→^4.23.12.0.21→2.4.10, coroutines1.9.0→1.11.00.2.15→0.2.32(cosmetic;smoke.shre-resolves@latest)playwrightis intentionally not bumped —freshness.shrequires it to equal the Nix-provided Chromium (PLAYWRIGHT_VERSION), so it only moves with the toolchain.CI status — read before merging
moq-gowrapper (v0.4.x) hasn't published yet; the mirror still serves the pre-split rawv0.2.32, sogo buildfails onundefined: moq.Dial. This is not a bug in the client — it's blocked on the release pipeline. The fix for that pipeline is fix(go-ffi): install cross target std before building moq-ffi moq#2482 (auto-merging). Oncemoq-go v0.4.0publishes, the go cell self-heals with no change here, sincesmoke.shrunsgo get moq-go@latestevery run.So: mergeable now if a temporarily-red
gosubscriber is acceptable (it goes green on its own once the wrapper ships), or hold until #2482 flows through andv0.4.0is out.Checks run locally
./freshness.sh→ okgofmt -l clients/go/smoke.go→ cleangradle installDist→ builds; Swiftswift build→ builds(written by Opus 4.8)