Privacy-Period-Tracker/docs
null b0b4f47a67 feat: detect a probable missed period without touching the history
IntervalAnalysis turns confirmed starts into weighted intervals and decides what
looks questionable — relative to this user's own history, never to a constant.

That distinction is the whole point. A global "over 40 days is suspicious" rule
gets exactly one group wrong, and it is the group whose cycles are already
unusual: the person this product exists for, and the one most tired of apps
assuming she is average. 45 days is unremarkable at a usual of 43 and worth
questioning at a usual of 29. Both are tests.

Two flags, because they earn different responses. A gap near a whole multiple of
the usual is a probable missed entry and produces §14's question. A gap merely
far from usual is down-weighted and left alone — asking would be the
over-questioning §25 warns against, and §51's 45-against-29 outlier is exactly
that case.

Nothing is ever dropped. §12 step 2: unusual data is marked for review or given
less influence, never silently deleted. A questionable interval keeps a quarter
of its recency weight, and a test asserts it is still present and still counts.

Recency decay is here too, ready for the centre in #10: newest cycle weight 1.0,
each older one 0.85 of the last.

12 new tests. The §51 acceptance cases still pass unchanged.

closes #13
2026-08-18 03:06:38 -05:00
..
architecture feat: detect a probable missed period without touching the history 2026-08-18 03:06:38 -05:00
data chore: adopt the project template and add the Kotlin/Compose skeleton 2026-08-18 02:16:47 -05:00
design chore: adopt the project template and add the Kotlin/Compose skeleton 2026-08-18 02:16:47 -05:00
history docs: record Round 1 QA and the Batch 01 log entry 2026-08-18 03:01:33 -05:00
planning chore: adopt the project template and add the Kotlin/Compose skeleton 2026-08-18 02:16:47 -05:00
qa docs: record Round 1 QA and the Batch 01 log entry 2026-08-18 03:01:33 -05:00
security docs: name not-yet-existing paths without backticks so doc-claims passes 2026-08-18 02:18:25 -05:00
DOC_TRUST_MAP.md docs: name not-yet-existing paths without backticks so doc-claims passes 2026-08-18 02:18:25 -05:00
TOOLS.md feat: Room database for cycle history, and the schema guard that actually works 2026-08-18 02:32:07 -05:00
WORK_CYCLE.md docs: name not-yet-existing paths without backticks so doc-claims passes 2026-08-18 02:18:25 -05:00