Skip to content

quest: move HLS record removal to m0 as a declared-grid export - #7616

Merged
kixelated merged 7 commits into
mainfrom
quest-plan/hls-records-m0
Nov 2, 2026
Merged

kixelated merged 7 commits into
mainfrom
quest-plan/hls-records-m0

Conversation

@kixelated

@kixelated kixelated commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Plans removing the catalog's per-rendition hls field in m0, from the maintainer's 2026-11-02 /quest-plan interview (raised on moq-dev/moq#7436).

  • New m0 quest quest/m0/hls-media-grid.md [L]: hang drops the hls field, the <track>.hls record tracks, and A/V segment alignment. The catalog gains media.join.interval, and clock moves to media.clock. moq-mux, moq-c, and @moq/publish declare the interval. The HLS/DASH export and recorder read the media tracks and number segments on the grid from each group's first-frame pts. An HLS-only viewer of an on-demand publisher starts capture.
  • consumers.md (m1 time-addressing) keeps only the swap from first-frame pts to group starts, and now requires the m0 quest.
  • Deleted as moot: m2/js-hls.md (it would have made JS publish records) and m2/producer-retire.md (it bounded record tracks).
  • hls-conformance.md now points at the grid instead of the Catalog HLS field. (moq-dev/moq#7604 finished the m1 archive epic and deleted it, so the earlier edits to archive/README.md and its roadmap entry were dropped in the merge.) The m0 quest names doc/concept/archives.md, which that PR added, among the docs to update. The conformance test's unaligned ladder shares the grid's segment numbers, while each rendition's segment boundaries follow its own keyframes.
  • m0's Goal now covers this breaking catalog/API change: it is pulled ahead of m1's other planned format changes, lands on main, and ships with the next cut. m0's Plan records the placement.

Decisions (maintainer, 2026-11-02)

  • Scope: ✅ move to m0 as a new quest decoupled from time-addressing, using first-frame pts. Not picked: keep it in consumers.md behind time-addressing, move the whole epic, or move consumers.md alone.
  • Goal: ✅ as written above, including media.clock and @moq/publish.
  • Segmentation rules from 2026-10-27/28: ✅ carried over unchanged.
  • Compatibility: ✅ clean break, with no record fallback and no records for old exports.
  • On-demand HLS-only viewer proof: ✅ included in the m0 quest.
  • m0 Goal (after pullfrog's finding): ✅ widen m0's Goal to cover this work and keep the quest in m0. Not picked: move it back to m1.
  • js-hls: ✅ deleted. producer-retire: ✅ deleted, and its WIP draft moq-dev/moq#7225 closed.

Review

quest review --base origin/main: Codex gpt-6.1-sol, medium effort, round 3 on 5b8f229 (after a hand-resolved merge of main that deletes the finished archive epic, plus the archive-doc note in the m0 quest). No findings. Round 2 on ad5fb72 also had no findings. quest check --base origin/main passes.

CodeRabbit findings on 37fa8bb, all fixed in ad5fb72 and acknowledged by CodeRabbit:

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

The maintainer moved removing the catalog's per-rendition `hls` field
and `<track>.hls` record tracks to m0 on 2026-11-02, decoupled from
the time-addressing chain: the export numbers segments on
`media.join.interval` from each group's first-frame pts. consumers.md
keeps only the swap to group starts. js-hls and producer-retire are
deleted as moot.

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

coderabbitai Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Recent review info
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: f63699d3-d7bf-4af6-93a3-f8a90a199591
Commits

Reviewing files that changed from the base of the PR and between e9fbbb7 and 37fa8bb.

Files selected for processing: 7
  • quest/m0/README.md
  • quest/m0/hls-media-grid.md
  • quest/m1/archive/README.md
  • quest/m1/hls-conformance.md
  • quest/m1/time-addressing/consumers.md
  • quest/m2/README.md
  • quest/m2/producer-retire.md
Files with no reviewable changes: 2
  • quest/m2/producer-retire.md
  • quest/m2/README.md

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 0 remain after this review.

Walkthrough

The m0 plans now describe HLS export on a declared media.join.interval grid, including catalog changes, segment handling, and validation work. Related m1 plans distinguish group-start placement from first-frame-PTS placement and update archive and conformance descriptions. The m2 roadmap link and producer-retirement proposal are removed.

Merge Risk: Low · up to 37fa8

Align the roadmap and conformance wording before implementation so the m0 and m1 plans describe one consistent HLS grid design.

Pre-merge checks: Passed 4
Check name Status Explanation
Title check Passed The title clearly describes the main change: moving HLS record removal to m0 as part of a declared-grid export plan.
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.
Description check Passed The pull request description directly describes the HLS grid changes, catalog and API updates, related quest changes, deleted proposals, validation results, and maintainer decisions. It matches the ch…
Full details: Description check

Explanation

The pull request description directly describes the HLS grid changes, catalog and API updates, related quest changes, deleted proposals, validation results, and maintainer decisions. It matches the changeset.

Finishing Touches
Simplify code
  • Commit to this branch
  • Create a new PR
  • 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

@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: 1460470b8628f61d70ebc17633293ba427d7ba52.

No actionable bugs found in this planning change. Moving record removal into a self-contained m0 quest is a coherent simplification: it removes the temporary JS-record implementation and producer-retirement work, preserves the settled grid/overrun rules, and leaves time-addressing with the later timestamp-source substitution. The explicit clean break, publisher coverage, recorder conversion, and HLS-only on-demand capture proof keep the scope connected.

Verification: static review of the changed quest plans and relevant current exporter code. No implementation, playback, or tests were run; this does not establish runtime conformance of the future segmentation.

(Written by OpenAI)

@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 critical issues — one minor documentation suggestion inline.

Reviewed changes

  • New m0 quest — quest/m0/hls-media-grid.md plans dropping the per-rendition hls catalog field and <track>.hls record tracks, adding media.join.interval and moving clock to media.clock, and numbering HLS/DASH segments on the declared grid from each group's first-frame pts.
  • consumers.md trimmed — HLS record/segmentation content is delegated to the m0 quest; only the first-frame-pts to group-start swap remains, and the m0 quest is now in ## Required.
  • Cross-references updated — archive/README.md and hls-conformance.md now point at the grid instead of the Catalog HLS field; m2/js-hls.md and m2/producer-retire.md are deleted with their m2/README.md bullets.

Verified: every ](/quest/...) link target in the changed files exists, no dangling references to the two deleted files remain anywhere in the repo, and the cited PRs (#7068 moq-c group_duration_us, #7238 audio demand by default, #7225 closed WIP) and source paths (rs/moq-cli/src/hls/record.rs, rs/moq-hls/src/export/rendition.rs) and symbols (hang::hls, hang::catalog::Hls, moq_mux::hls, the JS zod hls field, root clock) all check out.

Pullfrog  | Fix all ➔ | Fix 👍s ➔ | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

Comment thread quest/m0/README.md Resolved

@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: 37fa8bbd89591eca864c19738d67404ea6d7fb96.

No actionable bugs found in the update since 1460470b8628f61d70ebc17633293ba427d7ba52, accounting for the merge of main. The m0 Goal and Plan now explicitly cover the breaking HLS-grid work and its next-cut release timing, resolving the earlier scope finding. This is a focused clarification of the existing design rather than added implementation complexity; m1's broader pre-cut goal remains consistent.

Verification: static review of the incremental plan change and related milestone/grid text. No implementation or tests were run; runtime segmentation conformance is not established.

(Written by OpenAI)

@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

Since the prior pullfrog review (1460470), the only net change is quest/m0/README.md, and it resolves the prior inline finding.

  • m0 Goal widened — now names "replacing the catalog's HLS records with a declared segment grid", records that it is a breaking catalog and API change pulled ahead of m1's other planned format changes, and that it lands on main and ships with the next cut.
  • m0 Plan placement recorded — a new paragraph notes the HLS grid quest is the one breaking change here (maintainer, 2026-11-02) and moved out of m1's time-addressing chain.
  • m0 Required bullet added — the HLS export on a declared grid entry now links hls-media-grid.md and summarizes the grid export.

The prior thread on m0's stale Goal is addressed and resolved. No new issues, no code/wire/API impact.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

@coderabbitai coderabbitai 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.

  • Fix comments: Fix CodeRabbit comments on this PR

Comment thread quest/m1/archive/README.md Resolved
Comment thread quest/m1/hls-conformance.md Resolved
Comment thread quest/m1/time-addressing/consumers.md Resolved
kixelated and others added 2 commits November 2, 2026 09:55
Address CodeRabbit's three findings on #7616: the m1 roadmap's archive
entry no longer mentions a per-rendition `hls` field, the conformance
test's unaligned ladder shares grid segment numbers while boundaries
follow each rendition's keyframes, and consumers.md's Required entry
says m0 owns the grid and record removal.

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: ad5fb7276c31a8f86e410af786679db20c474f25.

No actionable bugs found in the update since 37fa8bbd89591eca864c19738d67404ea6d7fb96, excluding changes merged from main. The archive roadmap, unaligned-ladder conformance requirement, and consumer prerequisite now agree with the m0 grid design. This resolves CodeRabbit's earlier archive, shared-numbering, and ownership findings rather than introducing new ones. Keeping shared segment numbers distinct from per-rendition keyframe boundaries is the right direction, without additional design complexity.

Verification: static review of the three changed plans and their grid/archive context. No tests or playback were run; this is not verification of the future implementation.

(Written by OpenAI)

kixelated and others added 2 commits November 2, 2026 09:59
# Conflicts:
#	quest/m1/README.md
#	quest/m1/archive/README.md
main added doc/concept/archives.md, whose HLS paragraph says a recording
needs its `hls` record tracks. The archive epic it came from is
finished, so the m0 grid quest now names the doc directly.

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

@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

Since the prior pullfrog review (37fa8bb), the new commits fix the three CodeRabbit findings and name the archive doc the grid invalidates. The branch also merged main, which finished the m1 archive epic (moq-dev/moq#7604) and dropped this PR's earlier archive/README.md and m1-roadmap edits.

  • Unaligned-ladder conformance corrected: quest/m1/hls-conformance.md no longer claims renditions have differing segment numbers; it now says every rendition shares the grid's segment numbers while its boundaries follow its own keyframes.
  • consumers.md prerequisite clarified: the m0 Required bullet now says it supplies the grid and removes the records, while this quest only swaps the first-frame pts placement for group starts.
  • Archive doc named: quest/m0/hls-media-grid.md now names doc/concept/archives.md (added by #7604) as a doc the grid makes stale, since its HLS paragraph says a recording needs its hls record tracks.

Verified: every /quest/... link in the changed files resolves, no dangling producer-retire, js-hls, or m1/archive references remain, and doc/concept/archives.md exists with an HLS paragraph that matches the quest's claim.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

@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

Since the prior pullfrog review (ad5fb72), one commit plus a main merge land on this plan. The commit names the archive doc the grid makes stale; the merge finished the m1 archive epic and dropped this PR's no-longer-needed edits to the m1 index and archive README.

  • Archive doc named — the m0 quest's recorder step now names doc/concept/archives.md, whose HLS paragraph says a recording needs its hls record tracks, so the grid invalidates it.
  • m1 archive edits dropped by the merge — main's #7604 finished the archive epic, so this PR no longer edits quest/m1/README.md or quest/m1/archive/README.md.

Verified doc/concept/archives.md exists with the cited HLS paragraph, every path cited by the changed files resolves (rs/moq-cli/src/hls/record.rs, rs/moq-hls/src/export/rendition.rs, the m1 quest links), and no dangling m1/archive, producer-retire, or js-hls reference remains anywhere in the repo.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

@kixelated
kixelated added this pull request to the merge queue Nov 2, 2026
Merged via the queue into main with commit fdeace9 Nov 2, 2026
10 of 11 checks passed
@kixelated
kixelated deleted the quest-plan/hls-records-m0 branch November 2, 2026 19:37
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