v0.2.2
New Features
-
Organizer skip-pattern matcher -- ported the Metadata Forge skip-pattern mechanism into Folder Forge: a
Skip patterns, one per linefield (plus the "include persistent patterns from global policy" checkbox) that skips books whose source path or inferred metadata matches, same case-insensitive semantics as the fixer's version. -
Organizer failure visibility -- the apply loop previously called
shutil.movewith no error handling at all: one bad move (a blocked destination path, permission error, or a source that vanished between planning and apply) crashed the entire run and silently dropped every remaining planned move, with no report of what did or didn't move. Failures are now isolated per move, with a prominent "N succeeded, M failed" summary banner and a Failed Moves section listing each failure's error, source, and target. -
Organizer no-sidecars warning -- multi-file book handling (grouping split chapters, and title/author/series identity across them) leans on metadata the fixer writes to sidecars. If a scan root has nothing the fixer has ever touched, Folder Forge now warns ("Fixer was not applied -- multi-file book handling relies on the fixer script. Continue anyway?") instead of silently producing weak, filename-derived metadata for split books.
-
Start Here guide -- a collapsible legend on the landing page explaining Edit modes, Write modes, Match badges, the
metadata.jsonvs. Audiobookshelf Scanner distinction (with a screenshot of ABS's 6 metadata sources), Report types, the Owned badge, and a step-by-step Suggested Workflow through the full Metadata Forge + Organizer pipeline.
Fixes
-
Matcher regressions from a real library run -- a full pass against a real, messy
_unorganizedfolder surfaced several ways a wrong match could still reach an auto-write:- A candidate with no sequence data at all (empty series/sequence) could still hit the high-confidence write floors via title+duration+author agreement alone, even when the local file has an explicit, confident book number the candidate can't confirm or refute.
- The parallel/companion-series leniency (for legitimate cases like a local omnibus-numbered book matching a differently-numbered sub-series) ignored a confirmed sequence disagreement regardless of how large the gap was, letting a recurring saga tagline shared across several volumes of the same series override a real 3-book sequence mismatch.
- A coincidental substring series name (e.g. two different, unrelated series by the same prolific author, one name a substring of the other) let its raw text-similarity score carry an item past the write threshold on its own, even after the same-author cross-series protection blocked the more obvious inflation paths.
- A common multi-file release convention (
001 Author - Book N - Chapter X.mp3, a bare space after the zero-padded index) was never recognized as a chapter sequence, and once combined with a merged single-file edition sitting in the same folder, exploded every chapter into its own separate, wrong match instead of grouping into one book. - A loose file sitting directly in the scan root (no book-specific subfolder) could have its title corrupted into the literal name of the scan-root folder, following a backwards filename parse.
All five verified against the real library that surfaced them, with 12 new regression tests.
-
Library Downloader activation-bytes rate limit -- root-caused the Amazon CloudFront rate-limiting affecting AAX downloads: account activation bytes were being fetched once per book instead of once per run, firing repeated live requests to Audible's activation endpoint in quick succession and tripping abuse protection. Now fetched once per run, cached (including a failed fetch), and persisted to the auth file.
-
Library Downloader run leak --
run_download_workernow pops from the in-memory runs dict and writes a final report on completion, matching the other three workers (fixer, M4B tool, organizer). -
Settings anchor scroll --
/settings#accounts(linked from every tool page's "Set up auth" call-to-action, and the/auth-setupredirect target) landed users deep in the middle of the Publishers list instead of the Accounts section, because the browser's native hash-scroll fired before the async Publishers/Title-noise lists finished rendering and growing the page. Now re-applied after each list finishes loading. -
Organizer: multi-file grouping and cross-contamination -- recognizes part numbers embedded mid-filename, not just trailing ones; fixed metadata cross-contamination between distinct books sharing a folder-level
libraforge.json. -
Manual Review cover extraction -- now reads the real embedded cover tag instead of ffmpeg's first video stream, fixing wrong covers shown for some files.
-
Organizer Suspicion Report visibility -- moved above Planned Moves in the UI; it was getting buried below a long list of planned moves after a real run.
Docs
- CHANGELOG and README brought up to date against current features (Suspect Report, Settings-page consolidation, Goodreads/Kindle provider, Start Here guide); "Local agent advisory review" redacted from the README's Planned section, superseded by the Suspect Report (a resource-friendly, rule-based script pass over write matches, no LLM involved).