printhive/lib
dlawler489 8a2ad5785c Stop tagging deadlocking, and retry a transaction that loses one
Two transactions tagging overlapping models could each hold a tag row the other
wanted. tagId used ON CONFLICT DO UPDATE, which rewrites the row and therefore
write-locks it even though the name never changes, and each caller iterated in
whatever order it happened to have. That is what killed "Mushroom Clicker"
during AI run 21, while the collection watcher was importing and rule-tagging
the same tags.

tagId no longer rewrites unchanged rows, and applyAiResult, replaceRuleTags and
setTags all tag in sorted order, so locks are taken in the same sequence every
time. db.transaction retries a deadlock victim up to three times as well, which
covers the paths this doesn't — the victim rolled back and changed nothing, so
running it again is safe.

Measured: the old pattern deadlocks on demand (40P01), and the same collision
run 48 times through the new code fails zero times.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 14:56:28 +10:00
..
importers Don't retry MakerWorld's anti-bot refusal 2026-09-16 12:53:36 +10:00
ai.js Sturdier AI replies: format example, more retries, and errors that show the reply 2026-09-15 20:26:42 +10:00
aiRuns.js Name every model an AI run failed on, and let a finished run retry them 2026-09-16 14:08:08 +10:00
archives.js Browse archives, preview companion files, and view FBX/STEP/3DM/OBJ+MTL 2026-09-15 07:36:47 +10:00
archiveWorker.js Browse archives, preview companion files, and view FBX/STEP/3DM/OBJ+MTL 2026-09-15 07:36:47 +10:00
auth.js Open models in your slicer and drag files out 2026-09-15 09:15:37 +10:00
autotag.js AI tags and descriptions, search by meaning, and automatic tags 2026-09-15 11:12:58 +10:00
collectionWatch.js Keep the Watched page current, and reach every model waiting for files 2026-09-16 13:34:59 +10:00
converter.js Show 3MF projects plate by plate in their filament colours 2026-09-15 07:49:58 +10:00
db.js Stop tagging deadlocking, and retry a transaction that loses one 2026-09-16 14:56:28 +10:00
duplicates.js Add duplicate finder, trash, notes, and library search/filters 2026-09-14 23:06:09 +10:00
embeddingModel.js AI tags and descriptions, search by meaning, and automatic tags 2026-09-15 11:12:58 +10:00
embeddings.js AI tags and descriptions, search by meaning, and automatic tags 2026-09-15 11:12:58 +10:00
fileProcessor.js Browse archives, preview companion files, and view FBX/STEP/3DM/OBJ+MTL 2026-09-15 07:36:47 +10:00
fingerprint.js AI tags and descriptions, search by meaning, and automatic tags 2026-09-15 11:12:58 +10:00
flaresolverr.js Initial commit: Printhive 3D-print file library 2026-06-22 13:15:17 +10:00
handoff.js Open models in your slicer and drag files out 2026-09-15 09:15:37 +10:00
licenses.js Add per-license commercial-use rules (settings + auto-register) 2026-06-23 10:20:28 +10:00
mailer.js Add email/password auth + SMTP password resets 2026-06-22 22:33:11 +10:00
python.js Stream-parse 3MF files so Bambu projects don't exhaust memory 2026-09-15 07:02:00 +10:00
store.js Stop tagging deadlocking, and retry a transaction that loses one 2026-09-16 14:56:28 +10:00
thumbnails.js Make thumbnails on the server in the background 2026-09-15 07:54:26 +10:00