Как отслеживать изменения логики работы кода в сторонних модулях?
Сначала довольно длинное введение, чтобы было понятно, в чем проблема.
Есть сайт, на котором размещаются текстовые материалы в виде статей. Статья — это просто заголовок, текст и id (slug). Есть панель управления для создания, редактирования и удаления статей. Управление статьями вынесено в отдельный модуль, который делается внешними разработчиками.
Модуль статей подключается к сайту (основному приложению), и на события этого модуля можно вешать обработчики. Например, чтобы при добавлении статьи автоматически обновились карта сайта, поисковый индекс и т.п.
Когда-то давно добавился функционал оповещения всех пользователей сайта при добавлении новой статьи. Как только в админке добавляется новая статья — модуль статей испускает определенное событие (article_create). Код основного сайта, подписанный на это событие, запускает рассылку оповещений всем пользователям о том, что вышла новая статья (например, по e-mail или через браузерные уведомления).
Все это работало долго и хорошо, и вот однажды в модуле статей добавился новый функционал: у статей появился флаг is_published "опубликовано/скрыто" (по умолчанию — опубликовано). Теперь статью можно сначала создать в виде черновика, который не виден пользователям, а позже отредактировать и опубликовать.
Однако в коде основного сайта никаких изменений сделано не было (тупо забыли за давностью). Тесты модуля корректно прошли. Тесты основного приложения — тоже. И стала возможной ситуация, когда статья создается, событие article_create испускается, но флаг is_published у этой статьи равен false, а о такой статье никого уведомлять не нужно. Однако код, подписанный на это событие, не поменяли, и в результате пользователям разослалось уведомление о статье-черновике.
То есть очевидно, что возникла несогласованность логики работы внешнего модуля, где добавился флаг isPublished, и использующего этот модуль кода основного приложения, в котором не было добавлено никаких уточнений логики, связанных с этим флагом.
Собственно вопрос: каким образом, с помощью каких возможных тестов или архитектурных подходов можно было бы определить и предупредить такую проблему? В сторону какой темы копать? Понятно, что это, возможно, сбой коммуникации между разработчиками модуля и основного сайта и промах разработчиков основного сайта. Но есть ли какие-то подходы к программированию, которые покажут, что логика работы внешнего модуля поменялась, а логика работы использующего его приложения — нет?