Files
docs/projects/template-sync-strategy/canons/concepts/rules.md
S.Gromov bdb99ade62
All checks were successful
CI/CD Pipeline / build (push) Successful in 39s
CI/CD Pipeline / docker (push) Successful in 1m30s
CI/CD Pipeline / deploy (push) Successful in 8s
refactor: перенести сборку в проекты
- перенесены каноны и VitePress-конфиги в projects/<slug>

- добавлены корневой и проектные build.ts для сборки артефактов

- добавлены shared-библиотеки сборки в projects/_shared/lib

- обновлены CI, Dockerfile, package.json, gitignore и README

- удалена сборка frontend-агента
2026-05-22 19:07:10 +03:00

2.4 KiB
Raw Blame History

title, description
title description
Правила процесса Набор правил, который удерживает template чистой, а обновления шаблона контролируемыми.

Правила процесса

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

Делаем

  • template обновляем только из templates/master.
  • sync/* создаём от origin/master.
  • origin/template вливаем в sync/*, а не напрямую в master.
  • Конфликты решаем только в sync/*.
  • sync/* -> master вливаем через PR/MR.
  • Для sync-PR/MR отключаем squash.

Не делаем

  • Не правим template руками.
  • Не коммитим изменения приложения в template.
  • Не мержим template -> master напрямую.
  • Не решаем конфликты в master.
  • Не включаем squash для sync/* -> master.

Почему squash нельзя

Squash может уничтожить нормальную связь истории master с историей template.

Git использует историю, чтобы понимать, какие изменения шаблона уже были доставлены в приложение. Если результат обновления шаблона превратить в один squash-коммит, связь с исходными коммитами шаблона станет хуже или исчезнет.

Для sync-PR/MR допустимы:

fast-forward merge = хорошо
merge commit       = допустимо
squash merge       = нельзя

Почему template нельзя пачкать

template — эталонный слепок оригинального шаблона.

Если в неё попадает локальное решение конфликта или изменение приложения, она перестаёт отвечать на вопрос: “какая версия шаблона сейчас подключена к приложению?”.

После этого ломается главная граница ответственности: шаблон отдельно, приложение отдельно, конфликтная зона отдельно.