v1.1.0-beta.041 - feat(library): metadata editor, naming variables, custom covers, Smart Matcher
📝 Metadata editing
- metadata-editor-modal on the series page: series description/universe/SeriesGroup + per-issue ComicInfo; hasCustomMetadata locks against auto-sync; optional write-to-file queues an embed
- {SeriesGroup}/{UniverseName} folder/file naming in library/update + match-series (empty segments dropped; seeds resolved from the existing record so routine edits don't strip subfolders)
🎨 Custom covers
- New /api/library/cover-upload (write cover.jpg + hasCustomCover; DELETE reverts); library/cover serves cover.webp + tighter host allowlist; Upload/Revert on the series page
🧩 Smart Matcher
- smart-match-metadata-dialog: per-suggestion metadata + cover picker + live folder-path preview; bulk Custom-ID shared Universe/SeriesGroup
- match-series: non-destructive relocate via safe-fs (Standardize-names data-loss fix), conflict counting, custom-cover preservation on re-match; rewired off the no-auth auth.ts stub to getAuthOptions
🔐 Series page picks up the per-library request-button gating deferred from 3a
✅ Verification
- tsc --noEmit clean; vitest 221/221 across 64 files (+cover-upload suite)