Generalized Road Dial, aka Road Editor

The yellow brick road needs to be under your full control with the single exception that you can’t make it easier on yourself between today and a week from today. To achieve this we will generalize the road dial to allow you to dial every segment of the road, past and future. It will subsume both retroratchet and scheduled breaks, which can be thought of as macros for specific kinds of road dialing.

Spec

Click a “+” button to add new rows, like copies of the road dial. Each row defines what the yellow brick road does for a segment ending at that row’s date. So if today is Feb 1 and you’re currently at a rate of 7 per week til Feb 28 then the road dial will say [Feb 28, 28, 7] — “do 7/week till hitting 28 on Feb 28”. Now say you want a flat spot starting Feb 8 and lasting till Feb 15, you’d first click the little “+” to add a row. That would split the current segment into two rows:

[Feb  8,  8,  7]  
- - - - - - - - - akrasia horizon - - - - - - - -
[Feb 28, 28,  7]  

The first segment is now inside the akrasia horizon, which is indicated with a dotted line. (You’re constrained how you dial road segments before the akrasia horizon.) The second segment can now be changed to:

[Feb 15, **,  0]  

(The “**” is filled in by Beeminder as 8 — that’s what happens if you do 7/week till Feb 8 and then stay flat till Feb 15.) Now you can click the “+” again and you’ll get this:

[Feb  8,  8,  7]  
- - - - - - - - - akrasia horizon - - - - - - - -
[Feb 15,  8,  0]  
[Feb 15,  8,  0]  

The second two rows can be freely edited, subject to remaining in chronological order. So now you edit the 3rd row, yielding this:

[Feb  8,  8,  7]  
- - - - - - - - - akrasia horizon - - - - - - - -
[Feb 15,  8,  0]  
[Feb 28, **,  7]  

(The “**” is filled in automatically as 21.) And you’re done. The above rows specify that you’ll do 7/week till you hit 8 on the 8th, then you’ll do 0/week to stay at 8 till the 15th, then you’ll do 7/week again till you hit 21 on the 28th.

You can retroratchet by adjusting the rows before the akrasia horizon but the javascript will verify in realtime that such changes don’t make the road any easier in the one-week interval between now and a week from now.

Pink Zone

We subtly color pink the region of the graph on the bad side of the road between NOW and AKH. That’s the pink zone (alt names: verboten zone, no-zone) and the graph remembers it till midnight no matter how you dial things. Now you can dial the road to your heart’s delight as long as you keep it out of the pink zone. When the graph refreshes for the new day (midnight or 3am) then the pink zone is recalculated.

(Alternative idea: Every change to the road starts a 5-minute undo timer.)


 

To Do List

  1. Make it work for exproad=true (may sound like more trouble than it’s worth but (a) it’s mathy and fun, (b) the code will improve along the way as we work out how to make it handle both linear and exponential cases, (c) figuring out how to drop support for exproad is hard and I personally think it’s pretty cool).
  2. Add a parameter like ruthless or jfdi for whether you want it to give an error if you change the road in a way that insta-derails you or to, y’know, just do what it’s told.

Sting Immunity

[Maybe ignore this section because hopefully it will be made obsolete by Yellow Brick Halfplane.]

We make a big deal about how if you have 7 days of safety buffer then you’re golden. You can flatten your road and stop caring about the goal at any moment and have enough safety buffer to carry you through to the akrasia horizon when the flat spot starts. But that’s not quite right in the current implementation… Seven safe days means your beemergency will be in 7 days. If that’s when the road becomes flat then you still have the beemergency on that day! So that’s no good. Either the road editor has to make it intuitive to make the road jump down to where your datapoint currently is, starting at the akrasia horizon, or the akrasia horizon needs to be 6 days so you’re truly safe once you have 7 days of safety buffer.

Related ugliness: If you want a shallow spot for the weekend you need to schedule it for Thu-Sat. The kink will be on Thu, the road will shrink on Fri (so you’ll still have a normal day’s work on Fri), then you can do nothing on Sat, then do the reduced rate (the rate of the shallow spot) on Sun, and back to normal on Monday.

There’s a special case for an actual flat as opposed to shallow spot — the road width doesn’t shrink in that case — so in that case you can schedule a break Fri-Sun. That’s more intuitive, but still not obvious that you wouldn’t want Sat-Sun or Sat-Mon (first day of break to last day of break, or first day of break to first day back to work).

Use Cases

Retroactively smoothing out my sugar graph

Last month I went on vacation and scheduled a break in my sugar road. But now it bothers me. I want to say that I’ve averaged 3 servings/day all summer or all year or whatever. I don’t want to retroratchet and have the road jump, I want to kill my safety buffer by retroactively changing the road to see if I could’ve been at 3/day all along. This happens a lot for me for many kinds of goals and I have a strong feeling that I’m not as weird as I sound (or, equivalently, for our purposes, it’s normal for beemindees to be that weird).