Skip to content

v2.7.0

Choose a tag to compare

@pgalko pgalko released this 30 Oct 06:32
· 6 commits to main since this release

BambooAI 2.7.0 — datasets by athlete

A coach works with several athletes. 2.7.0 makes the athlete the unit everywhere data is kept, loaded, cached and run: one store per athlete on the executor's disk, one Intervals.icu key per athlete, one athlete at a time on the Data tab, and routines whose history and comparisons stay within one athlete's runs. The executor image is rebuilt (v74).

The store, per athlete

Every Intervals.icu load is filed under the athlete it belongs to - the id and the name the profile gives, never the key - and feeds a store that only grows: each activity's streams, the activity list, the laps and the chat under each activity, the wellness log by day, the calendar by entry, the rider profile. A window asked twice is fetched once; a window that grows fetches only the days the store lacks; the dialog says what came from the store and what was downloaded. The store is trimmed by age (older than 400 days and unused for a month), and the per-run window files leave after a month.

The Dataset cache is a tree: source → athlete → dataset. A click opens the details - what is held, since when, the span, the columns, what is on the Data tab now - with three actions per line: Load (the stored version, at once, nothing fetched), Load … to today (the stored version extended to today, only the missing days fetched) and Forget (off the Data tab and out of the cache). One dataset can be loaded alone. Uploads and generated files keep their own groups.

One athlete at a time on the Data tab. A load for one athlete lets the other athletes' pills go first, after asking; the thread's ledger says when an earlier chain was on another subject's data, so the analyst never mixes two athletes in one answer.

Keys, per athlete

Settings → Intervals ICU keeps one key per athlete. A key is named by Intervals.icu the moment it is saved; the dialog lists the athletes with their key, each with Remove, and Add for the next. The Intervals.icu load dialog opens on a roster: one row per athlete with what the store holds for them, the last loaded first; a click proposes the window from the day after their last held day. Every load runs on the picked athlete's own key; a load asked for one athlete under another's key is refused before anything is written. The Dataset cache lists an athlete with a key and nothing held yet, with a way into the load dialog; without a key, the to today loads are disabled and loads from the store still work.

Routines, by athlete

The run dialog of an Intervals.icu routine picks the athlete above the window - the roster again, the athlete the routine was made on picked first. The window is loaded for that athlete with their key, or taken from the executor's cache when it already holds it for them. Each run records whose data it was on:

  • Compare with offers the run before on that athlete, and run 0 only when the original data was theirs. The first run on an athlete compares with nothing. Runs are never compared across athletes.
  • The Comparison tab says whose and when: the athlete in its heading, each run's window under its column, the result labels whole.
  • The history in the manager shows one athlete's runs at a time when a routine has run on several - a pick in the Results across runs heading switches - and the arrows between runs stay within the athlete.

Routines on an upload, an Endura race or a SweatStack load work as before: one group, compared among themselves.

Also in this release

  • A bar under the top bar when the app was updated under an open page - BambooAI was updated… reload - so a page never runs older scripts unnoticed.
  • The pill strip scrolls at the wheel's pace.
  • Load buttons on every details pane of the Dataset cache; the small Intervals.icu calls wait out a rate limit.

Upgrading

pip install -U bambooai
bambooai serve

serve rebuilds the executor image on first use (the tag moves to …-v74; a few minutes) and the local database adds the per-athlete key columns by itself. Three things to know:

  • Earlier Intervals.icu loads are deleted on the executor's first start, without a question: they were filed by key, not by athlete, and the new store cannot adopt them. The first load after the upgrade downloads its window whole and fills the store; later loads fetch only what the store lacks.
  • Your existing key is kept and named by Intervals.icu at your next load, or the moment Settings → Intervals ICU lists it.
  • Routine runs recorded before the upgrade carry no athlete: the manager lists them under athlete not recorded, and new runs start each athlete's own history. Threads, favourites, memory and routines themselves are unchanged.

Full changelog: v2.6.1...v2.7.0