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

48 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 допустимы:
```text
fast-forward merge = хорошо
merge commit = допустимо
squash merge = нельзя
```
## Почему template нельзя пачкать
`template` — эталонный слепок оригинального шаблона.
Если в неё попадает локальное решение конфликта или изменение приложения, она перестаёт отвечать на вопрос: “какая версия шаблона сейчас подключена к приложению?”.
После этого ломается главная граница ответственности: шаблон отдельно, приложение отдельно, конфликтная зона отдельно.