Я думал об этом то и дело, но постоянно задавался вопросом, плохой ли типичный образец сброса на ноль.

Возьмем, к примеру, greenkeeper.io. Это сервис, который отправляет пул-реквест для обновления ваших зависимостей, если они устарели. Фантастика, правда? Проблема в том, что когда он обновляется с 5.0.0 до 5.3.0, вы даже не знаете, было ли исправлено какое-то исправление, ведь в этом весь смысл. Очевидно, что в новых функциях нет необходимости, так как это все равно потребовало бы от автора увеличения версии.

Что, если бы каждое значение кортежа Semver было увеличено само по себе? Конечно, это выглядело бы немного некрасиво, но это дало бы пользователям и машинам гораздо больше информации.

Например, предположим, что вы только что выпустили Koa 1.0.0, обнаружили ошибку, поэтому выпускаете 1.0.1. Вы добавляете три новые функции и исправляете ошибку, так что вы выпускаете 1.3.2. Наконец, вы добавляете еще одну функцию и исправляете еще три ошибки в выпуске 1.4.5. Обратите внимание, что значение уровня патча не сбрасывалось при увеличении функции или «основного» уровня.

Это дает вам несколько вещей. Во-первых, он сообщает вашим пользователям, какие ошибки есть в пакете или были, в зависимости от того, как вы это интерпретируете, это может быть хорошо или плохо. Во-вторых, это сообщает машинам, было ли исправлено исправление и сколько именно было исправлено с момента последнего выпуска, независимо от обратной совместимости или функций. Он также сообщает пользователям , сколько новых функций было добавлено, возможно, как указание на то, что им следует проверить журнал изменений, если внезапно появилось 50 новых функций, или просто проигнорировать его в противном случае.

Конечно, у этого есть проблемы, эти числа могут быстро стать громоздкими, возможно, до такой степени, что они станут менее полезными для человека. Другой аргумент заключается в том, что вам просто не следует использовать диапазоны Semver и зависимости контактов. Это также полностью верно, поскольку практически невозможно определить, была ли введена ошибка, или если вы ранее полагались на ошибку, о которой вы не знали. В этом сценарии Semver фактически бесполезен, поэтому этот шаблон также будет.

Я еще даже не пробовал этот паттерн на своей работе, так что это всего лишь мысль :)