/ rulesets / content-ruleset.yml
content-ruleset.yml
  1  ruleset_id: moderation
  2  version: "7"
  3  ruleset_type: moderation
  4  source_spec: poc-spec-v7
  5  name: POC Spec v7 Moderation Ruleset
  6  description: Deterministic and probabilistic moderation rules (spam, abuse, security).
  7  rules:
  8    - id: D-TRUST-01
  9      type: moderation
 10      output: binary
 11      command: node /rules/scripts/D-TRUST-01.js
 12      requirements: []
 13      name: submitter signature valid
 14      description: Reject if submitter signature is invalid or missing.
 15      spec_ref: 8.1.3
 16    - id: D-TRUST-02
 17      type: moderation
 18      output: binary
 19      command: node /rules/scripts/D-TRUST-02.js
 20      requirements: []
 21      name: submitter not banned
 22      description: Reject if submitter is on a signed banlist.
 23      spec_ref: 8.1.3
 24    - id: D-TRUST-03
 25      type: moderation
 26      output: binary
 27      command: node /rules/scripts/D-TRUST-03.js
 28      requirements: []
 29      name: already accepted
 30      description: Reject duplicate entries already accepted.
 31      spec_ref: 8.1.3
 32    - id: D-TRUST-04
 33      type: moderation
 34      output: binary
 35      command: node /rules/scripts/D-TRUST-04.js
 36      requirements: []
 37      name: already rejected
 38      description: Reject entries already rejected by quorum.
 39      spec_ref: 8.1.3
 40    - id: D-TRUST-05
 41      type: moderation
 42      output: binary
 43      command: node /rules/scripts/D-TRUST-05.js
 44      requirements: []
 45      name: anti replay
 46      description: Reject replays with identical nonce and payload.
 47      spec_ref: 8.1.3
 48    - id: D-TRUST-06
 49      type: moderation
 50      output: binary
 51      command: node /rules/scripts/D-TRUST-06.js
 52      requirements: []
 53      name: appeal in progress
 54      description: Quarantine entries with an active appeal flag.
 55      spec_ref: 8.1.3
 56    - id: D-TRUST-07
 57      type: moderation
 58      output: binary
 59      command: node /rules/scripts/D-TRUST-07.js
 60      requirements: []
 61      name: signed report present
 62      description: Reject or flag if a signed report exists for the infohash.
 63      spec_ref: 8.1.3
 64    - id: D-CONTENT-01
 65      type: moderation
 66      output: binary
 67      command: node /rules/scripts/D-CONTENT-01.js
 68      requirements: []
 69      name: blocked hash
 70      description: Reject if infohash matches a blocked list.
 71      spec_ref: 8.1.4
 72    - id: D-CONTENT-02
 73      type: moderation
 74      output: binary
 75      command: node /rules/scripts/D-CONTENT-02.js
 76      requirements: []
 77      name: malware signatures
 78      description: Reject if file hashes match known malware.
 79      spec_ref: 8.1.4
 80    - id: D-CONTENT-03
 81      type: moderation
 82      output: binary
 83      command: node /rules/scripts/D-CONTENT-03.js
 84      requirements: []
 85      name: illegal content hashes
 86      description: Reject if infohash matches illegal content lists.
 87      spec_ref: 8.1.4
 88    - id: D-CONTENT-04
 89      type: moderation
 90      output: binary
 91      command: node /rules/scripts/D-CONTENT-04.js
 92      requirements: []
 93      name: content rating required
 94      description: Reject or quarantine if required rating is missing.
 95      spec_ref: 8.1.4
 96    - id: D-CONTENT-05
 97      type: moderation
 98      output: binary
 99      command: node /rules/scripts/D-CONTENT-05.js
100      requirements: []
101      name: relay SFW only
102      description: Reject NSFW content on SFW-only relays.
103      spec_ref: 8.1.4
104    - id: D-CONTENT-06
105      type: moderation
106      output: binary
107      command: node /rules/scripts/D-CONTENT-06.js
108      requirements: []
109      name: personal data detected
110      description: Reject or flag if personal data appears in text fields.
111      spec_ref: 8.1.4
112    - id: D-KW-01
113      type: moderation
114      output: binary
115      command: node /rules/scripts/D-KW-01.js
116      requirements: []
117      name: blacklist keyword match
118      description: Reject on exact keyword match after normalization.
119      spec_ref: 8.1.5
120    - id: D-KW-02
121      type: moderation
122      output: binary
123      command: node /rules/scripts/D-KW-02.js
124      requirements: []
125      name: homoglyph variants
126      description: Reject on homoglyph keyword variants.
127      spec_ref: 8.1.5
128    - id: D-KW-03
129      type: moderation
130      output: binary
131      command: node /rules/scripts/D-KW-03.js
132      requirements: []
133      name: URL pattern
134      description: Reject or flag if URLs are forbidden in title or description.
135      spec_ref: 8.1.5
136    - id: D-KW-04
137      type: moderation
138      output: binary
139      command: node /rules/scripts/D-KW-04.js
140      requirements: []
141      name: deterministic spam pattern
142      description: Reject on deterministic spam patterns and tag stuffing.
143      spec_ref: 8.1.5
144    - id: D-ABUSE-01
145      type: moderation
146      output: binary
147      command: node /rules/scripts/D-ABUSE-01.js
148      requirements: []
149      name: rate limit
150      description: Reject when submitter exceeds rate limits.
151      spec_ref: 8.1.7
152    - id: D-ABUSE-02
153      type: moderation
154      output: binary
155      command: node /rules/scripts/D-ABUSE-02.js
156      requirements: []
157      name: proof of work
158      description: Reject when required proof of work is missing.
159      spec_ref: 8.1.7
160    - id: D-ABUSE-03
161      type: moderation
162      output: binary
163      command: node /rules/scripts/D-ABUSE-03.js
164      requirements: []
165      name: anti sybil
166      description: Quarantine when reputation or stake requirements fail.
167      spec_ref: 8.1.7
168    - id: D-NET-05
169      type: moderation
170      output: binary
171      command: node /rules/scripts/D-NET-05.js
172      requirements: []
173      name: poisoning detected
174      description: Reject when invalid pieces are served by peers.
175      spec_ref: 8.1.2
176    - id: P-NSFW-01
177      type: moderation
178      output: probability
179      command: node /rules/scripts/P-NSFW-01.js
180      requirements: []
181      name: nsfw text score
182      description: Probability score from title and description.
183      spec_ref: 8.1.6
184    - id: P-NSFW-02
185      type: moderation
186      output: probability
187      command: node /rules/scripts/P-NSFW-02.js
188      requirements: []
189      name: nsfw media score
190      description: Probability score from media samples.
191      spec_ref: 8.1.6
192    - id: P-SPAM-01
193      type: moderation
194      output: probability
195      command: node /rules/scripts/P-SPAM-01.js
196      requirements: []
197      name: spam score
198      description: Probability of spam patterns and marketing text.
199      spec_ref: 8.1.6
200    - id: P-SCAM-01
201      type: moderation
202      output: probability
203      command: node /rules/scripts/P-SCAM-01.js
204      requirements: []
205      name: scam score
206      description: Probability of scam or phishing patterns.
207      spec_ref: 8.1.6
208    - id: P-MALWARE-01
209      type: moderation
210      output: probability
211      command: node /rules/scripts/P-MALWARE-01.js
212      requirements: []
213      name: malware score
214      description: Probability of malware based on heuristics.
215      spec_ref: 8.1.6
216    - id: P-COPYRIGHT-01
217      type: moderation
218      output: probability
219      command: node /rules/scripts/P-COPYRIGHT-01.js
220      requirements: []
221      name: copyright risk
222      description: Probability of copyright infringement risk.
223      spec_ref: 8.1.6
224    - id: P-HATE-01
225      type: moderation
226      output: probability
227      command: node /rules/scripts/P-HATE-01.js
228      requirements: []
229      name: hate or harassment
230      description: Probability of hate or harassment content.
231      spec_ref: 8.1.6
232    - id: P-PRIVACY-01
233      type: moderation
234      output: probability
235      command: node /rules/scripts/P-PRIVACY-01.js
236      requirements: []
237      name: personal data probability
238      description: Probability of personal data exposure.
239      spec_ref: 8.1.6
240    - id: P-EVASION-01
241      type: moderation
242      output: probability
243      command: node /rules/scripts/P-EVASION-01.js
244      requirements: []
245      name: evasion score
246      description: Probability of obfuscation or leet variants.
247      spec_ref: 8.1.6
248    - id: P-REPUT-01
249      type: moderation
250      output: probability
251      command: node /rules/scripts/P-REPUT-01.js
252      requirements: []
253      name: bad actor reputation
254      description: Probability score based on submitter reputation.
255      spec_ref: 8.1.6
256    - id: P-NET-02
257      type: moderation
258      output: probability
259      command: node /rules/scripts/P-NET-02.js
260      requirements: []
261      name: poisoning risk
262      description: Probability score of poisoning attempts on peers.
263      spec_ref: 8.1.2
264    - id: P-ABUSE-01
265      type: moderation
266      output: probability
267      command: node /rules/scripts/P-ABUSE-01.js
268      requirements: []
269      name: spray attack score
270      description: Probability of mass submission or spray attacks.
271      spec_ref: 8.1.7
272    - id: P-ABUSE-02
273      type: moderation
274      output: probability
275      command: node /rules/scripts/P-ABUSE-02.js
276      requirements: []
277      name: brigading score
278      description: Probability of coordinated curator brigading.
279      spec_ref: 8.1.7
280    # Fake and Honeypot Detection Rules
281    - id: D-FAKE-01
282      type: moderation
283      output: binary
284      command: node /rules/scripts/D-FAKE-01.js
285      requirements: []
286      name: honeypot detection
287      description: Reject known honeypot or fake infohashes from tracker databases.
288      spec_ref: 8.1.8
289    - id: D-FAKE-02
290      type: moderation
291      output: binary
292      command: node /rules/scripts/D-FAKE-02.js
293      requirements: []
294      name: size mismatch
295      description: Reject when claimed size drastically differs from actual.
296      spec_ref: 8.1.8
297    - id: D-FAKE-03
298      type: moderation
299      output: binary
300      command: node /rules/scripts/D-FAKE-03.js
301      requirements: []
302      name: password protected trap
303      description: Reject when archives require password not disclosed.
304      spec_ref: 8.1.8
305    # Release Validation Rules
306    - id: D-RELEASE-01
307      type: moderation
308      output: binary
309      command: node /rules/scripts/D-RELEASE-01.js
310      requirements: []
311      name: release group validation
312      description: Validate release group against known scene or p2p groups.
313      spec_ref: 8.1.9
314    - id: D-RELEASE-02
315      type: moderation
316      output: binary
317      command: node /rules/scripts/D-RELEASE-02.js
318      requirements: []
319      name: pre-time validation
320      description: Flag when release appears before official availability.
321      spec_ref: 8.1.9
322    - id: D-RELEASE-03
323      type: moderation
324      output: binary
325      command: node /rules/scripts/D-RELEASE-03.js
326      requirements: []
327      name: nuke status check
328      description: Reject releases marked as nuked in scene databases.
329      spec_ref: 8.1.9
330    # Tracking Detection Rules
331    - id: D-TRACK-01
332      type: moderation
333      output: binary
334      command: node /rules/scripts/D-TRACK-01.js
335      requirements: []
336      name: tracking pixel detection
337      description: Reject when content contains known tracking mechanisms.
338      spec_ref: 8.1.10
339    - id: D-TRACK-02
340      type: moderation
341      output: binary
342      command: node /rules/scripts/D-TRACK-02.js
343      requirements: []
344      name: watermark detection
345      description: Flag when content has identifying watermarks.
346      spec_ref: 8.1.10
347    # Language and Metadata Rules
348    - id: D-LANG-01
349      type: moderation
350      output: binary
351      command: node /rules/scripts/D-LANG-01.js
352      requirements: []
353      name: language mismatch
354      description: Reject when claimed language does not match content.
355      spec_ref: 8.1.11
356    # Duplicate Detection Rules
357    - id: D-DUP-01
358      type: moderation
359      output: binary
360      command: node /rules/scripts/D-DUP-01.js
361      requirements: []
362      name: cross-hash duplicate
363      description: Reject when content duplicates existing entry with different hash.
364      spec_ref: 8.1.12
365    # Age Restriction Rules
366    - id: D-AGE-01
367      type: moderation
368      output: binary
369      command: node /rules/scripts/D-AGE-01.js
370      requirements: []
371      name: age-restricted verification
372      description: Require age tags for adult content categories.
373      spec_ref: 8.1.13
374    # Takedown Compliance Rules
375    - id: D-DMCA-01
376      type: moderation
377      output: binary
378      command: node /rules/scripts/D-DMCA-01.js
379      requirements: []
380      name: takedown compliance
381      description: Reject infohashes with pending DMCA or takedown notices.
382      spec_ref: 8.1.14
383    # Probabilistic Content Rules
384    - id: P-FAKE-01
385      type: moderation
386      output: probability
387      command: node /rules/scripts/P-FAKE-01.js
388      requirements: []
389      name: fake probability
390      description: Probability of being fake based on uploader history and metadata.
391      spec_ref: 8.1.8
392    - id: P-RELEASE-01
393      type: moderation
394      output: probability
395      command: node /rules/scripts/P-RELEASE-01.js
396      requirements: []
397      name: release legitimacy
398      description: Probability of being legitimate release vs repack or fake.
399      spec_ref: 8.1.9
400    - id: P-TRACK-01
401      type: moderation
402      output: probability
403      command: node /rules/scripts/P-TRACK-01.js
404      requirements: []
405      name: tracking risk
406      description: Probability of containing tracking or fingerprinting.
407      spec_ref: 8.1.10
408    - id: P-FRESH-01
409      type: moderation
410      output: probability
411      command: node /rules/scripts/P-FRESH-01.js
412      requirements: []
413      name: freshness score
414      description: Probability content is current and maintained vs abandoned.
415      spec_ref: 8.1.15