Release devloop 0.10.4 - #16
Merged
Merged
Conversation
Context: Two devloop sessions could target the same managed server port. The second session repeatedly restarted its failed child and kept the watcher alive, leaving an unhealthy supervisor on the occupied address. Decision: Treat a loopback HTTP readiness endpoint as the named process's owned startup address. Check bind availability before launch, classify a post-launch bind race with the same typed error, suppress startup restart effects, clean up the attempted session, and exit non-zero with one filter-independent diagnostic. Preserve concurrent sessions on OS-assigned or otherwise distinct ports. Alternatives considered: A repository singleton lock would prevent legitimate concurrent worktrees. Adding a second bind-address field would duplicate the existing process readiness endpoint and permit contradictory configuration. Tradeoffs: Only loopback HTTP readiness probes provide an address devloop can own and diagnose generically. State-key and remote readiness probes retain their existing process-exit and timeout errors. Architectural impact: Runtime workflow effects now carry startup versus runtime origin. That origin controls whether a failed first-readiness attempt may apply the configured restart policy, while later recoverable workflows keep their existing restart behavior. Runtime failures are written and printed independently of tracing filters.
Context: The managed-port collision fix is validated and ready for a patch release. Decision: Move the unreleased fix into the 2026-09-01 version section and align Cargo package metadata with release 0.10.4. Alternatives considered: A minor release was unnecessary because the change repairs startup failure handling without adding a new command or configuration contract. Tradeoffs: This release documents only the net collision fix; implementation and test detail remain in the preceding commit and pull request. Architectural impact: No further runtime boundaries change in this commit. It synchronizes the changelog, package version, release-notes input, and intended v0.10.4 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
Failure behavior
The colliding session exits non-zero with one diagnostic naming the managed process and address. It does not enter an automatic restart loop, and the existing listener remains untouched. Non-collision workflow failures and later runtime workflows retain degraded-mode recovery and configured restart behavior.
Validation
cargo fmt --checkcargo test— 169 unit tests plus 12 integration tests passedcargo clippy --all-targets --all-features -- -D warningsenv -u RUST_LOG ./scripts/ci-smoke.shcargo test --test port_collisions -- --nocapture— IPv4 collision, IPv6 collision, and distinct OS-assigned port concurrency passed./scripts/release-notes-from-changelog.sh 0.10.4 pasunboneleve/devloopcargo run --quiet --bin devloop -- --version—devloop 0.10.4cargo run --quiet --bin devloop -- --helpRoborev jobs 242 and 245 completed and were accounted for in Kata 6z5h.