fix(release): exclude Codex automation from contributor thanks

This commit is contained in:
morluto committed 2026-10-14 19:06:36 +08:00
1 parent a32b4b6ac5
commit efe0923914
3 files changed
+20 -7

No files matched your search

+3 -3
View File
@@ -68,9 +68,9 @@ closing-issue reporters. Grouping preserves all those credits in one line.
When Highlights, detailed entries or migrations reference the same work,
put its thanks in one of those entries, not all of them. Include issue links.
Direct-commit bullets carry the commit link and known human credit.
Exclude GitHub bots and known agent accounts. REA's observed Anthropic and
Cursor co-author trailers resolve to `@claude` and `@cursoragent` with GitHub
type `User`; the credit policy excludes them while retaining their metadata.
Exclude GitHub bots and known agent accounts. REA's observed Anthropic, Cursor
and Codex co-author trailers resolve to `@claude`, `@cursoragent` and `@codex`
with GitHub type `User`; the credit policy excludes them while retaining their metadata.
At the REA maintainer's request, omit `@morluto` self-thanks while preserving
authorship in the inventory. Other human contributors remain eligible.
Use explicit GitHub links for cross-repository references to avoid ambiguous
+2 -2
View File
@@ -98,9 +98,9 @@ export async function readReleaseHistory(run, base, target) {
return { base: baseSha, target: targetSha, commits };
}
// REA history maps Anthropic and Cursor's agent trailers to ordinary User actors.
// GitHub maps these coding-agent trailers to ordinary User actors.
// Keep those source identities in the inventory while excluding automation credit.
const AGENT_ACCOUNTS = new Set(["claude", "cursoragent"]);
const AGENT_ACCOUNTS = new Set(["claude", "cursoragent", "codex"]);
// REA's maintainer requested external-contributor thanks without self-credit.
const MAINTAINER_ACCOUNTS = new Set(["morluto"]);
const human = (value) =>
+15 -2
View File
@@ -106,6 +106,7 @@ beforeAll(async () => {
author("platformbot", "Bot"),
author("claude"),
author("cursoragent"),
author("codex"),
author("morluto"),
]),
associatedPullRequests: page([]),
@@ -218,18 +219,30 @@ it("inventories side branches and paginated credits, then checks and renders syn
const f = await fixture();
const inventory = z
.object({
commits: z.array(z.object({ sha: z.string() })),
commits: z.array(
z.object({
sha: z.string(),
authors: z.array(
z.object({ user: z.object({ login: z.string() }).nullable() }),
),
}),
),
pullRequests: z.array(z.object({ number: z.number() })),
})
.parse(JSON.parse(await readFile(f.manifest, "utf8")));
expect(inventory.commits).toHaveLength(3);
expect(
inventory.commits.flatMap(({ authors }) =>
authors.map(({ user }) => user?.login),
),
).toEqual(expect.arrayContaining(["claude", "cursoragent", "codex"]));
expect(inventory.pullRequests.map((pr) => pr.number)).toEqual([101]);
expect(f.record).toContain(
"Thanks @alice, @bob, @reporter, @second-reporter.",
);
expect(f.record).toContain("Thanks @dana.");
expect(f.record).not.toMatch(
/@(?:merger|automation|platformbot|claude|cursoragent|morluto)/u,
/@(?:merger|automation|platformbot|claude|cursoragent|codex|morluto)/u,
);
const body = join(f.directory, "body.md");
await writeFile(