Skip to content

docs(quest): settle 30 s authored max-age defaults - #7567

Merged
kixelated merged 4 commits into
mainfrom
quest/m1/max-age-defaults
Nov 2, 2026
Merged

kixelated merged 4 commits into
mainfrom
quest/m1/max-age-defaults

Conversation

@kixelated

@kixelated kixelated commented Nov 1, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Raw Rust/JS/FFI publisher retention defaults to no limit, while media helpers use 30 seconds. The quest needed an audit before the maintainer chose a finite policy.

Approach

quest/m1/max-age-defaults.md records the audit: 63 pinned source anchors covering raw/media/catalog producers, gateways, FFI/C/Python, relay pool/ceiling, JS cache, audio history, archive/DVR, and wire absence, plus what zero and finite retention mean for late join, direct fetch, segmented playback, recording, and archive replay.

The maintainer settled the audit's proposals, so this PR now rewrites the quest into the implementation that remains (retitled "[L] Authored tracks default to a 30 s max-age, with explicit unlimited"). The quest scoped its own work as audit-and-propose with "a follow-up implements it", so the runtime change is that quest's next PR, not this one.

Decisions

Settled 2026-11-01 by the maintainer, who accepted every recommendation:

  1. Authored defaults: ✅ 30 s raw and media; 0 raw with 30 s media; current unlimited raw with 30 s media.
  2. Relay scope: ✅ keep the current unset ceiling; default the relay ceiling to 30 s with an operator opt-out.
  3. Authoring API: ✅ apply defaults at construction, with an explicit unlimited and unchanged decoded metadata; a default/unlimited/finite retention type across authoring APIs.

Choices I made while recording them, open to review:

  • Mux media follows decision 3: omitted Config.max_age / with_max_age is 30 s, None is unlimited. That changes today's with_max_age(None) from "inherit 30 s" to unlimited, so the implementation is breaking there. The audit had flagged an unlimited-media option as needing a decision; explicit unlimited across the authoring API answers it.
  • JS null is unlimited at producer construction, matching moq-dev/moq#7403's max-delay null. The audit listed it as the candidate; decision 3 picked nullable authoring options over a new type.
  • Bindings that can't tell omission from unlimited (UniFFI record default, Go nil, zeroed C struct) get an explicit unlimited flag, mirroring Subscriptions take a Delay for max-delay.
  • Sized [L]: it touches Rust, JS, and every binding, with tests and interop.

Impact

  • Public API: none in this PR; quest files only. The planned implementation is breaking in Rust, JS, and every binding.
  • Wire: none, now or planned.

Checks

On d94ad2c5ea0aec7c1bdde5c5f693db7332fbab83 (quest-only diff, origin/main merged):

  • quest check --base origin/main: pass, 613 documents.
  • git diff --check: pass.
  • No build or runtime tests: no code changed.

Review

Skipped the local quest review under the simple-review rule (moq-dev/quest#364): this PR touches only quests. Relying on the online reviewers; no online-reviewer findings were posted on the earlier head f0e56ead32.

The earlier audit head had a Codex / GPT-6.1 Sol high-effort self-review with no unresolved factual finding.

Follow-ups

  • The implementation is this quest's next PR (quest start quest/m1/max-age-defaults.md after this merges).
  • The earlier checkpoint saw just ci fail in RecipeTest.test_unexecuted_bench_is_not_compiled (mbx could not launch Cargo, Argument list too long). If it isn't tracked yet, plan it separately.

🤖 Generated with Claude Code

(Written by Claude Opus 5.5)

kixelated and others added 2 commits November 1, 2026 06:27
…ntion

Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
@kixelated kixelated changed the title Audit retention defaults and propose a finite max-age docs(quest): audit retention defaults and propose finite authoring retention Nov 1, 2026
kixelated and others added 2 commits November 1, 2026 10:16
The maintainer accepted the audit's three proposals on 2026-11-01: 30 s
for raw and media authored retention, no change to the relay's unset
ceiling, and defaults applied at construction with explicit unlimited.
Rewrite the quest into the implementation that remains.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated kixelated changed the title docs(quest): audit retention defaults and propose finite authoring retention docs(quest): settle 30 s authored max-age defaults Nov 1, 2026
@kixelated
kixelated marked this pull request as ready for review November 1, 2026 18:18
@coderabbitai

coderabbitai Bot commented Nov 1, 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 7 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: 9605fec7-e4cf-40dc-a9a5-169f5ade77a4
Commits

Reviewing files that changed from the base of the PR and between 951cca6 and d94ad2c.

Files selected for processing: 2
  • quest/m1/README.md
  • quest/m1/max-age-defaults.md
  • 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: d94ad2c.

No actionable bugs found in this quest-only change. The direction is sound: apply the authored 30 s policy at construction, preserve received absence and explicit unlimited, and keep relay eviction separate. Reusing the existing media policy is simpler than introducing a retention type throughout every binding; the plan explicitly covers the conversion traps and archive exception.

Verification: static review of the plan and sampled pinned Rust/JS raw defaults, mux, UniFFI, relay, and archive source. No builds or tests run; the future implementation and its cross-language behavior are not validated by this review.

(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

  • Quest rewritten as the implementation record (quest/m1/max-age-defaults.md): retitled from an [S] audit to [L] Authored tracks default to a 30 s max-age, with explicit unlimited, with the three settled decisions, a 63-anchor audit of current defaults, concrete consequences, an Implementation section, and a subscriber/wire-absence section.
  • Milestone index updated (quest/m1/README.md): the bullet now mirrors the new title and summary.

I verified the load-bearing claims against the pinned revision c95a9b1201: hang::container::MAX_AGE is 30 s and track_info sets it; track::Info::default().max_age is None; mux Config.max_age = None and with_max_age(None) inherit hang's 30 s; IDLE_LINGER and cache::DEFAULT_EXPIRY are 30 s; a relay's unset duration keeps a Duration::MAX ceiling with a 30 s LRU expiry; the archive defaults (2 s / 4 s / 10 s / dvr = None); the UniFFI if let Some and C if max_age_present conversions; and JS CACHE_WINDOW. The eight cited overlapping PRs exist and match their described scopes, and the slug's only referrer (the milestone README) was updated. Source anchors point at the enclosing declaration or doc comment rather than always the exact literal, which is fine for a plan.

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

@kixelated
kixelated enabled auto-merge (squash) November 1, 2026 18:23
@kixelated
kixelated added this pull request to the merge queue Nov 2, 2026
Merged via the queue into main with commit 54f0c35 Nov 2, 2026
7 checks passed
@kixelated
kixelated deleted the quest/m1/max-age-defaults branch November 2, 2026 08:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant