Skip to content

test(drill): retarget two mutations and check they apply in just check - #4358

Merged
kixelated merged 3 commits into
mainfrom
fix/drill-sensitivity-mutations
Sep 28, 2026
Merged

kixelated merged 3 commits into
mainfrom
fix/drill-sensitivity-mutations

Conversation

@kixelated

@kixelated kixelated commented Sep 28, 2026 •

Copy link
Copy Markdown
Collaborator

Completes and deletes quest/m1/drill-sensitivity.md.

What

The nightly just test drill-sensitivity has failed on main since 09-26 (run). Two patches in test/drill/mutations/ no longer applied after recent changes to rs/moq-net/src/lite/subscriber.rs:

Mutation Stale context Fault (unchanged)
relay-withdraws-lost-publisher AnnouncedRoute::new gained a wake argument and new fields AnnouncedRoute.dynamic wrapped in ManuallyDrop, so a route outlives its session
subscriber-leaks-broadcasts PrefixRun replaced its announce id fields with AnnounceDecoder PrefixRun.announced wrapped in ManuallyDrop, so a dead session keeps its routes and sources

Both patches are regenerated against the current tree with the same fault. The subscriber-leaks-broadcasts description now says dropping Announced closes its sources rather than aborting them, matching SourceGuard.

Catching it earlier

sensitivity.sh --apply-only dry-runs every mutation against the checkout and builds nothing. just check runs it whenever rs/ or test/drill/ changes (and in check --all), so a change that moves a mutation's target fails its own PR instead of the next nightly. Verified it fails on the old subscriber-leaks-broadcasts patch and passes on the new one.

Verification

  • just test drill-sensitivity: 3 of 3 drills fail when their recovery behavior is removed, all baselines green.
  • just test drill-sensitivity --apply-only: 3 of 3 mutations apply.
  • quest check and just check pass.

Public API / wire impact

None. Test and tooling only.

(Written by Opus 5.5)

🤖 Generated with Claude Code

The nightly drill-sensitivity job failed because recent changes to
rs/moq-net/src/lite/subscriber.rs moved the context both patches anchor on:
AnnouncedRoute::new gained a wake argument and PrefixRun dropped its announce
id fields for the AnnounceDecoder. Regenerate both patches against the current
tree with the same fault each injects.

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

chatgpt-codex-connector Bot commented Sep 28, 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-28T19:01:34.690860Z b13554a 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

Copy link
Copy Markdown
Collaborator Author

MERGE

Positive improvement: yes. Nightly just test drill-sensitivity has been red since 09-26 because these two mutation patches no longer applied after lite/subscriber.rs moved. Retargeting them restores the drill harness without changing production code.

Worth the complexity: yes. Diff is two regenerated patches (+15/−17), same ManuallyDrop faults as before. No new abstraction, no public API or wire impact.

Different approach: regenerating the patches against the current tree is the right fix for mutation tests. Rewriting the drills or stubbing application would hide the same drop-semantics regressions these mutations exist to catch.

Checked against head e0bdefb6:

  • relay-withdraws-lost-publisher correctly tracks AnnouncedRoute::new(..., wake) and still wraps dynamic so a lost publisher's route outlives its session.
  • subscriber-leaks-broadcasts correctly tracks PrefixRun's AnnounceDecoder field and still wraps announced so a dead session keeps routes/sources; comment update (close vs abort) matches SourceGuard.

Author reports 3/3 drills fail when recovery is removed and baselines green. Merge to unstick the nightly.

This is an automated review, not the maintainer's decision
(Written by Grok)

@coderabbitai

coderabbitai Bot commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

Warning

Review limit reached

Next included review available in 4 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 79c99986-491a-4946-ab74-d6d1c42470d9

📥 Commits

Reviewing files that changed from the base of the PR and between e0bdefb and b13554a.

📒 Files selected for processing (7)
  • justfile
  • quest/m1/README.md
  • quest/m1/drill-sensitivity.md
  • test/drill/README.md
  • test/drill/mutations/relay-withdraws-lost-publisher.patch
  • test/drill/mutations/subscriber-leaks-broadcasts.patch
  • test/drill/sensitivity.sh

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: fd3dee2c-e473-4ed7-90b3-d4f7989d1d92

📥 Commits

Reviewing files that changed from the base of the PR and between ca47661 and e0bdefb.

📒 Files selected for processing (2)
  • test/drill/mutations/relay-withdraws-lost-publisher.patch
  • test/drill/mutations/subscriber-leaks-broadcasts.patch

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 mutation patches wrap AnnouncedRoute.dynamic and PrefixRun.announced in ManuallyDrop. The AnnouncedRoute constructor and new PrefixRun instances initialize these wrapped values. Comments in the subscriber mutation patch describe the route and source guard behavior when a session ends.

Priority: ⬇️ Low

Merge Risk: ⚪ Minimal · up to e0bde

No actionable merge risk is established for these test-only changes; they are mergeable after normal checks.

Architecture Summary

Architecture risk: 🔵 Low · up to e0bde

The change affects 1 system.

Changed systems: test

Architecture concerns
No architecture-level concerns identified.

Review details

Systems and components

  • observed — test (service) was modified; 2 changed files map to changed impact.

Before / after behavior

  • observed — Modified behavior in test/drill/mutations/relay-withdraws-lost-publisher.patch: AnnouncedRoute.dynamic changes from Dynamic to ManuallyDrop<Dynamic>, so dropping the route no longer drops the handle that retracts it.
  • observed — Modified behavior in test/drill/mutations/relay-withdraws-lost-publisher.patch: AnnouncedRoute::new now wraps the incoming Dynamic in ManuallyDrop when storing it.
  • observed — Modified behavior in test/drill/mutations/subscriber-leaks-broadcasts.patch: The patch’s explanatory comments now say that dropping a session retracts and closes its routes and source guards, and that wrapping Announced in ManuallyDrop keeps them alive after the session ends.
  • observed — Modified behavior in test/drill/mutations/subscriber-leaks-broadcasts.patch: PrefixRun.announced changes from Announced to ManuallyDrop<Announced>, so dropping a PrefixRun no longer drops the collection.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
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…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly identifies the two main changes: retargeting two drill mutations and verifying that they apply during just check.
Description check ✅ Passed The description directly explains the mutation updates, preserved injected faults, verification results, and lack of public API impact.
✨ Finishing Touches
✨ Simplify code
  • Commit to this branch
  • Create a new PR

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.

Add --apply-only to sensitivity.sh, which dry-runs each mutation patch
against the checkout and builds nothing, and run it from just check whenever
Rust or test/drill changes. A change that moves the code a mutation targets
now fails its own PR instead of the next nightly.

Completes and deletes quest/m1/drill-sensitivity.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated kixelated changed the title test(drill): retarget two mutations at the current lite subscriber test(drill): retarget two mutations and check they apply in just check Sep 28, 2026
@kixelated

Copy link
Copy Markdown
Collaborator Author

Merge summary:

(Written by Opus 5.5)

@kixelated
kixelated merged commit b234a38 into main Sep 28, 2026
5 checks passed
@kixelated
kixelated deleted the fix/drill-sensitivity-mutations branch September 28, 2026 19:38
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