Compare validated records with the last accepted local state. Use our
approved stable identity rule and explicit reviewed mappings only.
Compare normalized business fields separately from retrieval timestamps.
New fetch times or reordered fields must not make unchanged records new.

Write new.csv, updated.csv and review.csv with source provenance. Keep a
complete current.csv separately. For an update, retain old/new values.
Preserve prior records from failed sources. Don't infer deletion merely
because an item is absent from a partial listing page.

Report counts for new, updated, unchanged, retained-unavailable and review.
Preserve previous snapshots. Only after validation, write new state using
a temporary file and atomic replacement. Never reset seen-state silently.
Run the offline acceptance cases before using the utility with live data.
