Cosmetic (but lengthy): In season_plot_gui, the "Frequency" int arg can be set to 3, i.e. the code for "micro", even though it happens most of the time that there's no obsmicro. This is duly tested downstream in do_season_plot, so OK. However, if you feel like it, the ui-maker max/min apparatus could perhaps be used to avoid the "micro" case -- provided the micro option comes last. Say you reorder "all" to be the first Frequency option (all/major/minor/micro). Then:
function bundle my_season_ui (void)
bundle ret
ret.Frequency = _(maximum = "3 + contains($pd, {5, 6, 7})") # up to 4 only if pd is daily
return ret
end function
(And this would have to be marked ui-maker in the spec.)