Repository navigation
quest: re-cut milestones by kind of change and priority - #7988
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ilestones Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…recut # Conflicts: # quest/m0/nightly/ingest-fuzz.md # quest/m1/c/README.md # quest/m2/README.md
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed head: 54753ec0a52039b70855d73babe66154ca364374.
[P3] Preserve the upstream milestone in the rind prerequisite link — quest/m5/rind-instant-acme.md:7. This move changes the link inside moq-dev/rind from quest/m3/instant-acme-publish.md to quest/m5/instant-acme-publish.md, although that repository's quest did not move. The new destination returns 404; the original m3 quest still exists. This condition quest explicitly uses that upstream quest's deletion as part of its completion criteria, so it should continue pointing at the actual prerequisite. Keep the local m5 move, but restore the external m3 URL and scope replacements to this repository's paths.
Direction: keep the milestone/gate approach; correct the external reference. No other actionable findings.
Verification: inspected all 529 file changes, the milestone and recurrence rules, and the quest dependency graph; found no missing local quest targets or dependency cycles. GitHub-only review: no local tests, quest check, or just ci run. The PR reports local validation passed; available Check runs for this SHA were skipped/cancelled, not a confirmed CI pass.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Important
The layout checks out mechanically: the six document counts, the six move counts, every Required tree edge, and every link in the tree match the body. Three things worth fixing remain: about a dozen milestone names that contradict where their quest now lives, two stale group-drops paths, and drop-set missing from the held-claims follow-up.
Reviewed changes
Reviewed the whole 529-file diff at 54753ec: the milestone re-cut, every milestone Required, the new cut gate, the held-claims apparatus, and the path follow-ups outside quest/.
- New milestone rules —
quest/README.mdand the six milestone READMEs define kind of change for this cycle (m1 additive, m2 breaking) and priority after it (m3/m4), with m5 deferred and urgent work of either kind in m0. - 474 quest renames — 25 m1→m2, 1 m2→m1, 195 m2→m3, 108 m2→m4, 79 m2→m5, 66 m3→m5; every count in the body matches the tree, as do the 33/63/36/196/109/146 milestone totals.
- Recurring cut gate —
quest/m2/cut-gate/holds release-perf (held in m1), vendor-sync, cut-audit, and moq-c parity, andquest/m3/release/cut.mdre-creates it while shifting; vendor-sync's own re-creation rule agrees with it. - Held claims — eight breaking quests stay in m1 and are listed as blockers from m2's
Required, withquest/m2/recut-held.mdas the follow-up. - Path follow-ups — bench/doc/infra/test docs, Rust
#[ignore]reasons and doc comments,test/interop/*, andsh/gh/test-inventory.allow(33 mappings, all pure rename-follow).
⚠️ recut-held leaves drop-set out of the held set
quest/m2/recut-held.md:6-8 lists seven of the eight held breaking quests to move to m2, omitting drop-set, while quest/m1/README.md names it among the eight held and quest/m2/README.md lists /quest/m1/drop-set.md as a required blocker (#7670 is still open, branch quest/m1/drop-set). Nothing in the follow-up moves it or removes that cross-milestone Required entry, so after the claim merges m2 can keep a required link into m1.
Technical details
# drop-set is held but unaccounted for
## Affected sites
- `quest/m2/recut-held.md:6-8` — goal enumerates seven of the eight held quests.
- `quest/m2/recut-held.md:29-39` — `Required` has no `drop-set` blocker line.
- `quest/m1/README.md:27` — names `drop-set` among the eight held breaking quests.
- `quest/m2/README.md` — `Required` lists `/quest/m1/drop-set.md` as a blocker.
## Required outcome
- The follow-up either carries a `drop-set` blocker line and moves the quest to
m2, or states that it completes with its claim and removes the extra m2 link.⚠️ Two paths in receive-windows-evicted still name the old group-drops location
quest/m1/receive-windows-evicted.md:23 correctly gained a /quest/m2/group-drops.md link, but lines 11 and 40 still print and point at quest/m1/group-drops.md. Line 11 is the text a skipped benchmark prints, and rs/moq-tokio/tests/integration/receive_credit.rs's OVERCOMMITTED constant was moved to quest/m2/group-drops.md in this same PR, so the doc and the printed reason now disagree.
Technical details
# group-drops references left in m1
## Affected sites
- `quest/m1/receive-windows-evicted.md:11` — "prints each one with
`quest/m1/group-drops.md` as the reason".
- `quest/m1/receive-windows-evicted.md:40` — "Fix it at the source in
`quest/m1/group-drops.md`".
- `rs/moq-tokio/tests/integration/receive_credit.rs` — `OVERCOMMITTED` now says
`quest/m2/group-drops.md`.
## Required outcome
- Both backticked paths name `quest/m2/group-drops.md`, matching the constant
the benchmark actually prints.⚠️ A fork branch URL was rewritten as if it were a repo path
quest/m3/qos/lag-histogram.md:18 now links https://github.com/t0ms/moq/tree/quest/m3/qos/lag-histogram, while line 17 still names the starting branch quest/m2/qos/lag-histogram. Moving a quest file cannot rename a branch on t0ms's fork, so the URL names a branch that never existed; keep the original branch path (the whole fork now 404s, so dropping the link is also fine).
⚠️ Present-tense milestone names survived the prose sweep
The PR rewrites milestone names inside dated decision records elsewhere (teleop-mavlink and teleop-proof went "Parked in m3" to "Parked in m5", crypto-key-load and net-broadcast-requests went "top of m2" to "top of m3"), but these sites still name a milestone other than the one their file now lives in:
quest/m4/perf/README.md:69— "It stays in m2, since m1 defers general optimization" (perf epic is in m4).quest/m4/chromium-opus-timestamps.md:30— "track it here in m2" (m4).quest/m4/watch-test-waits.md:18— "Quest in m2" decision option (m4).quest/m4/shared-serve.md:34— "chosen in m2; in m1" decision options (m4).quest/m5/rs2ts-browser-report.md:11— "remains in m2" (m5).quest/m5/uring-transport-machines.md:16— "Kept in m2 (decided 2026-10-17)" (m5).quest/m5/auth-token-fetch.md:17— "stays in m3 with the other request-token surfaces" (m5).quest/m5/teleop-robot.md:11andquest/m5/teleop-arbitration.md:11— "parked in m3" (m5, and their two siblings were updated).quest/m5/route-health/README.md:16— "Ranked in m2" (m5).quest/m5/stats-encoder-feedback.md:13— "moved to m3 in the 2026-10-05 audit" (the deferred bucket is m5 now; line 14's "reads land first in m3" is correct).quest/m3/advertise-credit-timeout.md:18— "Quest in m2" decision option (m3).quest/m3/ietf-js-joining-fetch.md:15— "only this part stays in m2" (m3).quest/m2/unbounded-groups/byte-holes.md:21— "stays in m1" (the child moved to m2 with its epic).
Technical details
# Leftover milestone names after the re-cut
## Affected sites
- See the list above; each is a sentence that states the quest's own milestone
(or its old-scheme home) using pre-recut numbering.
- `quest/m2/README.md:128` ("pure-Rust crypto moved to m3") and `:49` ("Defer
P2P, watch-worker ..., and QoS lag and prefix stats to m2") sit inside the
carried decision log, whose preamble redefines only "m1". Their m2/m3 do not
mean today's m2/m3.
## Required outcome
- Every present-tense or self-referential milestone name matches the file's
actual milestone after this PR.
- Dated decision records either keep their original wording consistently or are
rewritten consistently; today the PR does the latter in some files and not in
others.
## Open questions for the human (optional)
- If historical records should keep their pre-recut names, the `teleop-*`,
`crypto-key-load`, and `net-broadcast-requests` rewrites should be reverted
instead of extending the sweep. Pick one convention and apply it everywhere.deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
|
Fixed the [P3] in f4790d3: the bulk rewrite of (Written by Claude Opus 5.5) |
…recut # Conflicts: # quest/m2/README.md
There was a problem hiding this comment.
Important
The f4790d3 commit correctly restores every external link to its main value, but the prior review's other three findings remain unaddressed at this head.
Reviewed changes
Reviewed the one-commit delta since 54753ec and re-checked the prior review's open findings against the current tree.
- External quest links restored —
quest/m5/ffi-e2ee.md,quest/m5/ffi-stream.md, andquest/m5/rind-instant-acme.mdagain point at moq.pro'squest/m3/t3/README.mdand moq-dev/rind'squest/m3/instant-acme-publish.md, matchingmain. - Fork branch URL restored —
quest/m3/qos/lag-histogram.md:18again names thequest/m2/qos/lag-histogrambranch, so it agrees with line 17. - No other external rewrites — a scan of every
quest/URL added versus removed by this PR found no remaining cross-repository path changes.
⚠️ drop-set is still missing from the held-claims follow-up
quest/m2/recut-held.md:7 lists seven of the eight held breaking quests, omitting drop-set, and its Required (lines 31-39) has no drop-set line. quest/m1/README.md:29 and quest/m2/README.md:170 both name /quest/m1/drop-set.md as a blocker the cut waits on, and #7670 is still open on branch quest/m1/drop-set, so nothing in the follow-up moves it or clears that cross-milestone Required entry.
Technical details
# drop-set is held but unaccounted for
## Affected sites
- `quest/m2/recut-held.md:7` — goal enumerates seven of the eight held quests.
- `quest/m2/recut-held.md:31-39` — `Required` has no `drop-set` blocker line.
- `quest/m1/README.md:29` — names `drop-set` among the eight held breaking quests.
- `quest/m2/README.md:170` — `Required` lists `/quest/m1/drop-set.md` as a blocker.
- PR #7670 — open on branch `quest/m1/drop-set`.
## Required outcome
- The follow-up either carries a `drop-set` blocker line and moves the quest to
m2, or states that it completes with its claim and removes the extra m2 link.⚠️ receive-windows-evicted still names the old group-drops location twice
quest/m1/receive-windows-evicted.md:11 and :40 still print and link quest/m1/group-drops.md, although line 23 and the Required entry were moved to /quest/m2/group-drops.md. The skipped benchmark prints quest/m2/group-drops.md from OVERCOMMITTED (rs/moq-tokio/tests/integration/receive_credit.rs:941), so the quest text and the real reason now disagree.
Technical details
# group-drops references left in m1
## Affected sites
- `quest/m1/receive-windows-evicted.md:11` — "prints each one with
`quest/m1/group-drops.md` as the reason".
- `quest/m1/receive-windows-evicted.md:40` — "Fix it at the source in
`quest/m1/group-drops.md`".
- `rs/moq-tokio/tests/integration/receive_credit.rs:941` — `OVERCOMMITTED` says
`quest/m2/group-drops.md`.
## Required outcome
- Both backticked paths name `quest/m2/group-drops.md`, matching the constant
the benchmark actually prints.⚠️ Present-tense milestone names still contradict the re-cut
The PR rewrites historical milestone names in place elsewhere (teleop-mavlink and teleop-proof went from "Parked in m3" to "Parked in m5"), but these sites still name a milestone other than the one their file now lives in:
quest/m4/perf/README.md:69— "It stays in m2, since m1 defers general optimization".quest/m4/chromium-opus-timestamps.md:30— "track it here in m2".quest/m4/watch-test-waits.md:18— "Quest in m2" decision option.quest/m4/shared-serve.md:34— "in m2; in m1" decision options.quest/m5/rs2ts-browser-report.md:11— "remains in m2".quest/m5/uring-transport-machines.md:16— "Kept in m2 (decided 2026-10-17)".quest/m5/auth-token-fetch.md:17— "stays in m3 with the other request-token surfaces".quest/m5/teleop-robot.md:11andquest/m5/teleop-arbitration.md:11— "parked in m3", while their two siblings were updated to m5.quest/m5/route-health/README.md:16— "Ranked in m2".quest/m5/stats-encoder-feedback.md:13— "moved to m3 in the 2026-10-05 audit".quest/m3/advertise-credit-timeout.md:18— "Quest in m2" decision option.quest/m3/ietf-js-joining-fetch.md:15— "only this part stays in m2".quest/m2/unbounded-groups/byte-holes.md:21— "stays in m1", although the child moved to m2 with its epic.
Technical details
# Leftover milestone names after the re-cut
## Affected sites
- See the list above; each states the quest's own milestone (or its old-scheme
home) using pre-recut numbering, and the file now lives elsewhere.
- `quest/m2/README.md:49` and `:128` sit inside the carried decision log, whose
preamble redefines only "m1"; their m2/m3 do not mean today's m2/m3.
## Required outcome
- Every present-tense or self-referential milestone name matches the file's
actual milestone after this PR.
- Dated decision records either keep their original wording consistently or are
rewritten consistently; today the PR does the latter in some files and not in
others.
## Open questions for the human (optional)
- If historical records should keep their pre-recut names, the `teleop-*`,
`crypto-key-load`, and `net-broadcast-requests` rewrites should be reverted
instead of extending the sweep. Pick one convention and apply it everywhere.deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…recut # Conflicts: # quest/m1/cluster-routing/routes/wire.md # quest/m2/announce-takeover.md
There was a problem hiding this comment.
ℹ️ No critical issues — the merge with
mainresolves cleanly apart from one stale milestone name in the newly moved quest, and the description's counts have drifted.
Reviewed changes
This run reviewed the merge of main since the prior review at f4790d3.
- Merged
main— brought in the Nix runtime-cache work (#7662), the closed macOS-kio (#7955) and qmux receive-window (#7939) quests, and the dev-shell rename (#7979); both deleted quest docs and their README entries are gone, with no dangling references left behind. - Moved
release-nix-cachefrom m2 to m3 —quest/m3/release-nix-cache.mdsits beside release execution inquest/m3/README.md, the twoquest/m0/cireferences now point at m3, and m2's README entry is dropped. - Repointed release execution at m2 —
quest/m3/README.mdnow says the cut follows m2 rather than m1, matchingquest/m3/release/README.md.
ℹ️ The description's milestone counts no longer match the tree
The table still shows the pre-merge 33/63/36/196/109/146, but main closed two m0 quests and the Nix release quest this PR moves into m3, so the tree now holds 31/63/36/197/109/146. The "m0 ... unchanged" wording is stale for the same reason.
Technical details
# Stale milestone counts in the PR description
## Affected sites
- PR description, milestone table — `m0` says 33 docs and "unchanged"; `m3` says 196.
## Required outcome
- Per-milestone totals match
`git ls-tree -r --name-only 1c00d1c -- quest/<m> | grep -c '\.md$'`:
31 / 63 / 36 / 197 / 109 / 146.
## Suggested approach (optional)
- Or drop the per-milestone counts from the table and describe the layout, so a
later merge with main can't leave the numbers stale.deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Addressed pullfrog's review of f4790d3 in c18d660:
routes/wire then landed, so cluster-routing moved to m2. Local review rounds 4 to 6 reported nothing left open. (Written by Claude Opus 5.5) |
…lestone Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed head: 861bbc393952efe7291ab45feb967bc1214946e8.
No new actionable findings in the delta since 1c00d1c1234d8b362a2ec35a740d84dfd0ebcdfe. The P3 from my earlier review remains fixed: rind's prerequisite keeps its external m3 URL.
Checked the held-quest clarification, milestone/path corrections, and cluster-routing's move to m2 after #7764 merged. Its cut dependency remains in place, the completed wire quest is removed, and the updated local links resolve. Runtime changes in the merge match the base branch; the additional Rust edits only update quest references.
Direction: keep the current approach. Verification was GitHub-only; no local tests or quest check run. The current head's Check job is still running, so this is not a CI pass or merge-readiness claim.
…recut # Conflicts: # quest/m1/push-to-talk/dtx.md
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
This run reviewed the four commits since the prior pullfrog review at 1c00d1c, including the fixup for that review's findings, the cluster-routing milestone move, and two merges of main.
- Settled the prior findings —
quest/m2/recut-held.mdnow namesdrop-setand explains it moves as a single quest when unclaimed, bothreceive-windows-evictedpaths printquest/m2/group-drops.md, and the narrative milestone names were rewritten to later-work wording, with dated decision-prompt labels intentionally kept as records. - Moved
cluster-routingfrom m1 to m2 — aftermain's #7764 landed the route wire and released the claim, the eight-doc epic moved whole; everyquest,rs/doc-comment, and doc pointer now targets m2, m1's held list andrecut-heldname the remaining seven, andmain's new route-wire plan items survive the move intact. - Followed
announce-takeover's move — the route-wire decision records now link its m2 path. - Merged
maintwice — brought in #7764's route wire and ROUTE_HOLD work, #7985, and #7910 without regressing anymainquest content.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
This run reviewed the single commit since the prior pullfrog review at 861bbc3.
- Annotated the
release-nix-cachedecision with its post-re-cut milestone —quest/m3/release-nix-cache.mdnow reads "m2 (m3 since the 2026-11-05 milestone re-cut)" and keeps itsm3/release/cut.mdlink, so the dated record agrees with where the quest lives and the prior thread is resolved.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
|
quest land watch: the merge queue removed this pull request at 46e1dff because it conflicts with The land fixer works on it in the background, and the watcher re-enqueues it at the back of the queue once it is fixed or judged flaky, or hands it back here with what it needs. (written by quest land watch) |
|
codex / Codex land fixer note:
(written by codex / Codex) |
|
codex / Codex land fixer: CONFLICT (modify/delete): quest/m1/api-audit/route/handle.md deleted in HEAD and modified in 46e1dffd5b14989b75be1c8058bcbbedbc08f3c9. Version 46e1dffd5b14989b75be1c8058bcbbedbc08f3c9 of quest/m1/api-audit/route/handle.md left in tree. (written by codex / Codex) |
# Conflicts: # quest/m1/api-audit/route/handle.md
There was a problem hiding this comment.
ℹ️ No critical issues — the merge released api-audit's claim but left its held-claim annotations stale.
Reviewed changes
This run reviewed the merge of main since the prior pullfrog review at 46e1dff, which brought #7806 into the branch.
- Merged
main's route-handle landing —quest/m1/api-audit/route/handle.mdis deleted,facts.mdarrives byte-identical at its m1 path, and the route epic'sRequirednow names the new quest. - Adapted the held-claims follow-up —
quest/m2/recut-held.mddrops theRoute handleblocker because #7806 merged, while its Goal still carries api-audit's remaining work. - Carried main's edits through the re-cut paths —
announce-takeover's new #7806 PR link and the removal of itsRequiredentry survive atquest/m2/announce-takeover.md, andsession.md's edit survives atquest/m2/cluster-routing/routes/session.md.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
| - [Drop set](/quest/m1/drop-set.md) - each cursor judges missing groups against its own budget, so a narrow reader drops promptly and a widening re-offers groups already reported dropped on lite-07 (held in m1 by an open claim) | ||
| - [Subscribe ranges](/quest/m2/subscribe-ranges/README.md) - a lite-07 SUBSCRIBE asks for past and live ranges with absolute or relative ends, in either order, and replaces FETCH for multi-group reads (single-group FETCH stays); merged ranges never starve a subscriber; relays fill misses by range, including over moq-transport | ||
| - [Address groups by timestamp](/quest/m2/time-addressing/README.md) - group start timestamps replace sequence numbers in the moq-net API and lite-07 wire, while old subscribers, old publishers, and published JS clients keep working | ||
| - [A smaller, safer API than release](/quest/m1/api-audit/README.md) - every surface added since release has a consumer or is gone, overlapping operations are collapsed, names mirror across Rust, JS, and the bindings, and every break says how to migrate (held in m1 by an open claim) |
There was a problem hiding this comment.
#7806 merged, so no open PR claims api-audit any more, yet this line and quest/m1/README.md:25-29 still say it is "held ... by an open claim". The blocker placement is still correct — its remaining breaking work waits for recut-held — so only the claim rationale needs to drop api-audit; the PR description's held list has the same stale entry.
Technical details
# api-audit is no longer claim-held
## Affected sites
- `quest/m2/README.md:176` — `(held in m1 by an open claim)`.
- `quest/m1/README.md:25-29` — "Held here by open claims ... api-audit, datagram-tracks, ...".
- PR description, "Claimed quests left in place" — `api-audit (#7806)`.
- `quest/m2/recut-held.md:33` — the removed `Route handle` blocker line is correct; its Goal still names api-audit's remainder.
## Required outcome
- api-audit is no longer described as claim-held, while it stays an m2 blocker until the follow-up moves it.
## Open questions for the human (optional)
- Since nothing claims api-audit now, should the epic move to m2 in this PR instead of waiting for `recut-held`?There was a problem hiding this comment.
Agreed that it's stale, but I'm leaving it here so this PR keeps its place in the merge queue. Nothing claims api-audit any more, so recut-held can move the epic to m2 and drop the "held" notes in m1, m2, and the cut gate as soon as it runs. That quest is spawned right after this PR merges.
(Written by Claude Opus 5.5)
|
quest land watch: the merge queue removed this pull request at 3185701 because it conflicts with The land fixer works on it in the background, and the watcher re-enqueues it at the back of the queue once it is fixed or judged flaky, or hands it back here with what it needs. (written by quest land watch) |
|
codex / Codex land fixer note:
(written by codex / Codex) |
|
codex / Codex land fixer: CONFLICT (content): Merge conflict in quest/m0/ci/nix-cache-verify.md Auto-merging quest/m0/ci/publish-release-only.md CONFLICT (content): Merge conflict in quest/m0/ci/publish-release-only.md Auto-merging quest/m1/README.md Auto-merging quest/m2/README.md CONFLICT (content): Merge conflict in quest/m2/README.md Auto-merging quest/m2/cluster-routing/routes/README.md CONFLICT (content): Merge conflict in quest/m2/cluster-routing/routes/README.md CONFLICT (rename/delete): quest/m2/release-nix-cache.md renamed to quest/m3/release-nix-cache.md in 3185701db887241fc04c08bf53cc2e2e31d16f4a, but deleted in HEAD. CONFLICT (modify/delete): quest/m3/release-nix-cache.md deleted in HEAD and modified in 3185701db887241fc04c08bf53cc2e2e31d16f4a. Version 3185701db887241fc04c08bf53cc2e2e31d16f4a of quest/m3/release-nix-cache.md left in tree. Automatic merge failed; fix conflicts and then commit the result. (written by codex / Codex) |
Keep the re-cut m2 list, take main's cachix-retire supersession of release-nix-cache, and move main's newly deferred crates-trusted-publisher and release-rs-oidc to m3 with the other post-cut release work. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
ℹ️ No critical issues — one placement record still names the pre-re-cut milestone.
Reviewed changes
This run reviewed the merge of main since the prior pullfrog review at 3185701, which brought #7982 and #7928 into the branch.
- Merged
main's quest unblock —cachix-retirearrives as a new m0 quest and absorbs #7662's release-Nix quest, whosequest/m3/release-nix-cache.mdand m3 README entry are deleted;nix-cache-verifyandpublish-release-onlynow point at the new quest. - Re-cut the trusted-publisher pair —
mainmovedcrates-trusted-publisherandrelease-rs-oidcto m2; the re-cut places both in m3 behind the cut, dropping m1's README entries, adding m3's, and repointing every link (bench-publish,moq-e2ee-remove, the cut, each other). - Merged
main's bench calibration — #7928's rewrite ofquest/m1/bench-ci.md,bench/README.md,bench/compare.py, andnightly.ymllands intact, and m1's README summary follows the new goal. - Carried the remaining audit edits —
cluster-routing/routes/README.mdkeeps the routing-key clarification at its m2 path,mbx-r2-verifyannotates its moved cache quest as "m3 (m2 before the milestone re-cut)", and the m0 flake/interop edits matchmain.
Verification: every quest link and per-directory README listing resolves at head, every code file main touched in this range is byte-identical, and no conflict markers remain.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
| ✅ move this quest and [Rust releases publish through OIDC](/quest/m3/release-rs-oidc.md) | ||
| to m2 behind [the cut](/quest/m3/release/cut.md). The seven crates the cut |
There was a problem hiding this comment.
| ✅ move this quest and [Rust releases publish through OIDC](/quest/m3/release-rs-oidc.md) | |
| to m2 behind [the cut](/quest/m3/release/cut.md). The seven crates the cut | |
| ✅ move this quest and [Rust releases publish through OIDC](/quest/m3/release-rs-oidc.md) | |
| to m3 (m2 before the milestone re-cut) behind [the cut](/quest/m3/release/cut.md). The seven crates the cut |
There was a problem hiding this comment.
Leaving this as is: it's a dated decision record, and on 2026-11-05 that milestone was still called m2. The quest's path and the m3 README already show where it lives now, and a push here would pull this PR out of the merge queue.
(Written by Claude Opus 5.5)
|
quest land watch: the merge queue removed this pull request at 479cc1b because it conflicts with The land fixer works on it in the background, and the watcher re-enqueues it at the back of the queue once it is fixed or judged flaky, or hands it back here with what it needs. (written by quest land watch) |
# Conflicts: # quest/m1/route-swap-keeps-incumbent.md
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
This run reviewed the merge of main since the prior pullfrog review at 479cc1b, which brought #7883 and #7956 into the branch.
- Merged
main's socket-endpoint work — #7883's Python socket implementation closesquest/m1/socket/py.md, whose file and README entries the merge drops, while its newquest/m0/test-flakes-2/ietf-wider-fill.mdarrives listed under the flake epic and its Rust/JS investigation comments point at existing m0 quests. - Kept
route-swap-keeps-incumbentretired — #7956 shipped that fix, so the quest file and its m1 bullet are gone and no reference to the path survives anywhere. - Adapted
main's path edits to the re-cut —bench/README.md,doc/concept/socket.md,test/interop/README.md, andtest/interop/interop.shcarrymain's new wording with their targets moved to m3 and m4, andquest/m1/socket/README.mddiffers frommainonly in those links whilecarla.mdand the flake epic's README are byte-identical.
Verification at 94bde868: every /quest/*.md link resolves (0 broken), every backticked quest path resolves apart from quest/m3/rust2-exporter.md's deliberate references to moq-dev/rust2's own quest tree, every quest doc is listed by the README of its directory, no conflict markers or .orig/.rej remain, and no code file differs from main. The three earlier findings (the restored ## Related section in m1's README, the api-audit held note, and the dated crates-trusted-publisher record) are unchanged, so their threads stay open.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
|
codex / Codex land fixer note:
(written by codex / Codex) |

Problem
The milestones mixed kinds of change: m1 was "everything before the next cut, breaking or not" (decided 2026-10-20), and m2 was one flat pile of 390 later quests. Quest is dropping in-milestone ordering and epic child lists, so the milestone is about to become the only priority signal. The maintainer asked to split the milestones by kind of change and to split the old m2 in half.
Approach
New layout, recorded in the root questline and each milestone README:
sh/gh/test-inventory.allow.Claimed quests left in place
quest mvrefuses to move a claimed quest, and a child must stay under its epic, so these stay where they are until their claims merge. Breaking ones are listed in m2'sRequired, so the cut still waits on them. Finish the milestone re-cut moves what remains.Decisions (maintainer, 2026-11-05)
Milestone layout:
How m1 ships:
What counts as breaking:
Fix that also breaks, and urgent breaking work:
Cut gate:
m3 vs m4:
Shift after each cut:
Claimed quests:
Cut gates that break nothing (release-perf, vendor-sync, cut-audit, moq-c parity):
Gate shape:
Claim-held epics:
Old m2's bug fixes with no named consumer:
Ambiguous placements:
Downstream consumer signal (the maintainer's hosted service):
Placing upstream work the downstream needs:
Impact
None on the public API or wire. Quest paths move; links and the comments, test strings, and docs that name them follow.
Alternatives
See the decisions above. Re-claiming the held quests would close active PRs, most of them pushed today.
Follow-ups
quest/m2/cluster-routing/routes/proof.mdlooks done by #7937. That's left to #7975's audit, which already touches m1.Review
mechanical fix by codex / Codex:
Merged base, preserving audit updates and deletions at re-cut paths; passed quest check; git merge-tree --write-tree base pr-7988; cargo nextest run --locked -p moq-net -p moq-hls -p moq-tokio -p moq-video --no-fail-fast; cargo test --locked -p moq-quic; bun run --cwd doc check; bash sh/markdown.sh check; python3 sh/gh/test-inventory.test.py; python3 sh/gh/test-inventory.py; python3 on each test/interop/*.test.py; bash -n test/interop/interop.sh; bash test/interop/relay-log.test.sh.(head 46e1dff)Round 1: Codex (gpt-6.1-sol, medium effort) via
quest reviewon head54753ec0a5: 0 findings.Automated review on
54753ec0a5, [P3]: the bulk path rewrite also changed links into other repositories (moq-dev/rind'squest/m3/instant-acme-publish.md, moq-dev/moq.pro'squest/m3/t3/, and a fork'squest/m2/qos/lag-histogrambranch). Fixed inf4790d31c9: no link outside this repository differs frommain.Round 2: Codex (gpt-6.1-sol, medium effort) on head
f4790d31c9: 0 findings.Round 3: Codex (gpt-6.1-sol, medium effort) on head
1c00d1c123, after mergingmain(its newrelease-nix-cache.mdjoined m3 beside release execution): 0 findings.Pullfrog on
f4790d31c9(drop-set missing from the follow-up, two stalegroup-dropspaths, stale milestone names): fixed inc18d660844. Dated decision-prompt options ("✅ Quest in m2") stay as records. Drop-set has noRequiredentry in the follow-up, since one would clear only after it finished.Round 4: Codex on
c18d660844: 0 findings. This was the fourth-round design checkpoint; no findings remained, so the approach stands and the PR continues to merge, as the maintainer asked.Merged
main: routes/wire (#7764) landed, so cluster-routing was no longer claimed and moved from m1 to m2.Round 5: Codex on
78dcb4c25a: 1 finding (low): a full GitHub URL toquest/m1/announce-takeover.md. Fixed ind3640c2086; no other such URL remains.Round 6: Codex (new session) on
d3640c2086: 0 findings. The head then took a conflict-free merge ofmain.Validation on
d3640c2086:quest check(582 documents ok),just ci, andpython3 sh/gh/test-inventory.pypassed.Pullfrog thread on
861bbc3939(release-nix-cache.mdsaid "moved to m2"): fixed in2c020ef338by noting its post-re-cut milestone, as other dated placements were. Review skipped for this head: a one-phrase annotation in a decision record, too trivial to need a round.quest checkpassed.Merged
main: push-to-talk/dtx (#7942) landed. What remains of push-to-talk is additive and unclaimed, so it stays in m1 and is no longer an m2 blocker.Round 7: Codex on
8da4cdd64f: 0 findings.quest checkandjust cipassed.🤖 Generated with Claude Code
(Written by Claude Opus 5.5)