From 0d36833688225fb87a70d48831b7ee0302432943 Mon Sep 17 00:00:00 2001 From: Letta Integration <300689746+letta-integration[bot]@users.noreply.github.com> Date: Thu, 13 Aug 2026 21:21:12 +0000 Subject: [PATCH] chore: deter self-promotional issue spam MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Require third-party relationship disclosure and an explicit anti-spam acknowledgment so unsolicited commercial posts can be rejected consistently. 👾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta Code Co-Authored-By: Big Chungus the 4th --- .github/ISSUE_TEMPLATE/bug_report.yml | 30 ++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.yml | 30 ++++++++++++++++ .github/workflows/issue-guard.yml | 42 ++++++++++++++++++---- AGENTS.md | 2 ++ 4 files changed, 97 insertions(+), 7 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 3627163c7f..496bab30de 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -9,6 +9,36 @@ body: > Please file your issue at **[letta-ai/letta-code](https://github.com/letta-ai/letta-code/issues)** instead! > This repository is for the core Letta server only. + - type: checkboxes + id: third-party-product + attributes: + label: Third-Party Product Disclosure + description: Select **exactly one** option. If this issue mentions a third-party product or service, disclose your relationship to it below. + options: + - label: This issue does not mention or promote a third-party product or service + - label: This issue mentions a third-party product or service, and I have disclosed my relationship to it below + validations: + required: true + + - type: input + id: third-party-relationship + attributes: + label: Relationship to Third-Party Product or Service + description: State whether you are the creator, employee, contractor, investor, affiliate, sponsor, paid promoter, user, or customer. State `No relationship` if you are unaffiliated, or `Not applicable` if no third-party product or service is mentioned. + placeholder: "e.g. Creator, employee, affiliate, no relationship, or not applicable" + validations: + required: true + + - type: checkboxes + id: anti-spam-acknowledgment + attributes: + label: Anti-Spam Acknowledgment + options: + - label: I understand that self-promotional spam, advertising, lead generation, affiliate or referral pitches, and deceptive disclosures will be reported to GitHub as spam, and the account will be blocked from this repository + required: true + validations: + required: true + - type: checkboxes id: ai-disclosure attributes: diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 20f0880186..b443f2ecbc 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -9,6 +9,36 @@ body: > Please file your issue at **[letta-ai/letta-code](https://github.com/letta-ai/letta-code/issues)** instead! > This repository is for the core Letta server only. + - type: checkboxes + id: third-party-product + attributes: + label: Third-Party Product Disclosure + description: Select **exactly one** option. If this issue mentions a third-party product or service, disclose your relationship to it below. + options: + - label: This issue does not mention or promote a third-party product or service + - label: This issue mentions a third-party product or service, and I have disclosed my relationship to it below + validations: + required: true + + - type: input + id: third-party-relationship + attributes: + label: Relationship to Third-Party Product or Service + description: State whether you are the creator, employee, contractor, investor, affiliate, sponsor, paid promoter, user, or customer. State `No relationship` if you are unaffiliated, or `Not applicable` if no third-party product or service is mentioned. + placeholder: "e.g. Creator, employee, affiliate, no relationship, or not applicable" + validations: + required: true + + - type: checkboxes + id: anti-spam-acknowledgment + attributes: + label: Anti-Spam Acknowledgment + options: + - label: I understand that self-promotional spam, advertising, lead generation, affiliate or referral pitches, and deceptive disclosures will be reported to GitHub as spam, and the account will be blocked from this repository + required: true + validations: + required: true + - type: checkboxes id: ai-disclosure attributes: diff --git a/.github/workflows/issue-guard.yml b/.github/workflows/issue-guard.yml index 324a5a5455..c707b56526 100644 --- a/.github/workflows/issue-guard.yml +++ b/.github/workflows/issue-guard.yml @@ -86,21 +86,47 @@ jobs: failures.push('Missing exact repository acknowledgment phrase'); } - // Check 2: AI disclosure checkbox (the required one: "I have read the AI Policy") + // Check 2: Anti-spam acknowledgment checkbox // YAML form checkboxes render as "- [x] text" when checked. + const antiSpamChecked = /- \[[xX]\] I understand that self-promotional spam, advertising, lead generation, affiliate or referral pitches, and deceptive disclosures will be reported to GitHub as spam, and the account will be blocked from this repository/.test(body); + if (!antiSpamChecked) { + failures.push('Anti-Spam Acknowledgment checkbox not checked'); + } + + // Check 3: Exactly one third-party product option must be checked + const noThirdPartyProduct = /- \[[xX]\] This issue does not mention or promote a third-party product or service/.test(body); + const hasThirdPartyProduct = /- \[[xX]\] This issue mentions a third-party product or service/.test(body); + if (noThirdPartyProduct === hasThirdPartyProduct) { + failures.push('Select exactly one Third-Party Product Disclosure option'); + } + + // Check 4: Third-party relationships must be disclosed + const relationshipMatch = body.match(/### Relationship to Third-Party Product or Service\s*\n+([\s\S]*?)(?=\n### |$)/i); + const relationship = (relationshipMatch?.[1] || '').trim(); + const noRelationshipResponse = !relationship || /^_?no response_?$/i.test(relationship); + const notApplicable = /^(not applicable|n\/a)\.?$/i.test(relationship); + if (noRelationshipResponse) { + failures.push('Relationship to Third-Party Product or Service is required'); + } else if (hasThirdPartyProduct && notApplicable) { + failures.push('Issues mentioning a third-party product or service must disclose the author’s relationship to it'); + } else if (noThirdPartyProduct && !notApplicable) { + failures.push('Issues that do not mention a third-party product or service must state Not applicable under Relationship'); + } + + // Check 5: AI disclosure checkbox (the required one: "I have read the AI Policy") const aiPolicyChecked = /- \[[xX]\] I have read the \[AI Policy\]/.test(body); if (!aiPolicyChecked) { failures.push('AI Policy acknowledgment checkbox not checked'); } - // Check 3: Exactly one authorship option must be checked + // Check 6: Exactly one authorship option must be checked const humanWritten = /- \[[xX]\] This issue was written entirely by a human/.test(body); const aiAssisted = /- \[[xX]\] This issue was written with AI assistance/.test(body); if (humanWritten === aiAssisted) { failures.push('Select exactly one authorship option (human-written or AI-assisted)'); } - // Check 4: AI tools must be explicitly disclosed. GitHub issue forms render + // Check 7: AI tools must be explicitly disclosed. GitHub issue forms render // input values under a level-three Markdown heading. const aiToolsMatch = body.match(/### AI Tool\(s\) Used\s*\n+([\s\S]*?)(?=\n### |$)/i); const aiTools = (aiToolsMatch?.[1] || '').trim(); @@ -129,10 +155,12 @@ jobs: ``, `**To submit an issue, please:**`, `1. Use one of the [issue templates](https://github.com/${context.repo.owner}/${context.repo.repo}/issues/new/choose)`, - `2. Select exactly one **AI Disclosure** authorship option`, - `3. Name every AI tool used, or state **None**`, - `4. Copy the **Repository Acknowledgment** phrase exactly as shown`, - `5. Read our [AI Policy](https://github.com/${context.repo.owner}/${context.repo.repo}/blob/main/AI_POLICY.md) and [AGENTS.md](https://github.com/${context.repo.owner}/${context.repo.repo}/blob/main/AGENTS.md)`, + `2. Complete the **Third-Party Product Disclosure** and relationship field`, + `3. Accept the **Anti-Spam Acknowledgment**`, + `4. Select exactly one **AI Disclosure** authorship option`, + `5. Name every AI tool used, or state **None**`, + `6. Copy the **Repository Acknowledgment** phrase exactly as shown`, + `7. Read our [AI Policy](https://github.com/${context.repo.owner}/${context.repo.repo}/blob/main/AI_POLICY.md) and [AGENTS.md](https://github.com/${context.repo.owner}/${context.repo.repo}/blob/main/AGENTS.md)`, ``, `If you believe this was a mistake, please reach out on [Discord](https://discord.gg/9GEQrxmVyE).`, ].join('\n'); diff --git a/AGENTS.md b/AGENTS.md index a8ce42d47b..49384a7579 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -17,3 +17,5 @@ If you are an agent working here, you most likely want one of these instead: - New features and integrations should target [letta-ai/letta-code](https://github.com/letta-ai/letta-code) and the [Letta Agent SDK](https://docs.letta.com/letta-agent-sdk/overview), not this codebase. - All contributions (issues, PRs, discussions) must comply with the [AI usage policy](AI_POLICY.md): AI assistance must be disclosed, and a human must fully understand and review everything submitted. +- Do not use issues, pull requests, or discussions to advertise a product or service, generate leads, promote referral or affiliate links, or send other unsolicited commercial pitches. Self-promotional spam will be reported to GitHub, and the account will be blocked from this repository. +- If a legitimate issue mentions a third-party product or service, disclose your relationship to it, including whether you are its creator, employee, contractor, investor, affiliate, sponsor, or paid promoter. Hiding or misrepresenting that relationship will be treated as spam.