diff --git a/packages/moderation/src/data/checklist.ts b/packages/moderation/src/data/checklist.ts index 929552718f..7f93149b5c 100644 --- a/packages/moderation/src/data/checklist.ts +++ b/packages/moderation/src/data/checklist.ts @@ -11,6 +11,7 @@ import usePermissionsStage from './stages/permissions' import usePostApprovalStage from './stages/post-approval' import useReReviewStage from './stages/re-review' import useReuploadsStage from './stages/reupload' +import useDisclosuresStage from './stages/disclosures' import useRulesStage from './stages/rules' import useStatusAlertsStage from './stages/status-alerts' import useSummaryStage from './stages/summary' @@ -37,6 +38,7 @@ export function useStages( useReuploadsStage(), usePermissionsStage(), useRulesStage(), + useDisclosuresStage(), ] return [...mainStages, useStatusAlertsStage(mainStages, globalState)] } diff --git a/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ads.md b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ads.md new file mode 100644 index 0000000000..6ece4d1fd0 --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ads.md @@ -0,0 +1 @@ +- Advertisements or sponsored promotions of outside content. diff --git a/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai.md b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai.md new file mode 100644 index 0000000000..e75129c6e8 --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai.md @@ -0,0 +1,2 @@ +- AI-generated or assisted content.
+ Proper disclosure of AI usage is strictly required per section 6.1 of %RULES%. diff --git a/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai/ai-usages/assets.md b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai/ai-usages/assets.md new file mode 100644 index 0000000000..f09a749f55 --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai/ai-usages/assets.md @@ -0,0 +1 @@ + - AI-generated or assisted art, assets, or other design elements. diff --git a/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai/ai-usages/code.md b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai/ai-usages/code.md new file mode 100644 index 0000000000..b1fbef3695 --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai/ai-usages/code.md @@ -0,0 +1 @@ + - AI-generated or assisted code. diff --git a/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai/ai-usages/functionality.md b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai/ai-usages/functionality.md new file mode 100644 index 0000000000..9d407276cb --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai/ai-usages/functionality.md @@ -0,0 +1 @@ + - Functionality that relies on or is designed by generative AI. diff --git a/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai/ai-usages/text.md b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai/ai-usages/text.md new file mode 100644 index 0000000000..1b1bcffeea --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai/ai-usages/text.md @@ -0,0 +1 @@ + - AI-generated or assisted writing or text, including translations. diff --git a/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai/list-intro.md b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai/list-intro.md new file mode 100644 index 0000000000..b7e1b79ab8 --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/ai/list-intro.md @@ -0,0 +1,2 @@ +
+ Don't forget to label the inclusion of: diff --git a/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/archive.md b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/archive.md new file mode 100644 index 0000000000..7e97f23fb7 --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/archive.md @@ -0,0 +1 @@ +- Being archived, or otherwise no longer receiving updates. diff --git a/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/derivative-content.md b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/derivative-content.md new file mode 100644 index 0000000000..3c9672dd35 --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/derivative-content.md @@ -0,0 +1,2 @@ +- Derivative content, such as code or assets from another project or creator.
+ Per section 4 of %RULES%, you may be required to list the origin of content you did not create here if the content's license requires attribution. diff --git a/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/list-intro.md b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/list-intro.md new file mode 100644 index 0000000000..6f28d49088 --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/list-intro.md @@ -0,0 +1,2 @@ +
+Currently, your %PROJECT_TYPE_FORMATTED_LOWER% appears to be missing disclosure of: diff --git a/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/missing-disclosures-header.md b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/missing-disclosures-header.md new file mode 100644 index 0000000000..e9a234cc2a --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/missing-disclosures-header.md @@ -0,0 +1,3 @@ +## Missing Content Disclosures + +Per section 5.8 of %RULES%, we ask that you ensure all applicable %PROJECT_CONTENT_DISCLOSURES_FLINK% are filled out with accurate information. diff --git a/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/paid-features.md b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/paid-features.md new file mode 100644 index 0000000000..775d73a711 --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/paid-features.md @@ -0,0 +1 @@ +- Features locked behind a paywall, donation, or other monetary exchange. diff --git a/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/photosensitivity.md b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/photosensitivity.md new file mode 100644 index 0000000000..315a02b665 --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/photosensitivity.md @@ -0,0 +1 @@ +- Content that may be dangerous to users with photosensitive epilepsy. diff --git a/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/system-interactions.md b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/system-interactions.md new file mode 100644 index 0000000000..d4c8f3d41b --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/system-interactions.md @@ -0,0 +1 @@ +- Features that interact with the user's machine outside of the context of the game. diff --git a/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/telemetry.md b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/telemetry.md new file mode 100644 index 0000000000..124d92f703 --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/disclosures/missing-disclosures/telemetry.md @@ -0,0 +1,2 @@ +- Telemetry or any other instances of data being sent to a remote server that the user did not connect to.
+ Proper disclosure of data collection is strictly required per section 1.11 of %RULES%. diff --git a/packages/moderation/src/data/messages/checklist/messages/gallery/showcase-clarity.md b/packages/moderation/src/data/messages/checklist/messages/gallery/showcase-clarity.md index bf7c812178..c93ae5a601 100644 --- a/packages/moderation/src/data/messages/checklist/messages/gallery/showcase-clarity.md +++ b/packages/moderation/src/data/messages/checklist/messages/gallery/showcase-clarity.md @@ -5,6 +5,8 @@ Per section 2 of %RULES%, it's important that your project page accurately and h Currently, it looks like some images do not accurately represent the content of your %PROJECT_TYPE_FORMATTED_LOWER%. Please make sure you use authentic images such as in-game screenshots when showcasing the content or functionality of your work. -Images such as renders, AI generated or assisted images, or heavily modified images should not be used to demonstrate the functionality of your project in the %PROJECT_DESCRIPTION_FLINK% or %PROJECT_GALLERY_FLINK%. +Images such as renders, or heavily modified images should not be used to demonstrate the functionality of your project in the %PROJECT_DESCRIPTION_FLINK% or %PROJECT_GALLERY_FLINK%. You may still include these types of branding assets or unrelated images on your project page, so long as it is clear they are not authentic representations of the content. + +Per section 6.2 of %RULES%, the use of AI images is strictly prohibited. diff --git a/packages/moderation/src/data/messages/checklist/messages/reupload/insufficient-fork.md b/packages/moderation/src/data/messages/checklist/messages/reupload/insufficient-fork.md index 90a0f018c7..4dba0a426f 100644 --- a/packages/moderation/src/data/messages/checklist/messages/reupload/insufficient-fork.md +++ b/packages/moderation/src/data/messages/checklist/messages/reupload/insufficient-fork.md @@ -1,4 +1,5 @@ ## Insufficient Fork -This project does not appear to significantly diverge from the source work, or does not abide by the license of the source work as required by section 4 of %RULES%. -Please provide proof of your explicit permission to distribute this project from the creator(s) of the source work. +This project does not appear to significantly diverge from the source work, or does not abide by the license of the source work as required by section 4 of %RULES%.
+Please provide proof of your explicit permission to distribute this project from the creator(s) of the source work.
+Remember to appropriately credit all external content you've included or forked in your project's derivative content %PROJECT_CONTENT_DISCLOSURES_FLINK%, this may be required by the license of the source work. diff --git a/packages/moderation/src/data/messages/checklist/messages/reupload/missing-attribution.md b/packages/moderation/src/data/messages/checklist/messages/reupload/missing-attribution.md new file mode 100644 index 0000000000..5952604e02 --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/reupload/missing-attribution.md @@ -0,0 +1,4 @@ +## Missing Attribution + +Please ensure you've provided proper attribution to the source of all assets you have not created yourself by listing them accordingly in your project's %PROJECT_CONTENT_DISCLOSURES_FLINK%. +Per section 4 of %RULES%, this is strictly required for any content licensed with an attribution requirement clause. diff --git a/packages/moderation/src/data/messages/checklist/messages/reupload/request-proof-server.md b/packages/moderation/src/data/messages/checklist/messages/reupload/request-proof-server.md index f01171f50b..fe3998060d 100644 --- a/packages/moderation/src/data/messages/checklist/messages/reupload/request-proof-server.md +++ b/packages/moderation/src/data/messages/checklist/messages/reupload/request-proof-server.md @@ -1,5 +1,6 @@ ## Reuploads are forbidden -This server appears to have uploaded a Modpack by another creator. -Per section 4 of %RULES%, we ask that you provide proof of your permission to distribute this pack on Modrinth. -Either implicit permission abiding by the terms of the content's license(s) or explicit permission from the original creator of the pack. +This server appears to have uploaded a Modpack by another creator.
+Per section 4 of %RULES%, we ask that you provide proof of your permission to distribute this pack on Modrinth.
+Either implicit permission abiding by the terms of the content's license(s) or explicit permission from the original creator of the pack.
+Please remember to appropriately credit all external content you've included or forked in your project's derivative content %PROJECT_CONTENT_DISCLOSURES_FLINK%. diff --git a/packages/moderation/src/data/messages/checklist/messages/reupload/request-proof.md b/packages/moderation/src/data/messages/checklist/messages/reupload/request-proof.md index 26296101fb..bb707f76c7 100644 --- a/packages/moderation/src/data/messages/checklist/messages/reupload/request-proof.md +++ b/packages/moderation/src/data/messages/checklist/messages/reupload/request-proof.md @@ -1,5 +1,6 @@ ## Proof of permissions -This project appears to contain content from other creators. -Per section 4 of %RULES%, we ask that you provide proof of your permission to distribute this content, or derivatives of this content in your project on Modrinth. -Either implicit permission abiding by the terms of the content's license(s) or explicit permission from the original creator of the content. +This project appears to contain content from other creators.
+Per section 4 of %RULES%, we ask that you provide proof of your permission to distribute this content, or derivatives of this content in your project on Modrinth.
+Either implicit permission abiding by the terms of the content's license(s) or explicit permission from the original creator of the content.
+Please remember to appropriately credit all external content you've included or forked in your project's derivative content %PROJECT_CONTENT_DISCLOSURES_FLINK%, this may be required by the license of the content. diff --git a/packages/moderation/src/data/messages/checklist/messages/reupload/reupload.md b/packages/moderation/src/data/messages/checklist/messages/reupload/reupload.md index 6c2cc9b7ff..85b34b93c0 100644 --- a/packages/moderation/src/data/messages/checklist/messages/reupload/reupload.md +++ b/packages/moderation/src/data/messages/checklist/messages/reupload/reupload.md @@ -1,5 +1,5 @@ ## Reuploads are forbidden -This project appears to contain content from %ORIGINAL_PROJECT% by %ORIGINAL_AUTHOR%. -Per section 4 of %RULES%, this is strictly forbidden. +This project appears to contain content from %ORIGINAL_PROJECT% by %ORIGINAL_AUTHOR%.
+Per section 4 of %RULES%, this is strictly forbidden.
If you believe this is an error, or you can verify you are the creator and rightful owner of this content please let us know. Otherwise, we ask that you **do not resubmit this project**. diff --git a/packages/moderation/src/data/messages/checklist/messages/reupload/unclear-fork.md b/packages/moderation/src/data/messages/checklist/messages/reupload/unclear-fork.md index ba885a2304..21347f7ef8 100644 --- a/packages/moderation/src/data/messages/checklist/messages/reupload/unclear-fork.md +++ b/packages/moderation/src/data/messages/checklist/messages/reupload/unclear-fork.md @@ -1,4 +1,5 @@ ## Forks and Reuploads -Per section 4 of %RULES%, please provide proof that this project is both license-abiding and significantly divergent from the source work. -Alternatively, please provide proof of your explicit permission from the author of the source work to distribute this content on Modrinth. +Per section 4 of %RULES%, please provide proof that this project is both license-abiding and significantly divergent from the source work.
+Alternatively, please provide proof of your explicit permission from the author of the source work to distribute this content on Modrinth.
+Please remember to appropriately credit all external content you've included or forked in your project's derivative content %PROJECT_CONTENT_DISCLOSURES_FLINK%, this may be required by the license of the source work. diff --git a/packages/moderation/src/data/messages/checklist/messages/rules/ai-generated.md b/packages/moderation/src/data/messages/checklist/messages/rules/ai-generated.md new file mode 100644 index 0000000000..9edbd44d87 --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/rules/ai-generated.md @@ -0,0 +1,6 @@ +## Project Withheld + +Per section 6.3 of %RULES%, this project is not suitable to be published on Modrinth. + +With this in mind, this project will remain unlisted, so you may still share it privately with a direct link. \ +We appreciate your understanding and ask that you **do not resubmit**. diff --git a/packages/moderation/src/data/stages/disclosures.tsx b/packages/moderation/src/data/stages/disclosures.tsx new file mode 100644 index 0000000000..47a775ca1f --- /dev/null +++ b/packages/moderation/src/data/stages/disclosures.tsx @@ -0,0 +1,58 @@ +import { TriangleAlertIcon } from '@modrinth/assets' + +import { group, option, stage, toggle } from '../../types/node' + +export default function () { + return stage('disclosures', 'Disclosures') + .hint('Has this project selected all proper content disclosures?') + .guidance('https://www.notion.so/2e15ee711bf080e4a41df61bbab49892') + .icon(TriangleAlertIcon) + .navigate('/settings/disclosures') + .children( + group().children( + toggle('missing-disclosures', 'Disclosures Missing') + .message('missing-disclosures/missing-disclosures-header') + .children( + group() + .title('Which content disclosures are missing?') + .children( + toggle('ai', 'AI Usage') + .suggestedStatus('flagged') + .message() + .children( + group() + .title('What kind of AI content is present?') + .children( + toggle('code', 'Code').message('ai-usages/code'), + toggle('assets', 'Assets').message('ai-usages/assets'), + toggle('text', 'Text').message('ai-usages/text'), + toggle('functionality', 'Functionality').message('ai-usages/functionality'), + ), + ) + .collect(undefined, 'ai/list-intro'), + + toggle('ads', 'Advertisements').suggestedStatus('flagged').message(), + + toggle('paid-features', 'Paid Features').suggestedStatus('flagged').message(), + + toggle('telemetry', 'Telemetry').suggestedStatus('rejected').message(), + + toggle('derivative-content', 'Derivative Content') + .suggestedStatus('rejected') + .message(), + + toggle('photosensitivity', 'Photosensitivity') + .suggestedStatus('rejected') + .message(), + + toggle('system-interactions', 'System Interactions') + .suggestedStatus('rejected') + .message(), + + toggle('archive', 'Archive').message(), + ), + ) + .collect(undefined, 'missing-disclosures/list-intro'), + ), + ) +} diff --git a/packages/moderation/src/data/stages/metadata.tsx b/packages/moderation/src/data/stages/metadata.tsx index 9817081489..ed2e3c7032 100644 --- a/packages/moderation/src/data/stages/metadata.tsx +++ b/packages/moderation/src/data/stages/metadata.tsx @@ -93,6 +93,7 @@ export default function () { return md('checklist/messages/metadata/environment/inaccurate', () => ({ CORRECT: correct, }))(state) + }) .fix( fix().project((patch, state) => { diff --git a/packages/moderation/src/data/stages/reupload.tsx b/packages/moderation/src/data/stages/reupload.tsx index 002f284072..6665336368 100644 --- a/packages/moderation/src/data/stages/reupload.tsx +++ b/packages/moderation/src/data/stages/reupload.tsx @@ -88,6 +88,13 @@ export default function () { OVERRIDES: state.overrides, })) .children(markdown('overrides').title('Forbidden overrides list').required()), + + toggle('missing-attribution', 'Missing Attribution') + .suggestedStatus('rejected') + .message((state) => ({ + MISSING_CREDITS: state.missing_credits, + })), + //.children(markdown('missing_credits').title('Add list of missing credits.')), ), ) } diff --git a/packages/moderation/src/data/stages/rules.tsx b/packages/moderation/src/data/stages/rules.tsx index 75f2de6a7b..abb7512549 100644 --- a/packages/moderation/src/data/stages/rules.tsx +++ b/packages/moderation/src/data/stages/rules.tsx @@ -77,6 +77,8 @@ export default function () { .suggestedStatus('flagged') .message(), + toggle('ai-generated', 'AI Generated').suggestedStatus('flagged').message(), + toggle('rule-breaking-other', 'Other') .suggestedStatus('rejected') .message((state) => ({ MESSAGE: state.message })) diff --git a/packages/moderation/src/data/stages/status-alerts.tsx b/packages/moderation/src/data/stages/status-alerts.tsx index 2c61a176cc..69c93b4741 100644 --- a/packages/moderation/src/data/stages/status-alerts.tsx +++ b/packages/moderation/src/data/stages/status-alerts.tsx @@ -1,4 +1,4 @@ -import { TriangleAlertIcon } from '@modrinth/assets' +import { MegaphoneIcon } from '@modrinth/assets' import { injectProjectPageContext } from '@modrinth/ui' import type { Ref } from 'vue' import { computed } from 'vue' @@ -28,7 +28,7 @@ export default function ( .guidance( 'https://www.notion.so/2e15ee711bf080e4a41df61bbab49892#2e35ee711bf080968699c397e470eca6', ) - .icon(TriangleAlertIcon) + .icon(MegaphoneIcon) .navigate('/moderation') .children( () => ( diff --git a/packages/moderation/src/types/node/capabilities.ts b/packages/moderation/src/types/node/capabilities.ts index 5d89d16740..fcb5731281 100644 --- a/packages/moderation/src/types/node/capabilities.ts +++ b/packages/moderation/src/types/node/capabilities.ts @@ -108,7 +108,7 @@ export interface Messageable { this: this, content: string | ((state: Record) => string | Promise), ): this - collect(this: this, path?: string | (() => string) | GetVarsFn, getVars?: GetVarsFn): this + collect(this: this, fallback?: string | (() => string), prefix?: string | (() => string)): this } function splitPathAndVars( @@ -151,17 +151,18 @@ export function withMessaging(node: T): T & Messageable { }, collect( this: Messageable, - pathOrGetVars?: string | (() => string) | GetVarsFn, - getVarsArg?: GetVarsFn, + fallbackPath?: string | (() => string), + prefixPath?: string | (() => string), ) { - const { path, getVars } = splitPathAndVars(pathOrGetVars, getVarsArg) const fallback: MessageSegment | undefined = - path !== undefined || getVars !== undefined - ? path === undefined - ? { type: 'auto', ...(getVars && { getVars }) } - : { type: 'path', path, ...(getVars && { getVars }) } - : undefined - this._segments.push({ type: 'collect', ...(fallback && { fallback }) }) + fallbackPath !== undefined ? { type: 'path', path: fallbackPath } : undefined + const prefix: MessageSegment | undefined = + prefixPath !== undefined ? { type: 'path', path: prefixPath } : undefined + this._segments.push({ + type: 'collect', + ...(fallback && { fallback }), + ...(prefix && { prefix }), + }) return this }, }) diff --git a/packages/moderation/src/types/node/collect.ts b/packages/moderation/src/types/node/collect.ts index 3398c436eb..69849b220b 100644 --- a/packages/moderation/src/types/node/collect.ts +++ b/packages/moderation/src/types/node/collect.ts @@ -87,6 +87,8 @@ export async function evalActiveAction( } if (!collected.trim() && seg.fallback) { collected = await evalSegment(seg.fallback, entry.state, entry.statePath) + } else if (collected.trim() && seg.prefix) { + collected = (await evalSegment(seg.prefix, entry.state, entry.statePath)) + collected } result += collected } else { diff --git a/packages/moderation/src/types/node/state.ts b/packages/moderation/src/types/node/state.ts index 2812f8b8d9..773ebbd176 100644 --- a/packages/moderation/src/types/node/state.ts +++ b/packages/moderation/src/types/node/state.ts @@ -30,4 +30,4 @@ export type MessageSegment = | { type: 'fn'; fn: ContentFn } | { type: 'auto'; getVars?: GetVarsFn } | { type: 'path'; path: string | (() => string); getVars?: GetVarsFn } - | { type: 'collect'; fallback?: MessageSegment } + | { type: 'collect'; fallback?: MessageSegment; prefix?: MessageSegment } diff --git a/packages/moderation/src/utils.ts b/packages/moderation/src/utils.ts index 3df242bf55..7e7dbd9477 100644 --- a/packages/moderation/src/utils.ts +++ b/packages/moderation/src/utils.ts @@ -246,6 +246,10 @@ export function flattenProjectVariables( vars[`PROJECT_MONETIZATION_SETTINGS_LINK`] = `https://modrinth.com/project/${project.id}/settings` vars[`PROJECT_MONETIZATION_SETTINGS_FLINK`] = `[Monetization settings](https://modrinth.com/project/${project.id}/settings)` + vars[`PROJECT_CONTENT_DISCLOSURES_LINK`] = + `https://modrinth.com/project/${project.id}/settings/disclosures` + vars[`PROJECT_CONTENT_DISCLOSURES_FLINK`] = + `[Content Disclosures](https://modrinth.com/project/${project.id}/settings/disclosures)` return vars }