fix(changelog): report a public-dependency change once, and only claim a break when proven - #13
Merged
Merged
Conversation
upbqdn
force-pushed
the
fix/one-bullet-per-dep
branch
from
July 31, 2026 16:57
a60d043 to
f6ff952
Compare
…m a break when proven A dependency whose types are reachable in a crate's public API produced two `### Changed` bullets naming it: the `Migrated to ...` line every requirement change emits, and a second `Public dependency ...` line from the reachability join. A changelog entry is per change and written for the user adapting to it, so the curator had to merge the two by hand on every such dependency. Fold the note into the `Migrated to` line, keeping a standalone bullet only where no such line exists. The reachability join also reports requirement changes that classification cannot prove incompatible, and those were being counted as breaks: a widened version ceiling produced a `breaking` verdict and a nonzero exit, failing a consumer's CI on a change nothing shows to be incompatible. Split the two. A provably incompatible change counts toward the verdict and states the lockstep upgrade; an undecidable one is reported as a review item, excluded from the count, and asks for review instead of asserting a break. The JSON entries carry a `class` of `breaking` or `review` so a consumer can tell them apart, and `totals.public_dep_breaking` counts only the former. The human-readable section reports both counts and labels each row.
upbqdn
force-pushed
the
fix/one-bullet-per-dep
branch
from
July 31, 2026 16:59
f6ff952 to
f778486
Compare
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.
Motivation
Two problems in the public-dependency reporting path, both visible in the draft a curator
has to hand-edit.
One change produced two bullets. A dependency whose types are reachable in a crate's
public API got both the
Migrated to ...line that every requirement change emits and asecond
Public dependency ...line from the reachability join:A changelog entry is per change and written for the user adapting to it, so this left the
curator merging the two by hand every time.
An undecidable change was counted as a break. #11 added the
unknownclassificationfor a requirement that changed without moving the version it starts at, and routed it into
the reachability join so it would be surfaced. But the join's output feeds
totals.public_dep_breakingand the verdict, so widening a version ceiling(
>=0.1, <0.3->>=0.1, <0.4) producedverdict: breakingand a nonzero exit — failinga consumer's CI over a change nothing shows to be incompatible.
Solution
Fold the note into the
Migrated toline:And separate the two classes throughout:
totals.public_dep_breakingbreaking, exit 1classbreakingreviewSo an undecidable change is still surfaced — the point of routing it through the join —
without asserting a break or demanding a major version bump.
The new
classfield is documented in both the README's--jsonreference and the inlineschema
zc --helpprints, so neither describes a shape the tool no longer emits.Tests
bullet appearing beside it.
verdict: ok,public_dep_breaking: 0, aclass: reviewentry, the review wording in the foldedline, and the absence of any break assertion.
Migrated toline itself, which the fold rewrites inplace.
Rebased onto main now that #11 has landed; supersedes #12, which GitHub auto-closed when
its stacked base branch was deleted.
Ran locally:
shellcheck -S warning zc tests/run.sh,bash -n zc,bash -n tests/run.sh,tests/run.sh(137 tests, 0 failures).