chore(release): v1.28.24 — a deleted Google reading no longer blocks its re-import

The measurements unique index on (userId, type, source, externalId) is FULL —
it covers soft-deleted rows — so a tombstoned Google row permanently owned its
key: the live-only probe treated it as absent, planned a fresh insert, and
createMany's skipDuplicates dropped that insert silently against the
tombstone's key. Every sync, forever. Live incident: a self-hoster's step days
were stuck exactly this way (five tombstoned dates, confirmed in their data).

The probe now matches tombstoned rows too and the update branch carries
deletedAt: null unconditionally — a no-op on a live row, a deliberate
resurrection on a tombstoned one. Google remains the source of truth for its
own rows; removing Google data permanently means disconnecting the
integration. The stale 'partial unique index' comments are corrected.
This commit is contained in:
Marc-André Bombeck committed 2026-07-11 00:35:50 +02:00
1 parent 1c0f91adc1
commit 2869d0ab27
6 files changed
+166 -21

No files matched your search

+1 -1
View File
@@ -1,7 +1,7 @@
openapi: 3.1.0
info:
title: HealthLog API
version: 1.28.23
version: 1.28.24
description: >-
Self-hosted personal-health-tracking PWA — public API surface for the iOS native client and external ingest.