mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 04:32:42 +00:00
Four verified HIGH data-integrity fixes, each in-place per-provider (no shared helper), from the campaign's data-integrity audit + adversarial verification: F1 — drain-per-sample-cumulative buildScanWhere was the only one of four sibling drains missing deletedAt: null; the nightly cumulative fold re-summed soft-deleted Apple samples and hard-deleted the legacy-steps audit tombstones. Added the filter (mirrors consolidate-daily-mean, dense-intraday-retention, consolidate-legacy-steps). F2 — the additive late-fold merge had no single-flight guard, so two overlapping runs (deploy overlap, or the admin endpoint racing the cron) produced a permanent 2x daily total. Added a pg_advisory_xact_lock per (user, externalId) plus an in-transaction re-read of the live contributors so the serialised-second fold contributes zero (a bare lock alone would still re-add its stale scanned sum). Mirrors the documents quota advisory-lock pattern. F3 — Withings sleep externalId keyed on segment START while measuredAt + the natural key use END; a re-scored segment missed the externalId probe, the sweep tombstoned the old row, and the re-keyed insert collided on the natural key and wedged. Added the natural-key rescue (re-key in place), mirroring the same-file measure path. F4 — Withings measure sync stamped lastSyncedAt + recordSyncSuccess unconditionally after a warn-only per-row loop; a transient write failure stranded the reading behind the 10-min overlap forever. Now holds the watermark and records failure on a hard row error (mirrors google-health/fitbit), while a benign P2002 still advances. Regression test per finding (reverting the three source files fails exactly four tests). Integration suite green against real Postgres.