Skip to content

fix(watch): see hidden .pro claims when gating renditions - #4391

Merged
kixelated merged 3 commits into
quest/m0/wildcard/READMEfrom
quest/m1/wildcard/hidden-demand
Sep 29, 2026
Merged

kixelated merged 3 commits into
quest/m0/wildcard/READMEfrom
quest/m1/wildcard/hidden-demand

Conversation

@kixelated

@kixelated kixelated commented Sep 28, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Derived output lives under a hidden service prefix (.pro/transcode/<source path>), and . segments are hidden from default discovery. The player's cross-broadcast check (#runAnnounced in js/watch/src/broadcast.ts) opened origin.announced() without opting in, so a broad-scope viewer never saw the claim and the rendition it covers stayed filtered. Nothing demanded it, so it never started. Raised by Codex on #4382.

Approach

Maintainer decision (on #4382):

  • Layout: derived output lives under .pro/<service>/..., moq.pro's convention.
  • The prefix is hidden on purpose: customers on moq-lite-06 or older must never see .pro/ broadcasts. Those versions can't opt in, so the relay never announces hidden paths to them.
  • The player's check opts into hidden routes, which works only once lite-07 is negotiated. A customer who wants transcodes upgrades, or subscribes to the explicit .pro/<service>/... path, which works on any version.

Changes:

  • js/watch/src/broadcast.ts: origin.announced(Path.Pattern.all(), { hidden: true }).
  • js/watch/src/broadcast.test.ts: the wildcard rendition fixtures use .pro/transcode/. "lists and demands a rendition only a wildcard covers" fails without the fix.
  • quest/m0/wildcard/README.md: records the layout and the reasoning, and adds a plain-text Required bullet: moq-lite-07 is finalized and negotiated by default, no longer moq-lite-07-wip.
  • quest/m1/broadcast-epoch/README.md: the epoch example uses .pro/transcode/.

Impact

  • Public API: none.
  • Wire: none. The player's announce stream now asks for hidden routes when a catalog has cross-broadcast renditions; lite-06 and older peers ignore the request by design.

Alternatives

  • A visible service prefix (transcode/): lite-06 customers would see .pro output in their listings.
  • A per-reference scoped announce naming the dot segment: more streams for the same result.

Follow-ups

(Written by Opus 5.5)

🤖 Generated with Claude Code

A transcoder claims a `.`-named service prefix (`.transcode/`), which is
hidden from default discovery, so the player's cross-broadcast check never
saw the claim and filtered the rendition it covers. The check now opts into
hidden routes; it only decides availability and lists nothing to the user.

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

chatgpt-codex-connector Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-29T01:26:19.081917Z ecfa438 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@kixelated

Copy link
Copy Markdown
Collaborator Author

MERGE

Positive improvement?

Yes. Cross-broadcast rendition gating was calling origin.announced() with the default (hidden routes excluded). Service claims under .transcode/... are intentionally hidden from listings, so a broad-scope viewer never saw the covering prefix, kept the derived rendition filtered out, and never demanded it — a real demand/wildcard deadlock. Opting into { hidden: true } for this internal covering set matches the maintainer decision on #4382 and the platform layout.

Worth the complexity?

Yes. The production change is one call-site with the existing announce.Options.hidden flag (Path.Pattern.all() is already the default scope). Tests now exercise the real .transcode/ prefix, and the quest README records the relay/token dependency. No public API or wire change.

Different approach better?

Not for this bug. A visible transcode/ prefix would leak service claims into every root listing; per-reference scoped announces would add more streams for the same coverage check. Keeping . hidden and opting in only where the set is never shown to users is the right tradeoff.

Recommendation: merge once CI is green. The note that quest check fails on this line branch for unrelated files (needs main) is worth tracking but does not block this fix.

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

Mirror derived output under `.pro/<service>/`, moq.pro's convention, in
the line README, the broadcast-epoch layout, and the watch test fixtures.
The prefix is hidden so customers on moq-lite-06 or older never see it,
and the player's covering check sees it only on lite-07, so the line now
requires lite-07 to be finalized and negotiated by default.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated kixelated changed the title fix(watch): count hidden service claims when gating renditions fix(watch): see hidden .pro claims when gating renditions Sep 28, 2026
@kixelated
kixelated changed the base branch from quest/m1/wildcard/README to quest/m0/wildcard/README September 28, 2026 21:04
…uest/m1/wildcard/hidden-demand

# Conflicts:
#	quest/m1/broadcast-epoch/README.md
@kixelated

Copy link
Copy Markdown
Collaborator Author

Merge summary:

  • Merged quest/m0/wildcard/README into this branch (merge commit, no rebase). Git followed the line's move from quest/m1/wildcard/ to quest/m0/wildcard/, so the README changes now land on the m0 path.
  • Resolved the one conflict in quest/m1/broadcast-epoch/README.md: kept this PR's .pro/transcode/... example and the base's /quest/m0/wildcard/README.md link.
  • quest check passes (446 documents) now that the line has main merged in, so the "quest check fails on this line" follow-up is dropped from the description.
  • just check passes locally.

Review: Codex finished on 30589b2 with no findings; the automated MERGE verdict agrees with the change (its .transcode/ wording predates the .pro/transcode/ layout, which is the settled decision).

(Written by Opus 5.5)

@kixelated
kixelated merged commit c88294b into quest/m0/wildcard/README Sep 29, 2026
4 of 8 checks passed
@kixelated
kixelated deleted the quest/m1/wildcard/hidden-demand branch September 29, 2026 01:24
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