launch |
B1-1 |
Неполные предусловия ломают воспроизводимость |
docs/RUNBOOK.md |
Проверка раздела предусловий + запуск по шагам |
Docker, Compose, env |
реализовано |
launch |
B1-2 |
Нет точных команд старта |
docs/RUNBOOK.md, infra/scripts/deploy.sh |
Выполнить команды из runbook |
infra/.env |
реализовано |
launch |
B1-3 |
Скрытые ручные шаги |
docs/RUNBOOK.md |
Полный старт без ручных донастроек |
чистая машина |
реализовано |
launch |
B1-4 |
Сервисы не поднимаются |
infra/docker-compose.dev.yml, infra/docker-compose.prod.yml, infra/envoy/envoy.yaml |
docker ps, curl /health, curl /ready |
compose-стек |
реализовано |
launch |
B1-5 |
Нет сквозного happy-path |
infra/tests/e2e/sh/demo_test.sh, infra/tests/e2e/sh/envoy_chain.sh |
bash infra/tests/e2e/sh/demo_test.sh или make e2e-smoke |
подготовленные tokens/events (в demo-сценарии создаются автоматически) |
реализовано |
flags |
B2-1 |
Без активного эксперимента не возвращается default |
decision/internal/clients/controlplane/client.go |
go test decision + decide запрос |
флаг с default |
реализовано |
flags |
B2-2 |
Пользователь вне таргетинга получает variant |
control-plane targeting + decision |
e2e/contract decide сценарий |
пользователь вне правила |
реализовано |
flags |
B2-3 |
Пользователь в таргетинге получает default |
decision resolver |
decide request against active experiment |
пользователь в правиле |
реализовано |
flags |
B2-4 |
Нестабильная выдача при неизменной конфигурации |
decision deterministic assignment |
повторные decide-запросы для одного пользователя |
фиксированный user id |
реализовано |
flags |
B2-5 |
Несоответствие весов вариантов |
control-plane weights + events/metrics |
проверка распределения под нагрузкой |
взвешенные варианты |
реализовано |
review |
B3-1 |
Нет перехода draft -> in_review |
review/internal/services/experiments_lifecycle.go |
поток отправки на ревью |
review experiment draft |
реализовано |
review |
B3-2 |
Нет перехода in_review -> approved |
review/internal/services/experiments_lifecycle.go |
поток одобрения по порогу |
политика владельца + аппруверы |
реализовано |
review |
B3-3 |
Запуск без достаточного approve |
review validation + run guard |
unit/integration тесты |
одобрения ниже порога |
реализовано |
review |
B3-4 |
Разрешены недопустимые переходы |
review/internal/services/validation.go |
негативные тесты недопустимых переходов |
эксперименты в неверном состоянии |
реализовано |
review |
B3-5 |
Неназначенный юзер может approve |
политика аппруверов владельца в review |
тесты политики + интеграция |
конфигурация owner-группы |
реализовано |
events |
B4-1 |
Неверные типы полей принимаются |
events/internal/events/server.go |
unit/e2e негативные payloads |
невалидные props/types |
реализовано |
events |
B4-2 |
Отсутствие обязательных полей не блокируется |
events validation |
direct_logic.sh |
событие без обязательного поля |
реализовано |
events |
B4-3 |
Дубликаты влияют на итог |
events dedup store |
direct_chain.sh, envoy_chain.sh |
дубликат event_id |
реализовано |
events |
B4-4 |
Нет связки exposure с decision_id |
хранение exposure в events |
chain e2e + metrics checks |
exposure + decision_id |
реализовано |
events |
B4-5 |
Конверсия засчитывается без exposure |
requires_exposure + pending/rejected |
тесты out-of-order и невалидной атрибуции |
клик без exposure |
реализовано |
safety |
B5-1 |
Guardrail без metric_key |
guardrails domain/rules schema |
проверка upsert/list правил |
metric_key |
реализовано |
safety |
B5-2 |
Guardrail без threshold |
guardrails validation/rule storage |
проверка upsert/list правил |
значение порога |
реализовано |
safety |
B5-3 |
Превышение порога не обнаруживается |
guardrails/internal/app/service.go |
единоразовый запуск оценки + история срабатываний |
деградированные данные метрик |
реализовано |
safety |
B5-4 |
Нет действия после срабатывания |
guardrails/internal/app/service.go + guardrails/internal/adapters/controlplane/client.go |
проверка action mapping (pause/stop) в коде и runtime |
действие правила=pause/stop |
реализовано |
safety |
B5-5 |
Нет аудита срабатывания |
logs service (LogsService/GetList) |
прямой gRPC GetList с actor_roles=[autopilot,guardrails] + проверка payload.reason |
события срабатываний и причины действий |
реализовано |
safety |
B5-6 |
Нет ограничения участия пользователя |
assignment/token policy in runtime |
проверка повторного участия |
повторные запросы пользователя |
реализовано |
reporting |
B6-1 |
Нет фильтра отчёта по периоду |
metrics BuildExperimentReport |
report with from/to windows |
параметры временного окна |
реализовано |
reporting |
B6-2 |
Нет разреза по вариантам |
metrics report schema/queries |
проверка отчёта по вариантам |
мультивариантный эксперимент |
реализовано |
reporting |
B6-3 |
В отчете отсутствуют выбранные метрики |
metric bindings + report builder |
проверка дашборда/нагрузки |
настроенные биндинги метрик |
реализовано |
reporting |
B6-4 |
Нет полного набора outcomes |
review/internal/services/experiments_lifecycle.go |
runtime DeleteExperiment with completion fields |
running review эксперимент + completion payload |
реализовано |
reporting |
B6-5 |
Нет обоснования решения |
review/internal/services/experiments_lifecycle.go |
runtime DeleteExperiment with completion comment |
running review эксперимент + comment |
реализовано |
arch |
B7-1 |
Неоднозначный нейминг |
proto/service нейминг, карта документации |
ревью кода + инвентаризация endpoint-ов |
список endpoint-ов |
реализовано |
arch |
B7-2 |
Размытые границы модулей |
директории сервисов + контракты |
docs/REPO_MAP.md audit |
дерево репозитория |
реализовано |
arch |
B7-3 |
Нет трассируемости |
эта матрица |
построчное выполнение проверочных команд |
matrix file |
реализовано |
arch |
B7-4 |
Нет фиксации решений/ограничений |
docs/ARCHITECTURE.md, docs/TEST_REPORT.md |
ревью документации |
архитектурная документация |
реализовано |
arch |
B7-5 |
Нет C4 Context |
docs/ARCHITECTURE.md |
открыть C4 L1 диаграмму |
файл диаграммы |
реализовано |
arch |
B7-6 |
Нет C4 Container |
docs/ARCHITECTURE.md |
открыть C4 L2 диаграмму |
файл диаграммы |
реализовано |
arch |
B7-7 |
Нет C4 Component для критичного пути |
docs/ARCHITECTURE.md |
открыть C4 L3 диаграмму |
файл диаграммы |
реализовано |
arch |
B7-8 |
Нет карты репозитория |
docs/REPO_MAP.md |
навигация по карте к критичным файлам |
карта репозитория |
реализовано |
arch |
B7-9 |
Ограничения не зафиксированы |
docs/ARCHITECTURE.md, docs/RUNBOOK.md, docs/TEST_REPORT.md |
сверка документации с поведением |
набор документации |
реализовано |
tests |
B8-1 |
Нет негативных тестов |
infra/tests/e2e/sh/direct_logic.sh, тесты сервисов |
запуск shell smoke |
невалидные payloads |
реализовано |
tests |
B8-2 |
Нет контрактных/интеграционных тестов |
envoy_logic.sh, envoy_chain.sh |
make e2e-smoke |
запущенный стек |
реализовано |
tests |
B8-4 |
Нет измеримого test report |
docs/TEST_REPORT.md |
запуск перечисленных команд с coverage |
coverage go test |
реализовано |
ops |
B9-1 |
Нет readiness с однозначным контрактом |
infra/envoy/envoy.yaml, docs/RUNBOOK.md |
/ready возвращает 200 только при healthy всех upstream-кластеров, иначе 503 |
живой стек |
реализовано |
ops |
B9-2 |
Нет liveness |
процесс сервиса + health endpoint Envoy |
проверки curl |
живой стек |
реализовано |
ops |
B9-3 |
Нет базовых метрик |
scrape Prometheus + дашборды |
проверка Prometheus/Grafana |
review_autopilot_*, review_guardrails_*, метрики запросов/ошибок |
реализовано |
ops |
B9-4 |
Неструктурированные логи |
структурированные логи в сервисах/json access log Envoy |
проверка примеров логов |
логи контейнеров |
реализовано |
ops |
B9-6 |
Нет стратегии под рост нагрузки |
k6-сценарии + worker pool + метрики queue lag |
tests/run-load.sh |
сценарии нагрузки |
реализовано |
ops |
B9-7 |
Нет оптимизаций хранения/чтения |
индексы БД и агрегаты CH |
ревью схемы + проверка производительности запросов |
SQL миграций |
реализовано |
eng |
B10-1 |
Нет авто-линтинга |
make lint-go, CI golangci-lint |
локально + CI |
Go-сервисы |
реализовано |
eng |
B10-2 |
Нет авто-форматирования |
gofmt + CI conventions |
run gofmt/linters |
Go files |
реализовано |
C8 |
FX-1 |
Решения по эксперименту без полного data-quality контекста |
infra/grafana/dashboards/ab-metrics-overview.json, infra/grafana/dashboards/metric-segments-overview.json |
run-load.sh dashboard-metrics-demo + проверка дашборда |
сегментные атрибуты в props событий |
реализовано |
C8 |
FX-2 |
Не зафиксированы границы C8 demo |
docs/OPTIONAL_FEATURES.md (раздел C8) |
ревью документации + шаги экспорта/шеринга |
документация |
реализовано |
C9 |
FX-1 |
Потеря накопленных выводов по экспериментам |
library/internal/services/learnings.go, library/internal/grpc/learnings_server.go, library/internal/repositories/learnings.go |
./library/scripts/e2e_library_elastic_smoke.sh |
learning payload с outcome, summary, tags, completed_at |
реализовано |
C9 |
FX-2 |
Непрозрачные границы применения библиотеки знаний |
docs/OPTIONAL_FEATURES.md (раздел C9) |
сверка ограничений документации с поведением API на демо |
документация + демо-запросы |
реализовано |
C10 |
FX-1 |
Ручная ramp-up раскатка медленная и рискованная |
autopilot/internal/app/runner/service.go, autopilot/internal/domain/model.go, autopilot/internal/grpc/server.go |
прямой gRPC ListAutopilotStates (без Envoy) + логи automation_lag_snapshot/final + review_autopilot_* метрики |
подготовленные review_autopilot_states, метрики из metrics, логи нагрузочного прогона |
реализовано |
C10 |
FX-2 |
Непонятные условия остановки/перехода автопилота |
docs/OPTIONAL_FEATURES.md (раздел C10) |
сверка gate/safety ограничений из документации с кодом и демо |
документация + payload состояния |
реализовано |