feat(scanner): force rescan = original scan; feat(filters): the manually-edited filter (faceted plan Phase 13)
Release / build-and-push (push) Successful in 3m7s
Release / build-and-push (push) Successful in 3m7s
Force rescan contract change (owner-directed): the editorial-keep skip
is retired. Force rescan now re-derives EVERY field on EVERY book from
all sources — multi-file books included (the folder/zip flows ran the
full chain on create and on manifest-flagged edits, but skipped the
sidecar apply under force). metadata_overrides is the only protection:
ApplyMetadataOverrides re-applies manual values inside the writer, so
manual edits survive; everything else re-derives.
- A force pass also STAMPS each re-derived book's manifest with the
current parser version (success-only — same truthfulness rule as
Phase 10) and closes its open processing issues (Phase 11 self-heal).
Force rescan and the ev-bump trickle now converge: either leaves the
library fully current; the deploy order is bump-first, then Rescan
All (documented in the plan and contract_pins).
- Single-file force rescan already ran the full chain — unchanged,
now pinned.
NEW filter field manually_edited ("Manually edited", boolean):
cardinality(mi.metadata_overrides) > 0 / = 0. Composed-engine (qf)
only — the builder's Book facts group gains it with is true/false;
no value menu, no suggestion surface; family lens inherited.
Tests: multifile force applies sidecar metadata + stamps + override
protection; single-file pin; the filter both directions scoped to the
test library; adjacent suites (Audiobook, Calibre, ExtractorVersion,
CrossLibraryMove, ProcessingIssues, FilterBuilder, SchemaIdempotency)
green. The extractor mechanism itself is untouched — the owner bumps
scan_extractor_version manually via the admin UI (plan Phase 13 §3).
This commit is contained in:
1 parent
9b5defcb31
commit
a42c6d4f75
7 files changed
+239
-6
No files matched your search
@@ -395,3 +395,22 @@ cover_image_path, has_conflict, format_group, badge`.
|
||||
open issues. Unchanged-skip scans do NOT resolve (extraction never
|
||||
re-ran — the degraded metadata is still degraded). A repeat failure
|
||||
reopens a resolved row (upsert sets resolved=false).
|
||||
|
||||
## 2026-10-21 — Phase 13: force rescan = original scan; the manual-edits filter
|
||||
- **Force rescan contract change (owner-directed)**: force rescan now
|
||||
behaves like an original import — the full metadata chain (sidecars →
|
||||
folder structure → tags → fallbacks) re-lands on MULTI-FILE books
|
||||
too (the pre-Phase-13 editorial-keep skip is retired; the owner's
|
||||
metadata_overrides count in the single digits, and overrides are the
|
||||
only protection, honored inside the apply). A force pass also STAMPS
|
||||
each re-derived book's manifest with the current parser version
|
||||
(success-only) and closes its open processing issues. Single-file
|
||||
force rescan already behaved this way — now pinned by test.
|
||||
- **NEW filter field** `manually_edited` ("Manually edited", boolean):
|
||||
is_true = `cardinality(mi.metadata_overrides) > 0`, is_false = `= 0`.
|
||||
Composed-engine (qf) only — no flat param, no value menu, no
|
||||
suggestion surface; family lens inherited.
|
||||
- Deployment ordering note (owner Q&A): set scan_extractor_version
|
||||
BEFORE Rescan All — force rescan stamps books with the current
|
||||
setting, so bump-first + force = one pass of work; force-first +
|
||||
bump = the trickle re-derives everything again (wasted, not harmful).
|
||||
Reference in new issue
Block a user