Skip to content

quest: sync with moq.pro's quest audit, add Kotlin POM and Homebrew moq-gst fixes - #5059

Merged
kixelated merged 13 commits into
mainfrom
quest/moq-pro-audit-sync
Oct 8, 2026
Merged

kixelated merged 13 commits into
mainfrom
quest/moq-pro-audit-sync

Conversation

@kixelated

@kixelated kixelated commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

Follows #5058 (the 2026-10-08 audit), now merged; this PR targets main.

Problem

moq.pro's 2026-10-07 quest audit found upstream quests that link to moved or deleted moq.pro quests, leave open questions moq.pro has since decided, or omit moq.pro as a consumer. It also turned up two broken published artifacts that no quest owns: the Kotlin wrapper's target POMs on Maven Central depend on moq-ffi-jvm/moq-ffi-android 0.0.0-dev, which was never published, and the Homebrew moq-gst formula globs lib/libgstmoq.* while the tarball ships lib/gstreamer-1.0/, so it installs nothing.

#5058 also lets stats-split ship prefix tracks and self counters in a follow-up while retiring the per-path maps first. moq.pro's Broadcasts page reads prefix tracks the moment the maps retire, so a release that retires them alone is one moq.pro cannot pin, which also holds back every later pin.

Approach

  • Repoint or drop stale moq.pro links: m0 loses the Pronto GPU pointer, lite07-finalize points at moq.pro's m2/lite07.md (held in m2 until the cut), and stats-split no longer claims moq.pro's announced probe reads totals.
  • stats-split: if prefix tracks and self counters split into a follow-up, the per-path map retirement moves with them; totals and sessions can still land first.
  • Record moq.pro's decision: the per-broadcast health verdict lives in moq.pro's health badge (QoS and client health drop their open question). The gpu-surface Kind::Auto decision dropped in the main merge: feat(video)!: accept external Vulkan encoder inputs #4975 finished that quest and main deleted it.
  • Name moq.pro consumers: qmux-credit (Voice and the edge-to-core tls:// links), dogfood-assets (moq.pro's package adoption), gpu-release (moq.pro's release and pin quests).
  • New m1 quests: Kotlin wrapper POMs (quest/m1/kt-ffi-pom.md) and Homebrew moq-gst (quest/m1/gst-brew-path.md), ranked beside Wire compatibility.

#5058 already dropped the rtsp-import #2210 note and deleted text-schema, so this PR no longer touches either. Some moq.pro links resolve once the moq.pro audit PR merges (quest/m2/gpu-release.md, quest/m1/edge-core/qmux-credit.md, quest/m2/lite07.md).

Impact

Quest files only. Public API: none. Wire: none. quest check passes.

Alternatives

  • Leave the health-verdict question open upstream. Rejected: moq.pro owns the combination, so the open question only invites a duplicate.
  • Pin Maven consumers to one moq-ffi patch via moqffi.version. Kept as the second option in kt-ffi-pom; the recommendation is the range, matching Gradle consumers.
  • Let the map retirement ship before prefix tracks and have moq.pro skip that release. Rejected: it would hold moq.pro's pin (and the Restart release that may share it) until the follow-up ships.

Decisions

Upstream PR

New quests' milestone

  • ✅ m1 (Recommended)
  • m0
  • m2

stats-split split

  • ✅ Ask upstream to keep the map retirement with prefix tracks (Recommended)
  • moq.pro waits on both
  • Totals only

Follow-ups

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

kixelated and others added 12 commits October 8, 2026 08:09
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Deletes done and not-worth-it quests, folds duplicates, retires m4 into m3,
moves quests between milestones by priority, splits js-session-parity and
listener-deadlines, and fixes every rank inversion the audit found.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…xt-32-57d5a2

# Conflicts:
#	quest/m0/README.md
#	quest/m0/ietf-d14-root-prefix.md
#	quest/m1/README.md
#	quest/m1/js-request-window.md
#	quest/m1/js-session-parity.md
#	quest/m1/lite07-finalize.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oq-gst fixes

Repoint or drop stale moq.pro links, record decisions moq.pro made
(input-device Config field, combined health verdict lives in moq.pro), name
moq.pro consumers, and add two m1 quests: the Kotlin wrapper's target POMs
depend on an unpublished moq-ffi 0.0.0-dev, and the moq-gst Homebrew formula
installs from the wrong tarball path.

If stats-split splits, the per-path map retirement moves with prefix tracks
and self counters, since moq.pro's Broadcasts page reads prefix tracks the
moment the maps retire.

Applies on top of #5058 (2026-10-08 audit), which already dropped the
rtsp-import #2210 note and deleted text-schema.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Automated review by review (OpenAI)

Reviewed commit: f70f08e (stacked base: 2e42af0).

No actionable defects found in this quest-only delta. The direction is sound: keep map retirement with its prefix-track replacement, make device selection explicit before encoder open/probe, and give the two packaging failures focused regression checks.

Non-blocking simplification: in quest/m1/gst-brew-path.md:13–19, correcting the source glob alone can retain the current lib destination, caveat, and test contract. Move the destination and drop the caveat only if the proposed Homebrew discovery check demonstrates the benefit.

Verification: read the full 12-file diff, surrounding quests, Kotlin publishing configuration/workflow, Homebrew template and packaging workflow, encoder open/probe, and stats contract. Static GitHub review only; no tests or quest check run. Maven Central artifacts and downstream moq.pro links were not independently checked (repository-only scope). Check CI is still running. Rechecked open/non-draft state, head/base and empty review history immediately before posting; GitHub currently reports merge conflicts.

@kixelated

Copy link
Copy Markdown
Collaborator Author

Automated review: moq#5059 at f70f08ed

Quest-only PR, stacked on #5058. I checked the claims against main, this branch's base, Maven Central, the moq-gst-v0.4.12 release, moq-dev/homebrew-tap, and moq-dev/moq.pro@main. Most of it holds up: the Kotlin root cause is right, the Homebrew path bug is real, and the stats-split reordering is sound. One file is stale against main, though, and several moq.pro links are dangling.

Blocking

1. quest/m2/gpu-surface.md no longer exists on main. #4975 merged at 08:42 PT today (d9f176cc). It deleted this quest and dropped its line from gpu-release.md's Required list. It also shipped the decision this PR records: rs/moq-video/src/encode/encoder.rs on main has Config::input: Option<vulkan::Device> (around line 194), plus the test unknown_external_device_is_refused_at_open_and_probe. So the edit here (recording Kind::Auto learning the device from a Config input-device field, and the new Public API line) documents something already done in a file that's already gone. Once this retargets to main (#5058 merges first), it becomes a modify/delete conflict. Fix: drop the gpu-surface.md hunk and rebase the stack on current main, which is 5 commits ahead of this head.

Non-blocking

2. Three moq.pro links 404, and one working link gets swapped for a 404. On moq-dev/moq.pro@main, quest/m2/lite07.md (lite07-finalize.md:88), quest/m1/edge-core/qmux-credit.md (m0/qmux-credit.md:64), and quest/m2/gpu-release.md (m2/gpu-release.md:33) don't exist. The PR body says they'll resolve once "the moq.pro audit PR" merges, but none of the open moq.pro PRs touch those paths, so nothing is in flight to make them resolve. Meanwhile quest/m1/lite07.md does exist on moq.pro main, so line 88 trades a working link for a broken one. quest check passes because it doesn't check cross-repo links. Fix: link the moq.pro PR, or hold these three link changes until it merges.

3. The health badge doesn't take client reports as an input. qos/README.md:34-37 and stats/health.md:56-59,75 now say moq.pro's health badge computes the verdict combining "client reports, the relay's starvation, and publisher timeliness," and health.md says it combines "this one" (client health). On moq.pro main, badge.md combines relay starvation and dropped media, ingest lateness and cadence, and the publisher's catalog stats track. Its Required list names starvation, timeliness, and the schema quest, not client health or viewer reports. Either add client health to the badge's inputs in moq.pro, or narrow the upstream wording, so this doesn't swap one open question for a false "decided".

4. kt-ffi-pom.md's recommended fix has a tradeoff it doesn't mention. The cause analysis checks out. Maven Central has moq-jvm/moq-android 0.5.0 and 0.5.1 depending on moq-ffi-{jvm,android}:0.0.0-dev, 0.4.5 on moq-ffi:[0.3,0.4), and the root POM and .module still carry [0.4.3,0.5). Two corrections and one gap:

  • Line 16 understates the damage: moq-android 0.5.0 also names moq-ffi-android:0.0.0-dev, not just 0.5.1.
  • Line 25 hedges ("a Kotlin or Gradle upgrade since"), but it can name the change. build(deps): bump the gradle group in /kt with 9 updates #3601 (cd44d7b4, 2026-09-12) bumped Kotlin 2.0.21→2.4.10, vanniktech maven-publish 0.30.0→0.37.0, and AGP 8.7.3→9.4.0. That landed between 0.4.5 (published Sep 4) and 0.5.0 (Sep 23).
  • Line 30's recommended option ("keep the substitution out of the publication's configurations") says nothing about the tradeoff. The target POMs come from the main jvm/android runtime configurations, so pulling the substitution out of those makes the wrapper compile against the published moq-ffi range instead of the sibling project. That undoes what release-kt-lib.yml and the build file's comments rely on (building against this checkout's bindings), and PR dry-runs would break whenever the wrapper uses unreleased FFI API. The quest should say how both hold at once: for example, keep the substitution for compile and test while rewriting the target POM's moq-ffi-* dependency to the range (pom.withXml or the publish plugin's hooks), or use a composite build.

5. gst-brew-path.md's symptom and regression check need a second look. The bug is real: the template and the 0.4.12 tap formula both do lib.install Dir["lib/libgstmoq.*"], while the 0.4.12 macOS tarball ships only lib/gstreamer-1.0/libgstmoq.dylib. Two notes:

  • Line 8 ("installs nothing without an error") is probably wrong. Homebrew raises Empty installation when a keg holds only metafiles like README and LICENSE, so users most likely see a failed brew install, not a silent one. Worth confirming on macOS, since it changes how the bug shows up for users.
  • Line 23's regression check can't use the rendered formula as-is in a dry run, because its urls point at a release that doesn't exist yet. Current Homebrew also refuses brew install path/to/formula.rb outside a tap. The plan should say it renders against a file:// URL and the local tarball's sha256, inside a throwaway brew tap-new tap.

CI is green (Check, Test, Quest).

Verdict: ITERATE. Drop the stale gpu-surface.md hunk and rebase on main. Fix or defer the dangling moq.pro links, and correct the badge-input claim. The rest is wording.

This is an automated review, not the maintainer's decision
(Written by Grok)

Base automatically changed from quest-audit-2026-10-08 to main October 8, 2026 16:09
Takes main's quest tree (#5058 squashed, #5046, #5047, #5060, and the rest)
and reapplies only this PR's delta. gpu-surface was deleted on main after
#4975 finished it, so its Kind::Auto decision drops.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 48 seconds.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: bc6ba96f-d02a-4d6b-8ba6-123e68f664bd
📥 Commits

Reviewing files that changed from the base of the PR and between 4f51f84 and d8ca95a.

📒 Files selected for processing (11)
  • quest/m0/README.md
  • quest/m0/broadcast-epoch/stats-split.md
  • quest/m0/qmux-credit.md
  • quest/m1/README.md
  • quest/m1/dogfood-assets.md
  • quest/m1/gst-brew-path.md
  • quest/m1/kt-ffi-pom.md
  • quest/m1/lite07-finalize.md
  • quest/m1/qos/README.md
  • quest/m1/stats/health.md
  • quest/m2/gpu-release.md
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

@kixelated

Copy link
Copy Markdown
Collaborator Author

Merged main (4f51f84) into this branch, now d8ca95a7a058e931a6a2c84d8d8e660bf064ffc1, base main.

(Written by Claude Opus 5.5)

@kixelated
kixelated merged commit 2d1ba06 into main Oct 8, 2026
5 checks passed
@kixelated
kixelated deleted the quest/moq-pro-audit-sync branch October 8, 2026 17:28
kixelated added a commit that referenced this pull request Oct 8, 2026
Co-Authored-By: Claude Opus 5.5 <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