Skip to content

Release v0.10.3 with idempotent Ctrl-C shutdown - #15

Merged
pasunboneleve merged 3 commits into
mainfrom
fix/0y3g-graceful-watcher-shutdown
Aug 26, 2026
Merged

Release v0.10.3 with idempotent Ctrl-C shutdown#15
pasunboneleve merged 3 commits into
mainfrom
fix/0y3g-graceful-watcher-shutdown

Conversation

@pasunboneleve

Copy link
Copy Markdown
Owner

Summary

  • make Ctrl-C shutdown tolerate redundant and overlapping watch targets
  • preserve managed-process cleanup when watcher teardown reports an error
  • suppress filesystem callbacks after shutdown begins
  • release the fix as v0.10.3

Design

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_processes if a watcher adapter unexpectedly fails during teardown.

The client configuration remains untouched: overlap and redundancy are valid
inputs that the supervisor must handle.

Validation

  • red/green mock: the observed No watch was found error failed before the fix
    and now reaches stop_all plus a successful exit
  • unchanged gcp-rust-blog-public workflow: Ctrl-C exited 0; server, tunnel,
    Chromium, guardian, and ports 8080, 9222, and 20241 were clean
  • cargo fmt --check
  • cargo test — 170 unit tests and seven integration/smoke tests passed
  • cargo clippy --all-targets --all-features -- -D warnings
  • RUST_LOG=info ./scripts/ci-smoke.sh
  • cargo build --release --locked --bins
  • release notes extraction, shell syntax, embedded docs, and git diff --check

Review

  • Roborev job 219 using Grok: PASS, no issues found
  • Kata: 0y3g

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.
@pasunboneleve
pasunboneleve merged commit 7f3de56 into main Aug 26, 2026
2 checks passed
@pasunboneleve
pasunboneleve deleted the fix/0y3g-graceful-watcher-shutdown branch August 26, 2026 12:22
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