Skip to content

Exercise ergonomic bindings (Go/Kotlin/Swift) + bump client dev tooling#21

Merged
kixelated merged 3 commits into
mainfrom
claude/dependency-version-updates-24f62b
Jul 24, 2026
Merged

Exercise ergonomic bindings (Go/Kotlin/Swift) + bump client dev tooling#21
kixelated merged 3 commits into
mainfrom
claude/dependency-version-updates-24f62b

Conversation

@kixelated

Copy link
Copy Markdown
Contributor

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:

Client Now uses
go moq.Dial / CreateBroadcast / PublishMediaStream / SubscribeMedia + range-over-func frame iterators (github.com/moq-dev/moq-go, pkg moq). Raw surface moved to moq-go-ffi.
kotlin dev.moq.Moq.connect facade + dev.moq Flow extensions (dropped the uniffi.moq.* handles).
swift Moq module's Client/Session/BroadcastConsumer + AsyncSequence streams (dropped the direct MoqFFI import).

2. Bump client dev tooling to latest

The moq packages under test stay unpinned (freshness.sh enforces "always latest"). These are the third-party toolchain pins, refreshed:

  • 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.212.4.10, coroutines 1.9.01.11.0
  • go: moq-go seed 0.2.150.2.32 (cosmetic; smoke.sh re-resolves @latest)

playwright is intentionally not bumped — freshness.sh requires it to equal the Nix-provided Chromium (PLAYWRIGHT_VERSION), so it only moves with the toolchain.

CI status — read before merging

  • Kotlin ✅ / Swift ✅ — both compile against the currently published ergonomic wrappers (verified locally).
  • Go ⚠️ expected red — the ergonomic moq-go wrapper (v0.4.x) hasn't published yet; the mirror still serves the pre-split raw v0.2.32, so go build fails on undefined: 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). Once moq-go v0.4.0 publishes, the go cell self-heals with no change here, since smoke.sh runs go get moq-go@latest every run.

So: mergeable now if a temporarily-red go subscriber is acceptable (it goes green on its own once the wrapper ships), or hold until #2482 flows through and v0.4.0 is out.

Checks run locally

  • ./freshness.sh → ok
  • gofmt -l clients/go/smoke.go → clean
  • Kotlin gradle installDist → builds; Swift swift build → builds

(written by Opus 4.8)

kixelated and others added 2 commits July 24, 2026 10:59
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>

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @kixelated, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@kixelated, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 53 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8b47c920-ddfd-40e6-bca2-a3e913a62abf

📥 Commits

Reviewing files that changed from the base of the PR and between 2244f61 and 0fa48df.

📒 Files selected for processing (2)
  • clients/go/go.mod
  • smoke.sh

Walkthrough

The 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)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the ergonomic bindings migration and tooling version bumps.
Description check ✅ Passed The description is clearly related to the Go, Kotlin, Swift client updates and dependency bumps in the changeset.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch claude/dependency-version-updates-24f62b

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 6e9c8d4 and 2244f61.

📒 Files selected for processing (7)
  • clients/go/go.mod
  • clients/go/smoke.go
  • clients/js-native/package.json
  • clients/js/package.json
  • clients/kotlin/build.gradle.kts
  • clients/kotlin/src/main/kotlin/Main.kt
  • clients/swift/Sources/smoke/main.swift

Comment thread clients/go/go.mod Outdated
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant