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

4.5 KiB
Raw Permalink Blame History

m05-progression-rules — план работ (d-dev)

Модуль: ProgressionRules + BreakEngine — детерминированные правила прогрессии/делоада и перерывов в Server.WatchBody.Core → draft-версии программ (author=rules). Алгоритм: std1\_rules\d\d-dev.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).