Skip to content

fix(transcode): a rungs-only derivative declares its source's join interval - #8723

Merged
kixelated merged 1 commit into
mainfrom
fix/transcode-derivative-join
Nov 14, 2026
Merged

kixelated merged 1 commit into
mainfrom
fix/transcode-derivative-join

Conversation

@kixelated

@kixelated kixelated commented Nov 14, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

A moq-transcode derivative that carries only its rungs (no passthrough of the source's renditions) declares no media.join in its catalog. populate() returned before copying it whenever the derivative had no source-relative renditions. The relay's HLS export needs a join interval to number segments, so every HLS master for such a derivative answered 404 no renditions available, while its rungs played fine over MoQ. #8121's backstop didn't give it one either.

Approach

Every rung mirrors the source's groups one for one, so the derivative promises the source's join interval whatever renditions it carries. populate() now copies source.media.join before the passthrough early return, once, and keeps it fixed after that, so an HLS export's segment numbers stay stable across later source catalog updates.

Impact

  • Behavior only: a rungs-only derivative's catalog now carries media.join, so its HLS master and media playlists serve. No API or wire change.

Alternatives

  • Measure the interval at the HLS export for transcoded tracks. Rejected: the transcoder already knows it, and the rungs' group boundaries are the source's by construction.

Decisions

  • Leave the branch unmerged with main: it conflicts with nothing, and the queue tests it on the current base.

Follow-ups

  • None.

Caused by

  • moq-dev/moq#7652 - copied the source's join interval only after the passthrough early return, on the assumption that a rungs-only derivative measures its own, which nothing does for tracks written group by group (found by person)

Validation

  • just ci origin/main on the head merged onto main (cca28c84e, not pushed) passed, 367 tests. On the head alone, doc fails tsc with duplicate typedoc types: the branch's 35-commit-old bun.lock still pins typescript in doc/.vitepress/api, which main has since dropped; a clean install of main passes it.
  • On a real deployment with this commit, the derivative's HLS master answered 200 with all three rungs, and a segment decoded 60 frames.
  • populate_carries_the_source_interval asserts no join before the source declares one, the source's interval with only rungs, and that it stays fixed once declared.

Models

Size: XS
Implementer: Claude Code, claude-opus-5-5, unknown effort
Implementer: Claude Code, claude-opus-5-5, unknown effort (iterate, XS)

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

Review

Rewritten by quest review after each round.

  • Head: f9bf5c4

  • Base: origin/main at 7694ffa

  • Risk: medium, the base has no RISK.md to name what is always high or customer-facing, so every change is medium

  • Classified: medium by default

  • Reviewer: Codex, gpt-6.1-sol, medium effort

  • Session: 01a1dbd0-8274-7720-8d02-ab56d17691e7, round 1

  • Score: 9/10, Source review found no actionable defects in join interval propagation or preservation, with builds and tests intentionally not run.

  • Rounds: 1; first round 0; findings 0: fixed 0, refuted 0, open 0

  • Findings: none

Merge pick taken 2026-11-14 by the coordinator under the maintainer's afk grant to merge low-risk PRs: a small, reviewed transcode fix.

…terval

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

Copy link
Copy Markdown
Collaborator Author

Taking this draft over from its starter session, idle for about 13 hours, as the maintainer approved on 2026-11-14. The ## Waiting item records that handover and goes away with the next push.

(Written by Claude Opus 5.5)

@kixelated
kixelated marked this pull request as ready for review November 14, 2026 20:48
@coderabbitai

coderabbitai Bot commented Nov 14, 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 31 minutes.

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

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 1cad88ab-cc96-4e7e-a563-03def0e6894a
Commits

Reviewing files that changed from the base of the PR and between a1a6c49 and f9bf5c4.

Files selected for processing: 2

  • doc/bin/hls.md
  • rs/moq-transcode/src/catalog.rs
  • Autofix · 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

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ No new issues found.

Reviewed changes

Reviewed the single commit against main.

  • populate() join copy — source.media.join is now copied before the source_rel early return, so a rungs-only derivative declares the source's interval. It is still set only while out.media.join is None, so it stays fixed after that.
  • Test — populate_carries_the_source_interval covers no join before the source declares one, the source's interval with only rungs, and that it stays fixed once declared.
  • Docs — doc/bin/hls.md notes that a moq-transcode derivative declares its source's interval.

Pullfrog  | View workflow run | Using claude-sonnet-5-5 | 𝕏

@kixelated
kixelated added this pull request to the merge queue Nov 14, 2026
Merged via the queue into main with commit 3c32cdc Nov 14, 2026
13 checks passed
@kixelated
kixelated deleted the fix/transcode-derivative-join branch November 14, 2026 23:34
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