Patterns
Actionable Assumptions
When the engine fills a gap (no sleep logged → assume 6h), it says so in a red-tinted block — and every assumption ships with the button that fixes it. The sheet closes, and the right log screen opens 320ms later.
Assumed today
No sleep logged — assumed 6h. Wearable not connected.
Rules
- 01Only actionable assumptions are listed (sleep, symptoms, workout, wearable) — “cycle date estimated” is not a button.
- 02Each action names its fix: “Log Sleep”, never “Fix”.
- 03Handoff: sheet dismisses → 320ms pause → log screen slides in.
- 04Assumptions never penalise — missing sleep assumes 6h and does not add crash risk.
Examples
DailyFocus drawer
“Assumed today: No sleep logged (assumed 6h) · No symptoms logged” + [Log Sleep] [Log Symptoms].
Cycle Overview drawer
Assumption actions restricted to its domain: Log Period / Sync wearable.
Anti-patterns
What breaks this pattern
- Listing assumptions without actions — that's a confession, not a pattern.
- Opening the log screen on top of the open sheet.
Do
- ·Cap the list at what matters (max 3 missing inputs)
- ·Scope actions to the card's domain
Don't
- ·Guilt-frame the gaps
- ·Penalise scores for missing data