From dcee1da876e683277c0092e8efdaf019e4dcc303 Mon Sep 17 00:00:00 2001 From: Vincent Koc <25068+vincentkoc@users.noreply.github.com> Date: Thu, 9 Jul 2026 06:42:40 -0700 Subject: [PATCH] fix(release): rewrite excluded contribution records --- .../scripts/verify-release-notes.mjs | 19 ++++++++++++------- test/scripts/verify-release-notes.test.ts | 19 +++++++++++++++++++ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/.agents/skills/openclaw-changelog-update/scripts/verify-release-notes.mjs b/.agents/skills/openclaw-changelog-update/scripts/verify-release-notes.mjs index e7062bcd3fae..bac1666d3a8a 100644 --- a/.agents/skills/openclaw-changelog-update/scripts/verify-release-notes.mjs +++ b/.agents/skills/openclaw-changelog-update/scripts/verify-release-notes.mjs @@ -452,7 +452,7 @@ export function subtractShippedPullRequests(source, baselines) { return { baselines: metadata, pullRequests: excluded }; } -function withoutExcludedContributionRecords(record, excludedReferences) { +export function withoutExcludedContributionRecords(record, excludedReferences) { if (excludedReferences.size === 0) { return record; } @@ -1672,16 +1672,21 @@ function main() { .join(", ")}`, ); } + const excludedRecordedReferences = new Set([ + ...source.revertedReferences, + ...shippedExclusions.pullRequests, + ]); + const effectiveRenderedRecord = options.writeLedger + ? withoutExcludedContributionRecords(renderedRecord, excludedRecordedReferences) + : renderedRecord; + const effectiveRenderedRecordReferences = + contributionRecordMetadataReferences(effectiveRenderedRecord); let priorRecord = { legacyIssues: new Map(), pullRequests: new Map() }; if (options.seedRef) { const seedChangelog = git(["show", `${options.seedRef}:CHANGELOG.md`]); const seedSection = sectionFor(seedChangelog, options.version); priorRecord = contributionRecordFor(seedSection); } - const excludedRecordedReferences = new Set([ - ...source.revertedReferences, - ...shippedExclusions.pullRequests, - ]); priorRecord = withoutExcludedContributionRecords(priorRecord, excludedRecordedReferences); const recordedReferences = contributionRecordMetadataReferences(priorRecord); const revertedRecordedReferences = recordedReferences.filter((number) => @@ -1696,12 +1701,12 @@ function main() { } const references = [...source.references]; appendReferences(references, noteReferences); - appendReferences(references, renderedRecordReferences); + appendReferences(references, effectiveRenderedRecordReferences); appendReferences(references, recordedReferences); let nodes = resolveReferences(references); const contamination = contaminatingPullRequestReferences({ noteReferences, - recordedReferences: renderedRecordReferences, + recordedReferences: effectiveRenderedRecordReferences, sourcePullRequests: source.pullRequests, sourceReferences: source.references, seededPullRequests: new Set(priorRecord.pullRequests.keys()), diff --git a/test/scripts/verify-release-notes.test.ts b/test/scripts/verify-release-notes.test.ts index 45dd00519d28..e29bf23c5efd 100644 --- a/test/scripts/verify-release-notes.test.ts +++ b/test/scripts/verify-release-notes.test.ts @@ -10,6 +10,7 @@ import { highlightCountError, releaseNoteReferences, subtractShippedPullRequests, + withoutExcludedContributionRecords, } from "../../.agents/skills/openclaw-changelog-update/scripts/verify-release-notes.mjs"; const verifier = resolve( @@ -128,6 +129,24 @@ describe("release-note verification", () => { expect([...result.pullRequests].toSorted((a, b) => a - b)).toEqual([1, 2, 4]); }); + it("removes rewrite-excluded references from an existing contribution record", () => { + const record = { + pullRequests: new Map([ + [1, { references: [2, 10], thanks: [] }], + [2, { references: [11], thanks: [] }], + ]), + legacyIssues: new Map([ + [10, { references: [], thanks: [] }], + [11, { references: [], thanks: [] }], + ]), + }; + + const filtered = withoutExcludedContributionRecords(record, new Set([2, 10])); + + expect([...filtered.pullRequests]).toEqual([[1, { references: [], thanks: [] }]]); + expect([...filtered.legacyIssues]).toEqual([[11, { references: [], thanks: [] }]]); + }); + it("does not treat the shipped baseline inventory as current release-note references", () => { const baselines = [{ ref: "v2026.6.11", count: 2, pullRequests: [1, 2] }]; const section = [