-
released this
2026-05-25 23:01:04 -04:00 | 630 commits to dev since this releaseWhat's new
Extension publish flow re-architected —
:latestalways carries the XPIbuild.ymlnow has asign-extensionjob that runs BEFOREbuild-webas a dependency. No more race with a separateextension.ymlleaving:latestwithout the XPI for ~5min until a side-commit triggered a second build.- Signed XPIs cached as assets on
ext-<version>Forgejo releases. Future builds hit the cache and skip AMO entirely unless the extension version bumps. AMO blocks re-signing the same version (returns 409), so this cache is load-bearing. - Extension bumped 1.0.1 → 1.0.2.
extension.ymlshrinks to lint-only.web-ext-config.cjsremoved — web-ext v8 mis-parses.cjsconfigs as ifmodule.exportswere a config option (UsageError: The config option "module.exports" must be specified in camel case). Ignore-files moved inline to eachpackage.jsonscript with--no-config-discovery.
Deep scan now does what users expect (IR-parity)
- Re-applies sidecar metadata, fills NULL phash/artist on already-imported rows. Previously was a near-no-op that just chained
backfill_phash. - New
refreshedImportResult status +ImportBatch.refreshedcounter (migration 0019). UI banner showsrefreshed Nalongside imported/skipped. scan_directory(mode=deep)skip-set excludes only in-flight statuses (completed/skipped paths get re-queued in deep mode). Quick scan keeps the original "any non-failed" semantics.- Misleading "Scan complete — no new files" toast replaced with honest workload-aware messaging.
Archive imports no longer soft-timeout on large libraries
- Operator hit
SoftTimeLimitExceeded()because each archive member re-queried ALLImageRecord.phash IS NOT NULLrows. Fixed by caching the candidates list on the Importer instance, appending on each imported/superseded outcome, invalidating on supersede/deep-rephash. Same one-cache-per-archive-import pattern IR uses.
Artist DangerZone reachable in one click
ArtistViewnow has Overview / Settings tabs (sticky at top under TopNav). The cascade-delete UI moved from below the infinite-scroll image grid (unreachable without exhausting the whole gallery) into the Settings tab.
Test changes
test_importer_deep.py: updated for the new"refreshed"statustest_phash_dedup.py::test_import_task_maps_superseded_to_complete_and_requeues: added"refreshed"assertiontest_scan_deep_requeue.py(new): pins the quick-vs-deep skip-set divergence
Migration
0019_import_batch_refreshed: addsrefreshed: int NOT NULL DEFAULT 0toimport_batch. Backfills in place viaserver_default.
🤖 Generated with Claude Code
Downloads