Merge obfuscated uploads by the random stem of their inner names
Test and deploy / test (push) Successful in 50s
Test and deploy / edge (push) Successful in 1m53s
Test and deploy / deploy (push) Successful in 2m32s

hep, hephaestus and gyges post each file under a subject name of its own
(31,000 one-file releases), but the yEnc name in each file's first article
keeps the upload's random stem ("bX147zx8I0oEgj7nzFCiorCT0ps2jEcb.7z.001"),
one stem per counter total. The merger's second pass joins releases whose
lone inspections share a random stem: one group and poster, the same total,
within 48 h, no more files than the total plus 10. An expression index over
the stem; release_merges records the kind (via) and takes a stem.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Daan MeijerandClaude Opus 5.5 committed 2026-10-12 23:38:31 +02:00
1 parent 942c4901fa
commit 2823d42bfa
3 files changed
+175 -10

No files matched your search

+57 -1
View File
@@ -47,7 +47,7 @@ test.group('Par2Merger', (group) => {
await db.table('par2_sets').insert({ set_id: setId, release_id: par2, files: 2 })
const round = await new Par2Merger().round()
assert.deepEqual(round, { sets: 1, merges: 1, releases: 3 })
assert.deepEqual(round, { sets: 1, merges: 1, releases: 3, stems: 0, stemMerges: 0, stemReleases: 0 })
const target = await db.from('releases').where('id', b).firstOrFail()
assert.equal(target.files, 4)
assert.equal(target.segments, 40)
@@ -104,6 +104,62 @@ test.group('Par2Merger', (group) => {
assert.equal((await db.from('releases').whereIn('id', ids).select('id')).length, 6)
})
test('merges the one-file releases of an obfuscated upload by the random stem of their inner names', async ({ assert }) => {
const at = new Date('2022-07-07T19:34:00Z')
let n = 0
const release = async (poster: string, posted: Date, total: number, inner: string | null, groupId = 1) => {
n++
const key = `dd${String(n).padStart(6, '0')}`
const [row] = await db
.table('releases')
.insert({ release_key: key.padEnd(40, '0'), identity_key: key.padEnd(40, '0'), name: `hex${n}`, source: 'stem', groups: '[]', group_id: groupId, files: 1, posted_at: posted, readable: false, file_total: total, poster })
.returning('id')
if (inner) {
await db.table('release_inspections').insert({ release_id: row.id, candidate_id: 5000 + n, kind: 'lone', result: JSON.stringify({ yencName: inner, type: '', size: 1 }) })
}
return Number(row.id)
}
const hep = 'hep <adsjfhsdh@sdljf>'
const stem = 'nabNGjSlKhOYJCslnEw1MzJIgPIjffyT'
const a = await release(hep, at, 15, `${stem}.7z.001`)
const b = await release(hep, new Date(at.getTime() + 60_000), 15, `${stem}.7z.002`)
const c = await release(hep, new Date(at.getTime() + 120_000), 15, `${stem}.vol07+08.par2`)
// Another poster, a week later, another total, another group: apart.
const other = await release('someone <x@y>', at, 15, `${stem}.7z.003`)
const later = await release(hep, new Date(at.getTime() + 7 * 86400_000), 15, `${stem}.7z.004`)
const total = await release(hep, at, 16, `${stem}.7z.005`)
const group = await release(hep, at, 15, `${stem}.7z.006`, 2)
// A readable stem isn't merged on: a repost would share it.
const r1 = await release(hep, at, 15, 'SomeReadableMovieName.7z.001')
const r2 = await release(hep, at, 15, 'SomeReadableMovieName.7z.002')
const round = await new Par2Merger().round()
assert.equal(round.stemMerges, 1)
assert.equal(round.stemReleases, 3)
const left = (await db.from('releases').whereIn('id', [a, b, c]).select('id', 'files')).map((r) => Number(r.files))
assert.deepEqual(left, [3])
assert.equal((await db.from('releases').whereIn('id', [other, later, total, group, r1, r2]).select('id')).length, 6)
const merges = await db.from('release_merges').where('via', 'inner').select('set_id')
assert.deepEqual([...new Set(merges.map((m) => m.set_id))], [stem])
})
test('an inner-name merge with more files than the counter is more than one upload', async ({ assert }) => {
const at = new Date('2022-07-07T19:34:00Z')
const stem = 'R8aUMXqWQfOaei4u74fch9v0skxUY7ah'
const ids: number[] = []
for (let i = 1; i <= 3; i++) {
const key = `ee00000${i}`
const [row] = await db
.table('releases')
.insert({ release_key: key.padEnd(40, '0'), identity_key: key.padEnd(40, '0'), name: key, source: 'stem', groups: '[]', group_id: 1, files: 10, posted_at: at, readable: false, file_total: 5, poster: 'p' })
.returning('id')
ids.push(Number(row.id))
await db.table('release_inspections').insert({ release_id: row.id, candidate_id: 6000 + i, kind: 'lone', result: JSON.stringify({ yencName: `${stem}.7z.00${i}` }) })
}
assert.equal(await new Par2Merger().mergeStem(stem), 0)
assert.equal((await db.from('releases').whereIn('id', ids).select('id')).length, 3)
})
test('a set file that matches several releases nearby is ambiguous: not merged', async ({ assert }) => {
const at = new Date('2022-07-08T03:46:00Z')
const ids: number[] = []