Модули (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, журнал метрик) в коммит не включены. |
||
|---|---|---|
| .. | ||
| repository_tests | ||
| SKILL.md | ||
| agent_recommendations.md | ||
| module_reqs.md | ||
| readme.md | ||
readme.md
Модуль m01-server-db — план разработки
План по алгоритму d-dev (
std1\_rules\d\d-dev.md); отметки статусов актуализируются при завершении каждого шага (d-dev-6). Требования — module_reqs.md.
| Шаг d-dev | Состав | Статус |
|---|---|---|
| 0. Персистентная подготовка | module_reqs.md, readme.md, SKILL.md | ✅ |
| 1. Доменные объекты | Dal\{Src,Ref}\Domain\{Сущность}.cs (c-dm) |
✅ утверждено (2026-10-17) |
| 1.3. Утверждение домена | — | Пользователь! ✅ |
| 2. Список функций к реализации | статусы DEV в 2-db{src,ref}\functions.md |
✅ |
| 2.3. Утверждение списка | — | Пользователь! ✅ (шаг 6) |
| 3. Спецификации функций | func_specs\ (d-db-5, d-db-9) — все 38 |
✅ |
| 3.4. Утверждение спецификаций | — | Пользователь! ✅ (группы 1–4, 2026-10-17) |
| 4. Код функций и тесты | миграции 001–002, 2-db\{src,ref}\functions\ (38), tests\ (38 файлов) |
✅ |
| 4.4. Утверждение реализации функций | — | Пользователь! ✅ (2026-10-17; прогон 122/122 PASS, docker watchbody-pg; функции DONE) |
| 5. Спецификации тестов репозиториев | repository_tests\ (d-tst) — 11 файлов на 13 репозиториев (тесты ProgramVersion и ExerciseReplacement — внутри файлов ProgramRepository.md / ExerciseRepository.md), 38 функций |
✅ утверждено (2026-10-18, ревью сверкой) |
| 5.3. Утверждение | — | Пользователь! ✅ |
| 6. Репозитории DAL + тесты | Server.WatchBody.Core (13 репозиториев + 7 фильтров, Kit.Helpers fluent), Server.WatchBody.Core.Tests (56 тестов) |
✅ код написан; сборка 0 ошибок; тесты 56/56 PASS (числа после З-35) |
| 6.4. Утверждение репозиториев | — | Пользователь! ✅ (2026-10-18, после ревью agent_recommendations.md) |
| 7. Завершение | статусы функций DONE; сборка и тесты зелёные |
✅ (2026-10-18: 38/38 функций DONE; тесты 56/56 PASS, psql-прогон 123/123 на docker watchbody-pg — числа после З-35) |
Модуль завершён (2026-10-18). Следующий по плану этапа 7 — m02-rest-api.
Примечания:
- Разработка поштучно, группы по сущностям (принятый порядок): migration → ref → athlete/athlete_profile → exercise/replacement → program/program_version → workout/workout_set → command_log → daily_log → workout_metrics → breaks.
- Спецификации тестов репозиториев живут в модуле
(
1-docs\4-modules\m01-server-db\repository_tests\) — адаптация пути1-docs\3-core\…из d-tst-1 к структуре репозитория (модульных документов). - Errata (2026-10-18, вскрыто интеграцией m02): jsonb-параметры функций
принимают
textс кастой в теле (Npgsql передаёт строку какtext, неявного cast'а text→jsonb в PG нет) —program_version_insert.p_body,workout_update.p_facts_json,command_log_insert.p_semantics,workout_metrics_upsert(4 параметра);program_version_insertдополнен идемпотентностью поp_id(🛡, какworkout_insert). psql-тесты затронутых функций перегнаны — PASS; спецификации обновлены. - Errata (2026-10-18, вскрыто интеграцией m04): Npgsql возвращает
колонки
dateкакDateOnly(неDateTime) —DailyLogRepositoryпереведён наAsDate(); ключи агрегатаworkout_select— snake_case,ParseSetsдополненJsonNamingPolicy.SnakeCaseLower(иначе поляWorkoutSet, включаяin_plan, молча не заполнялись). - Прогон psql-тестов — PostgreSQL 17 в docker-контейнере
watchbody-pg(порт 5433, БДwatchbody), ручное воспроизведение — pgAdmin (db-tst-1). - З-35 (2026-10-18, ревью этапа 7): З-31 (
src.program.external_id) не был доведён до SQL/DAL-артефактов — исправлено: миграция003_program_external_id.sql(идемпотентная),program_insert.psqlrev. 2 (p_external_id+ DROP прежней сигнатуры: два оверлода с DEFAULT делают 2-аргументный вызов неоднозначным), spec, доменProgram.ExternalId,ProgramRepository.Insert; тесты: psql-кейс #3 (повторexternal_id→ UNIQUE), Core-тестInsert_2СExternalId.