MT.Checks/Plan/dal_report.md

10 KiB

Отчёт генерации DAL (навык project_dal) — прогон 2026-09-08

Статус этапов

Этап Статус
0_scan (разведка) done
1_rules (правила MCP) done
2_spec (спецификации тестов) done — утверждены пользователем
3_code (генерация) done (тесты не создаются — решение пользователя)
4_validate done — build 0 ошибок; check: 1 известный false positive (см. ниже)
5_report done — ожидание утверждения DONE

Версии правил

  • Каталог MCP standarts-catalog: 1.2 (= rules-baseline.json 1.2); расхождений нет, validate-rules не требовался.
  • Использованные области: c-dal 1.1, d-tst 1.1, c-tst 1.1, c-cs 1.1, db-m 1.1, db-s 1.1, db-func 1.1, db-tst 1.1, c-dm 1.1, d-dev 1.1, d-db 1.1 (все 2026-09-04).

Решение (проект MT.Checks)

  • MT.Checks.slnx → проект MT.Checks\MT.Checks.csproj (net10.0), ProjectReference на I:\Gitea\Kit\Kit.Core\Kit.Core\Kit.Core.csproj (Kit.Helpers).
  • Тестового проекта нет — решение пользователя «без тестов совсем» (2026-09-08).

Файлы

Файл Содержимое
Domain\ChkCheck.cs сущность проверки (+ Type/Status-справочники, Params — строка JSON)
Domain\ChkType.cs справочник типов + константы ChkTypes (6 значений)
Domain\ChkStatus.cs справочник статусов + константы ChkStatuses (4 значения)
Repository\Filter\ChkCheckFilter.cs фильтр Select (null = условие не применяется)
Repository\ChkCheckRepository.cs Insert/Update/Delete/Select/Get
Repository\ChkTypeRepository.cs Select (справочник — только чтение)
Repository\ChkStatusRepository.cs Select (справочник — только чтение)

Неймспейсы: MT.Checks.Domain, MT.Checks.Repository, MT.Checks.Repository.Filter (папка/префикс слоя Chk в коде не используются — решение пользователя).

Методы → функции БД

Метод Функция Возврат
ChkCheckRepository.Insert(ChkCheck) chk.chk_check_insert id записи
ChkCheckRepository.Update(ChkCheck) chk.chk_check_update число строк (read-modify-write; guard Id=0)
ChkCheckRepository.Delete(int) chk.chk_check_delete число строк (guard id=0)
ChkCheckRepository.Select(ChkCheckFilter) chk.chk_check_select IList<ChkCheck>
ChkCheckRepository.Get(int) chk.chk_check_get ChkCheck? (guard id=0)
ChkTypeRepository.Select() chk.chk_type_select IList<ChkType>
ChkStatusRepository.Select() chk.chk_status_select IList<ChkStatus>

Каждый метод — ровно одна хранимая функция, транспорт — fluent API Kit.Helpers (PrepareExecute<T>().AsStoredProcedure().AddParameter*().AddConverter(...)), конвертеры таблиц ответа — inline-лямбды.

Слой БД (этот же прогон)

  • DB/chk/functions/*.sql — 7 функций (параметры p_* по db-func-5);
  • DB/chk/func_specs/*.md — 7 спецификаций с тест-планами (d-db-9);
  • DB/chk/tests/test_*.psql — 7 psql-тестов (не исполнялись — нужна тестовая база: psql -d <база> -f DB/chk/tests/test_*.psql);
  • DB/chk/functions.md — статусы: функции DEV/«Функция»=CODE; «Репозиторий»=REQ с примечанием (unit-тесты не создаются, CODE по d-dev-3 неприменим).

Валидация

  • dotnet build MT.Checks.slnx — 0 ошибок (предупреждения NU1903/CS — из Kit.Core).
  • DalTools check (с манифестом) — 1 нарушение c-dal-1, известный false positive: эвристика «SQL в строке C#» сканирует текст между строковыми литералами файла и находит слово Select в сигнатуре метода Select(ChkCheckFilter) — имя метода обязательно по правилу c-dal-5 (имена CRUD: Insert/Update/Delete/Select/Get). Неустранимо в коде без нарушения стандарта; SQL в строках отсутствует.

Спецификации тестов

1-docs/2-core/chk/repository_tests/ — ChkCheckRepository.md (17 тестов), ChkTypeRepository.md, ChkStatusRepository.md — утверждены как документация ожидаемого поведения. Тестовый код по решению пользователя не создаётся (см. DB/chk/functions.md, примечание к колонке «Репозиторий»).

Известные ограничения и решения

  1. Транспорт p_ vs _: Kit.Helpers строит именованные аргументы _<имя>, функции chk объявлены с p_<имя> (db-func-5; решение пользователя — сохранить стандарт). До доработки Kit.Helpers (администратор Kit) вызовы репозиториев против живой БД будут давать «function ... does not exist».
  2. Имена: решение/проект MT.Checks — по указанию пользователя (в MT.Check.Core.Dal/MT.Checks.Test отказ).
  3. Без тестов: тестовый проект отсутствует; dotnet test из конвейера исключён.
  4. Предупреждения сборки NU1903 (уязвимые пакеты Npgsql/SqlClient и др.) — из Kit.Core, вне рамок навыка.

Возобновление/завершение

После доработки Kit.Helpers достаточно проверить вызовы на тестовой БД (спецификации вызовов не меняются). Статусы DONE — после утверждения пользователем.