Files
Lotty/compliance-matrix.md
T
2026-02-24 20:35:01 +03:00

18 KiB
Raw Blame History

Матрица соответствия: задание -> критерий -> реализация

Статусы:

  • подтверждено - есть прямая реализация и проверка тестами/командами.
  • частично (live-demo) - реализация есть, но критерий окончательно закрывается только на живом запуске.
ID задания ID критерия Проблема/риск Где реализовано Как проверяется Какие данные нужны Статус
D.4 B1-1 Без предусловий жюри не сможет воспроизвести запуск RUNBOOK.md, src/backend/README.md Ручная проверка разделов предусловий Python, uv, just, рабочая директория src/backend подтверждено
D.4 B1-2 Неоднозначные команды старта ломают проверку RUNBOOK.md, src/backend/justfile cd src/backend && just --list Доступ к just подтверждено
D.3 B1-3 Скрытые ручные шаги делают запуск невоспроизводимым RUNBOOK.md, compose.yaml, compose.prod.yaml Полный прогон по runbook на стенде Чистое окружение и runtime-сервисы частично (live-demo)
3.7 B1-4 Сервис может стартовать, но быть неготовым к запросам src/backend/api/urls.py (/health, /ready) Runtime curl /health и curl /ready Поднятый backend и зависимости частично (live-demo)
D.5 B1-5 Без e2e happy-path нельзя доказать работоспособность src/backend/tests/integration/test_happy_path.py, src/backend/tests/integration/test_api_contract.py cd src/backend && just test Тестовые фикстуры и встроенный test DB подтверждено
1.3, 3.4 B2-1 Возврат не-default без активного эксперимента искажает контроль src/backend/apps/decision/services.py, src/backend/apps/flags/services.py apps.decision.tests.test_decide.DecideForFlagTest.test_no_active_experiment, apps.flags.tests.test_flags.FeatureFlagServiceTest.test_update_default_invalidates_decide_flag_cache Флаг с default и без running эксперимента; update default_value на том же флаге подтверждено
1.3, 2.7 B2-2 Пользователь вне таргетинга не должен получать variant src/backend/apps/decision/services.py, src/backend/libs/dsl/* apps.decision.tests.test_decide.TargetingRulesTest.test_targeting_fail_returns_default Эксперимент с targeting rules и mismatching subject подтверждено
1.3, 3.4 B2-3 При применимом эксперименте нужен variant, а не default src/backend/apps/decision/services.py apps.decision.tests.test_decide.DecideForFlagTest.test_running_experiment_assigns_variant Running experiment с вариантами подтверждено
3.5.1 B2-4 Нестабильная выдача ломает статистику и UX src/backend/apps/decision/services.py (_hash_subject) apps.decision.tests.test_decide.DecideForFlagTest.test_deterministic_assignment Повторные вызовы для одного subject подтверждено
2.2 B2-5 Игнорирование weights делает тест нерепрезентативным src/backend/apps/decision/services.py (_select_variant) apps.decision.tests.test_decide.SelectVariantTest.test_selects_by_weight Варианты с разными весами подтверждено
2.4 B3-1 Без перехода в review нет управляемого процесса запуска src/backend/apps/experiments/services.py (experiment_submit_for_review) apps.experiments.tests.test_services Draft experiment с валидными вариантами подтверждено
2.4 B3-2 Без авто-перехода в approved ревью-процесс зависает src/backend/apps/experiments/services.py (experiment_approve) apps.experiments.tests.test_services Approver + достигнутый порог approvals подтверждено
0.3, 2.4 B3-3 Запуск без порога approvals делает процесс небезопасным src/backend/apps/experiments/services.py, src/backend/tests/integration/test_negative.py InvalidLifecycleTransitionsTest.test_cannot_start_without_enough_approvals default_min_approvals > 1, недостаток approve подтверждено
2.5 B3-4 Невалидные lifecycle переходы ломают состояние src/backend/apps/experiments/models.py (ALLOWED_TRANSITIONS) src/backend/tests/integration/test_negative.py Эксперимент и попытка запрещённого перехода подтверждено
0.2, 0.3 B3-5 Неназначенный пользователь не должен влиять на review src/backend/apps/reviews/selectors.py, src/backend/apps/experiments/services.py apps.reviews.tests.test_reviews_policy, test_negative.ReviewPolicyEnforcementTest Approver group / fallback настройки подтверждено
4.5 B4-1 Невалидные типы событий портят аналитику src/backend/apps/events/services.py (_validate_event_payload) apps.events.tests.test_services Batch с ошибочными типами полей подтверждено
4.5 B4-2 Отсутствие обязательных полей делает события непригодными src/backend/apps/events/services.py, src/backend/apps/events/models.py apps.events.tests.test_services, test_negative.EventValidationIntegrationTest События без required base/properties подтверждено
4.3 B4-3 Дубли событий завышают метрики src/backend/apps/events/services.py (_is_duplicate) apps.events.tests.test_services, tests.integration.test_events Два события с одним event_id подтверждено
4.1, 4.4 B4-4 Без связи exposure с decision теряется атрибуция src/backend/apps/events/models.py (Exposure.decision_id) apps.events.tests.test_services Валидный decision_id и exposure event подтверждено
4.4.1 B4-5 Конверсия без exposure не должна попадать в отчёт src/backend/apps/events/services.py (requires_exposure, PendingEvent) apps.events.tests.test_services, tests.integration.test_events Conversion до exposure и последующая промоция подтверждено
6.2 B5-1 Guardrail без metric_key нефункционален src/backend/apps/guardrails/models.py (metric) apps.guardrails.tests.test_guardrails Guardrail с привязанной метрикой подтверждено
6.2 B5-2 Guardrail без threshold не может сработать src/backend/apps/guardrails/models.py (threshold) apps.guardrails.tests.test_guardrails Guardrail с заданным порогом подтверждено
6.3 B5-3 Превышение порога должно фиксироваться автоматически src/backend/apps/guardrails/services.py apps.guardrails.tests.test_guardrails, tests.integration.test_guardrails Метрика выше threshold в окне подтверждено
6.4 B5-4 После trigger должно выполняться действие безопасности src/backend/apps/guardrails/services.py (pause, rollback) apps.guardrails.tests.test_guardrails Running experiment + breach подтверждено
6.5 B5-5 Без аудита триггеров нельзя объяснить остановку src/backend/apps/guardrails/models.py (GuardrailTrigger), apps/experiments/models.py (ExperimentLog) apps.guardrails.tests.test_guardrails Triggered guardrail подтверждено
3.6 B5-6 Один пользователь не должен постоянно быть в экспериментах src/backend/apps/decision/services.py (MAX_CONCURRENT_EXPERIMENTS, COOLDOWN_DAYS) apps.decision.tests.test_decide.ParticipationLimitsTest Несколько running/completed экспериментов на одного subject подтверждено
5.2 B6-1 Отчёт без периода неуправляем и спорный src/backend/apps/reports/services.py apps.reports.tests.test_reports.CalculateMetricValueTest.test_period_filter События внутри/вне окна периода подтверждено
5.3 B6-2 Без разреза по вариантам нельзя сравнивать A/B src/backend/apps/reports/services.py (variant_reports) apps.reports.tests.test_reports.BuildExperimentReportTest Эксперимент минимум с двумя вариантами подтверждено
5.4 B6-3 Отчёт должен показывать именно выбранные метрики эксперимента src/backend/apps/metrics/models.py, src/backend/apps/reports/services.py apps.reports.tests.test_reports ExperimentMetric привязки подтверждено
2.6 B6-4 Нужна фиксация исхода (rollout/rollback/no_effect) src/backend/apps/experiments/services.py (experiment_complete) apps.experiments.tests.test_services Completed experiment и выбранный outcome подтверждено
2.6 B6-5 Решение без rationale теряет объяснимость src/backend/apps/experiments/services.py (валидация rationale) tests.integration.test_negative.InvalidLifecycleTransitionsTest.test_cannot_complete_without_rationale Пустой rationale при complete подтверждено
D.5(B7) B7-1 Неясный нейминг усложняет поддержку и демо src/backend/apps/*, src/backend/api/v1/* Архитектурный walkthrough Репозиторий проекта подтверждено
D.5(B7) B7-2 Без границ модулей растёт связность и регрессии src/backend/apps/*, src/backend/api/v1/* Проверка структуры директорий и зависимостей Репозиторий проекта подтверждено
D.4, D.6 B7-3 Без матрицы тяжело трассировать критерии compliance-matrix.md Проверка заполнения всех ID Этот файл подтверждено
D.4 B7-4 Без ADR сложно доказать осознанные trade-off ADR/04-decisions.md Сверка решений с кодом ADR и код src/backend подтверждено
D.4 B7-5 Нужна контекстная диаграмма границ системы assets/plantuml/raw/c4-context.puml Просмотр диаграммы PlantUML файл подтверждено
D.4 B7-6 Нужна container-диаграмма взаимодействий assets/plantuml/raw/c4-container.puml Просмотр диаграммы PlantUML файл подтверждено
D.4 B7-7 Нужна component-диаграмма по критичному пути assets/plantuml/raw/c4-component-critical-path.puml Просмотр диаграммы PlantUML файл подтверждено
D.4 B7-8 Без карты репозитория навигация медленная MAP.md Проверка ссылок на точки входа Файл MAP.md подтверждено
D.7 B7-9 Неявные упрощения искажают ожидания жюри ADR/07-simplifications.md Проверка явного списка ограничений ADR пакет подтверждено
D.5(B8) B8-1 Без негативных тестов edge-cases не покрыты src/backend/tests/integration/test_negative.py cd src/backend && just test Тестовая БД и фикстуры подтверждено
D.5(B8) B8-2 Критичный поток нужен в интеграционных/контрактных тестах src/backend/tests/integration/test_happy_path.py, src/backend/tests/integration/test_api_contract.py cd src/backend && just test Тестовые фикстуры подтверждено
D.4 B8-4 Нужен измеримый отчёт по покрытию src/backend/justfile, src/backend/pyproject.toml cd src/backend && just test-coverage && just show-coverage Coverage tool из dev dependencies подтверждено
3.7 B9-1 Readiness должен быть однозначным и проверяемым src/backend/api/urls.py (/ready) Runtime: curl -i /ready после старта Поднятые cache/db/storage/celery частично (live-demo)
3.7 B9-2 Нужен отдельный liveness probe src/backend/api/urls.py (/health) Runtime: curl -i /health Поднятый backend подтверждено
D.5(B9) B9-3 Без метрик нет наблюдаемости hot-path src/backend/config/settings/base.py, src/backend/apps/decision/services.py, src/backend/api/v1/events/endpoints.py Runtime: curl /metrics Поднятый backend подтверждено
D.5(B9) B9-4 Неструктурированные логи сложны для алертов и анализа src/backend/config/settings/base.py (json formatter, django-guid) Запуск в non-debug и просмотр stdout Конфигурация DJANGO_DEBUG=false подтверждено
D.5(B9) B9-6 Рост трафика/данных может деградировать latency даже после оптимизаций infrastructure/k6/decide.js, infrastructure/k6/run-decide.sh, infrastructure/k6/README.md, src/backend/apps/decision/services.py, src/backend/apps/reports/services.py, src/backend/apps/events/tasks.py, ADR/04-decisions.md (P1-P4) Нагрузочный прогон ./infrastructure/k6/run-decide.sh + анализ artifacts/k6/<RUN_ID>/summary.json (p95/p99, error rate, req/s); фактические прогоны: artifacts/k6/smoke_k6, artifacts/k6/20260224171916; в прогоне 20260224171916: 14_800 запросов, 87.02 req/s, p95=167.88 ms, p99=420.48 ms, error_rate=0.0135% (2/14800) Поднятый compose-стек и артефакты artifacts/k6/<RUN_ID>/{summary.json,run.env,fixture.json} частично (live-demo)
D.5(B9) B9-7 Без индексов и оптимизаций горячие запросы дорожают src/backend/apps/experiments/models.py, src/backend/apps/events/models.py, src/backend/apps/guardrails/models.py, src/backend/apps/notifications/models.py, src/backend/apps/learnings/models.py Схема моделей и миграций БД-схема проекта подтверждено
D.5(B10) B10-1 Отсутствие автоматического линтинга снижает качество src/backend/justfile, src/backend/pyproject.toml, .gitlab-ci.yml cd src/backend && just lint Dev dependencies подтверждено
D.5(B10) B10-2 Отсутствие форматирования повышает шум в diff src/backend/justfile, src/backend/pyproject.toml, .gitlab-ci.yml cd src/backend && just format Dev dependencies подтверждено
7 FX-1 Без рабочего сценария уведомления бесполезны src/backend/apps/notifications/*, src/backend/api/v1/notifications/* cd src/backend && uv run python manage.py test apps.notifications.tests.test_notifications api.v1.notifications.tests.test_notifications_api Notification channels/rules/log fixtures подтверждено
7 FX-2 Нужны явные ограничения по каналам и шумоподавлению ADR/07-simplifications.md, ADR/04-decisions.md, src/backend/apps/notifications/services.py Сверка docs и реализации rate-limit/dedup Документация + код notifications подтверждено
9 FX-1 Без рабочего knowledge base повторяются эксперименты src/backend/apps/learnings/*, src/backend/api/v1/learnings/* cd src/backend && uv run python manage.py test apps.learnings.tests.test_learnings api.v1.learnings.tests.test_learnings_api Learning fixtures, experiments, tags подтверждено
9 FX-2 Нужны явные ограничения алгоритма похожести ADR/07-simplifications.md, ADR/04-decisions.md, src/backend/apps/learnings/services.py Сверка docs и реализации similarity scoring Документация + код learnings подтверждено
11 FX-1 Без резолва конфликтов метрики неинтерпретируемы src/backend/apps/conflicts/*, src/backend/api/v1/conflicts/*, src/backend/apps/decision/services.py cd src/backend && uv run python manage.py test apps.conflicts.tests.test_conflicts api.v1.conflicts.tests.test_conflicts_api Эксперименты в доменах с policy mutual_exclusion/priority подтверждено
11 FX-2 Нужны явные границы конфликтных политик ADR/07-simplifications.md, ADR/04-decisions.md, src/backend/apps/conflicts/services.py Сверка docs и resolve_domain_conflict Документация + код conflicts подтверждено