Realtime alert emails use a single body block — Email events render through one cleanly assembled body instead of stitched-together slots, producing more consistent formatting.
Improved
Daily sync skips plugins with no changelog file — Plugins flagged as having no dedicated changelog are no longer retried on every sync, cutting wasted work and ops noise.
Daily sync repair pass deduplicates by slug — The repair pass no longer attempts the same plugin twice in one run.
Changelog parser accepts both header styles — Plugins using ## Changelog (Markdown-style) headers are now detected alongside the standard format.
Daily-sync holds back last-updated date on SVN fetch failure — When the readme SVN fetch fails, the plugin’s last_updated timestamp is preserved instead of being overwritten with a wrong value.
Quieter daily-digest framing for N=1 events — When the digest contains only one event, the subject and body framing now agree instead of saying “1 update” with multi-event copy.
Ops report renders repair-budget warning correctly — The repair-budget hit warning now displays even when no null hashes were found.
Fixed
Daily-sync no longer crashes on missing nullRowsCount — A ReferenceError that broke daily sync runs is resolved; the variable is now declared outside the repair try block.
Carry-forward hash lookup uses per-column independent reads — A missing migration that broke carry-forward lookups was added, so per-column repairs now work as designed.