Spec: SafeSum blurb for telling you how safe you are today

By: dreev and adam and bee
Spec level:
Gissues: #830, #1285, #1518, #1538
Forum discussion: Replacing Beebrain’s limsum with safesum
Changelog
2024-03-12: Copyedits and formatting
2020-07-15: Table finalized for now

Beeminder is Opinionated Software. Here is our Opinion:

Your daily rate needs to be prominent and obvious. If you know that rate then you know that you’ll get another day of safety buffer by doing that much. You might be able to get an extra day of safety buffer by doing less than that, but unless it’s an eep day you shouldn’t care about that exact number. Just keep doing your daily rate amount each day and you’ll maintain the buffer you have. Do any less and you’re eating into your buffer.

(Complication: upcoming kinks in the red line. TODO: How about the max (min for yaw<0) of the upcoming rates?)

Telling you “+.23 needed in 3 days” in huge text above the graph is bad bad bad. That level of information should be hidden ~1 click away in the due-by table. The information that should be prominent is something like “you’re committed to +2 such-and-suches per day and have 3 days of safety buffer”. Or simply “omg +.23 such-and-suches by midnight!” if it’s a beemergency.

The plan: We deprecate Beebrain’s limsum output field and add safesum.

Here are examples, for each of the Four Platonic Goal Types, crossed with whether it’s an eep day or not, crossed with whether it’s auto-summed (kyoom) or not:

[The following table is currently duplicated in the main safesum gissue.]

gtype eep Σ old limsum safesum blurb graph header
MOAR y y +1 in 0 days +1 pushups due by 12am +1 pushups due in/by DOOMCOUNT
MOAR y n +1 in 0 days (12345) +1 pushups (12345) due by 12am +1 pushups (12345) due in/by DOOMCOUNT
MOAR n y +1 in 1 day safe for 1 day (commitment: +5/day) +1 pushups due in/by DOOMCOUNT
MOAR n n +1 in 1 day (12345) safe for 1 day (commitment: +5/day) +1 pushups (12345) due in/by DOOMCOUNT
PHAT y y -2 in 0 days hard cap -2 pounds by 12am hard cap -2 pounds in/by DOOMCOUNT
PHAT y n -2 in 0 days (150) hard cap -2 pounds (150) by 12am hard cap -2 pounds (150) in/by DOOMCOUNT
PHAT n y -2 in 1 day hard cap +2 pounds today hard cap +2 pounds today and safe for/until DOOMCOUNT
PHAT n n -2 in 1 day (150) hard cap +2 pounds (150) today hard cap +2 pounds (150) today and safe for/until DOOMCOUNT
WEEN y y +3 today hard cap +3 servings by 12am hard cap +3 servings in/by DOOMCOUNT
WEEN y n +3 today (12345) hard cap +3 servings (12345) by 12am hard cap +3 servings (12345) in/by DOOMCOUNT
WEEN n y +3 today hard cap +3 servings today hard cap +3 servings today and safe for/until DOOMCOUNT
WEEN n n +3 today (12345) hard cap +3 servings (12345) today hard cap +3 servings (12345) today and safe for/until DOOMCOUNT
RASH y y +4 today hard min +4 cigarettes by 12am hard min +4 cigarettes in/by DOOMCOUNT
RASH y n +4 today (12345) hard min +4 cigarettes (12354) by 12am hard min +4 cigarettes (12345) in/by DOOMCOUNT
RASH n y +4 today hard min -4 cigarettes today hard min -4 cigarettes today and safe for/until DOOMCOUNT
RASH n n +4 today (12345) hard min -4 cigarettes (12345) today hard min -4 cigarettes (12345) and safe for/until DOOMCOUNT

Where DOOMCOUNT is the dynamic togglable countdown timer or date/time in the graph header. Also the “due in/by” or “safe for/until” string is replaced with “ending in/at” in the “coasting” case, i.e., when the time till tfin is less than the amount of safety buffer.

Originally we wanted to make sure we had a concise string for the goal units but decided that the longer gunits string is ok.

The due-by table is super nice and makes sense to people and probably doesn’t want to be as hidden away as it is. It’s the thing you want to look at if you want to know more than just “safe for N days”.

Yet another related thing: how much I dislike click-to-toggle on the website


For later: Eep days for WEEN/RASH are weird. It kind of ought to be too late, you went past the limit! (Now that the infamous do-less loophole is closed, that’s even true. Unless negative datapoints make sense for your goal.)