The Insights banner promises accuracy before a single prediction has been scored #55

Closed
opened 2026-08-20 16:13:31 -05:00 by null · 0 comments
Owner

What is true now. InsightsScreen.kt's learning banner tells a user one cycle in: 'One cycle recorded. A few more and the predictions get noticeably better.' Nothing has been scored at that point, and for a genuinely variable user the promise is one the engine can never keep — her error is dominated by her own cycle variability, and the honest outcome is a wider window rather than a better date.

What it costs. It is the one user-facing claim in the app that outruns its measurements. Everything else on that screen is gated on data that supports it — the accuracy card hides its figures below three scored forecasts and says so.

What to do. Promise the mechanism, not the outcome: 'One cycle recorded. A few more and the forecast will be built from your cycles, not an average.' True by construction — the engine really does move off the population default as intervals arrive — and it keeps the ladder's voice, where the later stages already say 'starting to be yours' and 'based on your own history'.

Traps. No test pins the old string, so nothing will fail if this is missed; it needs eyes. Keep it to the banner body — the stage names themselves are fine.

Verify: the LEARNING-stage body string in app/src/main/kotlin/dev/privacyllc/period/feature/insights/InsightsScreen.kt no longer contains 'get noticeably better', and ./gradlew :app:testDebugUnitTest stays green.

**What is true now.** InsightsScreen.kt's learning banner tells a user one cycle in: 'One cycle recorded. A few more and the predictions get noticeably better.' Nothing has been scored at that point, and for a genuinely variable user the promise is one the engine can never keep — her error is dominated by her own cycle variability, and the honest outcome is a wider window rather than a better date. **What it costs.** It is the one user-facing claim in the app that outruns its measurements. Everything else on that screen is gated on data that supports it — the accuracy card hides its figures below three scored forecasts and says so. **What to do.** Promise the mechanism, not the outcome: 'One cycle recorded. A few more and the forecast will be built from your cycles, not an average.' True by construction — the engine really does move off the population default as intervals arrive — and it keeps the ladder's voice, where the later stages already say 'starting to be yours' and 'based on your own history'. **Traps.** No test pins the old string, so nothing will fail if this is missed; it needs eyes. Keep it to the banner body — the stage names themselves are fine. Verify: the LEARNING-stage body string in app/src/main/kotlin/dev/privacyllc/period/feature/insights/InsightsScreen.kt no longer contains 'get noticeably better', and `./gradlew :app:testDebugUnitTest` stays green.
null added this to the Batch 09 — Prediction Science & Hardening milestone 2026-08-20 16:13:31 -05:00
null added the
P2
label 2026-08-20 16:13:31 -05:00
null closed this issue 2026-08-20 16:32:20 -05:00
Sign in to join this conversation.
No Label
P0
P1
P2
release-blocker
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: null/Privacy-Period-Tracker#55
No description provided.