Rebuild: rules:signatures, and voyager 1's 29 learned garbage signatures

rules:signatures publishes a rule set version whose dropped signatures
come from a file of tool<TAB>group lines (--add to add to the current
ones). database/data/voyager1_signatures.tsv: voyager 1's dropped ones
(>=100 probes, <=0.5% named), with their probe counts; the two builds
name the posting tools the same way.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Daan MeijerandClaude Opus 5.5 committed 2026-10-09 10:42:00 +02:00
1 parent fd0f2bde75
commit 57dfa3d749
2 files changed
+82

No files matched your search

+52
View File
@@ -0,0 +1,52 @@
import { BaseCommand, args, flags } from '@adonisjs/core/ace'
import type { CommandOptions } from '@adonisjs/core/types/ace'
import { readFile } from 'node:fs/promises'
import RuleSets from '#services/rule_sets'
import { signatureKey } from '#lib/rules/index'
/**
* Sets the dropped upload signatures (REBUILD.md, rules and recovery) from a
* file of "tool<TAB>group" lines, e.g. voyager 1's learned ones:
*
* psql … -At -F $'\t' -c "SELECT tool, group_name FROM upload_signatures WHERE dropped"
*
* Publishes a new rule set version (ranges record the version they ran with).
*/
export default class RulesSignatures extends BaseCommand {
static commandName = 'rules:signatures'
static description = 'Publishes a rule set with the dropped upload signatures from a file'
static options: CommandOptions = { startApp: true }
@args.string({ description: 'File of "tool<TAB>group" lines (more columns and # lines are ignored), e.g. database/data/voyager1_signatures.tsv' })
declare file: string
@flags.string({ description: 'Note stored with the rule set version' })
declare note?: string
@flags.boolean({ description: 'Add to the current signatures instead of replacing them' })
declare add: boolean
async run() {
const lines = (await readFile(this.file, 'utf8')).split('\n').map((l) => l.trim()).filter((l) => l && !l.startsWith('#'))
const signatures = new Set<string>()
for (const line of lines) {
const [tool, group] = line.split('\t')
if (!tool || !group) throw new Error(`Not "tool<TAB>group": ${line}`)
signatures.add(signatureKey(tool, group))
}
const { version: _v, priorities: _p, ...current } = await RuleSets.current()
const before = new Set(current.droppedSignatures)
const next = this.add ? new Set([...before, ...signatures]) : signatures
if (next.size === before.size && [...next].every((s) => before.has(s))) {
this.logger.info(`Unchanged: ${before.size} dropped signatures already.`)
return
}
const version = await RuleSets.publish(
{ ...current, droppedSignatures: [...next].sort() },
this.note ?? `${next.size} dropped signatures from ${this.file}`
)
const added = [...next].filter((s) => !before.has(s)).length
const removed = [...before].filter((s) => !next.has(s)).length
this.logger.info(`Rule set ${version}: ${next.size} dropped signatures (${added} added, ${removed} removed).`)
}
}
+30
View File
@@ -0,0 +1,30 @@
# Voyager 1 upload_signatures WHERE dropped, 2026-10-09: tool, group, probed, named
other alt.binaries.ath 10988 24
ngPost alt.binaries.ath 3843 0
hex32 alt.binaries.test 1890 2
ngPost alt.binaries.a51 1516 0
nyuu alt.binaries.a51 700 0
nyuu alt.binaries.mom 656 0
hex32 alt.binaries.boneless 453 1
nyuu alt.binaries.misc 356 0
nyuu alt.binaries.games.encrypted 353 0
other alt.binaries.etc 317 1
other alt.binaries.misc 310 0
nyuu alt.binaries.warez 292 0
other alt.binaries.usenet2day 255 0
other alt.binaries.ijsklontje 238 0
ngPost alt.binaries.bloaf 237 0
nyuu alt.binaries.nl 196 0
other alt.binaries.archive.encrypted 189 0
nyuu alt.binaries.frogs 172 0
other alt.binaries.encrypted 160 0
yuun alt.binaries.nl 152 0
ngPost alt.binaries.nl 149 0
other alt.binaries.bloaf 134 0
nyuu alt.binaries.erotica 119 0
other alt.binaries.warez 119 0
other alt.binaries.ftn 107 0
nyuu alt.binaries.ijsklontje 106 0
random alt.binaries.newznzb.delta 103 0
ngPost alt.binaries.mom 102 0
random alt.binaries.newznzb.charlie 101 0
1 # Voyager 1 upload_signatures WHERE dropped, 2026-10-09: tool, group, probed, named
2 other alt.binaries.ath 10988 24
3 ngPost alt.binaries.ath 3843 0
4 hex32 alt.binaries.test 1890 2
5 ngPost alt.binaries.a51 1516 0
6 nyuu alt.binaries.a51 700 0
7 nyuu alt.binaries.mom 656 0
8 hex32 alt.binaries.boneless 453 1
9 nyuu alt.binaries.misc 356 0
10 nyuu alt.binaries.games.encrypted 353 0
11 other alt.binaries.etc 317 1
12 other alt.binaries.misc 310 0
13 nyuu alt.binaries.warez 292 0
14 other alt.binaries.usenet2day 255 0
15 other alt.binaries.ijsklontje 238 0
16 ngPost alt.binaries.bloaf 237 0
17 nyuu alt.binaries.nl 196 0
18 other alt.binaries.archive.encrypted 189 0
19 nyuu alt.binaries.frogs 172 0
20 other alt.binaries.encrypted 160 0
21 yuun alt.binaries.nl 152 0
22 ngPost alt.binaries.nl 149 0
23 other alt.binaries.bloaf 134 0
24 nyuu alt.binaries.erotica 119 0
25 other alt.binaries.warez 119 0
26 other alt.binaries.ftn 107 0
27 nyuu alt.binaries.ijsklontje 106 0
28 random alt.binaries.newznzb.delta 103 0
29 ngPost alt.binaries.mom 102 0
30 random alt.binaries.newznzb.charlie 101 0