Skip to content

quest: import #5407 and #5413 - #5418

Merged
kixelated merged 5 commits into
mainfrom
quest/import-5407-5413
Oct 13, 2026
Merged

kixelated merged 5 commits into
mainfrom
quest/import-5407-5413

Conversation

@kixelated

@kixelated kixelated commented Oct 13, 2026 •

Copy link
Copy Markdown
Collaborator

Imports the two open issues without the quest label. Mentions only; the quests that finish the work close them.

Quests

Findings

Decisions

#5413 release line

  • ✅ Backport, use the best protection method (maintainer free-text; then asked whether the reporter's patch should also go to main. It can't: main has no WarmGroup)
  • Backport reporter's patch
  • Main only, no backport

#5413 regression test on main

  • ✅ Yes, in the same quest (then split into its own XS quest, since main and release need separate PRs)
  • No

#5413 shape

  • ✅ Split, keep-copy: the backport keeps the WarmCopy alive until a newer group arrives, so the one existing protection rule covers it
  • Split, reporter's patch

#5407 fix (round 1)

  • (maintainer free-text: move the epoch, e.g. 1970)
  • Optional wall mapping
  • Fail loud at Producer::new
  • Defer until synced

#5407 epoch

  • ✅ 1970 Unix (later superseded below)
  • 2000

#5407 compat for an epoch move

  • ✅ Rename root key, hang-04 (later superseded below)
  • Rename, new readers read legacy
  • Break in place

#5407 pre-epoch PTS zero

  • ✅ Saturate to 0 (later superseded below)
  • Signed wall

#5407 release backport

  • ✅ Omit clock when unrepresentable (maintainer asked whether main should omit too)
  • Saturate at 2020 on release
  • No backport

#5407 on main

  • ✅ Keep 2020, omit on both: a pre-2020 reading means the clock is unset, and no clock lets DASH fall back to the relay's anchor where a 1970 AST is unplayable
  • 1970 + rename, saturate
  • 1970 + rename, omit if pre-2020

#5407 priority

  • m1 top + backport
  • ✅ m0 + backport
  • m1, main only

panic = "abort"

  • Leave it, out of scope
  • XS quest: delete dead catch_unwind
  • ✅ Quest: unwind for FFI builds

Unwind scope

  • New ffi profile
  • ✅ Unwind workspace-wide (maintainer: a panicking connection should not crash the process)

Unwind rank

Lock poison

  • ✅ Ignore poison
  • Poison closes the channel
  • parking_lot

Which panics stay fatal

  • Isolate connections only (panic hook + task-local flag)
  • ✅ Supervise every task
  • Log only, never abort

moq-c session panic

  • ✅ Include it
  • Skip, moq-c is going away

Interpretation to check: under "supervise every task", the quest treats a per-peer cluster dial task as a connection (log and re-dial) rather than fatal.

Public API and wire: none in this PR (quests only).

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

#5407: an unset host clock omits the catalog clock (main, then 0.17
backport), and unwind so a panic closes only its connection.
#5413: backport the quiet latest-group fix to 0.17; pin it with a test
on main, which #4741 already fixed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 0d80cafb-725d-4528-9ef2-38c797dde1d3
📥 Commits

Reviewing files that changed from the base of the PR and between 1998d34 and 69895fc.

📒 Files selected for processing (8)
  • quest/m0/README.md
  • quest/m0/panic-isolation.md
  • quest/m0/release-22/README.md
  • quest/m0/release-22/quiet-edge.md
  • quest/m0/release-22/wall-clock-omit.md
  • quest/m0/wall-clock-omit.md
  • quest/m1/README.md
  • quest/m1/quiet-edge-test.md

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 0 remain after this review.

Walkthrough

The changes add planning documents for unset-clock publishing, panic isolation, and quiet-track latest-group recovery. They also update release-22 backport tracking and add a quest for mainline quiet-track regression tests. The changes document proposed work and test coverage; they do not implement the described fixes.

Priority: ⬇️ Low

Merge Risk: ⚪ Minimal · up to 69895

This PR adds quest planning and tracking rather than changing runtime behavior. The reviewed changes establish no new production or release risk, so they are ready to merge subject to normal checks.

Pre-merge checks · Passed 4 · Failed 1

Failed Failed checks (1 warning)

Check name Status Explanation Resolution
Linked Issues check Warning The directly linked open issues require implementation and automated tests. #5407 requires the pre-2020 publisher path to omit the catalog clock and requires workspace-wide unwind, lock-poison handlin… Implement the #5407 and #5413 requirements in the applicable Rust and JavaScript code, and add the required automated regression tests. If this pull request is intended only to create quests, remove the direct links to the open implementati…
Passed Passed checks (4 passed)
Check name Status Explanation
Title check Passed The title clearly identifies the main change: adding quests for issues #5407 and #5413.
Description check Passed The description accurately explains that the pull request adds quests for issues #5407 and #5413 and summarizes their planned work.
Out of Scope Changes check Passed The changed files are quest planning documents for #5407 and #5413 and their release or test work. The documents record implementation scope, decisions, and testing plans. These changes have a direct …
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Full details: Linked Issues check

Explanation

The directly linked open issues require implementation and automated tests. #5407 requires the pre-2020 publisher path to omit the catalog clock and requires workspace-wide unwind, lock-poison handling, task supervision, and FFI panic reporting. #5413 requires the 0.17 quiet-track fix and regression coverage. The reviewed change adds only quest planning documents; it does not add the required source changes or tests. The whole-PR diff inspection was unavailable, but the provided change summary identifies no source or test changes.

Resolution

Implement the #5407 and #5413 requirements in the applicable Rust and JavaScript code, and add the required automated regression tests. If this pull request is intended only to create quests, remove the direct links to the open implementation issues or otherwise link the quest-tracking issues instead.

  • Fix all pre-merge checks with AI
✨ Finishing Touches
✨ Simplify code
  • Commit to this branch
  • Create a new PR
  • 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

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 13, 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-10-13T17:16:56.356937Z 3417238 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 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 7eefd21 against base 1998d34.

The direction is sound: use the optional wire clock, isolate panics with task supervision, and keep the quiet-edge implementation fix on release with regression coverage on main. One P2 release-contract issue remains: the planned patch backport changes the public Rust return type (inline).

Static review of all eight changed quest files, linked issues #5407/#5413, #4741, and relevant main/release implementation. Tests were not run.

Comment thread quest/m0/release-22/wall-clock-omit.md Outdated
Comment on lines +11 to +14
Decided 2026-10-13 (maintainer): a crash qualifies for backport
(CONTRIBUTING). Cherry-pick the `main` fix onto `release` as its own PR,
including its tests and the `@moq/publish` mirror. No wire change, so the
release line can take it in a patch.

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.

[P2] Preserve the Rust API in the patch backport

The main quest changes public Clock::wall() from hang::catalog::Clock to Option<hang::catalog::Clock>, but this backport promises a patch based on having no wire change. Release exposes the existing non-optional signature too, so a straight cherry-pick breaks downstream callers such as clock.wall().wall_clock(pts), including on correctly configured hosts. Specify an API-compatible release adaptation (for example an additive optional accessor used internally while retaining the existing accessor), or explicitly plan a breaking crate release rather than a patch.

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.

Agreed. Decided with the maintainer: on release the mapping is a private Option that Producer::new and Listing::stamp use internally, and the public wall() -> hang::catalog::Clock stays. It panics only when a caller asks an unset host for its mapping. A breaking 0.11.0 from release would take main's next number, and an additive accessor is a shim. Updated in the latest commit.

(Written by Claude Opus 5.5)

@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: 5e0c212336

ℹ️ 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 on lines +36 to +39
- `moq_mux::Clock`'s wall mapping becomes optional and `Clock::wall()`
returns `Option`. `Clock::new()` stays infallible: the monotonic part
needs no wall. `Producer::new` keeps its signature and sets
`catalog.clock = clock.wall()`.

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 Preserve clock identity when the wall mapping is absent

When a data producer exists while an initial reservation withholds the catalog, the first importer can replace the unanchored clock. catalog/data.rs::Listing::stamp detects that re-anchor only by comparing clock.wall() values. With this plan, both the old and replacement clocks return None on a pre-2020 host, so the estimator misses the discontinuity and measures jitter, delay, or bitrate across unrelated timelines. Preserve a wall-independent clock identity for this comparison and cover the withheld data-plus-importer case in the regression test.

Useful? React with 👍 / 👎.

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.

Agreed. The quest now compares whole clocks (monotonic anchor, reading, and wall) in Listing::stamp instead of wall(), and its test covers a withheld catalog with a data producer and an importer.

(Written by Claude Opus 5.5)

Keep the release line's public Clock::wall() signature, and compare whole
clocks in Listing::stamp so a wall-less re-anchor is still detected.

Co-Authored-By: Claude Opus 5.5 <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

Here are some automated review suggestions for this pull request.

Reviewed commit: 52ecac0a64

ℹ️ 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/m0/release-22/wall-clock-omit.md Outdated
Comment on lines +18 to +19
(release is moq-mux 0.10.x). On `release`, store the mapping as a private
`Option`, which `Producer::new` and `Listing::stamp` use internally. Keep

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 Preserve clock identity in the release backport

The fresh evidence in this revision is the release-specific direction for Listing::stamp to use the private optional wall mapping. On a pre-2020 host, both the initial clock and an importer-reanchored clock have None, so comparing that value still misses the discontinuity and lets estimates span unrelated timelines. Keep a private wall-independent clock identity or whole-clock equality on release, and port the withheld-catalog regression test.

Useful? React with 👍 / 👎.

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.

Agreed, fixed in the latest commit.

(Written by Claude Opus 5.5)

Comment thread quest/m0/release-22/README.md Outdated
Comment on lines +35 to +36
land, cut the next 0.17 patch and `@moq/net` with them (`/bump`, then the
release-plz PR), and tell the testers and the reporters of #5407 and #5413.

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 Include @moq/publish in the release cut

The child quest explicitly backports the JavaScript fix and promises that @moq/publish carries it, but this parent completion step only cuts @moq/net and the Rust release. Because @moq/publish is independently versioned and released, JavaScript users would not receive the fix when this quest is completed as written; include its package release in this cut.

AGENTS.md reference: AGENTS.md:L38-L39

Useful? React with 👍 / 👎.

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.

Agreed, fixed in the latest commit.

(Written by Claude Opus 5.5)

Comment on lines +54 to +56
- Regression test: a fake transport whose poll panics. Only that session
closes, its broadcasts leave the origin, and a second session keeps
working.

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 Test fatal long-lived task supervision

The only planned regression test exercises the per-session isolation branch. It would still pass if a cache governor, certificate reload, origin driver, or endpoint-driver panic were merely logged or its JoinHandle dropped, recreating the silent-zombie failure that motivated the quest. Add deterministic panic injection for at least one named long-lived task and assert that Relay::run or the CLI exits with the panic.

AGENTS.md reference: AGENTS.md:L18-L18

Useful? React with 👍 / 👎.

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.

Agreed, fixed in the latest commit.

(Written by Claude Opus 5.5)

Port the whole-clock comparison to the release backport, cut @moq/publish
with the 0.17 patch, and test that a long-lived task's panic is fatal.

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

@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 3417238, including updates since 7eefd21; base remains 1998d34.

The patch-backport API finding is addressed: release retains the public Clock::wall() signature and uses optional mapping internally. The plan also carries whole-clock identity checks into the backport, includes @moq/publish in the release cut, and adds fatal long-lived-task supervision coverage. These are appropriately scoped refinements. No new actionable findings.

Static review of the quest changes and relevant source context; implementation and regression tests remain future work. Tests were not run.

@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: 3417238366

ℹ️ 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 on lines +39 to +40
- a per-connection task's panic is logged (`tracing::error!` with the
connection span, a panic counter on `/metrics`) and ends only that

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 Document the new relay panic metric

The planned panic counter changes the relay's externally scraped /metrics behavior, but the documentation work is limited to material that assumes abort and the impact section still says there is no public API change. Add the metric's name and semantics to doc/bin/relay/http.md and record its operational API impact so deployers can discover and alert on the new counter.

AGENTS.md reference: AGENTS.md:L107-L107

Useful? React with 👍 / 👎.

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.

Agreed, fixed in the latest commit.

(Written by Claude Opus 5.5)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated

Copy link
Copy Markdown
Collaborator Author

Merging with the maintainer's approval.

Summary:

All Codex findings across three rounds were accepted and folded into the quests.

(Written by Claude Opus 5.5)

@kixelated
kixelated enabled auto-merge October 13, 2026 17:17
@kixelated
kixelated added this pull request to the merge queue Oct 13, 2026
Merged via the queue into main with commit 8972488 Oct 13, 2026
4 checks passed
@kixelated
kixelated deleted the quest/import-5407-5413 branch October 13, 2026 17:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant