Contract
Temporal task copy acknowledges real dates without manufacturing urgency. The default language is factual, non-prescriptive, and visually calm. Default temporal UI must not use:- red badges or red urgency accents
- all-caps urgency such as “DUE”
- countdown pressure such as “only 2 days left”
- blame language such as “you missed” or “failed”
- moralized states such as “overdue” or “behind”
Deadline-window copy
Deadline-window tasks use “needs to happen by” before the due day and “due today” on the due day. They do not use countdowns as pressure.| State | Default copy | Do not use |
|---|---|---|
| Outside horizon | No Home copy; task remains hidden unless it fits normal capacity rules. | ”Upcoming deadline” as a persistent badge |
| Inside horizon, 3+ days | ”This needs to happen by Thursday - on a typical day it costs about 12 mana." | "Deadline approaching” |
| Tomorrow | ”This needs to happen by tomorrow - on a typical day it costs about 12 mana." | "Only 1 day left” |
| Due today | ”This is due today - on a typical day it costs about 12 mana." | "DUE TODAY” |
| Due today, over pool | ”This is due today and costs more than today’s mana. It may need to be your priority." | "You are over budget” |
| Due time passed | ”Carried over." | "Overdue” |
| Cancelled or archived | ”No longer needed." | "Failed” |
Appointment copy
Appointment tasks are fixed to a real-world date or time. Before the appointment day, copy is planning context, not a to-do prompt.| State | Default copy | Do not use |
|---|---|---|
| Outside horizon | No Home copy. | ”Appointment coming soon” as a persistent badge |
| Inside horizon, not today | ”You have [task name] on Thursday - on a typical day it’ll use about 12 mana." | "Prepare now” |
| Tomorrow | ”You have [task name] tomorrow - on a typical day it’ll use about 12 mana." | "Don’t forget” |
| Today | ”Scheduled for today." | "Must attend today” |
| Today, over pool | ”Scheduled for today - costs more than today’s mana." | "Warning” |
| Time passed | ”Carried from a previous day." | "You missed this appointment” |
| Cancelled | ”Cancelled." | "Missed” |
Deferred and partial work
Deferred and partial-completion copy treats pacing as normal.| State | Default copy | Do not use |
|---|---|---|
| Deferred | ”Moved to tomorrow.” or “Carried from Monday." | "Postponed again” |
| Partial completion | ”Partly done. Remaining cost is about 6 mana." | "Only half done” |
| Split work | ”Remaining work added separately." | "Unfinished” |
Visual rules
Default visual treatment must match the copy:- Use neutral or standard task chrome for temporal states.
- Use date labels as context, not alarm.
- Do not pair temporal copy with red, error, exclamation, or warning treatments.
- If an opt-in urgency cue exists, keep it informational and user-controlled.
Implementation references
Current Flutter copy lives inapp/lib/core/design/widgets/task_copy.dart. That file should track this contract when runtime copy changes are in scope.