@rt-tools/agent-kit 0.21.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/claim-guard.sh +1 -0
- package/assets/hooks/conscience-guard.sh +1 -0
- 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 +64 -0
- package/assets/hooks/hook-input.sh +1 -0
- package/assets/hooks/postmortem-guard.sh +1 -0
- package/assets/hooks/proposal-guard.sh +8 -0
- package/assets/hooks/turn-exit-guard.sh +1 -0
- package/assets/hooks/waiting-turn-guard.sh +1 -0
- package/assets/hooks/work-start-guard.sh +2 -0
- package/assets/laws/autonomous-work.md +30 -0
- package/assets/laws/frontend-application.md +10 -0
- package/assets/laws/project-documentation.md +8 -0
- package/assets/laws/work-conduct.md +3 -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 +13 -0
- package/assets/rules/git-workflow.github.md +59 -57
- package/assets/rules/git-workflow.gitlab.md +13 -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.21.0.tgz +0 -0
|
@@ -34,16 +34,15 @@ Agent(subagent_type: "Explore", prompt: "<тема просьбы>: что по
|
|
|
34
34
|
|
|
35
35
|
Находки складываются в раздел «Что уже есть в дереве» разбора.
|
|
36
36
|
|
|
37
|
-
Дерево — не единственное место, где
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
ход работы, если касается одной.
|
|
37
|
+
Дерево — не единственное место, где лежит ответ. Решение прошлого захода, никуда не записанное,
|
|
38
|
+
живёт только в записи того захода: поиск по ним словом темы стоит одной команды. Найденное тем же
|
|
39
|
+
ходом переписывается в дерево — в замысел эпика, если связывает задачи, и в ход работы, если
|
|
40
|
+
касается одной.
|
|
42
41
|
|
|
43
|
-
Разведка, не нашедшая ничего, разрешением спрашивать не
|
|
44
|
-
искали, потом добираются места, которых в списке не
|
|
45
|
-
записи прошлых заходов.
|
|
46
|
-
|
|
42
|
+
Разведка, не нашедшая ничего, разрешением спрашивать не становится: сначала называется, где
|
|
43
|
+
искали, потом добираются места, которых в списке не было — замысел эпика, описание прошлого,
|
|
44
|
+
записи прошлых заходов. «В таком-то месте не нашёл» говорит о месте, а не о дереве, и вопрос
|
|
45
|
+
называет оба способа, которыми искали.
|
|
47
46
|
|
|
48
47
|
Разведка кончается не ощущением, а выводом команд. До первого вопроса владельцу исполнитель знает:
|
|
49
48
|
как устроен репозиторий (корневая памятка), что лежит в каталоге, о котором пойдёт речь (`ls`), и
|
|
@@ -52,11 +51,22 @@ Agent(subagent_type: "Explore", prompt: "<тема просьбы>: что по
|
|
|
52
51
|
дереву не запускается ни одной команды.
|
|
53
52
|
|
|
54
53
|
Разведка по заведённой задаче кончается воспроизведённым симптомом, а не найденным файлом. Тело
|
|
55
|
-
задачи описывает дерево на день заведения, и
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
задачи описывает дерево на день заведения, и разведка по именам из тела подтверждает лишь то, что
|
|
55
|
+
файлы на месте: отпавшая задача от живой этим не отличается. Прежде первой правки разведка
|
|
56
|
+
повторяет то, на что задача жалуется, — зовёт процедуру, читает ответ, гоняет молчавшую
|
|
57
|
+
проверку; симптом не воспроизвёлся — задача закрывается отпавшей, и это законный исход.
|
|
58
|
+
|
|
59
|
+
Дерево, названное образцом, читается раскладкой целиком — обходом каталогов на два уровня, — и
|
|
60
|
+
только потом идут вопросы о приёмах. Ответ на «как здесь делают вот это» даёт одну папку, а
|
|
61
|
+
обобщённая до карты дерева она врёт: соседняя семья каталогов в неё не попадает, и пропажу
|
|
62
|
+
находит владелец.
|
|
63
|
+
|
|
64
|
+
Выведенное помечается прямо в списке, вместе с тем, чем его подтвердить. Догадка по соседнему
|
|
65
|
+
случаю стоит в одном списке с проверенным, и владелец читает список целиком как проверенный.
|
|
66
|
+
|
|
67
|
+
Шесть вопросов задаются за вычетом тех, на которые ответила разведка: вместо вопроса с готовым
|
|
68
|
+
ответом в разбор идёт строка «беру такой-то ответ, вот откуда». Признак один — есть ли ответ в
|
|
69
|
+
дереве; «задача кажется понятной» им не является ни в ту, ни в другую сторону.
|
|
60
70
|
|
|
61
71
|
**Следующее движение:** находки ложатся в разбор, и тем же ходом владельцу уходит первый из
|
|
62
72
|
шести вопросов. Разведка кончилась — состояние осталось прежним, ход тоже.
|
|
@@ -77,18 +87,14 @@ Agent(subagent_type: "Explore", prompt: "<тема просьбы>: что по
|
|
|
77
87
|
| Чем будет видно, что задача закрыта | «работает» признаком не является |
|
|
78
88
|
| Есть ли образец, с которого снимается подход | разведка найдёт похожее, а не то |
|
|
79
89
|
|
|
80
|
-
Список шести — набор того, что
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
Закрыть его можно и допущением, когда ответ очевиден: в разборе стоит строка «вопрос закрыт
|
|
87
|
-
допущением: <что принято>». Неверное допущение стоит правки, вопрос ради очевидного — захода.
|
|
90
|
+
Список шести — набор того, что закрыто к началу работы, а не набор реплик, которые надо
|
|
91
|
+
произнести. Вопрос, ответ на который владелец уже дал, отмечается закрытым вместе с тем, чем он
|
|
92
|
+
закрыт: ответ ищется в документации и в сказанном этим же заходом, включая исходную просьбу.
|
|
93
|
+
Закрыть его можно и допущением, когда ответ очевиден, — строкой «вопрос закрыт допущением:
|
|
94
|
+
<что принято>»: неверное допущение стоит правки, вопрос ради очевидного — захода.
|
|
88
95
|
|
|
89
96
|
Объём работы основанием для вопроса о границах не бывает: «это большая работа» решает
|
|
90
|
-
исполнитель, «делать ли её целиком» — владелец, и решает раньше, чем работа началась.
|
|
91
|
-
границах задаётся, когда владелец их не назвал, а не когда названные оказались широкими.
|
|
97
|
+
исполнитель, «делать ли её целиком» — владелец, и решает раньше, чем работа началась.
|
|
92
98
|
|
|
93
99
|
Форму вопроса задают настройки владельца: где требуют меню, спрашивается меню, и к каждому
|
|
94
100
|
вопросу добавляется свободный вариант — у закрытого набора нет строки «вопрос не тот».
|
|
@@ -135,16 +141,14 @@ Workflow(name: "plan", args: "docs/tasks/_draft-<slug>")
|
|
|
135
141
|
(`spec-critic`) → замысел и разбивка (`project-manager`). Пробелы, которые роли не смогли
|
|
136
142
|
закрыть, возвращаются владельцу — их относит главный агент.
|
|
137
143
|
|
|
138
|
-
Договорённость, вышедшая из конвейера, сверяется с `grill.md` построчно до
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
исполняется молча и не считается закрытой правкой текста.
|
|
144
|
+
Договорённость, вышедшая из конвейера, сверяется с `grill.md` построчно до работы по ней: роль
|
|
145
|
+
пишет текст, не видя владельца, и способна развернуть его ответ в противоположный — очередь
|
|
146
|
+
этапов оказывалась перевёрнутой, а входящие пункты переезжали в «не входит». Находка критика,
|
|
147
|
+
расходящаяся с ответом владельца, относится владельцу, а не исполняется молча.
|
|
143
148
|
|
|
144
|
-
Ход на этой границе не
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
исполнителя, и разницы между этими двумя случаями для конца хода нет.
|
|
149
|
+
Ход на этой границе не кончается: закрытый разбор выглядит законченным куском — ответы на диске,
|
|
150
|
+
файл закоммичен, отчитаться есть чем, — и отчёт встаёт на место договорённости. Пишется она тем
|
|
151
|
+
же ходом, конвейером ролей или рукой исполнителя.
|
|
148
152
|
|
|
149
153
|
**Следующее движение:** сверенная с разбором договорённость коммитится, и тем же ходом
|
|
150
154
|
заводятся задача, ветка и папка — а вышла из разбора серия, сперва объявляется эпик.
|
|
@@ -179,12 +183,10 @@ Workflow(name: "plan", args: "docs/tasks/_draft-<slug>")
|
|
|
179
183
|
таблицы, с меткой эпика. Выданные номера возвращаются в ту же таблицу — колонкой или приставкой
|
|
180
184
|
к названию, — и с этой минуты «взять следующую» отвечает номером, а не названием.
|
|
181
185
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
образца соседней задачи того же эпика, строка копировалась вместе с формой, а задача, заведённая
|
|
187
|
-
посреди работы находкой сверки, писалась не с образца.
|
|
186
|
+
Задача под эпиком называет его в своём теле — номер карточки и путь к замыслу одной строкой, — а
|
|
187
|
+
замысел называет задачу со своей стороны. Односторонняя привязка выглядит целой так же, как
|
|
188
|
+
двусторонняя: читатель приходит то от линии работ, то от карточки, и вторая сторона есть только
|
|
189
|
+
для одного из них.
|
|
188
190
|
|
|
189
191
|
**Следующее движение:** объявленный эпик коммитится вместе с номерами задач, и тем же ходом
|
|
190
192
|
берётся первая его задача — заведением ветки и папки.
|
|
@@ -197,19 +199,17 @@ git checkout -b <КЛЮЧ>-<номер>-<slug>
|
|
|
197
199
|
npm run task:move -- <номер> in-progress
|
|
198
200
|
```
|
|
199
201
|
|
|
200
|
-
Тело приходит файлом и пустым не бывает:
|
|
201
|
-
|
|
202
|
-
пустое молча, номером наравне с полным.
|
|
202
|
+
Тело приходит файлом и пустым не бывает: пустая задача не говорит ничего ни исполнителю, ни
|
|
203
|
+
владельцу, а дописать её потом можно только со слова владельца.
|
|
203
204
|
|
|
204
205
|
`task:new` переименовывает `_draft-<slug>` в `<КЛЮЧ>-<номер>-<slug>` и проставляет шапку замысла.
|
|
205
206
|
Ветка заводится вторым вызовом: составную «завести и сразу коммитить» гард главной ветки
|
|
206
207
|
отклоняет целиком.
|
|
207
208
|
|
|
208
|
-
Номер уже выдан — черновика нет и не заводится: папка открывается сразу под именем
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
разбора, а не про то, что с уже заведённой нельзя работать.
|
|
209
|
+
Номер уже выдан — черновика нет и не заводится: папка открывается сразу под именем ветки. Так
|
|
210
|
+
начинается половина работ: номер приходит прошлым заходом, замеченным дефектом или соседней
|
|
211
|
+
задачей, и переименовывать нечего. Ловушка «номер не бывает первым» сюда не относится — она про
|
|
212
|
+
то, что задачу не заводят до разбора.
|
|
213
213
|
|
|
214
214
|
Остальные два файла пишутся, а не кладутся образцом впрок: пустой `plan.md` неотличим от
|
|
215
215
|
замысла без этапов, а следующий заход доверяет папке задачи. Образец открывается тем же
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: ts-procedure
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: typescript-conventions
|
|
5
|
-
description: Паттерн правила typescript-conventions. Брать при заведении или правке процедуры Connect на бэкенде: готовый класс с полем метода и обработчиком, зависимости конструктором, имена файла и класса. Доступ к процедуре
|
|
5
|
+
description: Паттерн правила typescript-conventions. Брать при заведении или правке процедуры Connect на бэкенде: готовый класс с полем метода и обработчиком, зависимости конструктором, имена файла и класса. Доступ к процедуре описывает правило доступа того дерева, где оно есть.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Процедура Connect
|
|
@@ -41,7 +41,8 @@ export class PingProcedure implements IConnectProcedure<typeof HealthService.met
|
|
|
41
41
|
}
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
Объявление доступа обязательно, и оно ровно
|
|
44
|
+
Объявление доступа обязательно, и оно ровно одно; чем оно объявляется, говорит правило
|
|
45
|
+
доступа того дерева, где такое правило есть.
|
|
45
46
|
|
|
46
47
|
## Почему форма такая
|
|
47
48
|
|
|
@@ -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
|
здесь оно держится памятью автора — и цена этого видна: слова из левой колонки словаря живут
|
|
@@ -157,12 +157,21 @@ flowchart TD
|
|
|
157
157
|
только то, что импортировано тестом: ошибка типов в непокрытом коде доживает до сборки
|
|
158
158
|
образа, то есть до слияния. Четыре слияния подряд так и уехали в главную ветку, ломая
|
|
159
159
|
выкатку.
|
|
160
|
+
- **На машине, где раннеров несколько, любой путь от домашнего каталога общий.** Умолчание
|
|
161
|
+
готового шага опасно именно тем, что оно общее: соседнее задание переписывает его под свою
|
|
162
|
+
версию, пока наше стоит между шагами. Каталог установки, имя контейнера и имя сборщика
|
|
163
|
+
называются поэтому по проекту и постоянно, а временный каталог решением не бывает — в нём
|
|
164
|
+
живёт хранилище пакетов.
|
|
160
165
|
- **Набор гейта пуша не бывает уже набора конвейера.** Гейт — обещание, что пуш не приедет
|
|
161
166
|
красным; набор, из которого выкинуты сборка и снимки, обещает то, чего не проверяет. Шаг
|
|
162
167
|
конвейера, которому в наборе гейта нет ни строки, ни объявленного исключения с причиной,
|
|
163
168
|
отбивает пуш, а не печатается рядом с ним: напечатанное предупреждение исполнитель читает как
|
|
164
169
|
разрешение. Дважды подряд правка, прошедшая гейт целиком, была отбита конвейером — и оба раза
|
|
165
170
|
зелёный гейт был прочитан как «локально всё зелено».
|
|
171
|
+
- **Итоговый набор перед пушем читается разбором состояния, а не сборкой в уме.** Он собирается
|
|
172
|
+
из умолчания пакета и надстройки дерева, и прочитать сборку было нечем: раздел «набор перед
|
|
173
|
+
пушем» печатает его целиком, по команде на строку, а рядом называет то, что умолчание печатало,
|
|
174
|
+
а в набор не попало. Дерево, писавшее надстройку вслепую, дописывало в неё повтор.
|
|
166
175
|
- **Причина исключения, называющая задачу, судится на живость этой задачи.** Отсрочка со сроком
|
|
167
176
|
и отсрочка без срока выглядят одинаково, пока номер никто не спросил; мёртвый номер в причине
|
|
168
177
|
делает исключение бессрочным, не сказав об этом ни строкой. Спрашивается тем же ярусом, что
|
|
@@ -184,6 +193,10 @@ flowchart TD
|
|
|
184
193
|
сломана, она описывает вчерашний день. Сравнение веток пишется от `origin/main` целиком —
|
|
185
194
|
смешав в одной команде удалённую ссылку для одной стороны и локальную для другой, промах
|
|
186
195
|
изнутри выглядит правильным.
|
|
196
|
+
- **Удалённую ссылку берут не только слова, но и действия.** Основание новой ветки, счёт влитого
|
|
197
|
+
и подтягивание главной судятся по ней же: локальная — снимок последнего подтягивания, и работа,
|
|
198
|
+
начатая от неё, стартует от основания, которого в главной уже нет. Влитая ветка при ней числится
|
|
199
|
+
невлитой, и уборка кончается списком невлитого, которого нет.
|
|
187
200
|
- **Рабочий элемент привязывается к PR при создании, а не после.** `az repos pr create`
|
|
188
201
|
принимает `--work-items`; привязка второй командой обходится молча, когда у токена нет права
|
|
189
202
|
править чужой элемент, и PR остаётся ни с чем не связанным.
|