docs(quest): groom m1 against dev and keep only what the merge needs - #3564
Conversation
Audit every m1 quest against the dev tree. Delete the ones that already landed, rewrite stale premises in place, and move everything that does not break a published API or gate the merge into m2, including anything that targets a 0.0.x crate. The wildcard line and the duration marker move up into m1 so the announce API breaks once. The archive line adopts the newer recording format and gains a draft-rewrite quest ahead of the store. Closes #2895: the announce/unannounce split plus dynamic() is the readiness gate; the convention is documented by the announce quests. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The line arrived with the main-into-dev merge and has failed the Check job on dev since 2026-09-05. This is the formatter's own output, nothing reworded. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Completing this quest now closes #2152, even though lines 33-34 and the new quest/m2/libmoq-fetch.md explicitly leave fetch_group and the video output-format work outstanding as another half of the same catch-up. Because that m2 quest has only a Related link, its work will be left with an already-closed tracker. Move the closing edge to a questline encompassing both pieces, or otherwise keep #2152 open until both are complete. quest/CLAUDE.mdL51-L53
ℹ️ 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".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| Work that builds on dev-only code but breaks nothing and gates nothing (the | ||
| io_uring stream sessions, the perf line, the QUIC worker and quiche quests) | ||
| also sits here and starts on `main` after the dev merge, as does anything | ||
| targeting a `0.0.x` crate. |
There was a problem hiding this comment.
Encode the dev merge in Required sections
This policy says these quests cannot start until the dev merge, but the moved quests and questlines have no Required dependency on /quest/m1/merge-dev.md. For example, the new #2318 plan needs final() from that merge, while the perf and uring-tcp READMEs repeat the same start-after-merge condition, yet quest ready will report all of them ready now because it reads only Required. Record the merge blocker on every affected executable quest so the readiness tooling enforces the stated ordering. quest/CLAUDE.mdL75-L76
Useful? React with 👍 / 👎.
| The API surface is already pattern-shaped when this starts: | ||
| [#3190](/quest/m1/3190-align-origin-broadcast-creation-naming-across-language.md) | ||
| and [js-announce](/quest/m1/js-announce.md) make `dynamic(pattern, route)` | ||
| take a `moq_net::path::Pattern` in every language and refuse anything that is | ||
| not prefix-shaped. This quest lifts that refusal; no signature changes. |
There was a problem hiding this comment.
Declare announce-shape prerequisites as blockers
Advertise explicitly assumes that #3190 and JS announce have already made the API pattern-shaped, but both are listed only under Related, so quest ready quest/m1/wildcard/advertise.md reports this merge-gating quest ready before either prerequisite lands. Starting it in that state means implementing against signatures this plan says do not exist yet. Put both prerequisite quests in a Required section rather than relying on README ordering. quest/CLAUDE.mdL75-L76
Useful? React with 👍 / 👎.
| extend `stream_codes_round_trip` (`error.rs:691`). Mirror in | ||
| `js/net/src/error.ts` `StreamCode` (:88-92 still carries the 0x20 values) | ||
| and in `js/net/src/ietf/error.ts`. |
There was a problem hiding this comment.
Keep lite-only miss codes out of the IETF registry
The proposed codes are deliberately allocated from moq-lite's private 48-63 range, so they must continue to fall through js/net/src/ietf/error.ts::sharedStreamCode as unshared. Telling the implementation to mirror them in that IETF registry conflicts with the next bullet's requirement that IETF emit INTERNAL_ERROR; adding them to its allowlist would instead send unassigned lite codes to IETF peers. Remove this instruction, or specify only negative IETF coverage.
Useful? React with 👍 / 👎.
| Branch these quests from dev, not main. Several were rescoped during the | ||
| 2026-08 grooming because dev already moved under them; reconcile each plan | ||
| with the current dev tree before starting. | ||
| Branch these quests from `dev`, not `main`. A quest stays here only if it |
There was a problem hiding this comment.
Exempt main-bound merge gates from the dev rule
The blanket instruction to branch every m1 quest from dev contradicts this same index's duration-marker entry, whose quest says it lands on main, and the wildcard questline, whose Resolve and Demand children are additive and may also land on main. Following the README would unnecessarily put those changes into the dev merge despite the repository rule reserving dev for published API breaks. Qualify this instruction so main-bound merge gates and additive children retain their intended base.
AGENTS.md reference: AGENTS.md:L83-L85
Useful? React with 👍 / 👎.
Every m2 quest that builds on dev-only code requires the merge, Advertise requires #3190's Pattern parameter, the lite-only miss codes stay out of the IETF registry, and the m1 branch rule exempts main-bound merge gates. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 020b29f23e
ℹ️ 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".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| - [#3190](/quest/m1/3190-align-origin-broadcast-creation-naming-across-language.md) - every native binding on that surface | ||
| - [JS announce](/quest/m1/js-announce.md) - js/net on that surface | ||
| - [Gap discontinuity](/quest/m1/gap-discontinuity.md) - so the lost-reset regression does not ship | ||
| - [Advertise](/quest/m1/wildcard/advertise.md) - so `dynamic(prefix, route)` takes a path pattern before the announce API is published |
There was a problem hiding this comment.
Encode every m1 merge prerequisite
Once these five entries finish, quest ready reports the merge quest ready even if other work that this commit says must precede the merge, such as Group overflow, #3060, #3187, or Binding rate control, remains unfinished. Priority ordering is not a dependency, so require every true merge gate here or move work that may remain unfinished out of m1. quest/CLAUDE.mdL75-L76
Useful? React with 👍 / 👎.
| reservation's `consumer()`, feeds it through `moq_mux::rate::Control` (the | ||
| policy moq-video uses, moved there by #2848), and applies each target with |
There was a problem hiding this comment.
Split the audio binding work from its post-merge prerequisite
This quest now requires moq_mux::rate::Control, explicitly moved there by #2848, and promises that the audio binding follows the Rust producer. However, #2848 was moved to m2 and is blocked on merge-dev, while this m1 quest is ready and branches from dev. An executor cannot complete the newly expanded audio behavior in the specified order; keep the reserve-only audio behavior in this quest and split following into post-merge work, or encode a viable prerequisite order. quest/CLAUDE.mdL75-L76
Useful? React with 👍 / 👎.
Grooms
quest/m1against the currentdevtree. Every m1 quest was audited (six parallel passes citing file:line), then reconciled through a decision interview with the maintainer.What changed
Rule. m1 now holds only what must land on
devbefore the merge: breaking published API or wire changes, and the merge gates. Anything identical onmain, additive, or targeting a0.0.xcrate (moq-uring, moq-sock, moq-bench, moq-transcode, moq-audio, moq-video, moq-nvenc) moves to m2 and starts onmainafter the merge. The m1, m2, and root READMEs say so.Deleted (done or moot). abort-on-drop (#3472), archive/timeline (Segmenter, Deferred, Window timeline all landed), archive/cutover (merged into archive/catalog), hls-playable (#3240; the days-old-broadcast soak moved into merge-dev), json-compressed-delta-test-timeout (485 ms on Bun 1.3.13, does not reproduce), 2895 readiness gate (closed by this PR: an exact-path subscribe before the tracks exist gets NotFound or parks behind
dynamic()), dart-announce (folded into #3190, dart is on dev), ladder/transmit (merged into ladder/controller), hls-closed-publisher-500 (merged into hls-cache-miss-codes).Moved m2 -> m1. wildcard/ (so
dynamic(pattern, route)breaks once with the announce rework; Advertise gates the merge, Resolve and Demand are additive), duration-marker (gap-discontinuity requires it).Moved m1 -> m2. uring-tcp/, perf/, ladder/, 2924, 2964, quic/2296, quic/2853, js-subscribe-abandonment, ietf-uni-stream-types, control-timeout-code, 2991, 2075, 933, 3056, 3126, 2318, 2848.
New. archive/format (the HANG Recording section adopts the 08-30 design: per-segment timeline objects, per-track
.info, versioned envelope, listing bootstrap, per-track omission; rationale: S3 cannot append), m2/reuseport-group (split out of 2964), m2/libmoq-fetch (split out of 2152).Settled decisions written into the quests. moq-lite stream codes 0x31 CONTROL_TIMEOUT and 0x32 GROUP_TOO_LARGE plus cache-miss codes in the 48-63 range; no broadcast epoch anywhere (HLS sibling identity becomes "a replaced publisher restarts its rendition"); the catalog
archiveentry subsumestimeline; rate control moves tomoq_mux::rate::Controland the Opus producer follows its grant; the unified JSConnectionis a refcounted handle; config provenance keeps the registry and the CLI > env > file flip; moq-token retires after one deprecation release; the Go generator fork is carried and tagged;Workers::split(self)returns a group handle that owns every socket; per-track sync handles for the A/V clock, adopted in #3517 before it merges; 1 ms stays the contiguity tolerance.Text corrections. About thirty quests cited renamed symbols, dead paths, wrong PRs, or blockers that had cleared (
Origin->Hop,test_linger_reconnect_splices,#park,moq_native::Reconnect, #679's PR is #2921 not #2875, #3375 already merged, the quiche CID hook exists in web-transport-quiche 0.7 and the code comment is stale). Sizes re-estimated where the inherited[S]was import boilerplate.Also. dev's Check job has failed since 2026-09-05 because the main-into-dev merge brought an
io_uringmention intors/CLAUDE.mdthat the markdown formatter escapes; this PR commits the formatter's output for that one word so CI can pass (no wording change). Five pre-existingquest checkerrors in m0 (links to quests deleted by #3531 and #3410, a duplicate README entry) are fixed inline since they failjust checkon this branch.Public API and wire impact
None. Quest documents only.
Follow-ups
questlabel to Make every blocking Go operation cancellable with context.Context #3188 (already has it) and remove it from Add an atomic readiness gate for Origin broadcasts #2895 once this merges.quinn/module; profiles citing quiche describe the non-default path.🤖 Generated with Claude Code
(written by Claude Fable 5.1)