VEU.WathBody/1-docs/4-modules/m05-progression-rules/readme.md

52 lines
4.5 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.

# m05-progression-rules — план работ (d-dev)
> Модуль: ProgressionRules + BreakEngine — детерминированные правила
> прогрессии/делоада и перерывов в `Server.WatchBody.Core` →
> draft-версии программ (`author=rules`).
> Алгоритм: `std1\_rules\d\d-dev.md` (итерационная разработка по
> модулям). Требования: [module_reqs.md](module_reqs.md).
> Зависимости: m01 (репозитории, DONE), m02 (sync — точка вызова,
> DONE), m03 (ProgramStore — создание draft, DONE), m04 (метрики и
> красные флаги — источник данных, DONE).
| Шаг | Что делаем | Статус |
|---|---|---|
| 0 | Модульные документы: module_reqs.md / readme.md / SKILL.md | ✅ 2026-10-18 |
| 1 | Список единиц (классы/методы/конфиг/тесты) | ✅ 2026-10-18 |
| 1.3 | **Пользователь!** утверждение списка | ✅ 2026-10-18 (утверждено; + фильтр ограничений — module_reqs 2.4) |
| 2 | Спецификации: api_specs (контракт правил, формула возврата) | ✅ 2026-10-18 |
| 2.4 | **Пользователь!** утверждение спецификаций | ✅ 2026-10-18 |
| 3 | Реализация + тесты | ✅ 2026-10-18 (тесты Web 80/80, из них m05 — 19; Core 56/56) |
| 3.4 | **Пользователь!** утверждение реализации (закрытие модуля) | ✅ 2026-10-18 (утверждено вместе с пакетом З-36/37/39/41, волна 2) |
| 4 | Завершение: план, примечания | ✅ 2026-10-18 — **Модуль завершён** (2026-10-18). Следующий по плану этапа 7 — m06-fit-import (итерация 2). |
Статусы: ⬜ не начат · 🔄 в работе · ✅ готов.
## Примечания по ходу работ
1. **`is_active` задаётся только `exercise_delete`** (З-34): insert/update
упражнения параметр `p_is_active` не принимают — это дизайн m01, не
errata. Ограничения атлета ведутся логическим удалением упражнения;
`exercise_select` при NULL-фильтре возвращает и неактивные — правила
видят их для подбора пары-замены. Серверный контур замкнут З-41(а)
(после волны 2): sync при `is_active=false` вызывает `exercise_delete`
— телефон может исключать упражнения без веб-консоли (m08).
2. Подписи в spec 02–04 синхронизированы с кодом: `today` — явный
параметр (тестируемость), `CloseOnReturn` принимает `workoutId`
(в sync есть только идентификатор).
3. Материализация `Weeks/Sessions` обязательна: удаление узлов body
(исключение упражнений/сессий) во время ленивого обхода JsonNode
ломает перечисление.
4. Известное ограничение v1: если атлет отклонил rules-черновик и
активная версия не менялась, новые предложения не создаются, пока
черновик не исчезнет (активация/архивация). Кандидат на доработку
в m08 (кнопка «отклонить» → архивация черновика).
5. Decimal в интерполяциях rationale — культура сервера; тесты
сравнивают веса из body (System.Text.Json пишет инвариантно).
6. Опорная точка делаода в v1 (З-42 п. 5): только факт-тренировка с
`session_kind=deload`, иначе `CreatedAt` активной версии; вариант
«rules-draft с deload в week 1» из ранней редакции spec 03 не
реализован — кандидат m08 (согласовано со spec 03).
7. Число Core-тестов 56 (не 55): тест `Insert_2СExternalId` добавлен
в m01 по З-35 после закрытия шага 3 (см. readme m01).