I’ve always struggled with the general problem that certain days are not suitable to work on certain Beeminder goals. I gave up on the automatically-adjust-the-road approach (https://github.com/DrTall/beevacay) last year when it became clear that road editing is not for the faint of heart.

The new approach is detect-and-complain, or “lint”: https://github.com/DrTall/beelint This is still pretty experimental so it’s far from tried-and-true but I’m pretty excited about it.

My current Beelint config has 4 parts:

Weekends-off goals

Weekends-only goals

A vacation coming up in February (blocks all goals)

A Google Calendar based blacklist for nights where I have events after work. I’m using this to detect these “Late nights” and then forbidding those goals which I find really annoying to deal with when I get home late.

My Beelint goal is updated by the script with the list of goals with problems:

This also integrates with my Beedash, by highlighting lint errors in pink. Orange is still a real eep!:

Very cool! I’m trying this out today. A few issues I have run into: (1) the instructions for getting a Google Calendar API key seem not to match the interface. Maybe the interface has changed? I tried to figure out the right thing to do but I am not at all sure that I did. (2) When I run it I get “No module named dateparser”. What’s the canonical way to get that Python module (on Ubuntu)? I tried ‘sudo apt-get install python-dateutil’ which seemed a likely candidate, but no dice.

OK, I was able to install dateparser with pip install --user dateparser. The next error I ran into is “No module named apiclient.discovery”; after some Googling I found I needed to pip install --user google-api-python-client. And then… it worked! Well, I still don’t know if the Calendar integration works, I don’t have any calendar-based rules set up yet. But at least the date-pattern rules worked.

@dreev Any chance to get an API trigger for “Derail this goal” ? It would be useful for this project! Currently if I fail to deal with a lint violation it will always be there tomorrow, and the next day, etc. forever. So I sort of have to set a low pledge cap, but that also fails to motivate me. It would be nice to be able to get the safety buffer behavior instead.

A goal won’t show a lint error if today is also an illegal day for that goal. The idea being you can’t work on it on the illegal days, so linting it on such a day is pointless.

A config option to mark goals as always_valid_if_data_today which makes it so that the goal won’t show lint errors if Beeminder has any data points for that goal today. Useful for true/false goals where you can only make limited progress every day.