Routines: workout, meditation and must-do routines with timed, rep and tick steps, sets and rest. A library screen, a builder with templates and drag-to-reorder steps, and a full-screen player that auto-advances timed phases, counts backgrounding and logs broken chains as partial. Goals: a goal editor (deadline, colour, category, default class, archive), routines linked to goals, and a goal field on tasks and routines. Tasks added from inside a goal are now actually attached to it via parentId. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KhQh614DMeYoQEH9SoMRUw
48 lines
1.8 KiB
Dart
48 lines
1.8 KiB
Dart
/// Configurable limits with sane defaults. These are the dials the user is
|
|
/// allowed to turn — everything else about enforcement is fixed.
|
|
class Thresholds {
|
|
/// Hard cap on unresolved overdue items.
|
|
static const int maxOpenOverdue = 5;
|
|
|
|
/// After this, a task cannot be deferred again — only completed or
|
|
/// explicitly abandoned.
|
|
static const int maxDeferralsPerTask = 2;
|
|
|
|
/// Minimum excuse length. Free text, no template buttons; the friction is
|
|
/// the point.
|
|
static const int minExcuseLength = 15;
|
|
|
|
/// Standing thresholds on the debt score.
|
|
static const double warnedThreshold = 12;
|
|
static const double groundedThreshold = 30;
|
|
static const double lockdownThreshold = 60;
|
|
|
|
/// Missed non-negotiables that force Grounded regardless of score.
|
|
static const int nonNegotiableMissesForGrounded = 3;
|
|
|
|
/// Amnesty tokens granted per month.
|
|
static const int amnestyTokensPerMonth = 3;
|
|
|
|
/// Capacity check headroom — plan against 85% of what you historically get
|
|
/// done, not 100%.
|
|
static const double capacityHeadroom = 0.85;
|
|
|
|
/// Days after which an untouched elective auto-archives.
|
|
static const int electiveArchiveDays = 21;
|
|
|
|
/// Snooze tax: each snooze shortens the next interval instead of extending
|
|
/// it, and the third becomes a full-screen alarm.
|
|
static const List<int> snoozeLadderMinutes = <int>[10, 5, 2];
|
|
|
|
/// Minutes a push can go unacknowledged before SMS fallback fires.
|
|
static const int smsFallbackMinutes = 20;
|
|
|
|
/// Routine runner: the last seconds of a timed phase tick with a haptic, so
|
|
/// the change of phase never arrives unannounced.
|
|
static const int routineCountdownSeconds = 3;
|
|
|
|
/// A routine stopped before this fraction of its steps is logged as broken
|
|
/// rather than partial.
|
|
static const double routinePartialFloor = 0.5;
|
|
}
|