Marc-André Bombeck
1371bb1cf9
fix(measurement-reminders): recompute nextDueAt from the field actually set, not a nullish fallback
...
PATCH /api/measurement-reminders/{id} persisted an explicit null cadence
clear correctly, but the immediate nextDueAt recomputation merged fields
with `updateValue ?? existingValue` — a JSON null and an omitted field
are both nullish, so the merge silently fell back to the OLD cadence for
one cycle. This hit interval-to-RRULE and RRULE-to-interval transitions
and an explicit anchorDate clear alike.
The merge now keys off Object.hasOwn(updateData, field): updateData
already encodes exactly which fields are being persisted, including the
mutual-exclusivity auto-clear (setting one cadence nulls the other), so
recomputation can never diverge from what the row ends up holding.
2026-07-23 09:25:16 +02:00
Marc-André Bombeck
8736f44442
fix(dashboard): stop the score-ring PUT from resending a stale layout
...
The Settings page's instant score-ring toggle PUT the full dashboard
layout, built from the client's cached `remote` snapshot. That snapshot
can go stale mid-flight: if a normal tile/chart Save committed a newer
layout first, the ring request's explicit stale `widgets` (and
`comparisonBaseline` / `chartOverlayPrefs`) still won on write and
silently reverted the just-saved layout whenever it resolved last.
The ring mutation now PUTs only the two ring fields
(`buildRingMutationPayload`). `widgets` joins the existing
preserve-when-absent merge (`LAYOUT_FIELD_MERGE_DISPOSITION`) so an
omitted field is carried forward from whatever is currently stored
instead of a client-held copy, closing the race regardless of request
order.
2026-07-23 09:16:13 +02:00
Marc-André Bombeck
62eb431d66
release: v1.32.0 — hardening and scalability ( #580 )
...
* release: prepare v1.32.0
* test: stabilize water capture re-entry
v1.32.0
2026-07-22 04:14:15 +02:00
Marc-André Bombeck
b01822be48
Merge pull request #579 from MBombeck/release/v1.31.8
...
chore: release v1.31.8
v1.31.8
2026-07-21 18:20:40 +02:00
Marc-André Bombeck
25a56983b3
fix(medications): preserve wizard state during URL cleanup
2026-07-21 18:09:23 +02:00
Marc-André Bombeck
7f55083c3c
chore: release v1.31.8
2026-07-21 16:29:04 +02:00
Marc-André Bombeck
0d5d61bc36
fix(mcp): stabilize lab search pagination ( #578 )
2026-07-21 16:17:16 +02:00
Marc-André Bombeck
b20f1b5c66
fix: harden imports and daily medication state ( #577 )
v1.31.7
2026-07-21 13:08:28 +02:00
Marc-André Bombeck
403eabb888
fix: restore runtime Prisma migration loading ( #574 )
v1.31.6
2026-07-21 06:36:13 +02:00
Marc-André Bombeck
a30c31b25d
chore: release v1.31.5 ( #573 )
...
* chore: prepare v1.31.5 release
* docs: sync OpenAPI version for v1.31.5
v1.31.5
2026-07-21 05:22:45 +02:00
Marc-André Bombeck
085aa3f5c5
fix: harden pnpm supply chain and runtime image ( #572 )
2026-07-21 04:36:53 +02:00
Marc-André Bombeck
e38179e854
Merge pull request #571 from MBombeck/release/v1.31.4
...
release: v1.31.4 operational hardening
2026-07-21 02:41:45 +02:00
Marc-André Bombeck
5fe952b63d
fix(ci): harden release and e2e verification
2026-07-21 02:30:40 +02:00
Marc-André Bombeck
b38f41b99d
chore(release): prepare v1.31.4
2026-07-21 01:34:29 +02:00
Marc-André Bombeck
3ce6726646
fix(ci): harden test determinism and dependencies
2026-07-21 00:36:40 +02:00
Marc-André Bombeck
9adeb8fc19
fix(runtime): harden process startup and health
2026-07-21 00:05:03 +02:00
Marc-André Bombeck
914e7658db
ci: harden image publishing
2026-07-20 23:47:19 +02:00
Marc-André Bombeck
be1d0fb728
Merge pull request #570 from MBombeck/fix/document-summary-coach-mobile
...
fix: localize document summaries and refine mobile coach
v1.31.3
2026-07-20 22:45:51 +02:00
Marc-André Bombeck
3aa8ccd541
fix: localize document summaries and refine mobile coach
2026-07-20 22:34:56 +02:00
Marc-André Bombeck
f1a1887a01
Merge pull request #569 from MBombeck/release/v1.31.2-data-integrity
...
release: HealthLog v1.31.2 data integrity hardening
v1.31.2
2026-07-20 15:26:16 +02:00
Marc-André Bombeck
ad5806c53a
chore: format Polar client fix
2026-07-20 14:43:54 +02:00
Marc-André Bombeck
00a8c81c8d
docs: include Polar and dependency fixes
2026-07-20 14:40:09 +02:00
Marc-André Bombeck
1840779dd7
fix(polar): align collection response fields
2026-07-20 14:36:21 +02:00
Marc-André Bombeck
3c5afea912
test(documents): format PDF cleanup coverage
2026-07-20 14:30:44 +02:00
Marc-André Bombeck
b9425de40e
fix(polar): use AccessLink collection endpoints
2026-07-20 14:25:24 +02:00
Marc-André Bombeck
74a386fcfd
chore(deps): update July dependency bundle
2026-07-20 14:18:48 +02:00
Marc-André Bombeck
f36bbc51cd
docs: finalize v1.31.2 recovery notes
2026-07-20 14:05:58 +02:00
Marc-André Bombeck
d966355f83
chore: format data integrity fixes
2026-07-20 14:02:08 +02:00
Marc-André Bombeck
a846bbc90d
fix(import): make mood collision probing order independent
2026-07-20 13:55:22 +02:00
Marc-André Bombeck
4124c483eb
test(import): type legacy mood retry mocks
2026-07-20 13:53:31 +02:00
Marc-André Bombeck
ca1ba8b128
test(whoop): type morning refresh mock
2026-07-20 13:53:06 +02:00
Marc-André Bombeck
6ebc278c2c
fix(import): preserve repeated legacy mood rows
2026-07-20 13:47:28 +02:00
Marc-André Bombeck
e9507a0c93
fix(backups): address restore review findings
2026-07-20 13:42:38 +02:00
Marc-André Bombeck
7eb3b91925
fix(import): resolve legacy mood timestamp collisions
2026-07-20 13:35:37 +02:00
Marc-André Bombeck
cd6b5f0cc6
fix(backups): preserve canonical restore identity
2026-07-20 13:25:37 +02:00
Marc-André Bombeck
8b7cbddd72
fix(import): derive stable legacy mood timestamps
2026-07-20 13:25:13 +02:00
Marc-André Bombeck
9484240688
fix(whoop): settle backfill side effects
2026-07-20 13:24:49 +02:00
Marc-André Bombeck
1b717b4ca0
fix(whoop): fold committed backfill chunks
2026-07-20 13:16:34 +02:00
Marc-André Bombeck
007ea76327
fix(import): stabilize legacy mood retries
2026-07-20 13:12:55 +02:00
Marc-André Bombeck
197f7bf5a1
fix(whoop): persist backfill chunks durably
2026-07-20 13:08:48 +02:00
Marc-André Bombeck
e47d02702d
fix(import): stabilize legacy mood retries
2026-07-20 13:03:36 +02:00
Marc-André Bombeck
5fc0b1eead
docs(api): sync spec for v1.31.2
2026-07-20 12:32:03 +02:00
Marc-André Bombeck
a87a144b1e
chore(release): prepare v1.31.2
2026-07-20 12:29:21 +02:00
Marc-André Bombeck
2716f302c7
chore: align hardening tests and formatting
2026-07-20 12:24:15 +02:00
Marc-André Bombeck
5d784a639c
fix(integrations): serialize refresh and cursor writes
2026-07-20 12:09:32 +02:00
Marc-André Bombeck
a8ac376cf7
fix(measurements): reconcile dual identities atomically
2026-07-20 11:55:09 +02:00
Marc-André Bombeck
f8b0a64d69
fix(backups): preserve canonical recovery integrity
2026-07-20 11:44:29 +02:00
Marc-André Bombeck
5f4017d039
fix(withings): queue ECG webhooks durably
2026-07-20 11:37:23 +02:00
Marc-André Bombeck
7b515f4f82
fix(devices): reconcile APNs registrations
2026-07-20 11:25:48 +02:00
Marc-André Bombeck
452d1a2ae3
fix(backups): restore canonical payloads completely
2026-07-20 11:23:57 +02:00