🧙 Садовник: уточнил шаги, добавил проверки и обоснования. Примите, если полезно.

#1
open+2~14proposed by gardener · Aug 12, 2026 · based on v1
Proposed changes · v1 → suggestion
+26
111. Поведение соответствует требованиям
22 Сверить реализованные сценарии, ограничения и результаты с согласованными критериями приёмки; для каждого обязательного требования должно существовать подтверждение в тесте или демонстрации.
33 why: Даже технически качественный код бесполезен, если решает неверную задачу.
44 - [ ] Обязательные сценарии подтверждены
55 - [ ] Ограничения и исключения учтены
66 - [ ] Лишнее поведение не изменяет требования
7+ - [ ] Каждый кейс приёмки имеет соответствующий тест
782. Решение остаётся простым по принципу KISS
89 Проверить на ревью, что основной путь выполнения легко прослеживается, уровни абстракции оправданы, а более простая реализация не обеспечивает те же требования.
910 why: Простое решение легче понимать, проверять, изменять и восстанавливать после сбоев.
1011 - [ ] Основной поток читается без лишних переходов
1112 - [ ] Абстракции решают существующую проблему
1213 - [ ] Нет неоправданных фреймворков и шаблонов
14+ - [ ] Количество зависимостей минимально
1315 → Принципы Agile — https://agilemanifesto.org/principles.html
1416 → Правила дизайна Кента Бека — https://martinfowler.com/bliki/BeckDesignRules.html
15173. Знания не дублируются по принципу DRY
1618 Найти бизнес-правила, формулы, схемы и конфигурацию, представленные в нескольких местах, и убедиться, что у каждого знания есть единый источник истины.
1719 why: DRY устраняет не просто похожий текст, а риск несогласованного изменения одного и того же знания.
1820 - [ ] Бизнес-правило определено в одном месте
1921 - [ ] Производные данные генерируются из источника истины
2022 - [ ] Копии конфигурации не расходятся
23+ - [ ] Нет дублирования логики в разных модулях
2124 → Правила дизайна Кента Бека — https://martinfowler.com/bliki/BeckDesignRules.html
22254. Случайное сходство не превращено в преждевременную абстракцию [recommended]
2326 Проверить, что объединённый код действительно меняется по одной причине; допустимое структурное повторение оставлено раздельным, если предметные правила независимы.
2427 why: Буквальное применение DRY часто связывает независимые части системы и делает изменения опаснее; иногда небольшое повторение дешевле неверной абстракции.
2528 - [ ] Объединённые случаи имеют общую семантику
2629 - [ ] Абстракция не переполнена флагами и исключениями
2730 - [ ] Независимые правила могут изменяться отдельно
31+ - [ ] Абстракции не усложняют понимание кода
2832 → Правила дизайна Кента Бека — https://martinfowler.com/bliki/BeckDesignRules.html
29335. Спекулятивная функциональность отсутствует по принципу YAGNI
3034 Убедиться, что расширения, точки конфигурации и обобщения связаны с текущим требованием или подтверждённым ближайшим сценарием, а не с гипотетическим будущим.
3135 why: Неиспользуемая гибкость увеличивает объём кода, тестов и решений, которые придётся сопровождать.
3236 - [ ] У каждой возможности есть текущий потребитель
3337 - [ ] Неиспользуемые параметры и ветви отсутствуют
3438 - [ ] Будущие идеи не встроены без требования
39+ - [ ] Нет избыточных интерфейсов и методов
3540 → YAGNI Мартина Фаулера — https://martinfowler.com/bliki/Yagni.html
36416. Ответственности разделены и связность модулей высока
3742 Проверить, что модуль объединяет поведение вокруг одной причины изменения, а бизнес-логика не смешана с вводом-выводом, хранением, интерфейсом или инфраструктурой.
3843 why: Высокая связность внутри модулей и разделение причин изменения локализуют доработки и ошибки.
3944 - [ ] У модуля сформулирована одна основная роль
4045 - [ ] Бизнес-правила отделены от инфраструктуры
4146 - [ ] Изменение требования затрагивает ограниченную область
47+ - [ ] Модули не зависят от деталей реализации друг друга
4248 → Актуальность SOLID — https://blog.cleancoder.com/uncle-bob/2020/10/18/Solid-Relevance.html
43497. Зависимости направлены к устойчивым контрактам [recommended]
4450 Проверить, что существенная бизнес-логика не зависит напрямую от нестабильных деталей, внешние интеграции изолированы, а интерфейсы вводятся в местах реальной заменяемости или тестового шва.
4551 why: Инверсия зависимостей снижает стоимость замены инфраструктуры, но интерфейс для каждого класса лишь создаёт лишнюю сложность.
4652 - [ ] Внешние системы изолированы адаптерами
4753 - [ ] Контракты минимальны и ориентированы на потребителя
4854 - [ ] Тривиальные детали не обёрнуты без причины
55+ - [ ] Используются интерфейсы, а не конкретные реализации
4956 → Актуальность SOLID — https://blog.cleancoder.com/uncle-bob/2020/10/18/Solid-Relevance.html
50578. Контракты и ошибки выражены явно
5158 Проверить, что входные условия, возвращаемые значения, состояния ошибок и побочные эффекты понятны из типов, интерфейсов, тестов или документации, а ошибки не подавляются молча.
5259 why: Явные контракты сокращают число скрытых предположений и позволяют обнаруживать нарушения ближе к источнику.
5360 - [ ] Недопустимые входы отклоняются предсказуемо
5461 - [ ] Ошибки сохраняют полезный контекст
5562 - [ ] Побочные эффекты видимы вызывающему коду
63+ - [ ] Типы данных чётко определяют допустимые значения
56649. Критические сценарии и границы покрыты тестами
5765 Сопоставить тесты с критериями приёмки и проверить наличие успешных, граничных и ошибочных сценариев; тесты должны проверять наблюдаемое поведение, а не внутреннее устройство.
5866 why: Тесты подтверждают корректность и позволяют безопасно менять реализацию без закрепления её случайных деталей.
5967 - [ ] Основные сценарии покрыты
6068 - [ ] Граничные значения проверены
6169 - [ ] Ожидаемые отказы проверены
6270 - [ ] Тесты устойчивы к внутреннему рефакторингу
71+ - [ ] Есть тесты для критических путей
6372 → Пирамида тестирования Google — https://testing.googleblog.com/2015/04/just-say-no-to-more-end-to-end-tests.html
647310. Автоматические проверки проходят воспроизводимо
6574 Убедиться, что обязательный конвейер CI на актуальном коммите успешно выполняет тесты, статический анализ, форматирование, сборку и применимые проверки безопасности в чистом окружении.
6675 why: Автоматизация превращает соглашения о качестве в повторяемые условия интеграции изменений.
6776 - [ ] Обязательный конвейер завершён успешно
6877 - [ ] Проверки запускаются в чистом окружении
6978 - [ ] Случайно нестабильные тесты отсутствуют
7079 - [ ] Защита ветки требует успешных проверок
80+ - [ ] Все зависимости загружаются автоматически
718111. Имена и структура соответствуют соглашениям проекта [recommended]
7282 Сверить названия, форматирование, организацию файлов и публичные интерфейсы с зафиксированным стандартом проекта; отклонения должны быть обоснованы.
7383 why: Единообразие снижает когнитивную нагрузку и позволяет сосредоточиться на поведении программы.
7484 - [ ] Имена отражают предметный смысл
7585 - [ ] Форматирование единообразно
7686 - [ ] Структура файлов предсказуема
7787 - [ ] Неочевидные сокращения отсутствуют
88+ - [ ] Используются общепринятые названия для стандартных компонентов
788912. Документация объясняет актуальные решения [recommended]
7990 Сопоставить документацию с текущими интерфейсами и поведением; комментарии должны объяснять причины, ограничения и компромиссы, а не пересказывать очевидный код.
8091 why: Документация особенно ценна там, где код не может сохранить контекст принятого решения.
8192 - [ ] Инструкции запуска актуальны
8293 - [ ] Публичные контракты описаны
8394 - [ ] Архитектурные компромиссы зафиксированы
8495 - [ ] Устаревшие комментарии отсутствуют
96+ - [ ] Документация синхронизирована с изменениями кода
859713. Границы доверия и привилегии ограничены
8698 Проверить валидацию недоверенных данных, авторизацию операций, хранение секретов, безопасные значения по умолчанию и минимально необходимые права компонентов.
8799 why: Корректность программы включает устойчивость к ошибочному и злонамеренному вводу, а не только штатное поведение.
88100 - [ ] Недоверенные данные валидируются
89101 - [ ] Авторизация проверяется на серверной стороне
90102 - [ ] Секреты не находятся в коде и логах
91103 - [ ] Компоненты имеют минимальные права
104+ - [ ] Используются механизмы защиты от инъекций
92105 → OWASP ASVS — https://owasp.org/www-project-application-security-verification-standard/
9310614. Принципы применены как компромиссы, а не догмы [recommended]
94107 Проверить, что отступления от KISS, DRY, YAGNI или SOLID объясняются измеримыми требованиями, а применение одного принципа не создаёт больший риск для понятности, корректности или изменений.
95108 why: Принципы могут конфликтовать: хорошее решение учитывает контекст и стоимость изменения, а не максимизирует формальное соответствие лозунгам.
96109 - [ ] Компромиссы сформулированы явно
97110 - [ ] Сложность оправдана требованием
98111 - [ ] Решение можно пересмотреть при изменении условий
112+ - [ ] Есть обоснование для отклонений от принципов
99113 → YAGNI Мартина Фаулера — https://martinfowler.com/bliki/Yagni.html
100114 → Актуальность SOLID — https://blog.cleancoder.com/uncle-bob/2020/10/18/Solid-Relevance.html
115+15. Логи не содержат конфиденциальной информации
116+ Проверить, что в логах нет чувствительных данных, таких как пароли, токены, персональные данные пользователей.
117+ why: Утечка конфиденциальной информации через логи может привести к серьёзным последствиям, включая компрометацию системы и нарушение законодательства о защите данных.
118+ - [ ] Конфиденциальные данные не записываются в логи
119+ - [ ] Используются механизмы маскировки чувствительных данных
120+ - [ ] Логи не содержат информации, которая может быть использована для атаки на систему
121+16. Обработка исключений не нарушает бизнес-логику
122+ Проверить, что при обработке исключений программа не теряет критически важные данные и не переходит в некорректное состояние.
123+ why: Неправильная обработка исключений может привести к потере данных, нестабильной работе системы и труднодиагностируемым ошибкам.
124+ - [ ] Исключения не подавляются без обработки
125+ - [ ] При обработке исключений сохраняется целостность данных
126+ - [ ] Программа корректно восстанавливается после обработки исключения
Review