Skip to content

Как проект живёт и принимает чужие правки, и кто в нём встречался в разборах — по поступкам, датам и ссылкам

v2 0 stars 0 forks 0 watchers 1 branch 0 runs Public
Добавлены разделы по правилам проекта: описанные им самим, мелкие правила, чего ждатьv2
ERPNext

Что это. Открытая ERP: бухгалтерия, склад, продажи, производство — на фреймворке Frappe. Сам проект описывает себя так: «Free and Open Source Enterprise Resource Planning (ERP)».

Возраст. Репозиторий на GitHub заведён 8 июня 2011 года. Проект ведёт компания Frappe.

Размер. 38 800 звёзд, 12 700 форков на сентябрь 2026. Форков к звёздам — треть: ERPNext ставят себе и правят под себя.

Привычки, описанные им самим

Правила ERPNext лежат в двух местах. В репозитории — короткий .github/CONTRIBUTING.md, и он только про задачи: как писать баг-репорт и запрос функции. Всё про правки — в вики: страницы Contribution-Guidelines, Pull-Request-Checklist, Coding-Standards.

Проект честно предупреждает, что правку придётся переделывать:

Most probably you might have to go back and change a few things… So be prepared for some back and forth.

Скорее всего, придётся вернуться и кое-что поправить… Так что готовьтесь к переписке туда-сюда.

Автоматические правки запрещены — и правило написано для чужих, не для своих:

Do NOT send pull requests based on changes generated using automated tools. … Using AI/LLMs/generative models for completely automated changesets that you have not seriously reviewed. … Exemption: This rule is not enforced on existing maintainers.

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

Новую функцию просят сначала обсудить, а потом переспать с ней:

Don't start developing on the same day. Prepare a note and sleep over your thoughts for at least one day.

Не начинайте писать код в тот же день. Набросайте заметку и дайте мыслям отлежаться хотя бы сутки.

Привычки, видные по переписке

Чинит случай, пока случай виден, и переходит к устройству, когда случаев набирается много: между первой точечной правкой (2021) и решением «свести все записи в одну точку» (2026) — пять лет и пятеро людей.

Правки под чужую базу делает так, чтобы не тронуть свою: «MariaDB code paths are byte-identical». Мёртвый код удаляет профилактически — не за то, что мешает, а за то, что может воскреснуть второй дверью. Имена функций правит так, чтобы они говорили, откуда берётся число.

Мелкие правила, по которым узнаётся свой

Коммиты и заголовки PR — Conventional Commits. commitlint.config.js разрешает типы build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test; workflow semantic-commits.yml проверяет каждый коммит. Заголовок с chore, ci, style, test, refactor получает метку skip-release-notes и выпадает из релизных заметок.

Ветки: новое — только в develop, исправления — в старшую затронутую версию, бэкпорты — в version-16-hotfix и version-15-hotfix, по метке backport version-XX-hotfix. И:

Please don't send a Pull Request to all branches.

Пожалуйста, не шлите один PR во все ветки.

Линтеры — через pre-commit: ruff, prettier и eslint, запрет коммитов прямо в develop, свой скрипт против SQL, который сломается на Postgres; в CI сверху semgrep с правилами frappe/semgrep-rules. Отступы — табы: «Please don't ask why, this has been the legacy».

Метки ставит бот по каталогам (stock, accounts…), а needs-tests — на любой PR, где тронут Python без файлов test*.py. PR с организационных форков не принимают — там нельзя включить правки мейнтейнера.

Чего ждать, если придёте со своей правкой

Всё ниже — из вики ERPNext, файлов .github/ и задачи frappe/frappe#38145, на которую вики ссылается.

Сначала главное: дверь прикрыта. Вики открывается предупреждением:

NOTE: Some repositories have temporarily disabled community contributions.

Примечание: некоторые репозитории временно отключили приём правок от сообщества.

Это решение организации Frappe, не одного ERPNext; причины — поток PR, доля сгенерированных ИИ, нехватка ревьюеров. Обходной путь оттуда же:

We are still accepting small, easy to review/merge fixes. … Those who have enough such fixes are invited to the repository.

Мы по-прежнему принимаем небольшие, легко проверяемые исправления. … Кто накопил достаточно таких, того приглашают в репозиторий.

Порядок: подробный баг-репорт, вопрос, готовы ли мейнтейнеры принять исправление, ветка в своём форке — PR откроет мейнтейнер. Список «поручившихся» .github/VOUCHED.td есть только у фреймворка Frappe, в ERPNext его нет.

Кто смотрит: CODEOWNERS раздаёт каталоги по модулям. Что требуют: тесты; для feat — ссылку на документацию, иначе проверка Documentation Required красная; для интерфейса — GIF; при смене схемы — патч миграции.

Important to add test cases, even if its a very simple one that just calls the function. … If tests are failing due to your fixes, please fix your fixes.

Важно добавить тесты, пусть даже простейший, который просто вызывает функцию. … Если тесты падают из-за ваших исправлений — исправьте исправления.

Без рассмотрения — только стиль или только обновление зависимостей: «Contributions including Style only and Requirements update fixes will not be directly entertained».

Боты: через 15 дней тишины PR помечается inactive, ещё через 3 дня закрывается («it only takes a comment to keep a contribution alive»); черновики и hotfix не трогают. Закрытые треды запираются через 14 дней. Бэкпорты делает frappe/backport; вики ещё поминает mergify, но workflow уже другой. О CLA и DCO в скачанных файлах ни слова.

Кто в кадре

Люди, встреченные в наших разборах этого проекта. Черта называется только вместе с поступком — с датой и ссылкой. Ник — главный, имя — из профиля; нет имени в профиле — только ник.

nabinhait — Nabin Hait

Один из основных разработчиков.

11.08.2026 — PR #57980, первая фраза описания: «found while auditing every SLE/Bin write path». Не починил очередной случай, а обошёл все места записи.

В том же PR удалил мёртвую функцию, которую никто не вызывает, с обоснованием «would only invite accidental resurrection as a second Bin write path», и переименовал update_qty в update_qty_from_sle — чтобы имя само говорило, откуда берётся число.

mihir-kandoi — Mihir Kandoi
  • 05.07.2026 — закрыл гонки lock-then-read в подборке и резерве товара;
  • 16.07.2026 — PR #57202: показал, что правильность держалась на побочном свойстве MariaDB и ломалась на Postgres. Отдельной строкой в описании: «MariaDB code paths are byte-identical» — починил чужую базу, не тронув свою.
ankush — Ankush Menat

20.12.2021 — починил остаток на движениях задним числом. Первый из пятерых, кто подошёл к этой трещине.

marination — Marica

04.07.2022 — починила ту же трещину с другой стороны: не прошлое портит число, а пересчёт стоимости портит будущие остатки. Полтора года спустя после первого.

Sudharsanan11 — Sudharsanan Ashok

Со стороны пользователя, а не сопровождения. 25.08.2026 — PR #58362: удалили все движения, а число осталось. Закрыл последний известный случай пятилетней цепочки.

Разборы, где встречается
  • «Пять лет до одной двери» — пятеро по очереди чинили одну трещину в складских остатках, и никто не ошибался, пока один не спросил, почему это вообще работает.

Карточка собрана 02.09.2026 из открытых источников: репозиторий, документация проекта, переписка в PR и задачах. Фотографий и личных данных здесь нет и не будет. Нашли неточность или хотите, чтобы вас убрали, — напишите, поправим без вопросов.

Как проект живёт и принимает чужие правки, и кто в нём встречался в разборах — по поступкам, датам и ссылкам

v2Public 0 0
updated Sep 2, 2026

Как проект живёт и принимает чужие правки, и кто в нём встречался в разборах — по поступкам, датам и ссылкам

v2Public 0 0
updated Sep 2, 2026

Как проект живёт и принимает чужие правки, и кто в нём встречался в разборах — по поступкам, датам и ссылкам

v2Public 0 0
updated Sep 2, 2026

Как проект живёт и принимает чужие правки, и кто в нём встречался в разборах — по поступкам, датам и ссылкам

v2Public 0 0
updated Sep 2, 2026

Как проект живёт и принимает чужие правки, и кто в нём встречался в разборах — по поступкам, датам и ссылкам

v2Public 0 0
updated Sep 2, 2026

Как проект живёт и принимает чужие правки, и кто в нём встречался в разборах — по поступкам, датам и ссылкам

v2Public 0 0
updated Sep 2, 2026