feat: разбор и хранение тренировок и состояния разума

- секции `workouts` и `stateOfMind` покрыты разбором: тренировка лежит одной
  строкой вместе с маршрутом и внутренними рядами, запись — по ключу `род + id`;
  миграция 00007 заводит обе таблицы и возвращает в очередь `partial`-доставки
  с этими ключами
- сущность заменяется целиком, но условно: приехавшая побеждает, если не теряет
  содержания сохранённой (множество ключей и длины верхнеуровневых массивов), а
  при равном содержании выигрывает версия из более поздней доставки ЖУРНАЛА —
  «побеждает приехавшая» было бы функцией порядка свёртки, и живая витрина
  расходилась бы с пересборкой молча
- отпечаток витрины покрывает тренировки и записи и снимается одним снимком
  базы; отчёт `reindex` считает «было и стало» по каждой единице хранения
This commit is contained in:
av
2026-08-02 13:05:16 +03:00
parent c28de9796e
commit f8200f7f80
47 changed files with 5817 additions and 301 deletions
+36
View File
@@ -0,0 +1,36 @@
{
"data": {
"stateOfMind": [
{
"associations": [
"fitness"
],
"valenceClassification": "slightly_unpleasant",
"valence": 0.021376147736425923,
"end": "2025-06-05T18:03:51Z",
"labels": [
"peaceful",
"peaceful"
],
"kind": "momentary_emotion",
"id": "50244944-3582-4508-7804-525425479700",
"start": "2025-06-05T18:03:51Z"
},
{
"kind": "daily_mood",
"end": "2025-06-05T18:03:17Z",
"id": "87868435-7832-4736-7633-078876535422",
"associations": [
"hobbies"
],
"start": "2025-06-05T18:03:17Z",
"valence": 0.12057562819279189,
"valenceClassification": "slightly_unpleasant",
"labels": [
"relieved",
"relieved"
]
}
]
}
}