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

68 lines
7.8 KiB
Markdown
Raw 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 | ⬜ |
| m10-phone-ui | `TrainingUi` (Compose): экраны тренировки/истории/программ/профиля/дневника/допуска | 4 | ⬜ |
| m11-voice-input | `VoiceInput`: Vosk-STT, грамматика, TTS, журнал команд | 5 | ⬜ |
| m12-watch-channel | `WatchChannel`: companion-канал Connect IQ (прототип ОВ-3 — итерация 1, чек-лист 7.1) | 5 | ⬜ |
| m13-fenix-data-field | `FenixDataField` (Monkey C, таргет `fenix6x`): пульс/зоны/отдых | 5 | ⬜ |
Прототипы чек-листа шага 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+:** трековые виды спорта (бег/вело).