52 lines
4.5 KiB
Markdown
52 lines
4.5 KiB
Markdown
# 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).
|