@rt-tools/agent-kit 0.22.0 → 0.23.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/board-long-work.github.mjs +101 -0
- package/assets/checks/board-runs.github.mjs +34 -0
- package/assets/checks/check-board.github.mjs +16 -2
- package/assets/checks/check-reuse.mjs +4 -1
- package/assets/checks/check-schema-drift.mjs +65 -6
- package/assets/checks/rt-kit-checks.config.mjs +13 -0
- package/assets/checks/signals.mjs +41 -1
- package/assets/commands/next-session.md +16 -5
- package/assets/defaults/project.sh +16 -0
- package/assets/hooks/browser-guard-no-asking.sh +5 -1
- package/assets/hooks/git-guard-delivery.sh +15 -11
- package/assets/hooks/git-guard-push-tests.sh +22 -0
- package/assets/hooks/glossary-load.sh +23 -2
- package/assets/hooks/grill-gate.sh +62 -0
- package/assets/laws/autonomous-work.md +30 -0
- package/assets/laws/project-documentation.md +8 -0
- package/assets/patterns/autonomous-work-run.md +105 -0
- package/assets/patterns/browser-verification-stand.md +1 -1
- package/assets/patterns/doc-style-write.md +16 -0
- package/assets/patterns/git-workflow-pr-ready.md +93 -0
- package/assets/patterns/git-workflow-pr.azure.md +1 -1
- package/assets/patterns/git-workflow-pr.github.md +1 -1
- package/assets/patterns/git-workflow-pr.gitlab.md +1 -1
- package/assets/patterns/task-flow-start.md +47 -47
- package/assets/patterns/ts-procedure.md +3 -2
- package/assets/rules/autonomous-work.md +92 -0
- package/assets/rules/browser-verification.md +6 -0
- package/assets/rules/deploy-flow.azure.md +7 -0
- package/assets/rules/deploy-flow.github.md +7 -0
- package/assets/rules/deploy-flow.gitlab.md +7 -0
- package/assets/rules/doc-style.md +18 -0
- package/assets/rules/git-workflow.azure.md +8 -0
- package/assets/rules/git-workflow.github.md +44 -45
- package/assets/rules/git-workflow.gitlab.md +8 -0
- package/assets/rules/reuse-first.md +17 -3
- package/assets/rules/task-flow.md +62 -63
- package/assets/skills/agent-kit.md +20 -20
- package/lib/commands.d.ts.map +1 -1
- package/lib/commands.js +6 -0
- package/lib/commands.js.map +1 -1
- package/lib/push-gate.d.ts +14 -0
- package/lib/push-gate.d.ts.map +1 -0
- package/lib/push-gate.js +93 -0
- package/lib/push-gate.js.map +1 -0
- package/package.json +1 -1
- package/rt-tools-agent-kit-0.23.0.tgz +0 -0
- package/assets/laws/application/access.md +0 -34
- package/assets/laws/application/locales.md +0 -33
- package/assets/laws/application/search-visibility.md +0 -24
- package/assets/patterns/permissions-procedure.md +0 -71
- package/assets/patterns/seo-page.md +0 -104
- package/assets/patterns/seo-verify.md +0 -83
- package/assets/patterns/translations-content.md +0 -107
- package/assets/patterns/translations-key.md +0 -64
- package/assets/rules/permissions.md +0 -116
- package/assets/rules/seo.md +0 -139
- package/assets/rules/translations.md +0 -96
- package/rt-tools-agent-kit-0.22.0.tgz +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: autonomous-work
|
|
3
|
+
kind: rule
|
|
4
|
+
law: autonomous-work
|
|
5
|
+
description: Правило под «Закон об автономном заходе». Брать, когда владелец ушёл и просил работать самостоятельно: череда веток, умолчание вместо вопроса, местная работа без отдачи наружу, список сделанного к утру. Паттерн autonomous-work-run. Ход одной работы — правило task-flow.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Автономный заход — как это устроено здесь
|
|
9
|
+
|
|
10
|
+
Правило под закон `docs/constitution/autonomous-work.md`. Закон говорит, что должно быть верно,
|
|
11
|
+
когда владельца нет рядом; здесь — чем это названо в дереве и что меняется в обычном ходе
|
|
12
|
+
работы. Сам ход работы — правило `task-flow`, конец хода — `turn-conduct`, поставка —
|
|
13
|
+
`git-workflow`: автономный заход их не отменяет, а сужает.
|
|
14
|
+
|
|
15
|
+
## Как это называется здесь
|
|
16
|
+
|
|
17
|
+
| В законе | Здесь |
|
|
18
|
+
| ----------------------------- | ---------------------------------------------------------------------------- |
|
|
19
|
+
| автономный заход | просьба владельца работать без него, названная словами и границей по времени |
|
|
20
|
+
| умолчание вместо вопроса | строка «Решения» в разборе просьбы: принятое, довод и цена ошибки |
|
|
21
|
+
| работа, видная снаружи | пуш ветки, открытие заявки, слияние, публикация пакета, отправка груза |
|
|
22
|
+
| череда | ветка каждой следующей работы заводится от ветки предыдущей |
|
|
23
|
+
| список к утру | последняя реплика захода: работа, ветка, чем подтверждена, чего ждёт |
|
|
24
|
+
| отложенная работа | задача, которой нужно слово владельца: состояние на борде не двигается |
|
|
25
|
+
|
|
26
|
+
## Где это лежит
|
|
27
|
+
|
|
28
|
+
В этом дереве — таблица в `implementation.md` рядом: чем объявляется автономный заход, где
|
|
29
|
+
ведётся список к утру и какой ключ у задач череды. Пути живут там, а не здесь: правило
|
|
30
|
+
переносится между репозиториями, а раскладка у каждого дерева своя.
|
|
31
|
+
|
|
32
|
+
## Ход
|
|
33
|
+
|
|
34
|
+
```mermaid
|
|
35
|
+
flowchart TD
|
|
36
|
+
A[Владелец объявил автономный заход] --> B[Берётся задача из очереди работ]
|
|
37
|
+
B --> C{Нужно слово владельца}
|
|
38
|
+
C -->|Да| D[Задача откладывается целиком, довод пишется в список к утру]
|
|
39
|
+
C -->|Нет| E[Ветка заводится от предыдущей работы, а не от главной]
|
|
40
|
+
E --> F[Папка задачи, разбор просьбы с умолчаниями, замысел]
|
|
41
|
+
F --> G[Работа этапами; каждый этап кончается коммитом]
|
|
42
|
+
G --> H{Признак готовности проверяется командой}
|
|
43
|
+
H -->|Нет команды| D
|
|
44
|
+
H -->|Есть| I[Прогон; красное чинится в той же ветке]
|
|
45
|
+
I --> J[Папка задачи разбирается в описание прошлого]
|
|
46
|
+
J --> K{Ночь не кончилась}
|
|
47
|
+
K -->|Да| B
|
|
48
|
+
K -->|Нет| L[Список к утру: что сделано, где лежит, чем подтверждено, чего ждёт]
|
|
49
|
+
D --> K
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Как закон применяется здесь
|
|
53
|
+
|
|
54
|
+
- **Ветка следующей работы заводится от предыдущей, а не от главной.** Первая — от главной,
|
|
55
|
+
каждая следующая — от вершины прошлой: `git checkout -b <ключ>-<номер>-<slug> <прошлая ветка>`.
|
|
56
|
+
Владелец вливает их по очереди снизу вверх, и заявка каждой стоит на предыдущей.
|
|
57
|
+
- **Наружу за ночь не уходит ничего.** Ни пуша, ни заявки, ни слияния, ни публикации, ни
|
|
58
|
+
отправки груза в приём: всё это видно другим, а отменяет их человек. Отметки груза,
|
|
59
|
+
требующие слияния, тоже ждут — они утверждают то, чего в главной ветке ещё нет.
|
|
60
|
+
- **Задача, которой нужно слово владельца, не берётся вовсе.** Её состояние на борде не
|
|
61
|
+
двигается: взятая и отложенная задача выглядит начатой, а следующий заход её пропускает.
|
|
62
|
+
- **Умолчание записывается там же, где записался бы ответ владельца.** Строкой в разборе
|
|
63
|
+
просьбы: что принято, почему и что будет стоить ошибка. Молчаливое умолчание неотличимо от
|
|
64
|
+
знания.
|
|
65
|
+
- **Признак готовности называется командой до начала этапа.** Взгляд исполнителя в автономном
|
|
66
|
+
заходе не подтверждает ничего: проверить его некому до утра.
|
|
67
|
+
- **Красный прогон чинится в той же ветке, а не откладывается.** Отложенный, он достаётся
|
|
68
|
+
владельцу вместе с веткой, которую нельзя влить.
|
|
69
|
+
- **Отказ стража — шаг работы, а не конец захода.** Он называет пропущенное; пропущенное
|
|
70
|
+
делается, и работа идёт дальше. Обход стража остаётся запрещённым и в автономном заходе.
|
|
71
|
+
- **Список к утру пишется по ходу, а не вспоминается в конце.** Каждая закрытая работа
|
|
72
|
+
дописывает свою строку: ночь длиннее окна, и вспомнить её целиком к утру нечем.
|
|
73
|
+
|
|
74
|
+
## Чего из закона здесь нет
|
|
75
|
+
|
|
76
|
+
Границы захода по времени не проверяет ничто: заход кончается тогда, когда кончилась работа или
|
|
77
|
+
владелец сказал слово. Соблюдение запрета на видимое снаружи держится тем же — правилом, а не
|
|
78
|
+
стражем: команда пуша ничем не отличается от той, что делается днём.
|
|
79
|
+
|
|
80
|
+
## Паттерны
|
|
81
|
+
|
|
82
|
+
- `autonomous-work-run` — готовый цикл ночи: череда веток, запись умолчания, список к утру,
|
|
83
|
+
разбор отказа стража.
|
|
84
|
+
|
|
85
|
+
## Ловушки
|
|
86
|
+
|
|
87
|
+
- **Ветка, заведённая от главной по привычке, ломает череду.** Заметно это только у владельца и
|
|
88
|
+
только на втором вливании; чинится перезаведением ветки, пока работа не ушла далеко.
|
|
89
|
+
- **Задача, отложенная без строки в списке, теряется.** Утром её не видно ни на борде, ни в
|
|
90
|
+
ветках: она выглядит просто не взятой.
|
|
91
|
+
- **Умолчание, записанное в теле коммита, до владельца не доходит.** Он читает список и папку
|
|
92
|
+
задачи, а не историю ветки.
|
|
@@ -86,6 +86,12 @@ flowchart TD
|
|
|
86
86
|
стенд; признак, которым закрыт экран, приходит подменённым профилем. Просьба к человеку сделать
|
|
87
87
|
шаг проверки — набрать пароль, открыть вкладку, нажать кнопку — означает неверно выбранный
|
|
88
88
|
путь, а не нехватку прав у исполнителя.
|
|
89
|
+
- **Правка числа элементов в контейнере — это правка раскладки.** Стили она не трогает, и потому
|
|
90
|
+
читается как правка разметки, а проверка сводится к кодам ответа: страницы отвечают на всех
|
|
91
|
+
локалях, а документ уже вдвое шире вьюпорта. Закрывается она замером — ширина документа против
|
|
92
|
+
ширины вьюпорта на узком экране, — а не взглядом на снимок: снимок показывает то, что влезло в
|
|
93
|
+
кадр. Ряд без переноса и без узкой раскладки, выросший с четырёх элементов до восьми, продержал
|
|
94
|
+
боковую прокрутку на каждой странице сайта сорок четыре минуты прода.
|
|
89
95
|
- **Замер делается на самом длинном значении, а не на образцовом.** Наезд, вылезание за край и
|
|
90
96
|
обрезка без признака видны только там, где содержимое в своё место не влезает; на коротком
|
|
91
97
|
значении всё три выглядят исправными. Значение для замера берётся предельное — то, какое узел
|
|
@@ -96,6 +96,13 @@ flowchart TD
|
|
|
96
96
|
тот, кто пушит.** Оно законно несёт след любой недоделанной ветки, и сверка с ним держала бы
|
|
97
97
|
чужую правку. Гейт и выкатка зовут одну и ту же проверку — иначе «сошлось» станет значить в
|
|
98
98
|
двух местах разное.
|
|
99
|
+
- **Пропуск сверки схемы законен, пока ветка не трогала хранилища.** Погашенная база — состояние
|
|
100
|
+
машины, а не повод отбить пуш документации; но ветка, правившая схему или миграции, без прогона
|
|
101
|
+
цепочки уезжает в главную вслепую, и падает не она, а выкатка. Проверка в такой ветке отказывает
|
|
102
|
+
и называет, чем базу поднять.
|
|
103
|
+
- **Упавшая выкатка видна сверкой очереди работ отдельно от отставшего прода.** Слияние — ещё не
|
|
104
|
+
выкатка: отказавшая оставляет главную ветку впереди сервера, и слияния поверх уедут туда же.
|
|
105
|
+
Отставание считается по последней успешной выкатке и «не запускали» от «упала» не отличает.
|
|
99
106
|
|
|
100
107
|
- **Проверка, стоящая в наборе гейта, отказывает, когда не сумела отработать.** «Проверять
|
|
101
108
|
негде» и «проверка сломана» — разные вещи: первое дерево называет само — нет предмета, не задан
|
|
@@ -123,6 +123,13 @@ flowchart TD
|
|
|
123
123
|
тот, кто пушит.** Оно законно несёт след любой недоделанной ветки, и сверка с ним держала бы
|
|
124
124
|
чужую правку. Гейт и выкатка зовут одну и ту же проверку — иначе «сошлось» станет значить в
|
|
125
125
|
двух местах разное.
|
|
126
|
+
- **Пропуск сверки схемы законен, пока ветка не трогала хранилища.** Погашенная база — состояние
|
|
127
|
+
машины, а не повод отбить пуш документации; но ветка, правившая схему или миграции, без прогона
|
|
128
|
+
цепочки уезжает в главную вслепую, и падает не она, а выкатка. Проверка в такой ветке отказывает
|
|
129
|
+
и называет, чем базу поднять.
|
|
130
|
+
- **Упавшая выкатка видна сверкой очереди работ отдельно от отставшего прода.** Слияние — ещё не
|
|
131
|
+
выкатка: отказавшая оставляет главную ветку впереди сервера, и слияния поверх уедут туда же.
|
|
132
|
+
Отставание считается по последней успешной выкатке и «не запускали» от «упала» не отличает.
|
|
126
133
|
|
|
127
134
|
- **Проверка, стоящая в наборе гейта, отказывает, когда не сумела отработать.** «Проверять
|
|
128
135
|
негде» и «проверка сломана» — разные вещи: первое дерево называет само — нет предмета, не задан
|
|
@@ -98,6 +98,13 @@ flowchart TD
|
|
|
98
98
|
тот, кто пушит.** Оно законно несёт след любой недоделанной ветки, и сверка с ним держала бы
|
|
99
99
|
чужую правку. Гейт и выкатка зовут одну и ту же проверку — иначе «сошлось» станет значить в
|
|
100
100
|
двух местах разное.
|
|
101
|
+
- **Пропуск сверки схемы законен, пока ветка не трогала хранилища.** Погашенная база — состояние
|
|
102
|
+
машины, а не повод отбить пуш документации; но ветка, правившая схему или миграции, без прогона
|
|
103
|
+
цепочки уезжает в главную вслепую, и падает не она, а выкатка. Проверка в такой ветке отказывает
|
|
104
|
+
и называет, чем базу поднять.
|
|
105
|
+
- **Упавшая выкатка видна сверкой очереди работ отдельно от отставшего прода.** Слияние — ещё не
|
|
106
|
+
выкатка: отказавшая оставляет главную ветку впереди сервера, и слияния поверх уедут туда же.
|
|
107
|
+
Отставание считается по последней успешной выкатке и «не запускали» от «упала» не отличает.
|
|
101
108
|
|
|
102
109
|
- **Проверка, стоящая в наборе гейта, отказывает, когда не сумела отработать.** «Проверять
|
|
103
110
|
негде» и «проверка сломана» — разные вещи: первое дерево называет само — нет предмета, не задан
|
|
@@ -126,6 +126,19 @@ flowchart TD
|
|
|
126
126
|
строка в шапке дешевле правки всех ссылающихся записей и прошлого не трогает.
|
|
127
127
|
<!-- rt-when: *.md -->
|
|
128
128
|
|
|
129
|
+
- **Словарь правится там, откуда он собирается, а не там, где читается.** Он уезжает в контекст
|
|
130
|
+
каждой сессии целиком и оттого читается обычным документом дерева, а собран он раскладкой, как
|
|
131
|
+
всякий ресурс с шапкой: правка на месте живёт до следующей раскладки и пропадает молча, а до
|
|
132
|
+
тех пор раскладка отказывает по словарю целиком. Адрес надстройки называет компаньон правила, и
|
|
133
|
+
вводная, которую печатает хук запуска, выводит его из шапки сама.
|
|
134
|
+
<!-- rt-when: *.md -->
|
|
135
|
+
|
|
136
|
+
- **Раздел надстройки замещает одноимённый раздел набора целиком, а не дописывает в него.** Своё
|
|
137
|
+
слово поэтому кладётся в свой раздел, названный иначе, чем любой из разделов набора: положенное
|
|
138
|
+
в одноимённый, оно уносит с собой весь пакетный раздел, и потеря видна только тому, кто помнит,
|
|
139
|
+
что там стояло.
|
|
140
|
+
<!-- rt-when: *.md -->
|
|
141
|
+
|
|
129
142
|
- **Словарь работы и язык экрана — два разных словаря.** Слово, которым слой правил зовёт своё
|
|
130
143
|
понятие, для человека за экраном ничего не значит: он не читал ни одного правила и читать не
|
|
131
144
|
будет. Термин словаря в подписи кнопки, колонки или пустого состояния — это внутреннее слово,
|
|
@@ -163,6 +176,11 @@ flowchart TD
|
|
|
163
176
|
оставляет автору: открытый вопрос пишется теми же словами, что и обещание, а дата и номер —
|
|
164
177
|
такие же числа, как то, что пересчитывают.
|
|
165
178
|
|
|
179
|
+
Ответ владельцу не читает ни одна проверка, а промахи в нём те же, что в тексте дерева:
|
|
180
|
+
выдуманный факт, поданный наравне с проверенным, и оценка чужого решения вместо исполнения.
|
|
181
|
+
Ловит их только владелец — то есть уже прочитав. Правило действует на ответ так же, как на файл;
|
|
182
|
+
разница в том, что за файл отвечает гейт, а за ответ — автор.
|
|
183
|
+
|
|
166
184
|
На комментарии в коде правило распространяется, но гейтом не требуется: он зовёт его только
|
|
167
185
|
на `.md`. Расширять требование на каждый `.ts` значило бы шуметь на каждой правке, поэтому
|
|
168
186
|
здесь оно держится памятью автора — и цена этого видна: слова из левой колонки словаря живут
|
|
@@ -168,6 +168,10 @@ flowchart TD
|
|
|
168
168
|
отбивает пуш, а не печатается рядом с ним: напечатанное предупреждение исполнитель читает как
|
|
169
169
|
разрешение. Дважды подряд правка, прошедшая гейт целиком, была отбита конвейером — и оба раза
|
|
170
170
|
зелёный гейт был прочитан как «локально всё зелено».
|
|
171
|
+
- **Итоговый набор перед пушем читается разбором состояния, а не сборкой в уме.** Он собирается
|
|
172
|
+
из умолчания пакета и надстройки дерева, и прочитать сборку было нечем: раздел «набор перед
|
|
173
|
+
пушем» печатает его целиком, по команде на строку, а рядом называет то, что умолчание печатало,
|
|
174
|
+
а в набор не попало. Дерево, писавшее надстройку вслепую, дописывало в неё повтор.
|
|
171
175
|
- **Причина исключения, называющая задачу, судится на живость этой задачи.** Отсрочка со сроком
|
|
172
176
|
и отсрочка без срока выглядят одинаково, пока номер никто не спросил; мёртвый номер в причине
|
|
173
177
|
делает исключение бессрочным, не сказав об этом ни строкой. Спрашивается тем же ярусом, что
|
|
@@ -189,6 +193,10 @@ flowchart TD
|
|
|
189
193
|
сломана, она описывает вчерашний день. Сравнение веток пишется от `origin/main` целиком —
|
|
190
194
|
смешав в одной команде удалённую ссылку для одной стороны и локальную для другой, промах
|
|
191
195
|
изнутри выглядит правильным.
|
|
196
|
+
- **Удалённую ссылку берут не только слова, но и действия.** Основание новой ветки, счёт влитого
|
|
197
|
+
и подтягивание главной судятся по ней же: локальная — снимок последнего подтягивания, и работа,
|
|
198
|
+
начатая от неё, стартует от основания, которого в главной уже нет. Влитая ветка при ней числится
|
|
199
|
+
невлитой, и уборка кончается списком невлитого, которого нет.
|
|
192
200
|
- **Рабочий элемент привязывается к PR при создании, а не после.** `az repos pr create`
|
|
193
201
|
принимает `--work-items`; привязка второй командой обходится молча, когда у токена нет права
|
|
194
202
|
править чужой элемент, и PR остаётся ни с чем не связанным.
|
|
@@ -69,15 +69,15 @@ flowchart TD
|
|
|
69
69
|
за которой в очереди работ ничего не стоит. Заводится задача, и работа переносится в ветку с
|
|
70
70
|
её номером.
|
|
71
71
|
- **Главная ветка влита в ветку задачи до открытия PR.** Гард отбивает открытие, пока вершина
|
|
72
|
-
главной не стала предком
|
|
73
|
-
|
|
72
|
+
главной не стала предком текущей: иначе ревьювер видит свою правку вперемешку с чужой, а
|
|
73
|
+
проверено всё было от основания, которого уже нет.
|
|
74
74
|
- **Волна веток от одной главной проверяется пробным слиянием, а не по одной:** каждая зелена
|
|
75
|
-
сама по себе, а сталкиваются
|
|
75
|
+
сама по себе, а сталкиваются тем, чего на отдельной ветке не видно.
|
|
76
76
|
- **Ветка следующей работы отводится от предыдущей, пока череда не прервалась.** `git checkout -b
|
|
77
|
-
<КЛЮЧ>-<номер>-<slug> <предыдущая ветка>` вместо `origin/main`; от главной —
|
|
78
|
-
череды. Иначе первое
|
|
77
|
+
<КЛЮЧ>-<номер>-<slug> <предыдущая ветка>` вместо `origin/main`; от главной — первая работа
|
|
78
|
+
череды. Иначе первое слияние разводит все остальные разом.
|
|
79
79
|
- **У заявки в череде основанием стоит предыдущая ветка, а не главная.** `gh pr create --base
|
|
80
|
-
<предыдущая ветка>` — иначе разбор показывает
|
|
80
|
+
<предыдущая ветка>` — иначе разбор показывает правку вперемешку со всем, что под ней. Базу
|
|
81
81
|
влитой нижней хостинг переносит сам.
|
|
82
82
|
- **Череда вливается снизу вверх, и порядок стоит в теле каждой заявки.** Родство веток по
|
|
83
83
|
списку не видно: строка «стоит на #<номер>» — единственное место, где владелец это прочтёт.
|
|
@@ -87,9 +87,9 @@ flowchart TD
|
|
|
87
87
|
владельца, разбирающего то же при слиянии, нет ни одной.
|
|
88
88
|
- **Несошедшиеся условия поставки называются одним отказом.** Гард копит их и печатает разом: всё
|
|
89
89
|
несошедшееся известно на первом вызове.
|
|
90
|
-
- **Условие, известное в начале работы, спрашивается в начале.** Заведение ветки отбивает
|
|
91
|
-
без вершины главной и чужую почту в
|
|
92
|
-
|
|
90
|
+
- **Условие, известное в начале работы, спрашивается в начале.** Заведение ветки отбивает
|
|
91
|
+
основание без вершины главной и чужую почту в подписи; на пуше то же чинится вливанием с
|
|
92
|
+
конфликтом и переписыванием ветки.
|
|
93
93
|
- **Судится то основание, которое названо командой, а не вершина рабочей копии.** Ветку заводят и
|
|
94
94
|
от `origin/main` прямо — этой командой основание как раз и берут свежим. Основание, о котором
|
|
95
95
|
дерево ничего не знает, не судится вовсе.
|
|
@@ -140,12 +140,10 @@ flowchart TD
|
|
|
140
140
|
прогона, а не цвет, и свежей вершине даёт время.
|
|
141
141
|
- **Прогон, вытесненный из очереди конвейера, сверка называет отдельной строкой.** Он выглядит
|
|
142
142
|
упавшим, хотя ветку не проверял; отличает их число заданий — у него ноль.
|
|
143
|
-
- **Черновик при зелёном прогоне на вершине — расхождение сверки.** Зелёная страница
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
машинной записи судится двумя признаками — зелёный прогон на его вершине и разобранная папка
|
|
148
|
-
задачи в его ветке; лежащая папка означает идущую работу.
|
|
143
|
+
- **Черновик при зелёном прогоне на вершине — расхождение сверки.** Зелёная страница ничего не
|
|
144
|
+
разрешает: кнопка заблокирована хостингом. В ходе это закрывает гард, между ходами — сверка.
|
|
145
|
+
- **Свои черновики судятся все разом, а не тот один, чья ветка взята.** Признака два — зелёный
|
|
146
|
+
прогон на вершине и разобранная папка задачи в ветке; лежащая папка означает идущую работу.
|
|
149
147
|
- **Открытие PR отбивается, пока ветка везёт папку своей задачи.** Кнопку слияния нажимает
|
|
150
148
|
человек там, где гардов нет, и открытие — последняя точка, где отказ ещё виден тому, кто может
|
|
151
149
|
его выполнить.
|
|
@@ -173,25 +171,27 @@ flowchart TD
|
|
|
173
171
|
версию, пока наше стоит между шагами. Каталог установки, имя контейнера и имя сборщика
|
|
174
172
|
называются поэтому по проекту и постоянно, а временный каталог решением не бывает — в нём
|
|
175
173
|
живёт хранилище пакетов.
|
|
176
|
-
- **Набор гейта пуша не бывает уже набора конвейера.**
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
- **Набор гейта зовёт умолчание пакета, а не перечисляет его строками.** Переписанный строками,
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
174
|
+
- **Набор гейта пуша не бывает уже набора конвейера.** Шаг конвейера, которому в наборе нет ни
|
|
175
|
+
строки, ни объявленного исключения с причиной, отбивает пуш, а не печатается рядом:
|
|
176
|
+
предупреждение читается как разрешение.
|
|
177
|
+
- **Набор гейта зовёт умолчание пакета, а не перечисляет его строками.** Переписанный строками,
|
|
178
|
+
он оставляет завтрашнюю дыру: заведённая пакетом проверка до дерева не доедет. Отсеивать из
|
|
179
|
+
умолчания законно, но поимённо и с причиной.
|
|
180
|
+
- **Итоговый набор перед пушем читается разбором состояния, а не сборкой в уме.** Раздел «набор
|
|
181
|
+
перед пушем» печатает его целиком и называет рядом то, что умолчание печатало, а в набор не
|
|
182
|
+
попало: дерево, писавшее надстройку вслепую, дописывало в неё повтор.
|
|
183
183
|
- **Причина исключения, называющая задачу, судится на живость этой задачи.** Мёртвый номер делает
|
|
184
|
-
исключение
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
копится молча: раскладка отказывает по правленому файлу целиком. Статьёй выше это не покрывается —
|
|
188
|
-
сверки нет в конвейере.
|
|
184
|
+
исключение бессрочным молча. Спрашивается тем же ярусом, что состояние задачи у гарда.
|
|
185
|
+
- **Сверка раскладки стоит в наборе гейта пуша наравне с линтом и сборкой.** Правка мимо
|
|
186
|
+
источника копится молча, а сверки нет в конвейере.
|
|
189
187
|
- **После вливания главной ветки набор проверок пересматривается по тому, что ветка везёт
|
|
190
|
-
теперь.**
|
|
191
|
-
|
|
192
|
-
-
|
|
193
|
-
|
|
194
|
-
|
|
188
|
+
теперь.** Проверять по тому, что правил автор, — значит проверять половину: отвечает ветка
|
|
189
|
+
целиком.
|
|
190
|
+
- **Главная ветка берётся удалённой ссылкой — и в словах, и в действиях.** Локальная протухает в
|
|
191
|
+
минуту, когда её подтянули, и молчит об этом: это снимок вчерашнего дня. От `origin/main` идут
|
|
192
|
+
и сравнение, и основание новой ветки, и счёт влитого, и подтягивание — смешанные в одной
|
|
193
|
+
команде, ссылки дают промах, изнутри выглядящий верным. Влитая ветка при локальной числится
|
|
194
|
+
невлитой, и уборка кончается списком невлитого, которого нет.
|
|
195
195
|
- **Правка кода отдаётся человеку открытым PR, а не запушенной веткой.** Ветка во входящие не
|
|
196
196
|
приходит и обсуждения не имеет: до открытия PR правки для человека нет. Открывается он тем же
|
|
197
197
|
ходом, которым исполнитель говорит, что работу отдаёт.
|
|
@@ -221,31 +221,29 @@ flowchart TD
|
|
|
221
221
|
хостинга об авторе гард спрашивает на снятии черновика: влитую заявку не переоткрыть.
|
|
222
222
|
|
|
223
223
|
- **Автор PR не может быть его ревьювером.** Запрос разбора на себя GitHub принимает и молча не
|
|
224
|
-
|
|
224
|
+
создаёт. Считаются только запрос и отзыв не от автора.
|
|
225
225
|
- **Вызов клиента хостинга идёт из дерева, а связка команд исхода не проверяет.** Вне дерева
|
|
226
|
-
клиент отказывает, а следующее звено
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
борде тот отвечает отказом про Projects.
|
|
226
|
+
клиент отказывает, а следующее звено увозит на хостинг остаток отказавшего.
|
|
227
|
+
- **Метки, исполнитель и ревьювер PR ставятся вызовами `gh api`, а не `gh pr edit`:** тот
|
|
228
|
+
отвечает отказом про Projects.
|
|
230
229
|
- **Борда правится запросом GraphQL по идентификатору борды, а не по имени владельца.**
|
|
231
230
|
- **Почта машинного коммита копируется из компаньона, а не набирается по памяти.** Адрес
|
|
232
|
-
`<число>+<логин>@users.noreply.github.com` сходится по числу: с чужим
|
|
233
|
-
|
|
231
|
+
`<число>+<логин>@users.noreply.github.com` сходится по числу: с чужим коммит уезжает подписанным
|
|
232
|
+
посторонним. Ту же строку держит профиль дерева, и гард отбивает пуш.
|
|
234
233
|
- **Личность машинной записи подтверждается ответом хостинга, а не узнаванием строки:** её
|
|
235
234
|
спрашивают токеном, и логин с числом приходят вместе.
|
|
236
235
|
- **Сценарии гардов задают настройки git сами, а не берут их с машины.** Подпись с машины уводит
|
|
237
|
-
git в агент ключей, а заблокированный агент роняет
|
|
238
|
-
|
|
236
|
+
git в агент ключей, а заблокированный агент роняет набор: автор, почта и подпись идут флагами
|
|
237
|
+
`-c` в команде.
|
|
239
238
|
|
|
240
239
|
- **Каждый коммит вклада ветки подписан машинной записью, и это проверяется набором пуша.** Гард
|
|
241
|
-
судит
|
|
240
|
+
судит коммит, назвавшийся ею; подписанный человеком проходит мимо.
|
|
242
241
|
- **Состояние заявки перечитывается у хостинга сразу после публикации.** Открытие и постановка
|
|
243
242
|
ревьювера отвечают нулём и тогда, когда не сделали ничего.
|
|
244
243
|
- **Автор открытой заявки и наличие у неё ревьювера сверяются очередью работ.** До слияния оба
|
|
245
|
-
промаха не видны:
|
|
246
|
-
заявка, которой его не поставили.
|
|
244
|
+
промаха не видны: открытая человеком заявка ревьювера не получит никогда.
|
|
247
245
|
- **Ревьюверы спрашиваются вызовом REST, а не выборкой клиента.** Её поля собирает GraphQL, прав
|
|
248
|
-
на который у
|
|
246
|
+
на который у записи нет: «сошлось» неотличимо от «спросить было нечем».
|
|
249
247
|
|
|
250
248
|
- **Рабочее дерево не опустошается ради прогона инструмента.** Сравнение идёт на второй копии:
|
|
251
249
|
прятанье уводит незакоммиченную работу туда, где её не видит ни состояние дерева, ни сверка.
|
|
@@ -272,3 +270,4 @@ flowchart TD
|
|
|
272
270
|
- `git-workflow-merge` — главная ветка влита в ветку задачи, конфликт разобран.
|
|
273
271
|
- `git-workflow-stack` — череда веток: ветвление от предыдущей, основание заявки, порядок отдачи.
|
|
274
272
|
- `git-workflow-freshness` — свои открытые заявки: чтение всех разом, отставание против спора.
|
|
273
|
+
- `git-workflow-pr-ready` — доведение отданного: снятый черновик, разбор красного, волна по череде.
|
|
@@ -170,6 +170,10 @@ flowchart TD
|
|
|
170
170
|
отбивает пуш, а не печатается рядом с ним: напечатанное предупреждение исполнитель читает как
|
|
171
171
|
разрешение. Дважды подряд правка, прошедшая гейт целиком, была отбита конвейером — и оба раза
|
|
172
172
|
зелёный гейт был прочитан как «локально всё зелено».
|
|
173
|
+
- **Итоговый набор перед пушем читается разбором состояния, а не сборкой в уме.** Он собирается
|
|
174
|
+
из умолчания пакета и надстройки дерева, и прочитать сборку было нечем: раздел «набор перед
|
|
175
|
+
пушем» печатает его целиком, по команде на строку, а рядом называет то, что умолчание печатало,
|
|
176
|
+
а в набор не попало. Дерево, писавшее надстройку вслепую, дописывало в неё повтор.
|
|
173
177
|
- **Причина исключения, называющая задачу, судится на живость этой задачи.** Отсрочка со сроком
|
|
174
178
|
и отсрочка без срока выглядят одинаково, пока номер никто не спросил; мёртвый номер в причине
|
|
175
179
|
делает исключение бессрочным, не сказав об этом ни строкой. Спрашивается тем же ярусом, что
|
|
@@ -191,6 +195,10 @@ flowchart TD
|
|
|
191
195
|
сломана, она описывает вчерашний день. Сравнение веток пишется от `origin/main` целиком —
|
|
192
196
|
смешав в одной команде удалённую ссылку для одной стороны и локальную для другой, промах
|
|
193
197
|
изнутри выглядит правильным.
|
|
198
|
+
- **Удалённую ссылку берут не только слова, но и действия.** Основание новой ветки, счёт влитого
|
|
199
|
+
и подтягивание главной судятся по ней же: локальная — снимок последнего подтягивания, и работа,
|
|
200
|
+
начатая от неё, стартует от основания, которого в главной уже нет. Влитая ветка при ней числится
|
|
201
|
+
невлитой, и уборка кончается списком невлитого, которого нет.
|
|
194
202
|
- **Слияние по кнопке «Merge when pipeline succeeds» не заменяет проверок до пуша.** Конвейер
|
|
195
203
|
видит только то, что уже отправлено, а отправленная красная ветка занимает очередь работ и
|
|
196
204
|
выглядит готовой к разбору.
|
|
@@ -64,7 +64,16 @@ flowchart TD
|
|
|
64
64
|
- **Панель правки записи наследует общую основу, а не собирается своей разметкой.** Тогда она
|
|
65
65
|
открывается, закрывается и спрашивает про несохранённое одинаково во всех разделах.
|
|
66
66
|
- **Об удаче и об отказе сообщает общая шина, а не своя разметка на экране.** Своё сообщение
|
|
67
|
-
расходится с соседним видом, местом и временем показа.
|
|
67
|
+
расходится с соседним видом, местом и временем показа. Готовое сообщение набора, поставленное
|
|
68
|
+
на экран, — та же своя разметка: правило говорит про место показа, а не про тег, и замена
|
|
69
|
+
своего абзаца на готовый компонент нарушения не снимает — она снимает признак.
|
|
70
|
+
- **Инлайновое сообщение законно там, где панель правки записи остаётся открытой после отказа.**
|
|
71
|
+
Держит его основа панели; экран, список и публичная страница к этому месту не относятся.
|
|
72
|
+
- **Маркер отступления ставится после чтения инвентаря готового, и прочитанное называется рядом.**
|
|
73
|
+
Объяснение при маркере называет компонент кита и то, чего в нём не хватает. Маркер без этого —
|
|
74
|
+
не отступление, а глушитель: он снимает признак, ничего не доказав.
|
|
75
|
+
- **Проверка не снимается с гейта ради того, чтобы пуш прошёл.** Расхождение закрывается готовым
|
|
76
|
+
либо объявляется отступлением в самом коде; надстройка профиля для этого не средство.
|
|
68
77
|
- **Компонент объявляется тремя файлами: `.ts`, `.html`, `.scss`.** `template:` и `styles:` в
|
|
69
78
|
декораторе, атрибут `style=` и правка размеров через `[ngStyle]` — это стили, до которых не
|
|
70
79
|
дотянется ни кит, ни `stylelint`.
|
|
@@ -107,13 +116,18 @@ flowchart TD
|
|
|
107
116
|
Списком их здесь нет: признак — это данные, а не текст правила и не код проверки. Наборы лежат
|
|
108
117
|
при пакете, по файлу на пакет rt-tools, и в каждом только то, что везёт он сам. Дерево называет
|
|
109
118
|
нужные ему наборы ключом `reuse.bundles` в настройке проверок и дописывает свои признаки файлом,
|
|
110
|
-
названным ключом `reuse.signals`; совпавший ключ замещает пакетный, новый дописывается.
|
|
119
|
+
названным ключом `reuse.signals`; совпавший ключ замещает пакетный, новый дописывается. Там же
|
|
120
|
+
дерево называет директивы своей дизайн-системы — ключом `reuse.kitDirectives`: нативный тег,
|
|
121
|
+
несущий такую директиву, из признаков вырезается, потому что источник вида в дереве бывает не
|
|
122
|
+
один. Гард на
|
|
111
123
|
правке и сплошная проверка читают отсюда оба — разойтись им нечем.
|
|
112
124
|
|
|
113
125
|
Что бывает признаком:
|
|
114
126
|
|
|
115
127
|
- нативный контрол в шаблоне там, где кит везёт свой;
|
|
116
|
-
- отказ, предупреждение или ожидание, собранные руками вместо
|
|
128
|
+
- отказ, предупреждение или ожидание, собранные руками вместо готового, — признак называет тег,
|
|
129
|
+
а решение принимается по месту показа: готовое сообщение на экране закрывает признак, не
|
|
130
|
+
закрывая нарушения;
|
|
117
131
|
- наложение поверх страницы, объявленное своими стилями, — подложка, порядок слоёв, вращение;
|
|
118
132
|
- раскладка, объявленная в файле стилей экрана, а не применённая директивами из общего слоя;
|
|
119
133
|
- своя реализация того, что даёт основа кита, вместо наследования;
|