Skip to content

ci: changelog lint fails on near-identical entries, the union-merge re-add after a reword - #1645

Merged
JayVDZ merged 2 commits into
mainfrom
claude/merge-prs-1638-1639-932h1p
Sep 8, 2026
Merged

ci: changelog lint fails on near-identical entries, the union-merge re-add after a reword#1645
JayVDZ merged 2 commits into
mainfrom
claude/merge-prs-1638-1639-932h1p

Conversation

@JayVDZ

@JayVDZ JayVDZ commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Description

scripts/Lint-Changelog.ps1 now hard-fails two entries in one subsection that are near-identical (three quarters or more of their words in common, Sørensen-Dice on word bags), and an [Unreleased] entry that close to one in a released section. This is the merge=union re-add after a reword: #1644 removed one that had reached main because, opening the same way as its rewrite, it only warned.

Why not simply promote the eight-word opening warning to an error: two of the three same-opening pairs in [Unreleased] today are genuinely different fixes to one component (dark theme vs light themes; two settings-save bugs), so that would break CI on main and keep producing false failures that could only be silenced by rewording. Word overlap separates the two cases with room: measured over the file's history, every genuinely different pair scores 0.56 or less, every union-merge re-add 0.63 or more, and the two resurrections that reached main 0.97 and 1.0. The threshold is 0.75, nearer the re-adds, because a re-add below it still warns on its opening while a genuine pair failing has no clean fix.

Replayed against history: the pre-#1644 file now fails on the 97% pair; the pre-#1201 file (0.14.0's seven re-adds) now fails on all six that the exact check found plus the two reworded ones (80%, 92%) it could not see. The current CHANGELOG.md passes. The opening-clause warning is unchanged. Entry shapes are computed once and a length-ratio bound skips impossible pairs, so the all-pairs comparison over 900 entries runs in about 6 s.

engineering/CLAUDE.md and the root CLAUDE.md describe the new rule where they described the old ones.

Type of change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update
  • Refactor (no functional change)
  • Other (describe below): CI lint rule

Testing

  • dotnet build JIM.sln succeeds with zero errors (not applicable: no .NET change)
  • dotnet test JIM.sln passes (not applicable: no .NET change)
  • New functionality has tests (unit, workflow, or integration as appropriate)
  • Manually tested in a local development environment

Pester: three new cases in scripts/Tests/Lint-Changelog.Tests.ps1, written first and failing on exit code before the change (near-identical pair in one subsection fails; same-opening-but-different pair still passes with the warning; near-identical to a shipped entry fails naming the version). 11 of 11 pass. Lint-Changelog.ps1 run against the current changelog and the two historical resurrections as described above.

Documentation

  • Public documentation updated (docs/); page(s):
  • Engineering reference documentation updated (engineering/) where a design/architecture doc would otherwise be stale
  • No documentation needed

Docs: n/a - developer tooling; no user-facing change or changelog entry.

Screenshots / output (if applicable)

ERROR:   CHANGELOG.md:32  entry is near-identical to the one at line 27 under 'Added' (97% of their words in common); they are one change written twice, so keep the version you want and delete the other (CHANGELOG.md merges by union, so a replaced entry can come back): "✨ Password Synchronisation history is now kept under its own retention period, ..."

Checklist

  • My commit messages are descriptive and reference the relevant Issue (if any)
  • My code follows the conventions in docs/DEVELOPER_GUIDE.md
  • User-facing text uses British English (en-GB)
  • This PR does not include security-sensitive information (real credentials, customer data, internal hostnames)

Additional context

Follow-up to #1644. A re-add reworded more heavily than any seen so far (below 0.75) degrades to the existing opening-clause warning rather than going unseen, provided it still opens the same way; that is the accepted gap.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Mw5XPncvpoN78zeazx5jgi


Generated by Claude Code

…e-add after a reword

Two entries in one subsection with three quarters or more of their words in
common, or an [Unreleased] entry that close to a released one, now fail the
build rather than warn. The eight-word opening check stays a warning because
two genuinely different fixes to one component open the same way; word
overlap separates them (0.56 at most in the file's history) from re-adds
(0.63 to 1.0). Replaying the two resurrections that reached main, this fails
both; the previous rules only warned on one and saw two of 0.14.0's seven
re-adds as different entries.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mw5XPncvpoN78zeazx5jgi
@JayVDZ
JayVDZ enabled auto-merge (squash) September 8, 2026 06:45
@JayVDZ
JayVDZ merged commit cea7376 into main Sep 8, 2026
17 checks passed
@JayVDZ
JayVDZ deleted the claude/merge-prs-1638-1639-932h1p branch September 8, 2026 07:15
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.

2 participants