Skip to content

docs(quest): groom m1 against dev and keep only what the merge needs - #3564

Merged
kixelated merged 4 commits into
devfrom
claude/plan-quests-m1-m2-review-79b3e0
Sep 9, 2026
Merged

kixelated merged 4 commits into
devfrom
claude/plan-quests-m1-m2-review-79b3e0

Conversation

@kixelated

@kixelated kixelated commented Sep 9, 2026

Copy link
Copy Markdown
Collaborator

Grooms quest/m1 against the current dev tree. 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 dev before the merge: breaking published API or wire changes, and the merge gates. Anything identical on main, additive, or targeting a 0.0.x crate (moq-uring, moq-sock, moq-bench, moq-transcode, moq-audio, moq-video, moq-nvenc) moves to m2 and starts on main after 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 archive entry subsumes timeline; rate control moves to moq_mux::rate::Control and the Opus producer follows its grant; the unified JS Connection is 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_uring mention into rs/CLAUDE.md that the markdown formatter escapes; this PR commits the formatter's output for that one word so CI can pass (no wording change). Five pre-existing quest check errors in m0 (links to quests deleted by #3531 and #3410, a duplicate README entry) are fixed inline since they fail just check on this branch.

Public API and wire impact

None. Quest documents only.

Follow-ups

🤖 Generated with Claude Code

(written by Claude Fable 5.1)

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>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 9, 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-09T19:43:48.354916Z 020b29f 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 and others added 2 commits September 9, 2026 12:18
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>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

- [#2152](https://github.com/moq-dev/moq/issues/2152) - close this issue when the quest finishes

P2 Badge Keep #2152 open until its split quest finishes

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".

Comment thread quest/m2/README.md
Comment on lines +19 to +22
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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 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 👍 / 👎.

Comment thread quest/m1/wildcard/advertise.md Outdated
Comment on lines +14 to +18
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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 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 👍 / 👎.

Comment thread quest/m1/hls-cache-miss-codes.md Outdated
Comment on lines +46 to +48
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`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 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 👍 / 👎.

Comment thread quest/m1/README.md Outdated
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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 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>
@kixelated
kixelated merged commit fc5a606 into dev Sep 9, 2026
3 checks passed
@kixelated
kixelated deleted the claude/plan-quests-m1-m2-review-79b3e0 branch September 9, 2026 19:39

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 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".

Comment thread quest/m1/merge-dev.md
Comment on lines 31 to +34
- [#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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 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 👍 / 👎.

Comment on lines +63 to +64
reservation's `consumer()`, feeds it through `moq_mux::rate::Control` (the
policy moq-video uses, moved there by #2848), and applies each target with

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 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 👍 / 👎.

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