# LDD: доказательное тестирование Этот каталог — реестр утверждений о системе и свидетельств того, что они выполняются. LDD здесь означает не «тесты вместо требований», а **риск-ориентированную проверку**: требование → проверяемое утверждение → независимый оракул → воспроизводимое свидетельство → допуск. ## Уровни - **P0** — утверждение о безопасности, сохранности данных, доступах или ключевом доменном правиле. P0 без зелёного свидетельства валит `./gradlew evidenceCheck`. - **P1** — важное поведение/UX/контракт. Пробел показывается в отчёте, но не блокирует сборку. - **runtime** — проверка на реально поднятом стеке. Выполняется отдельным скриптом; в unit-CI может отсутствовать, но обязательна перед релизом. ## Реестр `claims.json` содержит: - `id` — стабильный идентификатор (`LDD-ACCESS-001`); - `title` — короткая формулировка; - `criticality` — `P0`/`P1`; - `status` — `active` или `gap`; - `requirement` — ссылка на ТЗ/отчёт; - `claim` — проверяемое утверждение (что именно истинно); - `oracle` — как это проверяется; - `evidence` — список `fully.qualified.Class#test name()` из JUnit XML; - `runtime` — идентификаторы проверок из `build/evidence/runtime.json`; - `limitations` — что утверждение **не** покрывает. ## Запуск ```bash # 1. Все тесты и линтеры ./gradlew test ktlintCheck detekt # 2. Гейт свидетельств (P0 без evidence = fail) ./gradlew evidenceCheck # 3. Полный runtime-smoke на одноразовой БД ./scripts/ldd-runtime.sh # 4. Проверка upgrade с master-схемы ./scripts/ldd-migration-upgrade.sh ``` Отчёт: `build/reports/evidence/index.md`. ## Правила 1. Новое P0-требование без свидетельства не мержится. 2. Свидетельство должно быть воспроизводимым в CI, а не «проверил руками». 3. Тест должен падать при поломке соответствующей логики; для критичных пакетов позже добавим mutation testing. 4. Один тест может подтверждать несколько claims, но claim не должен опираться на тест, который проверяет только реализацию. 5. `limitations` обязателен: LDD не должен создавать иллюзию полного доказательства. 6. При переименовании теста обновляется `claims.json`; устаревшая ссылка — это gap, а не «забыли». 7. Runtime-свидетельства обязательны перед релизом; CI проверяет unit/ integration-слой. ## Текущий baseline Первый прогон LDD выполнен 2026-10-27: - 267 автоматических тестов, 0 failures/errors; - 33 claims: P0 — доступы, повышение, жизненный цикл, профиль/скачивание, материалы/активы, миграция V13, аудит; P1 — группы, авторство, UI, контракты, импорт, копирование лаб, runtime. - Runtime-smoke и master-upgrade вынесены в отдельные скрипты. Результаты и найденные пробелы — в `baseline-2026-10-27.md`.