# Протокол Гильдии программистов

1. Гильдия программистов создана как децентрализованная автономная организация для разработки и поддержки программного обеспечения Ассоциации Монтелиберо.

2. Принципы.

    2.1. Децентрализация: Каждая команда имеет автономию в принятии решений, но должна следовать процессам Гильдии.

    2.2. Прозрачность: Все процессы разработки, обсуждение и принятие решений должны быть документированы и доступны для всех участников.

    2.3. Сотрудничество: Команды должны поддерживать эффективное взаимодействие и обмен знаниями через доступные коммуникационные каналы и инструменты.

3. Изменение протокола осуществляется Старейшинами Гильдии через установку данных на счете `GDRLJC6EOKRR3BPKWGJPGI5GUN4GZFZRWQFDG3RJNZJEIBYA7B3EPROG`. Ключ `ProgrammersGuildProtocol`, значение —  sha-256 протокола.

4. В каждой команде должен быть свой Капитан, что следит за соблюдением протокола.

5. Процессы.

    5.1. Команды должны использовать Github и организацию Montelibero как основной репозиторий проектов Гильдии.

    5.2. Заявки на новый функционал или решение ошибок и связанные обсуждения должны быть в Issues.

    5.3. Изменения кода должно быть через Pull requests с обязательным ревью от Капитана или назначенного им ответственного специалиста.

    5.4. Проекты должны иметь непрерывную интеграцию с помощью Actions.

    5.5. Рекомендуется иметь непрерывную доставку с помощью Actions.

    5.6. Проекты могут иметь документацию в Wiki. Допускается наличие документации в репозитории.

    5.7. Планирование проекта может осуществляться через Projects.

6. Кодовая база.

    6.1. Для разработки рекомендуется использовать TypeScript как самый популярный язык среди программистов-волонтеров Распределенного правления.

    6.2. Стиль кода должен быть установлен Капитаном и согласован со Старейшинами.

    6.3. Код должен иметь документацию: Описание интерфейсов, конфигурации и запуска.

    6.4. Код должен быть структурирован и следовать принятым подходам и шаблонам. Подход к структуризации устанавливает Капитан и согласует со Старейшинами.

    6.5. Коммиты должны соответствовать стандарту Conventional Commits.

    6.6. Рекомендуется написание тестов на критический функционал.

    6.7. Рекомендуется подход Test-Driven Development для повышения качества кода.

7. Релизы.

    7.1. Версии программного обеспечения должны соответствовать стандарту Semantic Versioning.

    7.2. Релиз новой версии должен быть согласован с Капитаном или назначенным им ответственным лицом.

    7.3. Процесс тестирования и принятия нового функционала заказчиком осуществляет Капитан.

8. Безопасность.

    8.1. Кодовая база должна иметь инструменты обнаружения уязвимостей.

    8.2. Кодовая база должна быть обновлена, если Github Security советует это сделать из-за найденной уязвимости.

9. Решение конфликтов осуществляется через медиацию Капитанов или Старейшин.
