# Ревью документации от 2026-10-17 — задания к исполнению > **Исполнитель:** агент сопровождения документации WatchBody. > **Источник:** архитектурная проверка документации шагов 1–6 на соответствие > канону std1 (`I:\Kit\Kit.DevAi\std1`: процесс `_process\process.md`, правила > `_rules\d\d-db.md`, `d-dev.md`, `d-req.md`, `d-drg.md`, `_rules\glossary.md`) > и исходной задаче (`Техническое задание.md`, `Требование.md`, документы > «Метрики…», «Архитектура LLM…», «Форматы…»). > **Состояние репозитория на момент проверки:** коммит `0554f17`, все ссылки > на строки даны по нему; после правок ориентироваться по разделам, а не строкам. > **Статусная модель заданий:** ⬜ не начато → 🔄 в работе → ✅ готово > (утверждено владельцем). Отметки проставляются в разделе 6 по мере работы. > **Общие правила исполнения:** > 1. Правки вносятся новыми версиями утверждённых документов (перечень версий — > раздел 5). Каждая новая версия — точка утверждения **Пользователь!** (d-dev-4). > 2. Содержание утверждённых документов меняется только в объёме заданий; > инварианты 🛡 не ослабляются; трассировка «Ф → БЦ → КУ → версия» (раздел 6 > requirements) сохраняется. > 3. Задания, зависящие от решений Р1–Р3 (раздел 1), не вносятся до выбора > владельцем. Остальные можно выполнять сразу. > 4. Код (`3-app\`, `2-db\`) не трогается — задание касается только `1-docs\` > и корневого `readme.md`. > 5. ~~Push не выполняется (учётные данные remote не настроены)~~ — уточнение > исполнителя 2026-10-17: push настроен и работает (credentials в > Credential Manager); коммиты пушатся после каждой волны. ## 0. Сводка ревью Документация в целом соответствует std1 и исходной задаче: шаги 1–6 пройдены с точками утверждения, все 9 позиций MVP ТЗ покрыты (Ф-1–Ф-9), трассировка полная, стеки соответствуют `Требование.md`, решения LLM-дизайна и документа метрик перенесены. Найдено: **4 существенных дефекта (P1)** — два логических противоречия «v1-требования ↔ v1-данные», неактуальная архитектура после изменения 1.3 и разрыв схемы синхронизации; **4 средних (P2)**; **7 мелких (P3, гигиена)**. Позиции внедрения MVP документа метрик (п. 5) и порядок шагов 1–3 LLM-дизайна перенесены в требования верно, кроме данных правила 1 (см. Р1). ## 1. Решения владельца (блокируют волну 2) | Код | Вопрос | Варианты | Рекомендация ревью | |---|---|---|---| | **Р1** | Данные правила 1 (пульс покоя +8 два дня / самочувствие ≤ 2) отсутствуют в v1: `daily_log` v1 хранит только АД и вес; `hr_resting`, `wellbeing` помечены v2 — а Ф-12.5, БЦ-6 и КУ-7 требуют их в v1 | **А:** добавить `hr_resting`, `wellbeing` в v1-дневник (2 касания ввода) — КУ-7 закрывается целиком. **Б:** правило 1 → v2 (в v1 правила 2–6), скорректировать КУ-7. **В:** прокси — хранить предстартовый пульс сидя в `daily_log` и считать тренд по нему | **А** | | **Р2** | Идентификация клиентских сущностей: протокол sync требует `client_guid` для каждой записи, но у `exercise`, `program_version`, `athlete_profile` его нет; ключи — серверные `serial`, телефон офлайн не может узнать server id для ссылок (`workout_set.exercise_id`, `workout.program_version_id`) | **А:** добавить `client_guid UNIQUE` в эти таблицы + расширить ответ sync маппингом `{entity, client_guid, id}`. **Б:** UUID как PK всех клиентских сущностей. **В:** натуральные ключи (имя упражнения у атлета) | **А** (минимальная правка БД, идемпотентность сохраняется) | | **Р3** | Safety-пороги применяются на телефоне офлайн (экран допуска, Ф-13.2), но определены только в серверном `appsettings.json`; канал доставки на телефон не задан | **А:** продублировать пороги в телефонном Preferences (умолчания — документ метрик); серверные `Safety.*` — для серверных правил/`red_flags`. **Б:** синхронизируемая сущность `settings` (сервер — истина; до первой синхронизации — умолчания телефона) | **А** для v1 (один владелец; расхождение источников задокументировать, общая сущность — кандидат v2) | Если владелец не выбрал вариант — подготовить диффы по рекомендованному и вынести на утверждение как предложение (самовольно вариант не менять). ## 2. Задания P1 (существенные) ### З-1. Интеграция данных правила 1 в v1 ⬜ *(после Р1; по Р1-А)* 1. `1-docs\1-reqs\requirements.md`: - Ф-13.1 — дневник-минимум дополнить: пульс покоя (утро), самочувствие 1–5; - Ф-13.6 — v2-перечень сузить до «талия, сон» (пульс покоя и самочувствие переносятся в v1); - Ф-12.5 — указать источник данных правила 1 (`daily_log`, тренд 2 дня). 2. `1-docs\2-db\src\tables.md`: `src.daily_log` — `hr_resting`, `wellbeing` убрать из пометки «v2», описать как поля v1. 3. `1-docs\2-db\src\functions.md`: `daily_log_upsert` — параметры `p_hr_resting`, `p_wellbeing`. 4. `1-docs\3-tech\tech-requirements.md`: п. 2.2 (`daily_log`) — поля v1; чек-лист шага 7 не меняется. ### З-2. Актуализация архитектуры под Ф-13 ⬜ 1. `1-docs\2-arch\architecture.md`: - шапка: источники — vision **v1.3**, requirements v1.1; версия документа → 1.1 с примечанием «актуализация под Ф-13 (изменение vision 1.3)»; - раздел 1.2 (телефон): в `WorkoutCore` добавить ответственность «предстартовый допуск (пороги Safety, экран допуска) и дневник самоконтроля (`daily_log`)»; в `TrainingUi` — экраны «Сегодня» и «Допуск»; - раздел 2 (поток): шаг 0 перед «Тренировка» — допуск (пороги АД/пульса; блокировка/лёгкое кардио; обход блокировки логируется); - таблица компонентов: строка БД — добавить `daily_log` к перечню. 2. `1-docs\2-arch\hld.puml`: отразить допуск/дневник подписью в `WorkoutCore` (без новых компонентов и связей — гранулярность схемы не меняется); перерендерить `hld.svg` + `hld.png` навыком `std1\_skills\dgm-hld` (`python std1\_skills\dgm-hld\render.py 1-docs\2-arch\hld.puml`), рендер рядом с исходником (d-drg-11). 3. Утверждение — **Пользователь!** ### З-3. Синхронизация: `client_guid` и маппинг id ⬜ *(после Р2; по Р2-А)* 1. `1-docs\2-db\src\tables.md`: `src.exercise`, `src.program_version` — колонка `client_guid uuid NOT NULL UNIQUE` (идемпотентность sync, Ф-7.4); `src.athlete_profile` — upsert по `athlete_id` уже идемпотентен, решение (без `client_guid`) зафиксировать явно в комментарии. 2. `1-docs\3-tech\tech-requirements.md`: - п. 2.1 — ответ `POST /api/v1/sync`: помимо `accepted`, маппинг `{entity, client_guid, id}` для созданных записей (телефон хранит соответствие локальный id ↔ серверный); - п. 2.2 — `exercise`, `program_version`: поле `client_guid`. 3. `1-docs\1-reqs\requirements.md`: Ф-7.2/Ф-7.3 — дополнить маппингом id (одной формулировкой: «ответ содержит соответствие client_guid → серверный id; телефон использует его для ссылок дочерних записей»). ### З-4. Safety-пороги телефона ⬜ *(после Р3; по Р3-А)* 1. `1-docs\3-tech\tech-requirements.md`, п. 4.1 (телефон): параметры `Safety.BpCancelSys/Dias` (умолч. 150/90), `Safety.BpCardioSys/Dias` (140/90), `Safety.RestingHrSitting` (90) с валидацией — как в п. 4.2; примечание: умолчания из документа метрик; серверные `Safety.*` — источник для серверных правил (`red_flags`), совпадение значений — ответственность владельца конфигурации (ограничение v1 задокументировать, общая сущность — кандидат v2). 2. `1-docs\1-reqs\requirements.md`: раздел 3 (телефонные настройки) — дополнить теми же параметрами; Ф-13.5 — переформулировать: «пороги допуска — конфигурируемые в настройках телефона; серверные `Safety.*` применяются серверными правилами». ## 3. Задания P2 ### З-5. `src.workout`: уникальность `fit_file_id` и `fit_workout_id` ⬜ `1-docs\2-db\src\tables.md`: - у описания поля `fit_file_id` убрать «UNIQUE» — оставить составной `UNIQUE(athlete_id, fit_file_id)` (изоляция атлетов); - колонку `fit_workout_id` удалить: факты пишутся в ту же строку (`facts_json`), отдельная строка «только .fit» создаётся с собственным `client_guid` (сервер) — ссылочная колонка не используется. ### З-6. Sync-enum: фантом и пропуск ⬜ `1-docs\3-tech\tech-requirements.md`, п. 2.1: из перечня `entity` убрать `set_note` (сущности нет ни в БД, ни в требованиях); добавить `daily_log`. (Совместить с З-3.2 — одна правка п. 2.1.) ### З-7. Диапазон RPE ⬜ Согласовать: Ф-13.3 и tech-requirements п. 2.2 — «0–10»; `tables.md` — `CHECK (rpe BETWEEN 1 AND 10)`. Рекомендация: единый диапазон **1–10** (RPE 0 в документе метрик не используется; голос «РПЭ N» — N 1–10): в Ф-13.3 «тапом 1–10», в tech-requirements 2.2 — «int? 1–10». При выборе владельцем 0–10 — правится CHECK в tables.md. ### З-8. Грамматика Ф-1.2: команда «РПЭ N» ⬜ `1-docs\1-reqs\requirements.md`, Ф-1.2: добавить четвёртую команду «РПЭ **N**» → RPE последнего подхода (N 1–10, по З-7); согласовать с Ф-13.3 и решением ОВ-2 в tech-requirements (грамматика уже включает «РПЭ»). ## 4. Задания P3 (гигиена) | Код | Задание | Где | |---|---|---| | З-9 | Удалить мусорную строку «io header fix»; в Ф-12 перенумеровать второй «5.» (Офлайн-режим сервера) в «6.» | requirements.md:381–384 | | З-10 | Исправить «.gp**х**» → «.gpx» (кириллическая буква) | requirements.md:267 | | З-11 | Шапки-источники привести к vision **v1.3**: requirements (сейчас «v1.0»), tech-requirements (сейчас «v1.2»). Для architecture — в З-2 | requirements.md:4, tech-requirements.md:4 | | З-12 | URL репозитория: `readme.md` — `VEU/VEU.WathBody.git`, `plan.md` — `VEU/WatchBody.git`. Сверить с фактическим `git remote -v` и привести оба файла к нему (сейчас remote, вероятно, не настроен — тогда принять `VEU/WatchBody.git` и исправить опечатку «WathBody») | readme.md:3–4, plan.md:3–4 | | З-13 | Маркер «MM» в tables.md вне словаря d-db-2 (`CRUD/SELECT/NO/CUSTOM`): оставить как есть, в комментарий строки добавить «типовой набор связи ММ — d-db-3»; о необходимости маркера «MM» сообщить владельцу std1 (вне репозитория) | src/tables.md:14 | | З-14 | Добавить в readme БД раздел «План миграции» (требование d-db-1): создание схем `src`/`ref`, вставка значений `ref.exercise_group`, порядок применения psql-файлов из `2-db\`, версионирование миграций | 1-docs/2-db/readme.md | | З-15 | Сообщить владельцу std1 (вне репозитория): process.md шаг 6 указывает артефакты в `1-docs\d-db\`, противореча шагу 2 того же процесса и правилу d-db-1 (`1-docs\2-db\`); проект применил верный путь | — | ## 5. Порядок исполнения и версии **Волна 1 — errata, выполняется сразу (З-5–З-14 без Р-зависимостей:** З-5, З-6, З-9, З-10, З-11, З-12, З-13, З-14**).** Правки представляются владельцу одним диффом → утверждение → коммит «Ревью документации: errata (Ф-12 нумерация, .gpx, версии источников, fit_file_id, sync-enum)». Версии: requirements → 1.2 (errata), tables.md → новая редакция (дата), tech-requirements → 1.2, 2-db readme → новая редакция. **Волна 2 — после решений Р1–Р3 (З-1, З-2, З-3, З-4, З-8).** Все правки одним пакетом «Актуализация по ревью: Ф-13 в архитектуре, данные правила 1, client_guid/маппинг sync, Safety телефона» → рендер hld → утверждение владельцем (одно утверждение на пакет) → коммит. Версии: requirements → 1.3, architecture → 1.1, tech-requirements → 1.3, tables/functions → новая редакция (число функций не меняется — меняются параметры `daily_log_upsert` и колонки `client_guid`). **После каждой волны — самопроверка (раздел 7) и отметки в разделе 6.** ## 6. Чек-лист | Задание | P | Зависит от | Статус | |---|---|---|---| | Р1–Р3 решения владельца | — | — | ✅ Р1-А, Р2-Б, Р3-А (2026-10-17) | | З-1 правило 1: данные v1 | 1 | Р1 | ✅ (2026-10-17, Р1-А) | | З-2 архитектура + hld.puml + рендер | 1 | — | ✅ (2026-10-17, architecture v1.1 утверждена, hld отрендерен) | | З-3 client_guid + маппинг id | 1 | Р2 | ✅ (2026-10-17, Р2-Б — UUID PK; уточнено ревью №2 З-16) | | З-4 Safety-пороги телефона | 1 | Р3 | ✅ (2026-10-17, Р3-А) | | З-5 fit_file_id / fit_workout_id | 2 | — | ✅ (2026-10-17) | | З-6 sync-enum (set_note/daily_log) | 2 | — | ✅ (2026-10-17) | | З-7 диапазон RPE | 2 | — | ✅ (2026-10-17, единый 1–10) | | З-8 грамматика «РПЭ N» | 2 | З-7 | ✅ (2026-10-17) | | З-9 Ф-12: «io header fix», нумерация | 3 | — | ✅ (2026-10-17) | | З-10 .gpх → .gpx | 3 | — | ✅ (2026-10-17) | | З-11 шапки-источники → vision v1.3 | 3 | — | ✅ (2026-10-17, сразу v1.4) | | З-12 URL репозитория | 3 | — | ✅/переоткрыт частично: readme был верен; plan.md исправлен ревью №2 (З-23) — 2026-10-17 | | З-13 маркер «MM» + письмо std1 | 3 | — | 🔄 (комментарий добавлен; письмо std1 — вне репо) | | З-14 план миграции в 2-db readme | 3 | — | ✅ (2026-10-17) | | З-15 сообщение владельцу std1 о process.md | 3 | — | ⬜ | ## 7. Самопроверка после правок 1. **requirements.md:** трассировка раздела 6 не нарушена (каждая Ф имеет БЦ/КУ); ссылки на ОВ актуальны; нумерация Ф-12 сплошная; «РПЭ N» есть и в Ф-1.2, и в Ф-13.3 с одним диапазоном. 2. **architecture.md / hld.puml:** шапка ссылается на vision v1.3 и requirements текущей версии; Ф-13 присутствует в разделах 1.2, 2 и в таблице компонентов; рендер (`hld.svg`/`hld.png`) свежее `.puml`; стиль — d-drg-3, палитра и легенда — d-drg-4 (жёлтый — внешнее, серый — не в v1). 3. **tables.md / functions.md:** «Набор функций» в сводной таблице ↔ строки «Списка функций» совпадают 1:1; словарь маркеров соблюдён; составной `UNIQUE(athlete_id, fit_file_id)` — единственное описание уникальности; `daily_log_upsert` содержит все поля v1. 4. **tech-requirements.md:** enum `entity` = перечень п. 2.2 без фантомов; `Safety.*` есть в 4.1 и 4.2 с согласованными умолчаниями; ответ sync описывает маппинг id. 5. **Общее:** git-статус чистый после коммитов; в логах/доках нет секретов; push не выполнялся.