diff --git a/app/flatpages/policy_and_guidance.md b/app/flatpages/policy_and_guidance.md
index 6278f19f..4ffa1d4b 100644
--- a/app/flatpages/policy_and_guidance.md
+++ b/app/flatpages/policy_and_guidance.md
@@ -1,22 +1,5 @@
title: Package Inclusion Policy and Guidance
-## 0. Overview
-
-ContentDB is for the community, and as such listings should be useful to the
-community. To help with this, there are a few rules to improve the quality of
-the listings and to combat abuse.
-
-* **No inappropriate content.** 2.1
-* **Content must be playable/useful, but not necessarily finished.** 2.2
-* **Don't use the name of another mod unless your mod is a fork or reimplementation.** 3
-* **Licenses must allow derivatives, redistribution, and must not discriminate.** 4
-* **Don't put promotions or advertisements in any package metadata.** 5
-* **Don't manipulate package placement using reviews or downloads.** 6
-* **Screenshots must not be misleading.** 7
-* **The ContentDB admin reserves the right to remove packages for any reason**,
- including ones not covered by this document, and to ban users who abuse
- this service. 1
-
## 1. General
@@ -26,35 +9,53 @@ including ones not covered by this document, and to ban users who abuse this ser
## 2. Accepted Content
-### 2.1. Acceptable Content
+### 2.1. Mature Content
-Sexually-orientated content is not permitted.
-If in doubt at what this means, [contact us by raising a report](/report/).
+See the [Terms of Service](/terms/) for a full list of prohibited content.
-Content which depicts or encourages the use of illegal drugs (under the laws of the United Kingdom) is not permitted.
+Other mature content is permitted providing that it is labelled with the applicable
+[content warning](/help/content_flags/).
-Mature content is permitted providing that it is labelled correctly.
-See [Content Flags](/help/content_flags/).
+### 2.2. Useful Content / State of Completion
-### 2.2. State of Completion
+ContentDB is for playable and useful content - content which is sufficiently
+complete to be useful to end-users.
-ContentDB should only currently contain playable content - content which is
-sufficiently complete to be useful to end-users. It's fine to add stuff which is
-still a Work in Progress (WIP) as long as it adds sufficient value; Note that
-this doesn't mean that you should add a thing you started working on yesterday,
-it's worth adding all the basic stuff to make your package useful.
-
-You should make sure to mark Work in Progress stuff as such in the "maintenance
-status" column, as this will help advise players.
+It's fine to add stuff which is still a Work in Progress (WIP) as long as it
+adds sufficient value. You must make sure to mark Work in Progress stuff as
+such in the "maintenance status" dropdown, as this will help advise players.
Adding non-player facing mods, such as libraries and server tools, is perfectly
-fine and encouraged. ContentDB isn't just for player-facing things, and adding
-libraries allows them to be installed when a mod depends on it.
+fine and encouraged. ContentDB isn't just for player-facing things and adding
+libraries allows Luanti to automatically install dependencies.
+
+### 2.3. Language
+
+We require packages to be in English with (optional) client-side translations for
+other languages. This is because Luanti currently requires English as the base language
+([Issue to change this](https://github.com/luanti-org/luanti/issues/6503)).
+
+Your package's title and short description must be in English. You can use client-side
+translations to [translate content meta](https://api.luanti.org/translations/#translating-content-meta).
+
+### 2.4. Attempt to contribute before forking
+
+You should attempt to contribute upstream before forking a package. If you choose
+to fork, you should have a justification (different objectives, maintainer is unavailable, etc).
+You should use a different title and make it clear in the long description what the
+benefit of your fork is over the original package.
+
+### 2.5. Copyright and trademarks
+
+Your package must not violate copyright or trademarks. You should avoid the use of
+trademarks in the package's title or short description. If you do use a trademark,
+ensure that you phrase it in a way that does not imply official association or
+endorsement.
## 3. Technical Names
-### 3.1 Right to a name
+### 3.1. Right to a Name
A package uses a name when it has that name or contains a mod that uses that name.
@@ -72,23 +73,46 @@ to change the name of the package, or your package won't be accepted.
We reserve the right to issue exceptions for this where we feel necessary.
-### 3.2. Mod Forks and Reimplementations
+### 3.2. Forks and Reimplementations
An exception to the above is that mods are allowed to have the same name as a
mod if it's a fork of that mod (or a close reimplementation). In real terms, it
-should be possible to use the new mod as a drop-in replacement.
+must be possible to use the new mod as a drop-in replacement.
We reserve the right to decide whether a mod counts as a fork or
reimplementation of the mod that owns the name.
+### 3.3. Game Mod Namespacing
+
+New mods introduced by a game must have a unique common prefix to avoid conflicts with
+other games and standalone mods. For example, the NodeCore game's first-party mods all
+start with `nc_`: `nc_api`, `nc_doors`.
+
+You may include existing or standard mods in your game without renaming them to use the
+namespace. For example, NodeCore could include the `awards` mod without needing to rename it.
+
+Standalone mods may not use a game's namespace unless they have been given permission by
+the game's author.
+
+The exception given by 3.2 also applies to game namespaces - you may use another game's
+prefix if your game is a fork.
+
## 4. Licenses
-### 4.1. Allowed Licenses
+### 4.1. License file
+You must have a LICENSE, LICENSE.txt, or LICENSE.md file describing the licensing of your package.
Please ensure that you correctly credit any resources (code, assets, or otherwise)
-that you have used in your package. For help on doing copyright correctly, see
-the [Copyright help page](/help/copyright/).
+that you have used in your package.
+
+You may use lowercase or include a suffix in the filename (ie: `license-code.txt`). If
+you are making a game or modpack, your top level license file may just be a summary or
+refer to the license files of individual components.
+
+For help on doing copyright correctly, see the [Copyright help page](/help/copyright/).
+
+### 4.2. Allowed Licenses
**The use of licenses that do not allow derivatives or redistribution is not
permitted. This includes CC-ND (No-Derivatives) and lots of closed source licenses.
@@ -98,13 +122,13 @@ of the content on servers or singleplayer is also not permitted.**
However, closed sourced licenses are allowed if they allow the above.
If the license you use is not on the list then please select "Other", and we'll
-get around to adding it. We tend to reject custom/untested licenses, and
-reserve the right to decide whether a license should be included.
+get around to adding it. We reject custom/untested licenses and reserve the right
+to decide whether a license should be included.
Please note that the definitions of "free" and "non-free" is the same as that
of the [Free Software Foundation](https://www.gnu.org/philosophy/free-sw.en.html).
-### 4.2. Recommended Licenses
+### 4.3. Recommended Licenses
It is highly recommended that you use a Free and Open Source software (FOSS)
license. FOSS licenses result in a sharing community and will increase the
@@ -152,10 +176,14 @@ Doing so may result in temporary or permanent suspension from ContentDB.
## 7. Screenshots
-1. **Screenshots must not violate copyright.** You should have the rights to the
- screenshot.
+1. We require all packages to have at least one screenshot. For packages without visual
+ content, we recommend making a symbolic image with icons, graphics, or text to depict
+ the package.
-2. **Screenshots must depict the actual content of the package in some way, and
+2. **Screenshots must not violate copyright.** This means don't just copy images
+ from Google search, see [the copyright guide](/help/copyright/).
+
+3. **Screenshots must depict the actual content of the package in some way, and
not be misleading.**
Do not use idealized mockups or blender concept renders if they do not
@@ -171,20 +199,9 @@ Doing so may result in temporary or permanent suspension from ContentDB.
will look like in a typical/realistic game scene, but should be "in the
background" only as far as possible.
-3. **Screenshots must only contain content appropriate for the Content Warnings of
+4. **Screenshots must only contain content appropriate for the Content Warnings of
the package.**
-4. **Screenshots should be MOSTLY in-game screenshots, if applicable.** Some
- alterations on in-game screenshots are okay, such as collages, added text,
- some reasonable compositing.
-
- Don't just use one of the textures from the package; show it in-situ as it
- actually looks in the game.
-
-5. **Packages should have a screenshot when reasonably applicable.**
-
-6. **Screenshots should be of reasonable dimensions.** We recommend using 1920x1080.
-
## 8. Security
diff --git a/app/tasks/minetestcheck/tree.py b/app/tasks/minetestcheck/tree.py
index 220d5612..4f855496 100644
--- a/app/tasks/minetestcheck/tree.py
+++ b/app/tasks/minetestcheck/tree.py
@@ -25,7 +25,7 @@ from .config import parse_conf
from .translation import Translation, parse_tr
basenamePattern = re.compile("^([a-z0-9_]+)$")
-licensePattern = re.compile("^(licen[sc]e|copying)(.[^/\n]+)?$", re.IGNORECASE)
+licensePattern = re.compile("^licen[sc]e[^/.]*(\.(txt|md))?$", re.IGNORECASE)
DISALLOWED_NAMES = {
"core", "minetest", "group", "table", "string", "lua", "luajit", "assert", "debug",