Release v0.10.3 with idempotent Ctrl-C shutdown - #15
Merged
Conversation
Context: Ctrl-C could return an error before managed-process cleanup when native watch backends rejected redundant teardown of overlapping recursive and literal targets. Decision: Quiesce watcher callbacks and let the watcher backend drop as one unit. Keep process cleanup running if a watcher adapter nevertheless reports a shutdown error. Cover the failure with a mock that emits the observed missing-watch error and with explicit shutdown documentation. Alternatives considered: Rejecting or normalizing overlapping client patterns would move backend correctness into configuration. Reversing individual unwatch calls would remain dependent on platform-specific traversal and removal order. Tradeoffs: The watcher object remains allocated until the engine scope ends, after managed processes stop. Shutdown callbacks are suppressed during that short interval. Architectural impact: The runtime interpreter now treats watcher teardown as a recoverable edge failure and preserves the core shutdown invariant that all remaining cleanup effects execute. This is a PATCH-level bug fix.
Context: The Ctrl-C watcher teardown fix is a backwards-compatible correction to the 0.10 series and is ready for an artifact release. Decision: Advance Cargo metadata to 0.10.3 and move the complete unreleased fix into the dated 0.10.3 changelog section while restoring an empty Unreleased section. Alternatives considered: A minor release would overstate a bug fix that adds no new capability. Leaving the fix unreleased would not deliver the corrected installed binary requested by the user. Tradeoffs: This patch release depends on protected PR CI, post-merge main CI, and both tag-triggered platform artifact workflows before it is complete. Architectural impact: No additional runtime boundary changes are introduced here; this commit aligns version metadata, release notes, and the intended v0.10.3 tag.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
v0.10.3Design
Native watcher backends can share operating-system registrations between a
recursive directory watch and literal files beneath it. Devloop now treats
dropping the complete watcher as the idempotent shutdown operation instead of
unregistering each configured target. The runtime also continues to
stop_all_processesif a watcher adapter unexpectedly fails during teardown.The client configuration remains untouched: overlap and redundancy are valid
inputs that the supervisor must handle.
Validation
No watch was founderror failed before the fixand now reaches
stop_allplus a successful exitgcp-rust-blog-publicworkflow: Ctrl-C exited0; server, tunnel,Chromium, guardian, and ports
8080,9222, and20241were cleancargo fmt --checkcargo test— 170 unit tests and seven integration/smoke tests passedcargo clippy --all-targets --all-features -- -D warningsRUST_LOG=info ./scripts/ci-smoke.shcargo build --release --locked --binsgit diff --checkReview
0y3g