mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-09 13:01:00 +00:00
Marking a missed dose taken from the Verlauf ledger showed the row flip to taken and then fall straight back to missed, with the entry nowhere on the day it was made for. The ledger posts the displayed slot's own anchor as `scheduledFor` and means "record THIS dose". The route resolved the slot by window band from `takenAt` instead, which answers a different question: which slot the recording moment falls into. Backfilling an older slot matches no band, so the write fell through to the standalone insert and landed as an ad-hoc row anchored at the recording moment. The named slot stayed unserved, the optimistic row was overwritten by the authoritative refetch, and the dose sat under today with no sign of where the user had put it. A named instant that is a real slot of this medication now decides the binding, validated against the same band anchors the "diesem Slot zuordnen" pin uses, so an arbitrary client instant still records ad-hoc. A slot that lies ahead of the take is still refused by the existing forward guard, so a late-morning dose cannot consume the evening slot. When the naming and the clock disagree the binding rests on the user's choice, so the row stores it as such and the read ledger anchors it there rather than dropping back to ad-hoc; an ordinary on-time take resolves to the same anchor either way and is untouched. The tests drive the shipped POST and the shipped dose-history GET, and assert the persisted row and the ledger read back from it.