Privacy-Period-Tracker/docs
null cf09c7ab97 fix: apply a reminder's answer to the day it asked about
A notification waits in the shade until somebody deals with it. The
handler used LocalDate.now(), so a reminder posted on Friday and tapped on
Monday recorded Monday -- and a period start is the single input the whole
prediction engine is built on. Being wrong by a weekend there is worse
than never asking.

The day the question was about now travels in the PendingIntent, written
when the notification is built rather than read when it is tapped, and the
parked action carries it through the app lock too.

ReminderActionRules then decides whether the answer is still worth
writing: nothing dated in the future, nothing older than a day, nothing
already settled by a start she has logged since, and ENDED only where
something is actually open to close. The bias is towards writing nothing
-- a stale tap still opens the app, which is where she can see what is
recorded and change it, and that beats a confident write against the wrong
day.

MainActivity consumes the extras after parking, and only parks when
savedInstanceState is null. Android redelivers the original Intent after
process death with its extras intact, so a restore would otherwise apply
a days-old answer a second time; a rotation would too. The writes are
idempotent today, which is the only reason that was survivable.

Anything unrecognised -- including the action strings from before buttons
carried their own meaning -- writes nothing. A notification sitting in a
shade across an upgrade opens the app and records nothing, rather than
guessing.

Handler tests go from 8 to 12: the next-morning case, the days-late case,
the already-answered-in-the-app case, and a legacy notification with no
date at all.

Also gives the app-lock test's await a diagnosis. It went red once in a
full-module run and passed alone, and "timed out" said nothing about
whether the write never happened, the callback never fired, or the state
had simply not arrived. It reports busy, message and hasPin now.

closes #69

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-21 00:20:29 -05:00
..
architecture fix: apply a reminder's answer to the day it asked about 2026-08-21 00:20:29 -05:00
data feat: the wordmark has its space, and logo and banner say so 2026-08-18 22:12:33 -05:00
design fix: step back through onboarding and the erase confirmation 2026-08-21 00:19:35 -05:00
history docs: record the two release-blockers and the reported trap 2026-08-20 21:59:52 -05:00
planning docs: correct 57 claims the code and tracker disagreed with 2026-08-18 16:33:14 -05:00
qa docs: record Batch 09, and close half the long-horizon QA gap 2026-08-20 16:39:30 -05:00
security docs: stop describing a biometric key that does not exist 2026-08-21 00:13:01 -05:00
DOC_TRUST_MAP.md docs: separate the constants that are physiology from the ones that are tuning 2026-08-20 16:32:16 -05:00
TOOLS.md docs: correct 57 claims the code and tracker disagreed with 2026-08-18 16:33:14 -05:00
WORK_CYCLE.md docs: a check-in needs the project UUID, not the slug 2026-08-18 16:35:06 -05:00