feat(immich): dubbelen-review iteraties 1-4 — vergelijk-view, batch-cleanup, quarantaine #68
No reviewers
Labels
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
janpeter/Media-Organizer!68
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/immich-dubbelen-review-iteraties"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Immich Dubbelen — review + iteraties 1-4
Volledige verbetering van het Immich Dubbelen-scherm op basis van de diepgaande review in
docs/reviews/2026-07-31-immich-dubbelen-scherm-review.md(met uitvoeringsstatus per iteratie).Iteratie 1 — quick win
ImmichAsset(dekt duplicate-assets zonder persoonskoppeling) met person-join fallbackvariant=thumbnailserveert echte Immich-thumbnails met lokaal fallbackblocked-badge fixIteratie 2 — vergelijk-view
/immich/dubbelen/[groupId]: grote previews (variant=preview, Immichsize=preview), criteria-matrix (resolutie, grootte, datum, pad, personen, checksum) met winnaar-marks, vorige/volgende-navigatiekeeperImmichAssetId, server-side gevalideerd (unknown_keeper_override,keeper_override_without_local_asset); preview levert per-asset detail +suggestedKeepImmichAssetIdIteratie 3 — beslis-model, batch, quarantaine
20260731120000:decision/decided_at/decision_keeper_immich_asset_idopImmichDuplicateGroup(overleeft re-sync) + JobTypeduplicate_cleanup_batchPOST /api/immich/duplicates/decisions(gevalideerde batch-beslissingen) enPOST /api/immich/duplicates/execute-batch(job-queue)runDuplicateCleanupBatchJob: queued groepen sequentieel met voortgang in Jobs-UI; geblokkeerde/falende groepen terug naarpendingzonder de batch te stoppen<media-root>/.quarantine/<run-id>/+manifest.jsoni.p.v. directfs.unlink(fail-safe bij bestaand doel; scanner slaat dot-mappen over)Iteratie 4 — metrics, filters, historie
duplicateGroupSavingsBytes, hergebruikt keeper-algoritme)take: 200/immich/dubbelen/runsmet per-item status en retry-knopVerificatie
npm test: 355/355 groen (+43 nieuwe tests t.o.v. main)npm run build: groen (incl. alle nieuwe routes)npx eslint: 0 errors (2 bekende<img>-warnings conform bestaand patroon)Deploy-notities
npm run check-db && npm run db:deploy(postgres enum + nieuwe kolommen) vóór of tijdens de redeployredeploy_media_organizer; deploy-taak voor max2 staat klaar in de s4m-queueVerdict: REQUEST_CHANGES
Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
Findings
src/lib/duplicates/execute.ts:395: quarantine-manifest wordt pas naperformDuplicateCleanupSideEffectsgeschreven. AlsmoveToQuarantine()voor één loser slaagt en een latere loser/Immich scan/andere side effect faalt, eindigt de run als error zonder manifest voor de al verplaatste bestanden. Daardoor is de nieuwe quarantaine-laag niet betrouwbaar herstelbaar en kan een retry het probleem verergeren omdat alleen de later verplaatste bestanden in het manifest terechtkomen. Schrijf het manifest atomair mee zodra bestanden verplaatst worden, of gebruik een per-file append/update met fail-safe handling voordat een run fout kan terugkeren.Opmerkingen
De PR volgt verder de richting van de bestaande productstandaarden: protected routes hercontroleren server-side, de batch loopt via de job-queue, en de UI gebruikt semantische componentvarianten/tokens. De testdekking is breed, maar mist specifiek het partial-failure scenario waarin quarantaine al bestanden heeft verplaatst voordat de run faalt.