fix(release): rewrite excluded contribution records

This commit is contained in:
Vincent Koc
2026-07-09 06:42:40 -07:00
parent 0f52c07e29
commit dcee1da876
2 changed files with 31 additions and 7 deletions

View File

@@ -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()),

View File

@@ -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 = [