Ok… I might have just spent a Saturday morning coding a workable version of what I wanted to see. It’s nowhere as slick as yours and requires running a Jupyter notebook and also providing a CSV with the estimates. But, on the plus side, it allows taking into account that activity on one goal might also automatically contribute to another goal. Like if I have a general “physical activity” goal and additional ones for “yoga” and “bike”, my total time commitment across those is not a sum of the three but only the largest of either the first or the sum of the latter two.
If anyone would be interested, I can share it through GitHub.
And I finally have the answer to the question that initiated all this: I have to do stuff for 42h35m over the next week to preserve the existing buffers and for 20h35m just to avoid derailment. (The latter differs slightly from the result in the app because I might have estimated slightly differently, and/or because folding and double-contributing is now accounted for)
I have assumed “each goal has one tag” for now. I’ll add a note about this!
Nice that you have a notebook you can customize
The way I deal with “layered-goals” is the exclusion feature one layer. In your example, I’d either keep physical activity, or keep the other two. The way I use Beeminder allows me to assume physical activity = yoga + bike. I can imagine that’s not generally the case.
As a general “community update”…
My next goal for/around Beebudget will be either:
add a feature that helps me relate “life priorities - beeminder goals” + show me that overview instead of tags/goals
add a feature that helps me use Toggl data to auto-fill estimates
Oh, okay, this makes sense! I have this list of tags for life spheres t0-t9, for which this is true. But also some auxiliary ones like “normal” and “backburner”. I guess what matters here is the order in which tags were assigned, so some goals are picked with this filter and some are not.
UPD: yes, reassigning the tags in a way that the one that matters in terms of ontological classification goes first solved the problem.