VEU.WathBody/1-docs/0-mng/plan.md

68 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# План проекта: WatchBody («Феникс 6X»)
> Код системы — WatchBody (репозиторий
> `https://git.mind01.ru/VEU/VEU.WathBody.git`); название продукта —
> «Феникс 6X». План проекта — формат по sd-init-5
> (`std1\_rules\sd\sd-init.md`); шаги процесса —
> `std1\_process\process.md`. Статусы: ⬜ — не начат, 🔄 — в работе,
> ✅ — завершён. План актуализируется по факту прохождения шагов.
| Шаг процесса | Артефакты | Статус |
|---|---|---|
| 1. Инициация разработки | `1-docs\1-reqs\vision.md` (утверждён 2026-10-17, v1.0), `1-docs\0-mng\plan.md` | ✅ |
| 2. Создание рабочей области | `readme.md` системы, структура репозитория, `.gitignore` | ✅ |
| 3. Разработка функциональных требований | `1-docs\1-reqs\requirements.md` (утверждён 2026-10-17) | ✅ |
| 4. Разработка архитектуры | `1-docs\2-arch\architecture.md`, `hld.puml` (+ рендер) (утверждена 2026-10-17) | ✅ |
| 5. Разработка технических требований | `1-docs\3-tech\tech-requirements.md`, спецификации библиотек (утверждены 2026-10-17) | ✅ |
| 6. Проектирование баз данных | `1-docs\2-db\` — readme, `src\tables.md`, `ref\tables.md`, `functions.md` (утверждены 2026-10-17) | ✅ |
| 7. Итерационная разработка | `3-app\` (код), `1-docs\4-modules\` (документы модулей) | 🔄 |
## Решение шага 6 (состав данных)
Принято (2026-10-17): серверная БД — **PostgreSQL** (реляционные
данные, ссылочная целостность, изоляция атлетов); состояние телефона —
локальная Room/SQLite; файлы (`.fit`, логи) — вне БД. Схемы-слои:
`src` — данные тренировок, программ, атлетов, метрик; `ref` —
справочники (двигательные группы). Документация — `1-docs\2-db\`.
JSON-тела (версии программ, факты .fit) — `jsonb` внутри таблиц.
## Решение шага 7 (разбивка версии 1.0 на модули)
Принято (2026-10-17): версия 1.0 разбивается на модули по компонентам
архитектуры v1.1; порядок — итерациями (итерация 1 — серверный
фундамент, чек-лист шага 7 tech-requirements разд. 7). Статусы модулей:
⬜ — не начат, 🔄 — в работе, ✅ — завершён.
| Модуль | Состав (проект) | Итерация | Статус |
|---|---|---|---|
| m01-server-db | Схема `src`/`ref`: миграции, psql-функции + тесты (d-dev 1–4); домен C# + DAL-репозитории (d-dev 5–7; 13 репозиториев в 8 файлах: Program.cs → Program+ProgramVersion, Workout.cs → Workout+WorkoutSet+CommandLog, DailyLog.cs → DailyLog+WorkoutMetrics+Break, Exercise.cs → Exercise+ExerciseReplacement, остальные — по классу); `--mode migrate` | 1 | ✅ (2026-10-18: 38/38 функций `DONE`; после З-35 — тесты psql 123/123 + C# 56/56, миграция 003 external_id) |
| m02-rest-api | `Server.WatchBody.Web`: `POST /api/v1/sync`, `GET workouts`, `GET programs/active`, middleware ключа; MVC + fluent Kit.Helpers.Routes | 1 | ✅ (2026-10-18: закрыт; после З-41(а) — тесты Web 81/81 + Core 56/56) |
| m03-program-store | `Server.WatchBody.Core`: версионный JSON программ, `active` — ровно одна | 1 | ✅ (2026-10-18: ProgramStore, 7 методов, тесты 19 PASS) |
| m04-metrics-engine | `Server.WatchBody.Core`: adherence, тоннаж, 1ПМ (Эпли), пульс-метрики, красные флаги | 2 | ✅ (2026-10-18: MetricsEngine + Safety, sync-пересчёт, тесты 17 PASS) |
| m05-progression-rules | `Server.WatchBody.Core`: правила прогрессии (Ф-12.2), делоад (Ф-12.4), перерывы/возврат (Ф-14), учёт ограничений (is_active/замены), draft-версии `author=rules` | 2 | ✅ (2026-10-18: ProgressionRules + BreakEngine, фильтр ограничений, тесты Web 81/81 + Core 56/56) |
| m06-fit-import | `Server.WatchBody.Import` + `--mode import`: FitParser (FIT SDK) → workout-facts/1, сопоставление ±15 мин, дедуп fit_file_id, пакет программы, TCX/GPX, архив | 2 | ✅ (2026-10-18: Garmin.FIT.Sdk 21.218.0, FitParser/WorkoutImporter/ProgramPackageImporter/ImportService, тесты Web 93/93 + Core 56/56, psql 123/123) |
| m07-fit-fetch | `Server.WatchBody.Fetch` + `--mode fetch`: GarminClient (SSO по контракту garminconnect), FitFetcher (дедуп 2 рубежей), разбор конвейером m06 | 2 | ✅ (2026-10-18: SSO-флоу + FakeGarminHandler, тесты Web 98/98 + Core 56/56; против живого Garmin — ручная валидация прототипа, fallback — m06) |
| m08-admin-web | Admin-консоль: UI — Flutter Web (`3-app\3-web\admin-web`), бэкенд — admin REST API (`/api/admin/*`) в `Server.WatchBody.Web`: логин/PBKDF2→Bearer, атлеты, тренировки+CSV, программы, метрики, план/факт | 3 | ✅ (2026-10-19: Bearer-контур + 6 контроллеров + Flutter UI (SDK 3.47.7, build → wwwroot/admin), тесты Web 105/105 + Core 56/56, HTTP-смок пройден) |
| m09-phone-core | `WorkoutCore` + `LocalDb` (Room) + `SyncQueue`: тренировка, дневник, допуск, перерывы | 4 | ✅ (2026-10-19: Room 9 таблиц + WorkoutCore + SyncWorker/ApiClient + DataStore; APK 4,2 МБ, unit 18/18; смок sync 5 сущностей против живого сервера пройден, errata client_guid-UUID + guid-колонки daily_log/profile) |
| m10-phone-ui | `TrainingUi` (Compose): экраны тренировки/истории/программ/профиля/дневника/допуска | 4 | ✅ (2026-10-19: 8 экранов+VM, Compose Material 3 тёмная, unit 36/36, APK 12 МБ, живой смок контура программы; errata контрактов camelCase/flat program_version/sex m-f; запуск на устройстве — приёмка владельца) |
| m11-voice-input | `VoiceInput`: Vosk-STT, грамматика, TTS, журнал команд | 5 | ✅ (2026-10-19: парсер Ф-1.2 + VoskEngine с грамматикой/fallback + ModelStore (filesDir, не в APK) + executor через WorkoutCore 🛡 + TTS/сигналы + Mic-кнопка/RECORD_AUDIO + блок настроек; unit 63/63, APK 57 МБ; живой URL модели 200 OK; распознавание на устройстве — приёмка владельца, КУ-1 вручную) |
| m12-watch-channel | `WatchChannel`: live-пульс с Fenix 6X на телефон — errata ОВ-3 (2026-10-19): companion-канал Connect IQ нереализуем на fenix 6X (CIQ ≤ 4.1.7, Communications в полях данных — с API 5.0); транспорт — штатная трансляция «Broadcast Heart Rate», приём BLE Heart Rate Service (односторонний); таймер отдыха на часах автономный (Ф-2.4 errata) | 5 | ✅ (2026-10-19: гейты 1.3/2.4/3.4 утверждены; errata ОВ-3 — транспорт BLE «Broadcast Heart Rate» за интерфейсом `WatchTransport` (мультичасовая инфраструктура, указание владельца); пульс/заряд/статус на «Тренировке», «Взять с часов» на допуске, `avg_hr` при финише → sync; unit 89/89 (m12 +26), APK 57,3 МБ; волна errata НД внесена (Ф-2.4/Ф-3.2/tech-req/architecture); живой BLE/разрешения — приёмка владельца; коммит `d4867ac` запушен) |
| m13-fenix-data-field | `FenixDataField` (Monkey C): пульс/зоны/автономный таймер отдыха; мультитаргет-сборка по моделям/разрешениям (vision 1.1, Ф-2.8; якорь fenix6x 280×280 — сборка под другие часы не должна усложняться, указание владельца 2026-10-19) | 5 | ✅ 2026-10-19 (гейты 1.3/2.4/3.4 утверждены; сборки fenix6xpro+fenix6+fenix6s без правок кода; тесты ядра 54/54 собственным раннером в симуляторе — harness monkeydo /t несовместим с девайс-паком, readme прим. 5; developer-ключ RSA 4096; интерактивный смок и sideload — приёмка владельца, readme «Sideload») |
Прототипы чек-листа шага 7 (tech-requirements разд. 7) выполняются в
своих итерациях; ОВ-3 (companion-канал) — прототип в итерации 1 параллельно
m01–m03 (нужен для ранней проверки канала).
## Состав версий (vision 2.2–2.4, решения опросников)
- **v1.0:** полный MVP-цикл (Ф-1–Ф-9) + программы без LLM (Ф-10, Ф-11,
правила прогрессии), Ф-13 (MVP-состав документа метрик: дневник АД/вес/
пульс покоя/самочувствие, допуск, RPE/боль в колене, правила 1–6) и
Ф-14 (перерывы, vision 2.2). Платформы: Android (Kotlin), Fenix 6X
(Monkey C, поле данных; изменение vision 1.5), сервер C#/.NET 10 +
PostgreSQL.
- **v2:** LLM-планирование (еженедельно), wake-word, iOS, экспорт FIT,
программы на часы (FIT workout).
- **v2.x:** мезоциклы LLM, «генератор+ревьюер», опрос RPE, аналитика.
- **v3+:** трековые виды спорта (бег/вело).