Conventional Commits прячет нужное поле за ненужным — и никто не заметил

Сумнер Эванс жалуется на порядок слов. В Conventional Commits тип — fix, feat, chore — обязателен, а область (scope) опциональна, хотя любой читающий лог коммитов ищет именно область. Тред разделился поровну: придирки к велосипедному сараю или самая суть?

Целый пост о том, с какой стороны двоеточия должна стоять область

Пост Сумнера Эванса утверждает, что Conventional Commits — формат fix(scope): description, вышедший из экосистемы Angular, — оптимизирован не под то. Он собрал 285 голосов и 220 комментариев, а тред разделился почти поровну между теми, кто считает это спором о велосипедном сарае, и теми, кто убеждён, что этот сарай несущий.

Область важнее: именно её все ищут в логе

Главный приём Эванса — спросить, кто читает лог коммитов и что ему нужно. Он называет три группы: контрибьюторы, отслеживающие изменения в своей части кода; отладчики, ищущие коммиты, затронувшие компонент; дежурные инженеры, просматривающие последние изменения во время инцидента — и утверждает, что всем троим нужна область раньше типа. Conventional Commits переворачивает это: тип обязателен и стоит первым, область — необязательный элемент в скобках. Эванс предпочёл бы писать subsystem: description — формат, который уже используют Linux, Go, Git, FreeBSD и nixpkgs:

  • Linux: i2c: virtio: mark device ready before registering the adapter
  • Go: net/http/cookiejar: add godoc links

Затем он разбирает «обещания» спецификации по одному. Автоматические changelog смешивают две аудитории с несовместимыми потребностями — «changelog ориентирован на пользователей» о функциональных отличиях между версиями, тогда как «лог коммитов ориентирован на разработчиков» о том, как изменился код. Автоматизация SemVer ломается на ревертах, случайных поломках и ретроактивных «восстановлениях». Тип-зависимые триггеры сборки — это, по его словам, умеренная угроза безопасности.

Ревьюеры и CI-команды возражают

Самые острые возражения приходят от тех, для кого тип на первом месте — фича, а не баг.

«Как ревьюер, я люблю тип первым, потому что он задаёт ожидания от того, что я увижу. То же самое при bisect или других операциях с историей.» — мейнтейнер, сортирующий ревью по типу

«Тип коммита сообщает автоматизированным пайплайнам, как с ним обращаться. Поэтому он стоит первым… набор fix: поднимает только patch-версию, feat: — minor, feat! — major.» — руководитель инжиниринга по CI/CD-автоматизации

И прагматичный аргумент в пользу любого соглашения вообще: большинство команд без шаблона не пишут нормальных сообщений.

«Теоретически люди могут писать хорошие сообщения к коммитам без фреймворка? Да. Работает ли это на практике для целых команд? Нет. Любое соглашение о коммитах — уже улучшение.» — разработчик, видевший это на практике

Те, кто согласен с Эвансом, хотят ID задачи, а не тип

Люди, поддержавшие Эванса, делают это по причине, которую он почти не затрагивает: поле, которое им реально нужно, — это ссылка на тикет.

«За более чем 30 лет работы с системами контроля версий мне ни разу не попадалось место, где полезно указывать компонент… «bug», «fix» или «feature» не добавляют никакой ценности… Единственное по-настоящему полезное — и это статья вообще не рассматривает — ссылка/ID на соответствующий запрос на изменение.» — разработчик с 30-летним опытом работы с VCS

Мейнтейнер Keep a Changelog появился в треде, чтобы указать на более глубокую ошибку: Conventional Commits предполагает, что каждый коммит вообще должен попасть в changelog релиза.

«это предполагает (в широком смысле), что каждый отдельный коммит в репозитории релевантен для changelog итогового релиза… это серьёзный промах в понимании того, что обычно означает общение о релизе» — мейнтейнер keepachangelog.com

Один из участников заметил нечто более тонкое: соглашение теперь самовоспроизводится, потому что его пишут инструменты. «Я всё чаще вижу комментарии в стиле conventional commits, и ощущение, что они приходят от Claude Code», — заметил один разработчик — системный промпт по умолчанию тихо устанавливает норму в миллионах репозиториев.

Настоящая линия разлома: люди против пайплайнов

Спор на самом деле не о порядке слов. Он о том, для кого пишется сообщение к коммиту. Если коммиты питают робота-релизёра, тип должен стоять первым — там, где его увидит парсер. Если их читает человек в два часа ночи при bisect, помогает только область. Эванс прав, что это разные задачи, — и самое честное прочтение треда: Conventional Commits тихо выбрал робота, а многие просто не заметили, что начали писать для него.

Получайте такие разборы каждый день

Главные истории Hacker News — на email, в Telegram или RSS.

Следующая новость · 16 из 25 Читать дальше
🌍Other

Лазерная гравировка чёрной металлической панели добывает из моря пресную воду и оставляет сухую соль

Большинство методов опреснения сбрасывают токсичный рассол обратно в океан. Солнечная панель из лаборатории в Рочестере использует «эффект кофейного кольца», чтобы выгонять соль в боковую зону твёрдыми кристаллами — 10,3 литра воды с квадратного метра в сутки, в стекле, на лабораторном масштабе.

★ 307 · 💬 134 · rochester.edu · 5 мин