fix(kobo): preserve koreader matching for converted downloads

Register the identity of delivered bytes so Kobo conversions and audio
removal continue matching their source books in KOReader. Keep download
registration recoverable without allowing database lock waits to stall it.

Preserve manual corrections across cached device identities, make review
semantics explicit, and keep cache invalidation bounded for large libraries.
Add unit, database, lifecycle and scale regressions with one generated migration.

Closes #1697
This commit is contained in:
neon
2026-10-07 00:07:50 +00:00
parent 019c432262
commit 58756565fc
51 changed files with 25561 additions and 735 deletions
+19
View File
@@ -920,6 +920,25 @@ export const E2E_SUITES = Object.freeze({
...SHARED_DB_AND_HELPER_PATHS,
],
},
"kobo-koreader-download": {
id: "kobo-koreader-download",
name: "Kobo KOReader Download Identity",
timeout: 60,
lane: "full",
description: "Kobo delivered hashes, KOReader matching, cache recovery and access isolation",
vitestTarget: "test/kobo-koreader-download.e2e-spec.ts",
junitOutput: `${TEST_RESULTS_DIR}/kobo-koreader-download-e2e-junit.xml`,
prepareDedicatedDatabase: true,
useDedicatedDatabase: true,
changedPaths: [
"server/src/modules/kobo/**",
"server/src/modules/koreader/**",
"server/src/common/utils/file-hash.utils.ts",
"server/test/kobo-koreader-download.e2e-spec.ts",
"server/test/e2e/reader-state-isolation/**",
...SHARED_DB_AND_HELPER_PATHS,
],
},
"kobo-cover-identity": {
id: "kobo-cover-identity",
name: "Kobo Cover Identity",