fix: pin the gate harness across an incompatible requirement - #196
Merged
Merged
Conversation
- a caret-incompatible soothfast bump made the reference bench embed the old harness, and the delta was reported as the project's regression - the merge-base worktree is disposable, so its own requirement is not worth respecting when it blocks the pin
- a reference the pin could not reach measures a different protocol, so its deltas are not the change's in either direction - the mark reaches the header, the verdict line the PR comment tails, and the triage artifact - a run served from the run cache carries the mark of the run that measured it
Verdenroz
force-pushed
the
fix/harness-pin
branch
from
September 12, 2026 00:14
7bb2e1d to
f7c5a19
Compare
Contributor
soothfast gate |
# Conflicts: # docs/gating.md
Verdenroz
added a commit
that referenced
this pull request
Sep 12, 2026
## What changed - Froze the `## Unreleased` heading in `CHANGELOG.md` to `## 0.3.2 - 2026-09-11` and wrote its Overview and Upgrade notes. - Bumped `[workspace.package] version` and the eight `[workspace.dependencies]` requirements from `0.3.1` to `0.3.2`. - Regenerated `Cargo.lock`. Only version lines moved; no dependency was added, removed, or changed. - Bumped the version strings in `README.md` and `soothfast.toml`. ## Why 0.3.1 gave the action its `features` and regeneration inputs, so CI could be told once what a repository needs. A developer running the CLI by hand still repeated the same flags on every invocation, and two defects surfaced once adopters started bumping across versions. This release carries all three fixes: `soothfast.toml` holds the feature and package defaults, the gate stops letting a reference it could not pin decide a verdict quietly, and the changelog drops the bot's own regeneration commits instead of listing the paperwork as changes. Everything here is additive and opt-in. A repository on `soothfast = "0.3"` picks it up without touching its manifest. ## How was this tested - `cargo fmt --all -- --check`: clean. - `cargo clippy --workspace --all-targets -- -D warnings`: clean. - `cargo test --workspace --no-fail-fast`: 817 passed, 4 ignored, 1 failed. The failure is `invoke::tests::a_plain_directory_in_the_repo_is_not_a_worktree_root`, which asserts the workspace root is not a linked git worktree. It fails from any linked-worktree checkout and passes from a plain one, which is what CI uses. Confirmed by running the same built test binary from both. - `cargo check --workspace` after the bump: clean, all ten crates resolve at `0.3.2`. - Read the frozen section against `git log v0.3.1..master`: it lists #195, #196 and #199, and none of the four soothfast-bot regeneration commits. Those exclusions are the filter from #199 running against real history. - `make gate BASE=master` was not run. This commit changes no measured code. ## Checklist - [ ] `make check` passes (fmt, clippy `-D warnings`, `cargo test --workspace`) - [ ] `make gate BASE=master` passes, or any intentional cost change is explained above - [ ] Tests added/updated for new behavior (not required for docs/CI-only changes) - [ ] Public API items have `///` doc comments - [x] No new dependency, or its justification is included above (see [Dependency Policy](../CONTRIBUTING.md#dependency-policy)) - [x] Docs (`README.md`, `docs/`, `soothfast:bind`/`soothfast:claim` markers) updated if behavior changed
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.
What changed
versionrequirements whencargo update --preciseis refused, then retried the pin. Only the requirement string moves, sofeatures,optionalanddefault-featuresbeside it survive.sync_harness_versionsto return aHarnessSyncoutcome instead of alwaysOk(())..soothfast/triage/harness-mismatch.txt. The verdict line is what the PR comment'stailcarries.--allow-harness-change, which waives comparison regressions on a harness-mismatched run. Checked claims hold HEAD against its own declared numbers and are not waived.docs/gating.md.Fixes #194
Why
A
--against-refgate builds the merge-base's bench binary from the merge-base's lockfile. When a pull request bumps soothfast across a caret boundary,cargo update -p soothfast@0.2.0 --precise 0.3.1is refused by the merge-base's ownsoothfast = "0.2.0"requirement. The pinning code printed aWARNand carried on, so the reference embedded the old harness while HEAD embedded the new one, and the harness delta was reported as the project's regression. That looked like about +5% callgrind instructions on a 30K-instruction bench, under a red verdict, with the only trace scrolled off the top of the log.The worktree is a throwaway checkout, so its requirement is not worth respecting when it blocks the pin. Where the pin still cannot land, the run says so rather than deciding quietly. A reference measured with a different instrument is not evidence in either direction, so a quiet pass would be as wrong as the red verdict.
Merge ordering
The
docs/gating.mdsection here inserts immediately before## Ratchets, which is the same anchor another open branch uses. Both additions stand alone, so whichever lands second keeps both sections. Nothing else in this branch overlaps.How was this tested
cargo test -p cargo-soothfast: 215 passed, 1 failed. The failure isinvoke::tests::a_plain_directory_in_the_repo_is_not_a_worktree_root, which asserts the workspace root is not a linked worktree. It fails from any linked-worktree checkout and passes from a plain one, on this branch and onmaster.cargo fmt --all -- --check: clean.cargo clippy --workspace --all-targets -- -D warnings: clean.harness_mismatches, cargo's refusal text told apart from a network failure, all three requirement shapes, the path-dependency and non-dependency-table skips, trailing-comment preservation, the waiver conditions, both verdict texts, the run-cache round trip, and the triage note.cargo test --workspaceandmake gate BASE=masterwere not run. The change touches no measured function in the three bench crates.Checklist
make checkpasses (fmt, clippy-D warnings,cargo test --workspace)make gate BASE=masterpasses, or any intentional cost change is explained above///doc commentsREADME.md,docs/,soothfast:bind/soothfast:claimmarkers) updated if behavior changed