fix(ci): only moderate new issues/PRs, stop flagging normal content

This commit is contained in:
2026-08-16 19:11:02 +02:00
parent adf96ddac2
commit 3abead50e2
+25 -11
View File
@@ -3,14 +3,10 @@ name: AI Moderator
on: on:
issues: issues:
types: [opened] types: [opened]
issue_comment: pull_request:
types: [created] types: [opened]
pull_request_review_comment:
types: [created]
discussion: discussion:
types: [created] types: [created]
discussion_comment:
types: [created]
permissions: permissions:
issues: write issues: write
@@ -34,8 +30,8 @@ jobs:
const contributing = (() => { try { return fs.readFileSync('CONTRIBUTING.md', 'utf8'); } catch (e) { return ''; } })(); const contributing = (() => { try { return fs.readFileSync('CONTRIBUTING.md', 'utf8'); } catch (e) { return ''; } })();
const content = context.payload.issue?.body const content = context.payload.issue?.body
|| context.payload.pull_request?.body
|| context.payload.discussion?.body || context.payload.discussion?.body
|| context.payload.comment?.body
|| ''; || '';
if (!content.trim()) { if (!content.trim()) {
console.log('No content to analyze'); console.log('No content to analyze');
@@ -48,14 +44,26 @@ jobs:
return; return;
} }
const isComment = context.payload.comment !== undefined;
const isDiscussion = context.payload.discussion !== undefined; const isDiscussion = context.payload.discussion !== undefined;
const prompt = [ const prompt = [
'You are an AI moderator for the Antergos NeXT project.', 'You are an AI moderator for the Antergos NeXT project, an Artix-based',
'Linux distribution (dinit init, KDE Plasma).',
'Speak in first person. Be direct, confident, and have some snark.', 'Speak in first person. Be direct, confident, and have some snark.',
'The project has a playful but no-nonsense tone - match it.', 'The project has a playful but no-nonsense tone - match it.',
'', '',
'Your job is NOT to police opinions, bug reports, feature requests,',
'pull requests, technical questions, or constructive criticism.',
'Those are all normal and welcome. A normal PR description or issue',
'is NEVER a violation, no matter how long, detailed, or assertive it is.',
'',
'ONLY flag content that genuinely violates the Code of Conduct:',
'harassment, personal attacks, hate speech, slurs, spam, scams,',
'doxxing, malicious links, or threats.',
'',
'When in doubt, or if the content is merely technical, opinionated,',
'or critical of the project - violation is FALSE.',
'',
'If the content says it is a test or contains phrases like moderator', 'If the content says it is a test or contains phrases like moderator',
'or test or reply here, play along with the joke but still enforce the rules.', 'or test or reply here, play along with the joke but still enforce the rules.',
'', '',
@@ -77,6 +85,7 @@ jobs:
'', '',
'"action" options: "warn" (post warning), "hide" (minimize comment), "lock" (lock issue/discussion)', '"action" options: "warn" (post warning), "hide" (minimize comment), "lock" (lock issue/discussion)',
'For issues use "warn" or "lock". For comments you may use "hide".', 'For issues use "warn" or "lock". For comments you may use "hide".',
'Only use "lock" or "hide" for severe violations.',
'', '',
'Content:', 'Content:',
content content
@@ -117,6 +126,11 @@ jobs:
return; return;
} }
if (typeof decision.severity === 'number' && decision.severity < 4) {
console.log(`Low severity (${decision.severity}), no action taken`);
return;
}
const number = context.payload.issue?.number const number = context.payload.issue?.number
|| context.payload.pull_request?.number || context.payload.pull_request?.number
|| context.payload.discussion?.number; || context.payload.discussion?.number;
@@ -150,8 +164,8 @@ jobs:
}); });
} }
if (decision.action === 'hide' && isComment) { if (decision.action === 'hide') {
const commentId = context.payload.comment.node_id; const commentId = context.payload.comment?.node_id;
if (commentId) { if (commentId) {
await github.graphql(` await github.graphql(`
mutation { mutation {