Dates: pre-cutover audit utility for the filename date class #117
Notifications
Due Date
No due date set.
Blocks
Depends on
Reference: Apps/ImageApi#117
Reference in new issue
Block a user
Parent
ImageApi #113 — SPEC: true-instant date contract (ADR-0001).
What to build
A one-shot, operator-run audit utility (following the repo's existing utility-binary pattern, e.g. the cleanup binary) that lists every file matching a filename-class pattern: the file's current stored date and date source, and the date/source/offset-source the re-based resolver would assign it. It reads the live database and walks the libraries (honor the library exclusions and the online gate — offline libraries are reported, not processed). It changes nothing.
Purpose: the filename class is a documented inversion of EXIF-wins and depends on the operator's memory of "what these filenames mean." This report is the human spot-check that gates the production backfill drain — the operator reviews it, fixes any mis-tagged pattern or misclassified file, and only then starts the drain.
Acceptance criteria
utc_direct).Blocked by
Resolved via PR #123 (
master←feature/filename-audit, commits3aa6ce3,89fc24c).cargo run --bin filename_audit— strictly read-only (SELECTs only; verified in review), one entry per filename-class file: pattern, current date + source, proposed date + source + tz_source + numeric offset,*marking rows whose stored legacy date would change. Deterministic, stable-sorted by (library, path).resolve_dates_batchwith empty priors (the #118 call shape), in-class path is subprocess-free (no exiftool), effective excludes =EXCLUDED_DIRS∪ per-library column,probe_onlinegate withhad_datafrom theimage_exifcount — disabled and offline libraries reported as skipped, never partially processed.memories::match_filename_datecanonical matcher (reports which pattern matched);extract_date_from_filenameis now a thin, byte-for-byte behavior-preserving wrapper.utc_directwith no offset, exclusions, offline/disabled skip, stable sort, report determinism). 645 lib + 718 integration pass; fmt/clippy clean. Two-axis review: spec 6/6 + invariants 5/5 PASS; standards ship-with-fixes, all 6 findings applied.The operator runs it against prod before starting the #118 drain; the report is the gating artifact.