@rt-tools/agent-kit 0.8.1 → 0.8.3
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/README.md +25 -19
- package/assets/agents/qa-engineer.md +1 -1
- package/assets/agents/rules-reviewer.md +83 -0
- package/assets/checks/board.github.mjs +56 -17
- package/assets/checks/check-board.github.mjs +49 -5
- package/assets/checks/check-dupes.mjs +66 -6
- package/assets/checks/check-specs.mjs +100 -15
- package/assets/checks/rt-kit-checks.config.mjs +9 -0
- package/assets/checks/task-new.github.mjs +33 -5
- package/assets/commands/agent-kit-digest.md +10 -5
- package/assets/commands/feedback.md +95 -0
- package/assets/commands/next-session.md +4 -4
- package/assets/commands/rules-review.md +98 -0
- package/assets/commands/skill-curator.md +44 -25
- package/assets/defaults/gate-map.sh +11 -4
- package/assets/defaults/project.sh +46 -0
- package/assets/docs/GLOSSARY.md +49 -46
- package/assets/hooks/docs-guard.sh +19 -3
- package/assets/hooks/git-guard-delivery.sh +106 -13
- package/assets/hooks/proposal-guard.sh +93 -0
- package/assets/hooks/reuse-first-guard.sh +83 -15
- package/assets/hooks/skill-gate-layers.sh +1 -1
- package/assets/hooks/skill-gate.sh +27 -1
- package/assets/hooks/task-flow-guard.sh +59 -19
- package/assets/hooks/waiting-turn-guard.sh +87 -0
- package/assets/hooks/window-fill-guard.sh +1 -1
- package/assets/laws/delivery.md +41 -7
- package/assets/laws/project-documentation.md +39 -0
- package/assets/laws/verifiability.md +6 -1
- package/assets/laws/work-conduct.md +83 -3
- package/assets/patterns/git-workflow-commit.azure.md +84 -4
- package/assets/patterns/git-workflow-commit.github.md +90 -4
- package/assets/patterns/git-workflow-commit.gitlab.md +84 -5
- package/assets/patterns/git-workflow-docker.md +30 -0
- package/assets/patterns/git-workflow-merge.md +1 -1
- package/assets/patterns/spec-driven-domain.md +7 -1
- package/assets/patterns/spec-driven-rule.md +6 -0
- package/assets/patterns/task-flow-close.md +197 -21
- package/assets/patterns/task-flow-handoff.md +28 -5
- package/assets/patterns/task-flow-resume.md +25 -7
- package/assets/patterns/task-flow-start.md +37 -6
- package/assets/rules/angular-patterns.md +22 -0
- package/assets/rules/api-layer.md +25 -0
- package/assets/rules/browser-verification.md +42 -1
- package/assets/rules/component-structure.md +21 -0
- package/assets/rules/dependencies.md +22 -0
- package/assets/rules/doc-style.md +37 -5
- package/assets/rules/{entity-conventions.md → entity-conventions.needs-admin.md} +21 -0
- package/assets/rules/entity-models.md +21 -0
- package/assets/rules/git-workflow.azure.md +62 -8
- package/assets/rules/git-workflow.github.md +78 -14
- package/assets/rules/git-workflow.gitlab.md +61 -8
- package/assets/rules/lib-layers.md +25 -0
- package/assets/rules/lists.md +27 -0
- package/assets/rules/navigation.md +21 -0
- package/assets/rules/{observability.md → observability.needs-app.md} +23 -0
- package/assets/rules/permissions.md +23 -0
- package/assets/rules/platform-access.md +21 -0
- package/assets/rules/reuse-first.md +20 -0
- package/assets/rules/seo.md +19 -0
- package/assets/rules/shared-code.md +19 -0
- package/assets/rules/spec-driven.md +36 -0
- package/assets/rules/styling-bem.md +19 -0
- package/assets/rules/task-flow.md +150 -35
- package/assets/rules/testing.md +50 -0
- package/assets/rules/translations.md +21 -0
- package/assets/rules/typescript-conventions.md +33 -0
- package/assets/samples/specs/_template/spec.md +83 -0
- package/assets/samples/tasks/_template/grill.md +28 -0
- package/assets/samples/tasks/_template/plan.md +39 -0
- package/assets/samples/tasks/_template/progress.md +23 -0
- package/assets/skills/agent-kit-extend.md +24 -0
- package/assets/skills/agent-kit.md +69 -7
- package/assets/templates/rule.md +31 -2
- package/assets/traits.json +14 -0
- package/bin/agent-kit.d.ts.map +1 -1
- package/bin/agent-kit.js +31 -16
- package/bin/agent-kit.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.d.ts.map +1 -1
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/lib/argv.d.ts +17 -0
- package/lib/argv.d.ts.map +1 -0
- package/lib/argv.js +44 -0
- package/lib/argv.js.map +1 -0
- package/lib/cargo.d.ts +88 -0
- package/lib/cargo.d.ts.map +1 -0
- package/lib/cargo.js +16 -0
- package/lib/cargo.js.map +1 -0
- package/lib/catalog.d.ts +18 -1
- package/lib/catalog.d.ts.map +1 -1
- package/lib/catalog.js +12 -2
- package/lib/catalog.js.map +1 -1
- package/lib/commands.d.ts +0 -26
- package/lib/commands.d.ts.map +1 -1
- package/lib/commands.js +79 -122
- package/lib/commands.js.map +1 -1
- package/lib/companion.d.ts +37 -0
- package/lib/companion.d.ts.map +1 -1
- package/lib/companion.js +42 -1
- package/lib/companion.js.map +1 -1
- package/lib/config.d.ts +38 -1
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +24 -0
- package/lib/config.js.map +1 -1
- package/lib/ship.d.ts +39 -0
- package/lib/ship.d.ts.map +1 -0
- package/lib/ship.js +87 -0
- package/lib/ship.js.map +1 -0
- package/lib/shipment.d.ts +60 -0
- package/lib/shipment.d.ts.map +1 -0
- package/lib/shipment.js +247 -0
- package/lib/shipment.js.map +1 -0
- package/lib/snapshot.d.ts +30 -0
- package/lib/snapshot.d.ts.map +1 -0
- package/lib/snapshot.js +73 -0
- package/lib/snapshot.js.map +1 -0
- package/lib/traits.d.ts +32 -0
- package/lib/traits.d.ts.map +1 -0
- package/lib/traits.js +82 -0
- package/lib/traits.js.map +1 -0
- package/package.json +6 -2
- package/rt-tools-agent-kit-0.8.3.tgz +0 -0
- package/lib/submit.d.ts +0 -24
- package/lib/submit.d.ts.map +0 -1
- package/lib/submit.js +0 -26
- package/lib/submit.js.map +0 -1
- package/rt-tools-agent-kit-0.8.1.tgz +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: git-workflow-commit
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: git-workflow
|
|
5
|
-
description: Паттерн правила git-workflow. Брать на заведение задачи, ветки, коммит, пуш и создание PR — готовая команда заведения задачи со всеми четырьмя шагами, перевод задачи в колонку работы и в колонку разбора, слияние двух задач в одну, сверка очереди работ, работа от учётной записи бота, формат заголовка, строка связи с задачей, ревьювер, исполнитель и метки PR, чеклист проверок до публикации, обход требования документа. Не брать для миграций и перезапуска прода — это паттерны git-workflow-migration и git-workflow-restart.
|
|
5
|
+
description: Паттерн правила git-workflow. Брать на заведение задачи, ветки, коммит, пуш и создание PR — готовая команда заведения задачи со всеми четырьмя шагами, перевод задачи в колонку работы и в колонку разбора, слияние двух задач в одну, сверка очереди работ, работа от учётной записи бота, формат заголовка, строка связи с задачей, ревьювер, исполнитель и метки PR, образец тела PR с разделом об оставшемся шаге, чеклист проверок до публикации, обход требования документа. Не брать для миграций и перезапуска прода — это паттерны git-workflow-migration и git-workflow-restart.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Ветка, коммит и PR
|
|
@@ -46,6 +46,15 @@ gh project item-add <номер борды> --owner <владелец> --url <а
|
|
|
46
46
|
|
|
47
47
|
Последний шаг и есть тот, который забывается: без него задача заведена, но её нет в очереди.
|
|
48
48
|
|
|
49
|
+
Заведение кончается не выводом команды, а ответом очереди работ. Команда спрашивает её сама и
|
|
50
|
+
печатает прочитанное — присутствие на борде, колонку, исполнителя; отсутствие кончает её
|
|
51
|
+
ненулевым кодом. В комментарий, в тело PR и в замысел идёт этот ответ, а не напечатанный
|
|
52
|
+
номер: номер говорит «вызов прошёл», а не «задача видна тому, кто по ней работает».
|
|
53
|
+
|
|
54
|
+
Заведения, идущие подряд, проверяются не по последнему, а сверкой очереди целиком: промах у них
|
|
55
|
+
общий, и по одной задаче он не виден. Шестнадцать задач подряд напечатали номер, и ни одна не
|
|
56
|
+
попала в очередь так, чтобы её увидел владелец.
|
|
57
|
+
|
|
49
58
|
Название тикета говорит, что не так, а не что сделать: PR потом переводит его в сделанное.
|
|
50
59
|
Номер в заголовок руками не пишется — он известен только после создания, и команда дописывает
|
|
51
60
|
его сама.
|
|
@@ -182,6 +191,31 @@ PR [<КЛЮЧ>-212] Виджет переписки зовёт кит ег
|
|
|
182
191
|
коммита, и там его сверяет `commitlint`. В списке PR он занимает место, ничего не добавляя:
|
|
183
192
|
род правки и область уже видны метками.
|
|
184
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
|
+
|
|
185
219
|
## PR прикрепляется к задаче
|
|
186
220
|
|
|
187
221
|
Тело начинается со строки связи — по ней на борде заполняется поле «Linked pull requests».
|
|
@@ -227,9 +261,49 @@ $GH api -X POST "repos/$REPO/pulls/205/requested_reviewers" -f 'reviewers[]=<в
|
|
|
227
261
|
$GH api -X PATCH "repos/$REPO/pulls/205" -f body="$(cat тело.md)"
|
|
228
262
|
```
|
|
229
263
|
|
|
230
|
-
Тело перечитывается всякий раз, когда в ветку что-то влилось после публикации:
|
|
264
|
+
Тело перечитывается всякий раз, когда в ветку что-то влилось после публикации: PR
|
|
231
265
|
утверждает про дерево, а дерево с тех пор изменилось.
|
|
232
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
|
+
|
|
233
307
|
## Состояние PR читается, а не додумывается
|
|
234
308
|
|
|
235
309
|
Вызовы, которыми ставятся ревьювер, метки и исполнитель, отвечают нулевым кодом и тогда, когда
|
|
@@ -270,6 +344,10 @@ npm run task:move -- 86 in-review
|
|
|
270
344
|
гоняет ничего. Линтеры, юниты и сценарии хуков снимает гейт пуша — ниже то, чего он не знает.
|
|
271
345
|
|
|
272
346
|
1. **Главная ветка влита в эту ветку** — `git fetch origin && git merge origin/main`.
|
|
347
|
+
Свежесть основания между ветками одного захода не наследуется: вторая и третья ветка
|
|
348
|
+
отводятся после своего `fetch`, а не от ссылки, подтянутой под первую. Пока идёт работа,
|
|
349
|
+
главная уходит вперёд — чаще всего собственным PR того же исполнителя, влитым час
|
|
350
|
+
назад.
|
|
273
351
|
Всё, что проверяется ниже, проверяется от этого основания: PR с разошедшейся ветки
|
|
274
352
|
показывает ревьюверу правку вперемешку с чужой. Порядок и разбор конфликта — паттерн
|
|
275
353
|
`git-workflow-merge`.
|
|
@@ -290,7 +368,10 @@ npm run task:move -- 86 in-review
|
|
|
290
368
|
`browser-verification-measure`.
|
|
291
369
|
9. **Правка разметки публичного сайта проверена на прод-сборке по всем локалям перевода** — паттерн
|
|
292
370
|
`seo-verify`.
|
|
293
|
-
10. **Тело PR начинается строкой `Closes
|
|
371
|
+
10. **Тело PR собрано по образцу** — начинается строкой `Closes #<номер>`, несёт разделы «Что
|
|
372
|
+
сделано», «Чем подтверждено» и «Оставшийся шаг», а метки, ревьювер и исполнитель стоят.
|
|
373
|
+
Раздел оставшегося шага к этому моменту говорит, что шагов не осталось: черновик снимается
|
|
374
|
+
после разбора папки, а не до него.
|
|
294
375
|
11. **Заголовок PR несёт номер задачи и называет её сделанной:** `[<КЛЮЧ>-<номер>] <Что сделано>`,
|
|
295
376
|
тем же номером, что стоит у задачи и в имени ветки. Инфинитив из задачи в него не
|
|
296
377
|
переносится, тип и область коммита — тоже.
|
|
@@ -305,7 +386,12 @@ npm run task:move -- 86 in-review
|
|
|
305
386
|
15. **Набор пересмотрен после вливания главной ветки.** Он выбирается по тому, что ветка везёт
|
|
306
387
|
теперь, а не по тому, что правил автор. Ветка, не тронувшая ни строки показа, прогоняет
|
|
307
388
|
снимки витрин: с момента вливания их гоняет конвейер на её коде, и красное придёт на её
|
|
308
|
-
|
|
389
|
+
PR.
|
|
390
|
+
|
|
391
|
+
Список этот — про снятие черновика, а не про его открытие. Черновиком PR открывается раньше:
|
|
392
|
+
пока работа идёт, человеку показывают то, что уже есть, вместе с тем, чего ещё нет. Пункты 1–15
|
|
393
|
+
проходятся перед `gh pr ready`, и невыполненный пункт означает, что черновик не снимается, — а
|
|
394
|
+
не то, что PR не открывается.
|
|
309
395
|
|
|
310
396
|
Сразу после публикации задача переставляется в разбор — `npm run task:move -- <номер>
|
|
311
397
|
in-review`, — и `npm run check:board` прогоняется ещё раз: до открытия PR колонку он не судит,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: git-workflow-commit
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: git-workflow
|
|
5
|
-
description: Паттерн правила git-workflow для дерева на GitLab. Брать на заведение задачи, ветки, коммит, пуш и создание MR — заведение задачи со всеми шагами, перевод по спискам доски, слияние двух задач в одну, сверка очереди работ, работа от учётной записи машинной работы, формат заголовка, строка связи с задачей, ревьювер, исполнитель и метки MR, чеклист проверок до публикации, обход требования документа. Не брать для миграций и перезапуска прода — это паттерны git-workflow-migration и git-workflow-restart.
|
|
5
|
+
description: Паттерн правила git-workflow для дерева на GitLab. Брать на заведение задачи, ветки, коммит, пуш и создание MR — заведение задачи со всеми шагами, перевод по спискам доски, слияние двух задач в одну, сверка очереди работ, работа от учётной записи машинной работы, формат заголовка, строка связи с задачей, ревьювер, исполнитель и метки MR, образец описания MR с разделом об оставшемся шаге, чеклист проверок до публикации, обход требования документа. Не брать для миграций и перезапуска прода — это паттерны git-workflow-migration и git-workflow-restart.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Ветка, коммит и MR
|
|
@@ -46,6 +46,14 @@ glab issue update <номер> --title '[<КЛЮЧ>-<номер>] …' # но
|
|
|
46
46
|
Метка списка ставится при заведении, а не после: issue без неё лежит вне доски, и увидеть её
|
|
47
47
|
можно только поиском по проекту.
|
|
48
48
|
|
|
49
|
+
Заведение кончается не выводом команды, а ответом очереди работ. Команда спрашивает её сама и
|
|
50
|
+
печатает прочитанное — присутствие на доске, список, исполнителя; отсутствие кончает её ненулевым
|
|
51
|
+
кодом. В комментарий, в тело PR и в замысел идёт этот ответ, а не напечатанный номер: номер
|
|
52
|
+
говорит «вызов прошёл», а не «задача видна тому, кто по ней работает».
|
|
53
|
+
|
|
54
|
+
Заведения, идущие подряд, проверяются не по последнему, а сверкой очереди целиком: промах у них
|
|
55
|
+
общий, и по одной задаче он не виден.
|
|
56
|
+
|
|
49
57
|
Чем сверить, что очередь работ в порядке:
|
|
50
58
|
|
|
51
59
|
```bash
|
|
@@ -167,6 +175,34 @@ MR [<КЛЮЧ>-86] Письмо владельцу с незаполнен
|
|
|
167
175
|
коммита, и там его сверяет `commitlint`. В списке MR он занимает место, ничего не добавляя:
|
|
168
176
|
род правки и область уже видны метками.
|
|
169
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
|
+
|
|
170
206
|
## MR прикрепляется к задаче
|
|
171
207
|
|
|
172
208
|
Описание начинается со строки связи. Ревьювер, исполнитель и метки задаются той же командой, и
|
|
@@ -203,8 +239,48 @@ glab mr update 205 --description "$(cat тело.md)"
|
|
|
203
239
|
```
|
|
204
240
|
|
|
205
241
|
Правка описания переписывает его целиком, поэтому строка `Closes #<номер>` пишется заново
|
|
206
|
-
вместе с остальным текстом.
|
|
207
|
-
публикации:
|
|
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
|
+
заголовок. Держится образец тем, кто пишет описание, — как и слова вслух.
|
|
208
284
|
|
|
209
285
|
## Состояние MR читается, а не додумывается
|
|
210
286
|
|
|
@@ -256,7 +332,10 @@ npm run task:move -- 86 in-review
|
|
|
256
332
|
`browser-verification-measure`.
|
|
257
333
|
9. **Правка разметки публичного сайта проверена на прод-сборке по всем локалям перевода** —
|
|
258
334
|
паттерн `seo-verify`.
|
|
259
|
-
10. **Описание MR начинается строкой `Closes
|
|
335
|
+
10. **Описание MR собрано по образцу** — начинается строкой `Closes #<номер>`, несёт разделы
|
|
336
|
+
«Что сделано», «Чем подтверждено» и «Оставшийся шаг», а метки, ревьювер и исполнитель
|
|
337
|
+
стоят. Раздел оставшегося шага к этому моменту говорит, что шагов не осталось: черновик
|
|
338
|
+
снимается после разбора папки, а не до него.
|
|
260
339
|
11. **Заголовок MR несёт номер задачи и называет её сделанной:** `[<КЛЮЧ>-<номер>] <Что
|
|
261
340
|
сделано>`, тем же номером, что стоит у задачи и в имени ветки.
|
|
262
341
|
12. **Очередь работ сходится** — `npm run check:board`.
|
|
@@ -268,7 +347,7 @@ npm run task:move -- 86 in-review
|
|
|
268
347
|
15. **Набор пересмотрен после вливания главной ветки.** Он выбирается по тому, что ветка везёт
|
|
269
348
|
теперь, а не по тому, что правил автор. Ветка, не тронувшая ни строки показа, прогоняет
|
|
270
349
|
снимки витрин: с момента вливания их гоняет конвейер на её коде, и красное придёт на её
|
|
271
|
-
|
|
350
|
+
PR.
|
|
272
351
|
|
|
273
352
|
Сразу после публикации задача переставляется в разбор, и сверка очереди прогоняется ещё раз: до
|
|
274
353
|
открытия MR список она не судит, а после открытия расхождение видит.
|
|
@@ -63,6 +63,36 @@ docker run --rm alpine:3 df -h / # сколько осталось у са
|
|
|
63
63
|
отвечает про ненакатываемую цепочку, гейт пуша краснеет целиком. По этим признакам чинят
|
|
64
64
|
репозиторий, а причина в машине, — поэтому первое при любом из них `docker system df`.
|
|
65
65
|
|
|
66
|
+
Диск хоста при этом остаётся свободным и говорит «места полно»: сквозной набор упал на
|
|
67
|
+
`could not extend file … No space left on device`, когда на хосте было свободно 98 ГБ. Место
|
|
68
|
+
меряется у докера, а не у машины.
|
|
69
|
+
|
|
70
|
+
## Мусор снимается отбором, и чужое из него исключается по метке
|
|
71
|
+
|
|
72
|
+
Тома переживают свои контейнеры и накапливаются молча: `docker ps` их не показывает, а
|
|
73
|
+
`docker system df` считает одной строкой. Копятся они по-разному — контейнер без `--rm`
|
|
74
|
+
оставляет том всегда, а `docker run --rm` анонимный том снимает вместе с контейнером сам, и
|
|
75
|
+
докручивать к нему `-v` не надо: у `docker run` этот флаг означает монтирование и без значения
|
|
76
|
+
команду ломает. Снимает тома `-v` у `docker rm`, а не у `docker run`.
|
|
77
|
+
|
|
78
|
+
Признак своего — отсутствие метки состава: том, заведённый чьим-то `docker compose`, несёт
|
|
79
|
+
`com.docker.compose.project` и принадлежит тому проекту, в том числе чужому.
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
docker volume ls -q -f dangling=true | wc -l # сколько накопилось неиспользуемых
|
|
83
|
+
for v in $(docker volume ls -q -f dangling=true); do
|
|
84
|
+
[ -z "$(docker volume inspect "$v" --format '{{index .Labels "com.docker.compose.project"}}')" ] \
|
|
85
|
+
&& docker volume rm "$v"
|
|
86
|
+
done
|
|
87
|
+
docker builder prune --force --filter until=24h # вчерашний кэш ничей, свежий нужен сборке
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Порог у кэша, а не полная чистка: снятый целиком, он заставляет следующую сборку идти с нуля.
|
|
91
|
+
|
|
92
|
+
Прогон конвейера, живущий на машине владельца, убирает за собой сам и делает это шагом,
|
|
93
|
+
который идёт и при падении: место кончается ровно тогда, когда прогон падает, и уборка,
|
|
94
|
+
пропущенная на падении, не случается в тот единственный раз, когда она была нужна.
|
|
95
|
+
|
|
66
96
|
Освобождают отбором, а не общей чисткой: у сценария чистки образов сперва спрашивают, что он
|
|
67
97
|
снял бы, и только потом дают снимать.
|
|
68
98
|
|
|
@@ -81,7 +81,7 @@ bash .claude/hooks/tests/run.sh # если конфликт задел х
|
|
|
81
81
|
|
|
82
82
|
## Тело открытого PR перечитывается после мержа
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
PR описывал дерево на день, когда его написали. Мерж главной ветки меняет то, о чём он
|
|
85
85
|
утверждает: тело говорило, что оба дефекта заведены в `docs/BACKLOG.md`, а главная ветка этот
|
|
86
86
|
список к тому времени разобрала. Правится тело вызовом REST — `gh pr edit` в этом репозитории
|
|
87
87
|
отвечает отказом про Projects (classic) и до правки не доходит:
|
|
@@ -43,6 +43,12 @@ docs/specs/<домен>/
|
|
|
43
43
|
|
|
44
44
|
Текст заголовка сверяется дословно. «Не применимо» — законный ответ, отсутствие раздела — нет.
|
|
45
45
|
|
|
46
|
+
`## Решения` — временное место. Решение живёт в нём, пока не найден слой, которому оно
|
|
47
|
+
принадлежит; найденный слой забирает его пунктом, а в спеке не остаётся ничего. Разросшийся
|
|
48
|
+
раздел читается как признак незаведённого правила, а не как свойство сложного домена: делить
|
|
49
|
+
такой спек по строкам бесполезно, потому что делится в нём не описание домена, а ненаписанное
|
|
50
|
+
правило.
|
|
51
|
+
|
|
46
52
|
Шапка несёт статус, дату ревизии, префикс сценариев, зависимости от других доменов, строку
|
|
47
53
|
`**Законы:**` — законы, которые домен применяет, — и строку `**Процедуры:**` — корни либ, чьи
|
|
48
54
|
процедуры домен обслуживает.
|
|
@@ -129,7 +135,7 @@ docs/specs/<домен>/
|
|
|
129
135
|
- Пометка «Не покрыто» при существующем тесте — отказ: долг закрыли, а отметку не сняли.
|
|
130
136
|
- Пометка «Не покрыто» читается дословно и с начала строки. Любое слово между ней и двоеточием
|
|
131
137
|
— «Не покрыто, и прогоном не покрывается вовсе: …» — и сценарий считается непомеченным вовсе,
|
|
132
|
-
а причина, ради которой пометку и писали, до
|
|
138
|
+
а причина, ради которой пометку и писали, до PR не доезжает.
|
|
133
139
|
- Закон, названный в тексте, но забытый в строке `**Законы:**`: по закону тогда не узнать,
|
|
134
140
|
какие домены на нём стоят.
|
|
135
141
|
- Правка `.proto` без спеков задетых доменов: `docs-guard` отбивает такой коммит.
|
|
@@ -123,6 +123,12 @@ description: Паттерн правила git-workflow. Брать … Не б
|
|
|
123
123
|
правку сущности оказались привязаны к механике, которую не зовёт ни один экран.
|
|
124
124
|
- Утверждение переформулировали, а строку в привязке не тронули: связь идёт по тексту, и
|
|
125
125
|
проверка перестанет её находить.
|
|
126
|
+
- Строка привязки дописана в конец компаньона, а не вставлена в таблицу. После таблицы там идут
|
|
127
|
+
ещё разделы — «Чем это проверяется», «Что ещё стоит знать при чтении кода», — и приписанная в
|
|
128
|
+
конец строка в таблицу не попадает вовсе: утверждение читается непривязанным, а сверка спеков
|
|
129
|
+
на это молчит, потому что ищет строку в таблице. Место строки то же, что у её утверждения в
|
|
130
|
+
правиле: порядок обеих сторон держится одинаковым, иначе утверждение и его привязка перестают
|
|
131
|
+
находиться друг по другу.
|
|
126
132
|
- В `description` не сказано, когда паттерн **не** брать, — соседний паттерн того же правила
|
|
127
133
|
становится неотличимым.
|
|
128
134
|
- Блок готового кода принят по виду, а не сверкой с объявлением. Вызов в примере повторяет имя,
|