Модули (d-dev, все закрыты): m01-server-db (38 psql-функций, 13 репозиториев, psql 123/123), m02-rest-api (sync/workouts/programs + middleware), m03-program-store (версии draft→active→archived), m04-metrics-engine (метрики + 6 красных флагов, Safety.*), m05-progression-rules (ProgressionRules + BreakEngine: правила 1–5, делоад, перерывы/возврат, фильтр ограничений is_active/замены; Web 81/81 + Core 56/56). Волны ревью: З-35 external_id до артефактов (миграция 003, program_insert rev.2 с DROP старой сигнатуры); З-36 --mode migrate (Program.cs, MigrationRunner, Db.MigrationsDir); З-37 tech-req 4.2 к факту (BpElevated*, фактические параметры, camelCase); З-38 шлюзы m05; З-39 примечание Ф-14.2 (illness → перезапуск); З-40/З-42 документация к факту (dto, SqlHelperAbstract, spec m05/m04); З-41(а) is_active=false в sync → exercise_delete (Ф-4.2). Инфраструктура: docker watchbody-pg (PostgreSQL 17, порт 5433); Kit.Helpers в 3-app/1-lib (не изменялся). Эксплуатационные файлы (program-trenirovok.*, program-import.json, presentation-trenirovok.html, журнал метрик) в коммит не включены. |
||
|---|---|---|
| .. | ||
| api_specs | ||
| SKILL.md | ||
| module_reqs.md | ||
| readme.md | ||
readme.md
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). |
Статусы: ⬜ не начат · 🔄 в работе · ✅ готов.
Примечания по ходу работ
is_activeзадаётся толькоexercise_delete(З-34): insert/update упражнения параметрp_is_activeне принимают — это дизайн m01, не errata. Ограничения атлета ведутся логическим удалением упражнения;exercise_selectпри NULL-фильтре возвращает и неактивные — правила видят их для подбора пары-замены. Серверный контур замкнут З-41(а) (после волны 2): sync приis_active=falseвызываетexercise_delete— телефон может исключать упражнения без веб-консоли (m08).- Подписи в spec 02–04 синхронизированы с кодом:
today— явный параметр (тестируемость),CloseOnReturnпринимаетworkoutId(в sync есть только идентификатор). - Материализация
Weeks/Sessionsобязательна: удаление узлов body (исключение упражнений/сессий) во время ленивого обхода JsonNode ломает перечисление. - Известное ограничение v1: если атлет отклонил rules-черновик и активная версия не менялась, новые предложения не создаются, пока черновик не исчезнет (активация/архивация). Кандидат на доработку в m08 (кнопка «отклонить» → архивация черновика).
- Decimal в интерполяциях rationale — культура сервера; тесты сравнивают веса из body (System.Text.Json пишет инвариантно).
- Опорная точка делаода в v1 (З-42 п. 5): только факт-тренировка с
session_kind=deload, иначеCreatedAtактивной версии; вариант «rules-draft с deload в week 1» из ранней редакции spec 03 не реализован — кандидат m08 (согласовано со spec 03). - Число Core-тестов 56 (не 55): тест
Insert_2СExternalIdдобавлен в m01 по З-35 после закрытия шага 3 (см. readme m01).