Files
GroundedHelper/frontend/lib/Grounded/utils/Thresholds.dart
alvocool 1a5867a98f Add routines module and full goal management
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
2026-11-02 08:45:41 +03:00

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;
}