mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 12:32:43 +00:00
A twice-daily card advances its display-due to the evening slot once the morning slot's catch-up window has lapsed, so a late-morning "Genommen" tap posts `scheduledFor = <evening slot>` with `takenAt = now`. Band attribution correctly refuses the take (it lands in no window), but the intake routes' source-agnostic convergence probe then bound it to the evening slot's pending REMINDER row — recording the morning dose as the evening one, silently consuming a slot the user had not reached, and jumping the dashboard "next intake" to the following day. Gate the convergence probe with `mayConvergeOntoSuppliedSlot`: a taken write may not converge onto a slot whose anchor is in the future relative to the take (the same forward-grace invariant `resolveCanonicalSlotInstant` already enforces). Off-window late takes now record standalone (ad-hoc), leaving both real slots intact; skips and pending echoes still name their slot deliberately. Applied to both the per-medication and bulk intake routes.