@rt-tools/agent-kit 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/checks/check-file-size.mjs +19 -4
- package/assets/checks/check-state-next.mjs +10 -2
- package/assets/checks/rt-kit-checks.config.mjs +16 -2
- package/assets/defaults/project.sh +9 -1
- package/assets/defaults/turn-map.md +8 -6
- package/assets/hooks/browser-guard-device-id.sh +3 -1
- package/assets/hooks/browser-guard-no-asking.sh +3 -1
- package/assets/hooks/browser-guard-no-other-drivers.sh +5 -3
- package/assets/hooks/browser-guard-require-select.sh +4 -2
- package/assets/hooks/claim-guard.sh +3 -1
- package/assets/hooks/conscience-guard.sh +3 -1
- package/assets/hooks/dev-server-guard.sh +5 -3
- package/assets/hooks/dispatch.sh +69 -0
- package/assets/hooks/docs-guard.sh +6 -4
- package/assets/hooks/exam-guard.sh +5 -3
- package/assets/hooks/git-guard-delivery.sh +37 -5
- package/assets/hooks/git-guard-main.sh +6 -4
- package/assets/hooks/git-guard-push-tests.sh +6 -4
- package/assets/hooks/grill-gate.sh +4 -2
- package/assets/hooks/handoff-entry-guard.sh +4 -2
- package/assets/hooks/handoff-write.sh +27 -6
- package/assets/hooks/hook-input.sh +54 -0
- package/assets/hooks/lint-after-edit.sh +5 -3
- package/assets/hooks/postmortem-guard.sh +3 -1
- package/assets/hooks/proposal-guard.sh +3 -1
- package/assets/hooks/prose-style-guard.sh +5 -3
- package/assets/hooks/qa-dataid-guard.sh +4 -2
- package/assets/hooks/rerun-guard.sh +5 -3
- package/assets/hooks/reuse-first-guard.sh +5 -3
- package/assets/hooks/rule-article.sh +99 -0
- package/assets/hooks/skill-gate-rearm.sh +3 -1
- package/assets/hooks/skill-gate.sh +23 -2
- package/assets/hooks/skill-loaded.sh +3 -1
- package/assets/hooks/sql-guard-request.sh +2 -1
- package/assets/hooks/sql-guard.sh +4 -2
- package/assets/hooks/task-flow-guard.sh +6 -4
- package/assets/hooks/turn-exit-guard.sh +42 -17
- package/assets/hooks/waiting-turn-guard.sh +3 -1
- package/assets/hooks/window-fill-guard.sh +6 -4
- package/assets/laws/work-conduct.md +5 -9
- package/assets/patterns/dependencies-upgrade.md +1 -1
- package/assets/patterns/doc-style-write.md +3 -3
- package/assets/patterns/git-workflow-commit.azure.md +2 -202
- package/assets/patterns/git-workflow-commit.github.md +2 -258
- package/assets/patterns/git-workflow-commit.gitlab.md +1 -217
- package/assets/patterns/git-workflow-docker.md +3 -3
- package/assets/patterns/git-workflow-merge.md +3 -2
- package/assets/patterns/git-workflow-migration.md +3 -3
- package/assets/patterns/git-workflow-pr.azure.md +224 -0
- package/assets/patterns/git-workflow-pr.github.md +280 -0
- package/assets/patterns/git-workflow-pr.gitlab.md +240 -0
- package/assets/patterns/git-workflow-restart.md +3 -3
- package/assets/patterns/git-workflow-secrets.md +3 -3
- package/assets/patterns/task-flow-archive.md +193 -0
- package/assets/patterns/task-flow-close.md +3 -173
- package/assets/patterns/task-flow-handoff.md +4 -4
- package/assets/pitfalls/doc-style.md +80 -0
- package/assets/pitfalls/git-workflow.azure.md +50 -0
- package/assets/pitfalls/git-workflow.github.md +78 -0
- package/assets/pitfalls/git-workflow.gitlab.md +49 -0
- package/assets/pitfalls/spec-driven.md +36 -0
- package/assets/pitfalls/styling-bem.md +45 -0
- package/assets/pitfalls/task-flow.md +62 -0
- package/assets/pitfalls/testing.md +70 -0
- package/assets/rules/deploy-flow.azure.md +106 -0
- package/assets/rules/deploy-flow.github.md +113 -0
- package/assets/rules/deploy-flow.gitlab.md +108 -0
- package/assets/rules/doc-style.md +25 -76
- package/assets/rules/git-workflow.azure.md +6 -92
- package/assets/rules/git-workflow.github.md +14 -127
- package/assets/rules/git-workflow.gitlab.md +6 -93
- package/assets/rules/spec-driven.md +39 -30
- package/assets/rules/styling-bem.md +20 -39
- package/assets/rules/task-flow.md +17 -199
- package/assets/rules/testing.md +3 -64
- package/assets/rules/turn-conduct.md +206 -0
- package/assets/rules/typescript-conventions.md +15 -0
- package/assets/skills/agent-kit.md +35 -12
- package/assets/templates/pitfalls.md +10 -0
- package/assets/templates/rule.md +5 -3
- package/bin/agent-kit.d.ts.map +1 -1
- package/bin/agent-kit.js +1 -42
- package/bin/agent-kit.js.map +1 -1
- package/lib/assets.d.ts.map +1 -1
- package/lib/assets.js +6 -1
- package/lib/assets.js.map +1 -1
- package/lib/cascade.d.ts.map +1 -1
- package/lib/cascade.js +19 -1
- package/lib/cascade.js.map +1 -1
- package/lib/commands.d.ts.map +1 -1
- package/lib/commands.js +1 -0
- package/lib/commands.js.map +1 -1
- package/lib/config.d.ts +16 -1
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +8 -0
- package/lib/config.js.map +1 -1
- package/lib/hooks-map.d.ts +13 -0
- package/lib/hooks-map.d.ts.map +1 -1
- package/lib/hooks-map.js +33 -1
- package/lib/hooks-map.js.map +1 -1
- package/lib/ship.d.ts +1 -2
- package/lib/ship.d.ts.map +1 -1
- package/lib/ship.js +0 -54
- package/lib/ship.js.map +1 -1
- package/package.json +1 -1
- package/rt-tools-agent-kit-0.12.0.tgz +0 -0
- package/assets/commands/agent-kit-digest.md +0 -89
- package/assets/commands/rules-review.md +0 -98
- package/assets/patterns/cargo-triage-mark.md +0 -119
- package/assets/rules/cargo-triage.md +0 -126
- package/lib/cargo-state.d.ts +0 -62
- package/lib/cargo-state.d.ts.map +0 -1
- package/lib/cargo-state.js +0 -118
- package/lib/cargo-state.js.map +0 -1
- package/rt-tools-agent-kit-0.11.0.tgz +0 -0
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
name: git-workflow-commit
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: git-workflow
|
|
5
|
-
description: Паттерн правила git-workflow. Брать на заведение задачи, ветки,
|
|
5
|
+
description: Паттерн правила git-workflow. Брать на заведение задачи, ветки, коммит и пуш — готовая команда заведения задачи со всеми четырьмя шагами, перевод задачи в колонку работы, слияние двух задач в одну, работа от учётной записи бота, обход требования документа. Не брать на открытие PR — это паттерн git-workflow-pr; не брать для миграций и перезапуска прода — это паттерны git-workflow-migration и git-workflow-restart.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
#
|
|
8
|
+
# Задача, ветка и коммит
|
|
9
9
|
|
|
10
10
|
Паттерн правила `git-workflow`. Что при этом должно быть верно — закон
|
|
11
11
|
`docs/constitution/delivery.md`.
|
|
@@ -15,7 +15,6 @@ description: Паттерн правила git-workflow. Брать на зав
|
|
|
15
15
|
- Заводится задача, с которой начинается правка.
|
|
16
16
|
- Заводится ветка под задачу.
|
|
17
17
|
- Готовится коммит или пуш.
|
|
18
|
-
- Открывается PR.
|
|
19
18
|
- Работа перешла на следующий шаг, и задача переставляется в другую колонку борды.
|
|
20
19
|
|
|
21
20
|
## Сначала задача на борде, потом ветка
|
|
@@ -161,250 +160,6 @@ chore(deploy): docker-compose for vps
|
|
|
161
160
|
Docs-skip: правка только в тестах хука, зеркала у него нет
|
|
162
161
|
```
|
|
163
162
|
|
|
164
|
-
## Номер задачи стоит в её заголовке и в заголовке PR
|
|
165
|
-
|
|
166
|
-
Форма одна на оба — `[<КЛЮЧ>-<номер>] <текст>`. Номер стоит в самом заголовке, а не только в
|
|
167
|
-
теле: в списке PR тела не видно, а в списке задач номер иначе приходится искать глазами по
|
|
168
|
-
колонке слева. Тот же номер несёт и имя ветки — `<КЛЮЧ>-<номер>-<короткий-slug>`, — поэтому
|
|
169
|
-
задача, ветка и PR читаются как одно.
|
|
170
|
-
|
|
171
|
-
Задача говорит, что не так; PR тем же номером отчитывается, что сделано:
|
|
172
|
-
|
|
173
|
-
```
|
|
174
|
-
задача [<КЛЮЧ>-86] Пустой MAIL_OWNER — письма владельцу не уходят молча
|
|
175
|
-
PR [<КЛЮЧ>-86] Письмо владельцу с незаполненным адресом попадает в логи
|
|
176
|
-
|
|
177
|
-
задача [<КЛЮЧ>-101] Вернуть оверлей загрузки таблицы и включить stylelint гейтом
|
|
178
|
-
PR [<КЛЮЧ>-101] Stylelint включён гейтом
|
|
179
|
-
|
|
180
|
-
задача [<КЛЮЧ>-212] Сайт не собирается: компонентам кита проставлен префикс приложения вместо своего
|
|
181
|
-
PR [<КЛЮЧ>-212] Виджет переписки зовёт кит его собственными именами
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
Инфинитив из задачи в заголовок PR не переносится: «исправить» становится «исправлено»,
|
|
185
|
-
«вернуть» — «возвращено», «добавить» — «добавлено».
|
|
186
|
-
|
|
187
|
-
Номер в заголовке обязан совпасть с номером ветки: гард поставки сверяет их до отправки
|
|
188
|
-
команды, а сверка очереди — у каждого открытого PR.
|
|
189
|
-
|
|
190
|
-
Тип и область — `fix(site):`, `docs(common):` — в заголовок PR не идут: это формат заголовка
|
|
191
|
-
коммита, и там его сверяет `commitlint`. В списке PR он занимает место, ничего не добавляя:
|
|
192
|
-
род правки и область уже видны метками.
|
|
193
|
-
|
|
194
|
-
## Не готовое к слиянию открывается черновиком
|
|
195
|
-
|
|
196
|
-
Правка кода отдаётся человеку открытым PR: запушенная ветка ему не показывается нигде. Открытый
|
|
197
|
-
PR при этом читается как приглашение влить, поэтому у незаконченной работы он открывается
|
|
198
|
-
черновиком — кнопку слияния у черновика хостинг блокирует сам:
|
|
199
|
-
|
|
200
|
-
```bash
|
|
201
|
-
GH_TOKEN="$TOKEN" gh pr create --draft --title '[<КЛЮЧ>-86] …' --body-file тело.md
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
Черновиком идёт всё, что ждёт прогона конвейера, доработки или ответа на вопрос. Вопрос
|
|
205
|
-
задаётся в самом PR, а не остаётся в голове исполнителя: человек читает PR, а не переписку
|
|
206
|
-
захода.
|
|
207
|
-
|
|
208
|
-
Снимается черновик отдельным вызовом, и это тот самый ход, которым исполнитель говорит, что
|
|
209
|
-
решение готово:
|
|
210
|
-
|
|
211
|
-
```bash
|
|
212
|
-
GH_TOKEN="$TOKEN" gh pr ready 86
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
До снятия молчание исполнителя значит «ещё не готово», после — «можно вливать». Снятие
|
|
216
|
-
черновика и просьба влить идут одним ходом: снятый черновик, о котором человеку не сказали,
|
|
217
|
-
ждёт разбора ровно так же, как не снятый.
|
|
218
|
-
|
|
219
|
-
## PR прикрепляется к задаче
|
|
220
|
-
|
|
221
|
-
Тело начинается со строки связи — по ней на борде заполняется поле «Linked pull requests».
|
|
222
|
-
Ревьювер, исполнитель и метки задаются той же командой, и PR без них не открывается:
|
|
223
|
-
|
|
224
|
-
```bash
|
|
225
|
-
GH_TOKEN="$TOKEN" gh pr create --title '[<КЛЮЧ>-86] Письмо владельцу с незаполненным адресом попадает в логи' \
|
|
226
|
-
--reviewer <владелец> --assignee <бот> --label bug --label area:api \
|
|
227
|
-
--body 'Closes #86
|
|
228
|
-
|
|
229
|
-
…'
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
Ревьювер — всегда владелец: без запроса разбора PR не показывается ему в очереди. Исполнитель —
|
|
233
|
-
та же учётная запись, от которой идёт машинная работа. Метки берутся у задачи целиком — и род
|
|
234
|
-
правки, и все её области; читаются они у задачи, а не выбираются по памяти:
|
|
235
|
-
|
|
236
|
-
```bash
|
|
237
|
-
/opt/homebrew/bin/gh issue view 86 --json labels --jq '.labels | map(.name) | join(",")'
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
Строка `Closes #<номер>` обязательна: без неё PR не прикрепляется к задаче, и сверка очереди
|
|
241
|
-
это находит. Она же и означает, что задача закрывается целиком — половину задачи одним PR не
|
|
242
|
-
выкатывают: у задачи одна ветка, и работа, которая в неё не влезает, делится на задачи до
|
|
243
|
-
того, как ветка заводится.
|
|
244
|
-
|
|
245
|
-
У уже открытого PR то же ставится тремя вызовами REST. `gh pr edit` здесь не годится: он
|
|
246
|
-
запрашивает карточки Projects (classic), получает отказ о снятом API и до правки не доходит.
|
|
247
|
-
|
|
248
|
-
```bash
|
|
249
|
-
GH=/opt/homebrew/bin/gh
|
|
250
|
-
REPO=<владелец>/<репозиторий>
|
|
251
|
-
|
|
252
|
-
$GH api -X POST "repos/$REPO/issues/205/labels" -f 'labels[]=bug' -f 'labels[]=area:api'
|
|
253
|
-
$GH api -X POST "repos/$REPO/issues/205/assignees" -f 'assignees[]=<бот>'
|
|
254
|
-
$GH api -X POST "repos/$REPO/pulls/205/requested_reviewers" -f 'reviewers[]=<владелец>'
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
Тем же вызовом правится и само тело: `-f body=` переписывает его целиком, поэтому строка
|
|
258
|
-
`Closes #<номер>` пишется заново вместе с остальным текстом.
|
|
259
|
-
|
|
260
|
-
```bash
|
|
261
|
-
$GH api -X PATCH "repos/$REPO/pulls/205" -f body="$(cat тело.md)"
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
Тело перечитывается всякий раз, когда в ветку что-то влилось после публикации: PR
|
|
265
|
-
утверждает про дерево, а дерево с тех пор изменилось.
|
|
266
|
-
|
|
267
|
-
## Образец тела PR
|
|
268
|
-
|
|
269
|
-
Четыре раздела, и порядок между ними один: строка связи, что сделано, чем подтверждено,
|
|
270
|
-
оставшийся шаг. Раздел, которому нечего сказать, пишется словами — пустой заголовок и снятый
|
|
271
|
-
заголовок читаются одинаково, а значат разное.
|
|
272
|
-
|
|
273
|
-
```markdown
|
|
274
|
-
Closes #86
|
|
275
|
-
|
|
276
|
-
## Что сделано
|
|
277
|
-
|
|
278
|
-
- <правка, названная тем, что она меняет для читателя, а не тем, какие файлы задела>
|
|
279
|
-
|
|
280
|
-
## Чем подтверждено
|
|
281
|
-
|
|
282
|
-
- <проверка>: <её вывод одной строкой>
|
|
283
|
-
- Не гонялось: <что в набор не вошло и почему>
|
|
284
|
-
|
|
285
|
-
## Оставшийся шаг
|
|
286
|
-
|
|
287
|
-
После одобрения ветка получает ещё один коммит — разбор папки задачи, — и только потом
|
|
288
|
-
вливается. До этого коммита вливать рано: папка уедет в главную ветку неразобранной.
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
Раздел «Оставшийся шаг» стоит последним и переписывается тем же вызовом, что и остальное тело,
|
|
292
|
-
— в тот ход, которым папка разбирается и снимается черновик:
|
|
293
|
-
|
|
294
|
-
```markdown
|
|
295
|
-
## Оставшийся шаг
|
|
296
|
-
|
|
297
|
-
Не осталось: папка задачи разобрана коммитом `<sha>`, черновик снят. Можно вливать.
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
Стоит он там потому, что решение о слиянии принимается на этой странице, а не в переписке:
|
|
301
|
-
сказанное владельцу вслух живёт до следующей реплики, а тело лежит у самой кнопки. Одно другого
|
|
302
|
-
не отменяет — порядок обоих сообщений владельцу описывает паттерн закрытия работы.
|
|
303
|
-
|
|
304
|
-
Проверить тело машиной нечем: ни одна сверка его не читает, а хостинг спрашивает только про
|
|
305
|
-
заголовок. Держится образец тем, кто пишет тело, — как и слова вслух.
|
|
306
|
-
|
|
307
|
-
## Состояние PR читается, а не додумывается
|
|
308
|
-
|
|
309
|
-
Вызовы, которыми ставятся ревьювер, метки и исполнитель, отвечают нулевым кодом и тогда, когда
|
|
310
|
-
ничего не сделали: запрос разбора на автора PR GitHub молча выбрасывает. Поэтому после них PR
|
|
311
|
-
перечитывают:
|
|
312
|
-
|
|
313
|
-
```bash
|
|
314
|
-
# Ключи латиницей: кириллический ключ без кавычек `jq` не разбирает и падает на нём
|
|
315
|
-
$GH api "repos/$REPO/pulls/321" \
|
|
316
|
-
--jq '{author: .user.login, reviewers: [.requested_reviewers[].login], labels: [.labels[].name]}'
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
Автор здесь — `<бот>`. Если им оказался владелец, ревьювера у PR не будет вовсе:
|
|
320
|
-
назначить автора ревьювером нельзя, а отказа на такой запрос не приходит. Владельцу называют
|
|
321
|
-
то, что прочитали, а не то, что заказывали.
|
|
322
|
-
|
|
323
|
-
Учётная запись, из-под которой пришлось пушить, в этот вызов не переносится: пуш и авторство
|
|
324
|
-
PR выбираются отдельно, и `GH_TOKEN` для публикации — всегда токен бота.
|
|
325
|
-
|
|
326
|
-
Перечитывают его и по времени, а не только после вызовов, которые молча ничего не сделали:
|
|
327
|
-
состояние PR читается перед тем, как что-либо о нём сказать. Между «прогон зелёный» и следующей
|
|
328
|
-
фразой владелец успевает влить PR, и всё сказанное о нём после этого — про вчерашний день. Так
|
|
329
|
-
владельцу и было предложено влить то, что он влил часом раньше.
|
|
330
|
-
|
|
331
|
-
Открытый PR означает, что задача ждёт разбора, — колонка переставляется тем же движением:
|
|
332
|
-
|
|
333
|
-
```bash
|
|
334
|
-
npm run task:move -- 86 in-review
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
Голым GraphQL по идентификаторам проекта, элемента и варианта поля это не пишется: команда
|
|
338
|
-
знает их сама, а собранный по памяти запрос молча ставит не ту колонку — отказа у борды на
|
|
339
|
-
это нет.
|
|
340
|
-
|
|
341
|
-
## Что проверяется до публикации PR
|
|
342
|
-
|
|
343
|
-
Проверок на самом PR нет: выкатка запускается пушем в главную ветку, и до мержа никто не
|
|
344
|
-
гоняет ничего. Линтеры, юниты и сценарии хуков снимает гейт пуша — ниже то, чего он не знает.
|
|
345
|
-
|
|
346
|
-
1. **Главная ветка влита в эту ветку** — `git fetch origin && git merge origin/main`.
|
|
347
|
-
Свежесть основания между ветками одного захода не наследуется: вторая и третья ветка
|
|
348
|
-
отводятся после своего `fetch`, а не от ссылки, подтянутой под первую. Пока идёт работа,
|
|
349
|
-
главная уходит вперёд — чаще всего собственным PR того же исполнителя, влитым час
|
|
350
|
-
назад.
|
|
351
|
-
Всё, что проверяется ниже, проверяется от этого основания: PR с разошедшейся ветки
|
|
352
|
-
показывает ревьюверу правку вперемешку с чужой. Порядок и разбор конфликта — паттерн
|
|
353
|
-
`git-workflow-merge`.
|
|
354
|
-
2. **В ветке только та правка, за которой её заводили** — `git diff main...HEAD --stat`. Чужой
|
|
355
|
-
домен в списке файлов означает, что правка расползлась, и её надо вернуть в свои границы.
|
|
356
|
-
3. **Ни мока, ни подменённого ответа, ни отладочной строки** — `git diff main...HEAD` читается
|
|
357
|
-
целиком, а не по именам файлов. На прод они уезжают молча и портят настоящие данные.
|
|
358
|
-
4. **Документ едет тем же коммитом.** Пару называет `docs-guard`, но спек домена и правку его
|
|
359
|
-
поведения он не знает — это остаётся за автором.
|
|
360
|
-
5. **Проверки текстов и раскладки зелёные** — те, что дерево завело в `tools/`: сверка
|
|
361
|
-
сценариев с тестами, путей в документах, раскладки либ, повторов и классов без правила.
|
|
362
|
-
Какие именно есть здесь — `implementation.md` правила.
|
|
363
|
-
6. **Все приложения дерева собираются** — `nx build` по каждому. Гейт пуша сборку не гоняет:
|
|
364
|
-
она длиннее всего, что он успевает сделать между командой и пушем.
|
|
365
|
-
7. **Видимый текст заведён во всех локалях перевода** — тестом полноты словарей, если дерево
|
|
366
|
-
переводится.
|
|
367
|
-
8. **Правка вёрстки подтверждена замером**, а не взглядом, и снята при узком экране — паттерн
|
|
368
|
-
`browser-verification-measure`.
|
|
369
|
-
9. **Правка разметки публичного сайта проверена на прод-сборке по всем локалям перевода** — паттерн
|
|
370
|
-
`seo-verify`.
|
|
371
|
-
10. **Тело PR собрано по образцу** — начинается строкой `Closes #<номер>`, несёт разделы «Что
|
|
372
|
-
сделано», «Чем подтверждено» и «Оставшийся шаг», а метки, ревьювер и исполнитель стоят.
|
|
373
|
-
Раздел оставшегося шага к этому моменту говорит, что шагов не осталось: черновик снимается
|
|
374
|
-
после разбора папки, а не до него.
|
|
375
|
-
11. **Заголовок PR несёт номер задачи и называет её сделанной:** `[<КЛЮЧ>-<номер>] <Что сделано>`,
|
|
376
|
-
тем же номером, что стоит у задачи и в имени ветки. Инфинитив из задачи в него не
|
|
377
|
-
переносится, тип и область коммита — тоже.
|
|
378
|
-
12. **Очередь работ сходится** — `npm run check:board`. Задача на борде, с исполнителем и
|
|
379
|
-
номером в заголовке; PR один на задачу, и закрывает он её целиком.
|
|
380
|
-
13. **Состояние PR прочитано, а не выведено из кодов возврата** — автор `<бот>`,
|
|
381
|
-
ревьювер — владелец, метки те же, что у задачи. Владельцу называют прочитанное.
|
|
382
|
-
14. **Набор взят из файла конвейера, а не собран по памяти.** Гейт пуша заведомо уже: он стоит
|
|
383
|
-
между командой и пушем, и всё, что дольше секунд, из него вынесено. Что гоняет конвейер,
|
|
384
|
-
написано в его файле — этот список и повторяется локально; зелёный гейт полнотой набора не
|
|
385
|
-
является.
|
|
386
|
-
15. **Набор пересмотрен после вливания главной ветки.** Он выбирается по тому, что ветка везёт
|
|
387
|
-
теперь, а не по тому, что правил автор. Ветка, не тронувшая ни строки показа, прогоняет
|
|
388
|
-
снимки витрин: с момента вливания их гоняет конвейер на её коде, и красное придёт на её
|
|
389
|
-
PR.
|
|
390
|
-
|
|
391
|
-
Список этот — про снятие черновика, а не про его открытие. Черновиком PR открывается раньше:
|
|
392
|
-
пока работа идёт, человеку показывают то, что уже есть, вместе с тем, чего ещё нет. Пункты 1–15
|
|
393
|
-
проходятся перед `gh pr ready`, и невыполненный пункт означает, что черновик не снимается, — а
|
|
394
|
-
не то, что PR не открывается.
|
|
395
|
-
|
|
396
|
-
Сразу после публикации задача переставляется в разбор — `npm run task:move -- <номер>
|
|
397
|
-
in-review`, — и `npm run check:board` прогоняется ещё раз: до открытия PR колонку он не судит,
|
|
398
|
-
а после открытия расхождение видит.
|
|
399
|
-
|
|
400
|
-
Сделанное рассуждением и сделанное замером в теле PR разводятся прямо: непроверенное,
|
|
401
|
-
названное проверенным, ревьювер принимает за проверенное.
|
|
402
|
-
|
|
403
|
-
**Раздел «Чем подтверждено» называет и то, что не гонялось.** Список одного прогнанного
|
|
404
|
-
неотличим от полного набора, и ревьювер по нему решает, что можно не перепроверять. Цена ошибки
|
|
405
|
-
здесь не красный конвейер, а доверие к разделу: однажды прочитанный как полнота, дальше он
|
|
406
|
-
перепроверяется весь.
|
|
407
|
-
|
|
408
163
|
## Частые промахи
|
|
409
164
|
|
|
410
165
|
- `gh` в оболочке пользователя подменён — звать `/opt/homebrew/bin/gh` напрямую.
|
|
@@ -431,15 +186,4 @@ in-review`, — и `npm run check:board` прогоняется ещё раз:
|
|
|
431
186
|
ловит и сверка — ей ветка тоже не видна.
|
|
432
187
|
- `gh api graphql --paginate` на запросе элементов борды уходит в повтор первой страницы:
|
|
433
188
|
курсор берётся из ответа руками, а полнота сверяется с `items(first: 1) { totalCount }`.
|
|
434
|
-
- Второй строкой `Closes` в одном PR задача больше не закрывается: две задачи в одной ветке
|
|
435
|
-
откатываются только вместе. Либо это одна задача — и вторая поглощается, — либо две ветки.
|
|
436
|
-
- Половина задачи, уехавшая своим PR, тоже промах: тело такого PR начинается со слов «Часть
|
|
437
|
-
#<номер>» вместо `Closes`, задача остаётся открытой, и после отката видно её целой. Работа,
|
|
438
|
-
которая в одну ветку не влезает, делится на задачи до того, как ветка заводится.
|
|
439
|
-
- PR открыт без ревьювера: он не попадает во входящие владельца вовсе, и очередь стоит,
|
|
440
|
-
выглядя работающей. Так шестнадцать PR ждали разбора, которого никто не запрашивал.
|
|
441
|
-
- Метки поставлены по названию PR, а не прочитаны у задачи: область теряется, и по борде не
|
|
442
|
-
видно, что правка задела ещё и сайт.
|
|
443
|
-
- Задача закрыта не полностью, а метки перенесены целиком: тикет остаётся открытым, и это
|
|
444
|
-
говорится в теле PR, а не подразумевается строкой `Closes`.
|
|
445
189
|
- Правка владельца ни токена, ни переменных не берёт — они только для машинной работы.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: git-workflow-commit
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: git-workflow
|
|
5
|
-
description: Паттерн правила git-workflow
|
|
5
|
+
description: Паттерн правила git-workflow. Брать на заведение задачи, ветки, коммит и пуш — заведение задачи с меткой списка, перевод по спискам доски, слияние двух задач в одну, работа от учётной записи машинной работы, обход требования документа. Не брать на открытие MR — это паттерн git-workflow-pr; не брать для миграций и перезапуска прода — это паттерны git-workflow-migration и git-workflow-restart.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Ветка, коммит и MR
|
|
@@ -15,7 +15,6 @@ description: Паттерн правила git-workflow для дерева на
|
|
|
15
15
|
- Заводится задача, с которой начинается правка.
|
|
16
16
|
- Заводится ветка под задачу.
|
|
17
17
|
- Готовится коммит или пуш.
|
|
18
|
-
- Открывается MR.
|
|
19
18
|
- Работа перешла на следующий шаг, и задача переставляется в другой список доски.
|
|
20
19
|
|
|
21
20
|
## Сначала задача на доске, потом ветка
|
|
@@ -155,211 +154,6 @@ chore(deploy): docker-compose for vps
|
|
|
155
154
|
Docs-skip: правка только в тестах хука, зеркала у него нет
|
|
156
155
|
```
|
|
157
156
|
|
|
158
|
-
## Номер задачи стоит в её заголовке и в заголовке MR
|
|
159
|
-
|
|
160
|
-
Форма одна на оба — `[<КЛЮЧ>-<номер>] <текст>`. Номер стоит в самом заголовке, а не только в
|
|
161
|
-
теле: в списке MR тела не видно, а в списке задач номер иначе приходится искать глазами. Тот же
|
|
162
|
-
номер несёт и имя ветки, поэтому задача, ветка и MR читаются как одно.
|
|
163
|
-
|
|
164
|
-
Задача говорит, что не так; MR тем же номером отчитывается, что сделано:
|
|
165
|
-
|
|
166
|
-
```
|
|
167
|
-
задача [<КЛЮЧ>-86] Пустой адрес владельца — письма не уходят молча
|
|
168
|
-
MR [<КЛЮЧ>-86] Письмо владельцу с незаполненным адресом попадает в логи
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
Инфинитив из задачи в заголовок MR не переносится: «исправить» становится «исправлено»,
|
|
172
|
-
«вернуть» — «возвращено», «добавить» — «добавлено».
|
|
173
|
-
|
|
174
|
-
Тип и область — `fix(site):`, `docs(common):` — в заголовок MR не идут: это формат заголовка
|
|
175
|
-
коммита, и там его сверяет `commitlint`. В списке MR он занимает место, ничего не добавляя:
|
|
176
|
-
род правки и область уже видны метками.
|
|
177
|
-
|
|
178
|
-
## Не готовое к слиянию открывается черновиком
|
|
179
|
-
|
|
180
|
-
Правка кода отдаётся человеку открытым MR: запушенная ветка ему не показывается нигде. Открытый
|
|
181
|
-
MR при этом читается как приглашение влить, поэтому у незаконченной работы он открывается
|
|
182
|
-
черновиком — кнопку слияния у черновика хостинг блокирует сам:
|
|
183
|
-
|
|
184
|
-
```bash
|
|
185
|
-
GITLAB_TOKEN="$TOKEN" glab mr create --draft --title '[<КЛЮЧ>-86] …' --description "$(cat тело.md)"
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
Признак черновика здесь — приставка `Draft:` в заголовке MR, и правится он вместе с ним:
|
|
189
|
-
переписав заголовок вручную, черновик снимают, не заметив этого.
|
|
190
|
-
|
|
191
|
-
Черновиком идёт всё, что ждёт прогона конвейера, доработки или ответа на вопрос. Вопрос
|
|
192
|
-
задаётся в самом MR, а не остаётся в голове исполнителя: человек читает MR, а не переписку
|
|
193
|
-
захода.
|
|
194
|
-
|
|
195
|
-
Снимается черновик отдельным вызовом, и это тот самый ход, которым исполнитель говорит, что
|
|
196
|
-
решение готово:
|
|
197
|
-
|
|
198
|
-
```bash
|
|
199
|
-
GITLAB_TOKEN="$TOKEN" glab mr update 86 --ready
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
До снятия молчание исполнителя значит «ещё не готово», после — «можно вливать». Снятие
|
|
203
|
-
черновика и просьба влить идут одним ходом: снятый черновик, о котором человеку не сказали,
|
|
204
|
-
ждёт разбора ровно так же, как не снятый.
|
|
205
|
-
|
|
206
|
-
## MR прикрепляется к задаче
|
|
207
|
-
|
|
208
|
-
Описание начинается со строки связи. Ревьювер, исполнитель и метки задаются той же командой, и
|
|
209
|
-
MR без них не открывается:
|
|
210
|
-
|
|
211
|
-
```bash
|
|
212
|
-
GITLAB_TOKEN="$TOKEN" glab mr create \
|
|
213
|
-
--title '[<КЛЮЧ>-86] Письмо владельцу с незаполненным адресом попадает в логи' \
|
|
214
|
-
--assignee <бот> --reviewer <владелец> --label bug --label area:api \
|
|
215
|
-
--target-branch main --remove-source-branch \
|
|
216
|
-
--description 'Closes #86
|
|
217
|
-
|
|
218
|
-
…'
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
Ревьювер — всегда владелец: без запроса разбора MR не показывается ему в очереди. Исполнитель —
|
|
222
|
-
та же учётная запись, от которой идёт машинная работа. Метки читаются у задачи, а не выбираются
|
|
223
|
-
по памяти:
|
|
224
|
-
|
|
225
|
-
```bash
|
|
226
|
-
glab issue view 86 --output json | jq -r '[.labels[]] | join(",")'
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
Строка `Closes #<номер>` обязательна: без неё MR не прикрепляется к задаче, и сверка очереди
|
|
230
|
-
это находит. Она же означает, что задача закрывается целиком — половину задачи одним MR не
|
|
231
|
-
выкатывают: у задачи одна ветка, и работа, которая в неё не влезает, делится на задачи до того,
|
|
232
|
-
как ветка заводится.
|
|
233
|
-
|
|
234
|
-
У уже открытого MR то же ставится правкой:
|
|
235
|
-
|
|
236
|
-
```bash
|
|
237
|
-
glab mr update 205 --label bug --label area:api --assignee <бот> --reviewer <владелец>
|
|
238
|
-
glab mr update 205 --description "$(cat тело.md)"
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
Правка описания переписывает его целиком, поэтому строка `Closes #<номер>` пишется заново
|
|
242
|
-
вместе с остальным текстом. Описание перечитывается всякий раз, когда в ветку что-то влилось
|
|
243
|
-
после публикации: MR утверждает про дерево, а дерево с тех пор изменилось.
|
|
244
|
-
|
|
245
|
-
## Образец описания MR
|
|
246
|
-
|
|
247
|
-
Четыре раздела, и порядок между ними один: строка связи, что сделано, чем подтверждено,
|
|
248
|
-
оставшийся шаг. Раздел, которому нечего сказать, пишется словами — пустой заголовок и снятый
|
|
249
|
-
заголовок читаются одинаково, а значат разное.
|
|
250
|
-
|
|
251
|
-
```markdown
|
|
252
|
-
Closes #86
|
|
253
|
-
|
|
254
|
-
## Что сделано
|
|
255
|
-
|
|
256
|
-
- <правка, названная тем, что она меняет для читателя, а не тем, какие файлы задела>
|
|
257
|
-
|
|
258
|
-
## Чем подтверждено
|
|
259
|
-
|
|
260
|
-
- <проверка>: <её вывод одной строкой>
|
|
261
|
-
- Не гонялось: <что в набор не вошло и почему>
|
|
262
|
-
|
|
263
|
-
## Оставшийся шаг
|
|
264
|
-
|
|
265
|
-
После одобрения ветка получает ещё один коммит — разбор папки задачи, — и только потом
|
|
266
|
-
вливается. До этого коммита вливать рано: папка уедет в главную ветку неразобранной.
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
Раздел «Оставшийся шаг» стоит последним и переписывается тем же вызовом, что и остальное
|
|
270
|
-
описание, — в тот ход, которым папка разбирается и снимается черновик:
|
|
271
|
-
|
|
272
|
-
```markdown
|
|
273
|
-
## Оставшийся шаг
|
|
274
|
-
|
|
275
|
-
Не осталось: папка задачи разобрана коммитом `<sha>`, черновик снят. Можно вливать.
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
Стоит он там потому, что решение о слиянии принимается на этой странице, а не в переписке:
|
|
279
|
-
сказанное владельцу вслух живёт до следующей реплики, а описание лежит у самой кнопки. Одно
|
|
280
|
-
другого не отменяет — порядок обоих сообщений владельцу описывает паттерн закрытия работы.
|
|
281
|
-
|
|
282
|
-
Проверить описание машиной нечем: ни одна сверка его не читает, а хостинг спрашивает только про
|
|
283
|
-
заголовок. Держится образец тем, кто пишет описание, — как и слова вслух.
|
|
284
|
-
|
|
285
|
-
## Состояние MR читается, а не додумывается
|
|
286
|
-
|
|
287
|
-
Команды правки отвечают нулевым кодом и тогда, когда ничего не сделали: токен без права на
|
|
288
|
-
проект молча не ставит ни метку, ни ревьювера. Поэтому после них MR перечитывают:
|
|
289
|
-
|
|
290
|
-
```bash
|
|
291
|
-
glab mr view 205 --output json \
|
|
292
|
-
| jq '{author: .author.username, reviewers: [.reviewers[].username], labels: .labels}'
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
Владельцу называют то, что прочитали, а не то, что заказывали.
|
|
296
|
-
|
|
297
|
-
Учётная запись, из-под которой пришлось пушить, в этот вызов не переносится: пуш и авторство
|
|
298
|
-
MR выбираются отдельно, и токен для публикации — всегда токен машинной работы.
|
|
299
|
-
|
|
300
|
-
Перечитывают его и по времени, а не только после вызовов, которые молча ничего не сделали:
|
|
301
|
-
состояние MR читается перед тем, как что-либо о нём сказать. Между «прогон зелёный» и следующей
|
|
302
|
-
фразой владелец успевает влить MR, и всё сказанное о нём после этого — про вчерашний день. Так
|
|
303
|
-
владельцу и было предложено влить то, что он влил часом раньше.
|
|
304
|
-
|
|
305
|
-
Открытый MR означает, что задача ждёт разбора, — список переставляется тем же движением:
|
|
306
|
-
|
|
307
|
-
```bash
|
|
308
|
-
npm run task:move -- 86 in-review
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
## Что проверяется до публикации MR
|
|
312
|
-
|
|
313
|
-
Проверок на самом MR нет ровно до тех пор, пока конвейер не запущен, а запускается он пушем.
|
|
314
|
-
Линтеры, юниты и сценарии хуков снимает гейт пуша — ниже то, чего он не знает.
|
|
315
|
-
|
|
316
|
-
1. **Главная ветка влита в эту ветку** — `git fetch origin && git merge origin/main`.
|
|
317
|
-
Всё, что проверяется ниже, проверяется от этого основания: MR с разошедшейся ветки
|
|
318
|
-
показывает ревьюверу правку вперемешку с чужой. Порядок и разбор конфликта — паттерн
|
|
319
|
-
`git-workflow-merge`.
|
|
320
|
-
2. **В ветке только та правка, за которой её заводили** — `git diff main...HEAD --stat`. Чужой
|
|
321
|
-
домен в списке файлов означает, что правка расползлась, и её надо вернуть в свои границы.
|
|
322
|
-
3. **Ни мока, ни подменённого ответа, ни отладочной строки** — `git diff main...HEAD` читается
|
|
323
|
-
целиком, а не по именам файлов. На прод они уезжают молча и портят настоящие данные.
|
|
324
|
-
4. **Документ едет тем же коммитом.** Пару называет `docs-guard`, но спек домена и правку его
|
|
325
|
-
поведения он не знает — это остаётся за автором.
|
|
326
|
-
5. **Проверки текстов и раскладки зелёные** — те, что дерево завело в `tools/`. Какие именно
|
|
327
|
-
есть здесь — `implementation.md` правила.
|
|
328
|
-
6. **Все приложения дерева собираются** — `nx build` по каждому. Гейт пуша сборку не гоняет.
|
|
329
|
-
7. **Видимый текст заведён во всех локалях перевода** — тестом полноты словарей, если дерево
|
|
330
|
-
переводится.
|
|
331
|
-
8. **Правка вёрстки подтверждена замером**, а не взглядом, и снята при узком экране — паттерн
|
|
332
|
-
`browser-verification-measure`.
|
|
333
|
-
9. **Правка разметки публичного сайта проверена на прод-сборке по всем локалям перевода** —
|
|
334
|
-
паттерн `seo-verify`.
|
|
335
|
-
10. **Описание MR собрано по образцу** — начинается строкой `Closes #<номер>`, несёт разделы
|
|
336
|
-
«Что сделано», «Чем подтверждено» и «Оставшийся шаг», а метки, ревьювер и исполнитель
|
|
337
|
-
стоят. Раздел оставшегося шага к этому моменту говорит, что шагов не осталось: черновик
|
|
338
|
-
снимается после разбора папки, а не до него.
|
|
339
|
-
11. **Заголовок MR несёт номер задачи и называет её сделанной:** `[<КЛЮЧ>-<номер>] <Что
|
|
340
|
-
сделано>`, тем же номером, что стоит у задачи и в имени ветки.
|
|
341
|
-
12. **Очередь работ сходится** — `npm run check:board`.
|
|
342
|
-
13. **Состояние MR прочитано, а не выведено из кодов возврата.**
|
|
343
|
-
14. **Набор взят из файла конвейера, а не собран по памяти.** Гейт пуша заведомо уже: он стоит
|
|
344
|
-
между командой и пушем, и всё, что дольше секунд, из него вынесено. Что гоняет конвейер,
|
|
345
|
-
написано в его файле — этот список и повторяется локально; зелёный гейт полнотой набора не
|
|
346
|
-
является.
|
|
347
|
-
15. **Набор пересмотрен после вливания главной ветки.** Он выбирается по тому, что ветка везёт
|
|
348
|
-
теперь, а не по тому, что правил автор. Ветка, не тронувшая ни строки показа, прогоняет
|
|
349
|
-
снимки витрин: с момента вливания их гоняет конвейер на её коде, и красное придёт на её
|
|
350
|
-
PR.
|
|
351
|
-
|
|
352
|
-
Сразу после публикации задача переставляется в разбор, и сверка очереди прогоняется ещё раз: до
|
|
353
|
-
открытия MR список она не судит, а после открытия расхождение видит.
|
|
354
|
-
|
|
355
|
-
Сделанное рассуждением и сделанное замером в теле MR разводятся прямо: непроверенное,
|
|
356
|
-
названное проверенным, ревьювер принимает за проверенное.
|
|
357
|
-
|
|
358
|
-
**Раздел «Чем подтверждено» называет и то, что не гонялось.** Список одного прогнанного
|
|
359
|
-
неотличим от полного набора, и ревьювер по нему решает, что можно не перепроверять. Цена ошибки
|
|
360
|
-
здесь не красный конвейер, а доверие к разделу: однажды прочитанный как полнота, дальше он
|
|
361
|
-
перепроверяется весь.
|
|
362
|
-
|
|
363
157
|
## Частые промахи
|
|
364
158
|
|
|
365
159
|
- Метка списка не поставлена при заведении: задача есть, а на доске её нет. Доска показывает
|
|
@@ -371,14 +165,4 @@ npm run task:move -- 86 in-review
|
|
|
371
165
|
команда обрывается на первом промахе целиком. Следующий `git commit --amend` при этом уносит
|
|
372
166
|
в коммит всё, что осталось в индексе. Состав коммита читается `git show --stat` сразу после
|
|
373
167
|
него, а не на разборе MR.
|
|
374
|
-
- MR открыт без ревьювера: он не попадает во входящие владельца, и очередь стоит, выглядя
|
|
375
|
-
работающей.
|
|
376
|
-
- Метки поставлены по названию MR, а не прочитаны у задачи: область теряется, и по доске не
|
|
377
|
-
видно, что правка задела ещё и соседний домен.
|
|
378
|
-
- Вторая строка `Closes` в одном MR: две задачи в одной ветке откатываются только вместе. Либо
|
|
379
|
-
это одна задача — и вторая поглощается, — либо две ветки.
|
|
380
|
-
- Половина задачи, уехавшая своим MR: описание такого MR начинается со слов «Часть #<номер>»
|
|
381
|
-
вместо `Closes`, задача остаётся открытой, и после отката видно её целой.
|
|
382
|
-
- `--remove-source-branch` забыт: ветки задач копятся в репозитории, и по списку веток больше
|
|
383
|
-
не видно, какая работа идёт сейчас.
|
|
384
168
|
- Правка владельца ни токена, ни переменных не берёт — они только для машинной работы.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: git-workflow-docker
|
|
3
3
|
kind: pattern
|
|
4
|
-
rule:
|
|
5
|
-
description: Паттерн правила
|
|
4
|
+
rule: deploy-flow
|
|
5
|
+
description: Паттерн правила deploy-flow. Брать при работе с образами на своей машине — подъём и перезапуск демона, диагностика «висящей» команды, сборка под платформу прод-сервера, одноразовый контейнер рядом с чужими, вход в реестр из службы. Не брать для команд прод-сервера и выбора образа — это паттерн git-workflow-restart, и не для наката миграций — это git-workflow-migration.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Образы на своей машине
|
|
9
9
|
|
|
10
|
-
Паттерн правила `
|
|
10
|
+
Паттерн правила `deploy-flow`. Что при этом должно быть верно — закон
|
|
11
11
|
`docs/constitution/delivery.md`.
|
|
12
12
|
|
|
13
13
|
Демон здесь чужой: на машине владельца в нём живут его хранилище разработки, его стенд и
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: git-workflow-merge
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: git-workflow
|
|
5
|
-
description: Паттерн правила git-workflow. Брать, когда главная ветка вливается в ветку задачи и разрешается конфликт — порядок мержа, разбор конфликта по роду файла, сверка дописанного веткой с очередью работ, проверки после разрешения, перечитывание тела уже открытого PR. Не брать для заведения
|
|
5
|
+
description: Паттерн правила git-workflow. Брать, когда главная ветка вливается в ветку задачи и разрешается конфликт — порядок мержа, разбор конфликта по роду файла, сверка дописанного веткой с очередью работ, проверки после разрешения, перечитывание тела уже открытого PR. Не брать для заведения ветки и коммита — это паттерн git-workflow-commit, для PR — git-workflow-pr.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Мерж главной ветки в ветку задачи
|
|
@@ -73,7 +73,8 @@ bash .claude/hooks/tests/run.sh # если конфликт задел х
|
|
|
73
73
|
```
|
|
74
74
|
|
|
75
75
|
Коммит мержа подписывается ботом тем же способом, что и любой другой, — паттерн
|
|
76
|
-
`git-workflow-commit`. После пуша состояние читается у самого PR, а не по своему
|
|
76
|
+
`git-workflow-commit`. После пуша состояние читается у самого PR, а не по своему дереву, —
|
|
77
|
+
подробнее об этом паттерн `git-workflow-pr`:
|
|
77
78
|
|
|
78
79
|
```bash
|
|
79
80
|
/opt/homebrew/bin/gh pr view <номер> --json mergeable,mergeStateStatus
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: git-workflow-migration
|
|
3
3
|
kind: pattern
|
|
4
|
-
rule:
|
|
5
|
-
description: Паттерн правила
|
|
4
|
+
rule: deploy-flow
|
|
5
|
+
description: Паттерн правила deploy-flow. Брать при правке prisma/schema.prisma и prisma/migrations/** — готовые команды одноразового контейнера, написание файла миграции через migrate diff, накат локальной базы. Не брать для коммита — это паттерн git-workflow-commit, для PR — git-workflow-pr.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Миграция и прогон цепочки
|
|
9
9
|
|
|
10
|
-
Паттерн правила `
|
|
10
|
+
Паттерн правила `deploy-flow`. Что при этом должно быть верно — закон
|
|
11
11
|
`docs/constitution/delivery.md`.
|
|
12
12
|
|
|
13
13
|
## Когда брать
|