@rt-tools/agent-kit 0.17.0 → 0.18.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-epics.github.mjs +123 -0
- package/assets/checks/board-gh.github.mjs +121 -0
- package/assets/checks/board.github.mjs +77 -73
- package/assets/checks/check-board.github.mjs +39 -3
- package/assets/checks/check-hook-scope.mjs +126 -0
- package/assets/checks/check-profile-drift.mjs +195 -0
- package/assets/checks/check-specs.mjs +1 -1
- package/assets/checks/rt-kit-checks.config.mjs +13 -0
- package/assets/checks/spec-anchors.mjs +2 -2
- package/assets/defaults/project.sh +21 -117
- package/assets/defaults/shell.sh +139 -0
- package/assets/hooks/browser-guard-no-other-drivers.sh +41 -2
- package/assets/hooks/claim-guard.sh +22 -1
- package/assets/hooks/docs-guard.sh +1 -1
- package/assets/hooks/exam-guard.sh +85 -12
- package/assets/hooks/git-guard-delivery-conflict.sh +85 -0
- package/assets/hooks/git-guard-delivery-signature.sh +14 -5
- package/assets/hooks/git-guard-delivery.sh +15 -2
- package/assets/hooks/grill-gate.sh +63 -6
- package/assets/hooks/proposal-guard.sh +11 -4
- package/assets/hooks/rule-source-guard.sh +8 -13
- package/assets/hooks/task-context-load.sh +22 -0
- package/assets/hooks/task-flow-context.sh +9 -0
- package/assets/hooks/task-flow-draft-guard.sh +17 -0
- package/assets/hooks/turn-exit-guard.sh +45 -87
- package/assets/hooks/waiting-turn-guard.sh +65 -2
- package/assets/hooks/work-start-guard.sh +166 -0
- package/assets/hooks/write-targets.sh +24 -0
- package/assets/laws/verifiability.md +23 -0
- package/assets/patterns/browser-verification-measure.md +3 -1
- package/assets/patterns/browser-verification-stand.md +10 -2
- package/assets/patterns/doc-style-write.md +21 -1
- package/assets/patterns/git-workflow-commit.github.md +18 -3
- package/assets/patterns/git-workflow-docker.md +8 -0
- package/assets/patterns/git-workflow-freshness.md +87 -0
- package/assets/patterns/git-workflow-merge.md +23 -0
- package/assets/patterns/git-workflow-pr.github.md +6 -0
- package/assets/patterns/git-workflow-restart.md +18 -0
- package/assets/patterns/git-workflow-stack.md +30 -0
- package/assets/patterns/lib-layers-move.md +4 -0
- package/assets/patterns/spec-driven-domain.md +13 -1
- package/assets/patterns/spec-driven-rule.md +5 -4
- package/assets/patterns/spec-driven-sweep.md +1 -1
- package/assets/patterns/status-report-table.github.md +1 -1
- package/assets/patterns/task-flow-archive.md +12 -2
- package/assets/patterns/task-flow-close.md +31 -24
- package/assets/patterns/task-flow-handoff.md +14 -2
- package/assets/patterns/task-flow-resume.md +18 -3
- package/assets/patterns/task-flow-start.md +23 -23
- package/assets/patterns/testing-e2e.md +23 -0
- package/assets/patterns/turn-entry-map.md +1 -1
- package/assets/pitfalls/agent-kit.md +4 -6
- package/assets/pitfalls/doc-style.md +10 -0
- package/assets/pitfalls/git-workflow.github.md +20 -0
- package/assets/pitfalls/spec-driven.md +6 -0
- package/assets/pitfalls/task-flow.md +20 -0
- package/assets/pitfalls/testing.md +6 -0
- package/assets/pitfalls/turn-conduct.md +35 -0
- package/assets/rules/browser-verification.md +19 -0
- package/assets/rules/deploy-flow.github.md +9 -0
- package/assets/rules/doc-style.md +6 -0
- package/assets/rules/git-workflow.azure.md +17 -2
- package/assets/rules/git-workflow.github.md +89 -90
- package/assets/rules/git-workflow.gitlab.md +12 -4
- package/assets/rules/lists.md +5 -0
- package/assets/rules/observability.needs-app.md +4 -0
- package/assets/rules/reuse-first.md +6 -0
- package/assets/rules/spec-driven.md +29 -25
- package/assets/rules/task-flow.md +52 -46
- package/assets/rules/testing.md +27 -1
- package/assets/rules/turn-conduct.md +46 -43
- package/assets/skills/agent-kit.md +9 -0
- package/package.json +1 -1
- package/rt-tools-agent-kit-0.18.0.tgz +0 -0
- package/rt-tools-agent-kit-0.17.0.tgz +0 -0
|
@@ -51,7 +51,7 @@ description: Правило под «Закон о документации пр
|
|
|
51
51
|
| утверждение документа | пункт `## Правила` в спеке, `## Статьи` в законе, `## Как закон применяется здесь` в правиле |
|
|
52
52
|
| место, где оно исполняется | строка в `implementation.md` рядом: `` `файл:символ` `` |
|
|
53
53
|
| обещанное поведение | сценарий `SC-<ПРЕФИКС>-<НОМЕР>` в `docs/specs/<домен>/scenarios.md` |
|
|
54
|
-
| открытый вопрос | `Q
|
|
54
|
+
| открытый вопрос | `Q-<буква закона>-<номер>` в разделе «Открытые вопросы» закона; на него ссылаются из задачи и коммитов, номер после закрытия не переиспользуется |
|
|
55
55
|
| законы, которые применяет домен | строка `**Законы:**` в шапке спека, именами в кавычках |
|
|
56
56
|
|
|
57
57
|
## Где это лежит
|
|
@@ -94,14 +94,12 @@ flowchart TD
|
|
|
94
94
|
связи — сам текст утверждения, поэтому переформулировать его, забыв про привязку, нельзя.
|
|
95
95
|
- **Первая колонка компаньона — текст статьи, скопированный, а не пересказанный.** Ключ связи —
|
|
96
96
|
сам текст, поэтому строка, написанная по смыслу статьи, разрывает связь, оставаясь на вид
|
|
97
|
-
заполненной. Проверка
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
- **Таблица процедур сверяется с декораторами в обе стороны.** Иначе процедура, которую домен
|
|
104
|
-
обслуживает, но забыл описать, видна только в декораторе.
|
|
97
|
+
заполненной. Проверка считает статьи без адреса и о статье, адрес которой описывает не её, не
|
|
98
|
+
знает ничего: совпадает род, а не перечень, и строка стоит до перечитывания диффа.
|
|
99
|
+
- **Привязка не ведёт в код, который никто не зовёт:** нигде не зовущийся символ — не место.
|
|
100
|
+
- **Таблица процедур сверяется с декораторами в обе стороны, право — вместе с именем.** Иначе
|
|
101
|
+
процедура, которую домен обслуживает, но забыл описать, видна только в
|
|
102
|
+
декораторе, а право, разошедшееся со спеком, — нигде.
|
|
105
103
|
- **Код отказа принимается, только если он в домене бросается.** Коды выписывались по
|
|
106
104
|
замыслу, и на одном пути обещанный отказ не бросал никто.
|
|
107
105
|
- **Префикс сценариев в спеке один, и по всему дереву он занят им одним.** Второй префикс
|
|
@@ -181,14 +179,12 @@ flowchart TD
|
|
|
181
179
|
|
|
182
180
|
Образцы разделены пробелом и сверяются с путём правки как образцы оболочки, а не поиском по
|
|
183
181
|
словам: поиск называет не ту статью и молчит об этом. Образец без каталога сверяется и с
|
|
184
|
-
именем
|
|
185
|
-
как прежде.
|
|
182
|
+
именем файла, а комментарий в собранной разметке не виден.
|
|
186
183
|
|
|
187
184
|
- **Статья без признака законна, и правило без единого признака — тоже.** Признак ставится тем
|
|
188
185
|
статьям, чьё правило отбивает на правке файла; остальные размечаются по мере того, как их
|
|
189
186
|
отбития попадут в сводку. Отсутствие признака означает «эту статью по пути правки не
|
|
190
|
-
выбирают», а не промах: требовать его у всех значило бы размечать
|
|
191
|
-
ни разу никого не отбили.
|
|
187
|
+
выбирают», а не промах: требовать его у всех значило бы размечать наугад.
|
|
192
188
|
|
|
193
189
|
- **Паттерн находится по полю `rule:`, а не по приставке имени.** Приставку имени несут не все
|
|
194
190
|
паттерны, и поиск по имени правила таких не видит: сверка ищет их полем, человек — разделом
|
|
@@ -208,12 +204,10 @@ flowchart TD
|
|
|
208
204
|
сторон: якорем утверждения оказывается слово из комментария, тогда как объявление рядом
|
|
209
205
|
называется иначе.
|
|
210
206
|
|
|
211
|
-
- **Проверка, прибитая к имени ресурса, ломается на его делении, и знать об этом надо до
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
правится тем же изменением. Иначе красное приходит по одной проверке за прогон, и каждая
|
|
216
|
-
выглядит отдельной поломкой — так деление одного правила уронило три подряд.
|
|
207
|
+
- **Проверка, прибитая к имени ресурса, ломается на его делении, и знать об этом надо до правки.**
|
|
208
|
+
Имя правила и имя паттерна стоят не только в текстах, но и в проверках дерева, в пробах их наборов
|
|
209
|
+
и в таблицах состояний. Деление поэтому начинается с поиска имени по всему дереву: иначе красное
|
|
210
|
+
приходит по одной проверке за прогон — так деление одного правила уронило три.
|
|
217
211
|
|
|
218
212
|
## Форма сжатой статьи
|
|
219
213
|
|
|
@@ -255,14 +249,17 @@ flowchart TD
|
|
|
255
249
|
|
|
256
250
|
Закон, которого не применяет ни один спек, отказом не считается: законы про устройство кода,
|
|
257
251
|
поставку и проверяемость доменов не касаются вовсе. Порядок «сначала описание, потом код»
|
|
258
|
-
держится
|
|
252
|
+
держится договорённостью: закон о документации проекта такого требования не несёт, и открытого
|
|
253
|
+
вопроса под него в нём не заведено.
|
|
259
254
|
|
|
260
255
|
Таблицы состояний экрана не сверяются ничем. `check:specs` знает сценарии против заголовков
|
|
261
|
-
тестов, правила против якорей, процедуры против декораторов и коды отказа против бросков —
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
256
|
+
тестов, правила против якорей, процедуры против декораторов и коды отказа против бросков — строка
|
|
257
|
+
таблицы состояний не привязана ни к чему и проходит зелёной, даже когда код в названное состояние
|
|
258
|
+
не попадает. Состояние «проверка не загрузилась» стояло в таблицах двух доменов раньше, чем код
|
|
259
|
+
научился в него приходить, и всё это время читалось описанием работающего.
|
|
260
|
+
|
|
261
|
+
Смысл сценария с соседним не сверяется ничем: проверка судит номер. Два сценария, обещающих одно
|
|
262
|
+
и то же разными словами, для неё разные, и второй числится непроверяемым, сколько проживёт.
|
|
266
263
|
|
|
267
264
|
Полноту разметки статей признаком применимости не считает ничто. Правило, у которого признака
|
|
268
265
|
нет ни у одной статьи, отбивает прежним текстом — и от размеченного отличается только тем, что
|
|
@@ -292,3 +289,10 @@ flowchart TD
|
|
|
292
289
|
- `spec-driven-domain` — заведение и правка спека домена, сценарии, привязка.
|
|
293
290
|
- `spec-driven-rule` — заведение закона, правила и паттерна.
|
|
294
291
|
- `spec-driven-sweep` — сплошной разбор привязки домена, проходы и их разбор.
|
|
292
|
+
|
|
293
|
+
## Ловушки
|
|
294
|
+
|
|
295
|
+
- **Строка требования к соседнему ресурсу не проверяется ничем, и промах в ней виден только
|
|
296
|
+
счётом.** Правило без неё выглядит целым: разделы на месте, привязки сходятся, набор полноты
|
|
297
|
+
зелёный. Считается она одной командой по каталогу правил, и расхождение читается сразу — сколько
|
|
298
|
+
правил объявило требования и сколько ссылается на соседний ресурс прозой.
|
|
@@ -15,7 +15,7 @@ description: Правило под «Закон о ведении работы»
|
|
|
15
15
|
Грузится по требованию, а не вместе с правилом: при обычном решении она не нужна — она нужна
|
|
16
16
|
тому, кто разбирает промах или спорит с гардом.
|
|
17
17
|
|
|
18
|
-
**Требует:** `hooks/task-flow-guard.sh`, `hooks/task-flow-draft-guard.sh`, `hooks/task-context-load.sh`, `hooks/grill-gate.sh`, `hooks/window-fill-guard.sh`, `hooks/turn-exit-guard.sh`
|
|
18
|
+
**Требует:** `hooks/task-flow-guard.sh`, `hooks/task-flow-draft-guard.sh`, `hooks/task-context-load.sh`, `hooks/grill-gate.sh`, `hooks/window-fill-guard.sh`, `hooks/turn-exit-guard.sh`, `hooks/work-start-guard.sh`
|
|
19
19
|
|
|
20
20
|
## Как это называется здесь
|
|
21
21
|
|
|
@@ -120,11 +120,10 @@ flowchart TD
|
|
|
120
120
|
`этап-идёт`, `этапы-кончились`, `разбор-кончился`. Четвёртый путь не состояние, а история
|
|
121
121
|
ветки: папка, разобранная её коммитом, означает отданную работу, и правка по замечаниям идёт
|
|
122
122
|
без замысла на диске.
|
|
123
|
-
- **Строка состояния, переведённая вперёд, — то же объявление намерения, только
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
- **Отказ по состоянию называет обязательное действие того состояния, которое объявлено.**
|
|
123
|
+
- **Строка состояния, переведённая вперёд, — то же объявление намерения, только машиночитаемое.**
|
|
124
|
+
Пустоты за ней не видно никому: состояние объявляется тем ходом, в котором его обязательное
|
|
125
|
+
действие начато делом, а не тем, в котором о нём отчитались.
|
|
126
|
+
- **Отказ по состоянию называет обязательное действие объявленного состояния.**
|
|
128
127
|
Исполнитель, которому сказано только «не в том состоянии», перепишет строку состояния вместо
|
|
129
128
|
того, чтобы сделать шаг.
|
|
130
129
|
- **Именем состояния считается только слово из перечня.** Своё слово не говорит ни о входе, ни о
|
|
@@ -139,25 +138,33 @@ flowchart TD
|
|
|
139
138
|
- **Договорённость требуется по путям правки, а не по оценке задачи.** `apps/**` и `libs/**` —
|
|
140
139
|
признак; правила, тексты, обвязка и зависимости под него не подпадают. Обход — строка
|
|
141
140
|
`**Поведение:** не меняется — <причина владельца>` в замысле; пустая причина не принимается.
|
|
142
|
-
- **Что требует слова владельца, берётся списком, а не оценкой на месте.** Оценку «это
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
141
|
+
- **Что требует слова владельца, берётся списком, а не оценкой на месте.** Оценку «это безопасно»
|
|
142
|
+
назначает тот, кому она удобна, и меняется она с настроением разговора, а не со свойствами
|
|
143
|
+
команды. Недовольство владельца простоем разрешением не бывает.
|
|
144
|
+
- **Заход работу не начинает сам.** Начало требует слова владельца в этом же заходе: передача,
|
|
145
|
+
состояние из хука запуска и назначенный эпик говорят, что делать, если работать, и молчат о
|
|
146
|
+
том, работать ли. Судится это формой реплики, а не смыслом: правка кода после пустой реплики,
|
|
147
|
+
одного слова или одного пути ход не заканчивает.
|
|
148
|
+
- **Указание работать по ходу работы покрывает все его шаги, включая меняющие историю.** Отметка
|
|
149
|
+
этапа, пуш и заявка предписаны им самим: спрашивают о том, чего в нём нет.
|
|
150
|
+
- **Вопрос, записанный прошлым заходом, вопросом владельца не становится.** Он адресован автору
|
|
151
|
+
передачи, и часть таких вопросов закрыта шагом работы.
|
|
152
|
+
- **Слово владельца об устройстве — постановка, а не решение.** Названное им обычно уже живёт в
|
|
153
|
+
дереве под этим самым словом: у него есть имя на экране, раздел в спеке и поле в модели. Прежде
|
|
154
|
+
чем строить, слово сверяется с ними, а разошлось прочтение с деревом — спрашивается владелец, до
|
|
155
|
+
правки: истолкованное по ближайшему коду, оно выглядит исполненной просьбой ровно до приёмки.
|
|
148
156
|
- **Папка задачи заводится под любую работу, без исключений.** Исключение, у которого есть хоть
|
|
149
157
|
одна законная форма, исполняется как разрешение. Заводится она до первой правки: сколько
|
|
150
158
|
заходов уйдёт на работу, заранее не знает никто.
|
|
151
159
|
- **Папка задачи едет в ветку коммитом, а не живёт в одном рабочем дереве.** Незакоммиченная,
|
|
152
160
|
она проходит все правки без отказа, а признак отданной работы берётся из истории: отказ придёт
|
|
153
|
-
в последней точке, когда замысел уже
|
|
154
|
-
номера.
|
|
161
|
+
в последней точке, когда замысел уже снят. Вне истории законен один черновик без номера.
|
|
155
162
|
- **Папка задачи разбирается последним коммитом до открытия PR, а не после одобрения.** Человек
|
|
156
163
|
вливает, как только видит зелёное, и закрывающему коммиту места не остаётся вовсе. Цена:
|
|
157
164
|
замысла с этой минуты на диске нет, и признак отданной работы гард берёт из истории ветки.
|
|
158
165
|
- **Открыв PR, исполнитель называет владельцу три вещи: номер, чего ждёт и что сделает следом.**
|
|
159
|
-
Ждёт он прогона, следом идёт снятие черновика. Зелёный прогон
|
|
160
|
-
|
|
166
|
+
Ждёт он прогона, следом идёт снятие черновика. Зелёный прогон говорит, что не сломано, и молчит
|
|
167
|
+
о заблокированной у черновика кнопке слияния.
|
|
161
168
|
- **Просьба о слиянии — отдельный ход, и раньше зелёного прогона её не бывает.** Порядок один:
|
|
162
169
|
папка разобрана и запушена → PR открыт черновиком → прогон зелёный → черновик снят →
|
|
163
170
|
исполнитель просит влить, называя номер.
|
|
@@ -165,14 +172,18 @@ flowchart TD
|
|
|
165
172
|
вовсе, а открытый PR читается как приглашение влить — поэтому незаконченная работа идёт
|
|
166
173
|
черновиком. Черновик снимается тем ходом, которым исполнитель говорит, что решение готово.
|
|
167
174
|
- **Гард замысла — нижняя граница требования, а не его предел.** Он требует папку только под
|
|
168
|
-
правку кода приложения, а статья выше — под любую работу. Прочитанный как признак,
|
|
169
|
-
становится разрешением работать без замысла везде, куда
|
|
175
|
+
правку кода приложения, а статья выше — под любую работу. Прочитанный как признак, он
|
|
176
|
+
становится разрешением работать без замысла везде, куда не смотрит.
|
|
177
|
+
- **Указание работать по правилу — это указание делать его шаги, включая те, что меняют
|
|
178
|
+
историю.** Отметка сделанного этапа, коммит, пуш и открытие заявки правилом предписаны, и
|
|
179
|
+
отдельного слова владельца на каждый из них не требуется: спросить надо о том, чего в правиле
|
|
180
|
+
нет. Ход, который довёл работу до готовности и встал перед коммитом, работу не отдал, а спрятал.
|
|
170
181
|
- **Взятая задача ходом не кончается.** Заведение задачи, ветки, колонки и папки — подготовка, а
|
|
171
182
|
не работа: они переводят её в состояние записанного замысла, где обязательное действие уже
|
|
172
183
|
другое. Держит это страж выхода хода, называя в отказе первый этап замысла.
|
|
173
184
|
- **Ожидание одной части этапа остановкой этапа не бывает.** Части, которые от ожидаемого не
|
|
174
|
-
зависят, делаются тем же
|
|
175
|
-
|
|
185
|
+
зависят, делаются тем же ходом, а владельцу называется, что сделано и что осталось на его шаг.
|
|
186
|
+
Отбитая гардом команда и отклонённый вызов читаются так же: сперва делается всё, что мимо них.
|
|
176
187
|
- **Сделанное отмечается только в ходе работы.** «Где стоим» перезаписывается каждым заходом, а
|
|
177
188
|
не дописывается: это первое, что читает следующий заход.
|
|
178
189
|
- **Слово для нового понятия ищется в словаре дерева.** Общую часть везёт пакет, предметную
|
|
@@ -182,16 +193,15 @@ flowchart TD
|
|
|
182
193
|
сколько задач из него выйдет, поэтому номер не может быть первым. Команда заведения
|
|
183
194
|
переименовывает черновик, проставляет шапку замысла и собирает папку с образца, снимая с копий
|
|
184
195
|
шапку раскладки.
|
|
185
|
-
- **Брошенный разбор виден.** Черновик старше недели перечисляет сверка
|
|
186
|
-
- **Следующая задача берётся из замысла эпика, а список очереди работ спрашивается только там,
|
|
187
|
-
|
|
188
|
-
|
|
196
|
+
- **Брошенный разбор виден.** Черновик старше недели перечисляет сверка очереди.
|
|
197
|
+
- **Следующая задача берётся из замысла эпика, а список очереди работ спрашивается только там, где
|
|
198
|
+
эпика нет.** По списку номеров первая задача чужого эпика неотличима от своей. Кончившийся эпик
|
|
199
|
+
называется владельцу тем же ходом, которым берётся работа вне его.
|
|
189
200
|
- **Эпик не закрывается по признаку, подтверждённому только чтением.** Признак, проверяемый
|
|
190
|
-
глазами, называется проверенным лишь вместе с командой или замером и их выводом.
|
|
191
|
-
«подтверждается живым замером» — обещание проверки, а не проверка.
|
|
201
|
+
глазами, называется проверенным лишь вместе с командой или замером и их выводом.
|
|
192
202
|
- **Задачи эпика заводятся все разом, тем же ходом, что и сам эпик.** Заведение по одной прячет
|
|
193
|
-
объём. Номера возвращаются в раздел порядка той же
|
|
194
|
-
|
|
203
|
+
объём. Номера возвращаются в раздел порядка той же правкой: без них «взять следующую» отвечает
|
|
204
|
+
названием, а не карточкой.
|
|
195
205
|
|
|
196
206
|
- **Замысел эпика лежит там, где его найдут без сети и после мержа.** Карточка порядка задач не
|
|
197
207
|
держит, а папка задачи держала бы его до слияния первой из них; каталог называет компаньон
|
|
@@ -200,9 +210,9 @@ flowchart TD
|
|
|
200
210
|
- **Сборка по образцу начинается с чтения самого образца, а не пересказа о нём.** Пересказ лежит
|
|
201
211
|
в разборе просьбы и в замысле эпика; образцом они не считаются. Повторяемая часть открывается
|
|
202
212
|
целиком — обходом каталогов, а не одним файлом, за которым пришли.
|
|
203
|
-
-
|
|
204
|
-
|
|
205
|
-
|
|
213
|
+
- **Что действует на дерево, а не на правку, лежит вне индекса.** Путь к образцу и разрешение
|
|
214
|
+
работать вне эпика ветке не принадлежат: записанные файлом репозитория, они в ней и остаются,
|
|
215
|
+
а следующая, отведённая от главной, их не несёт. Место записи — рядом с передачей захода.
|
|
206
216
|
- **Закрытая работа разбирается правилами, и это шаг закрытия, а не отдельная просьба.** Что
|
|
207
217
|
грузилось, что помогло и чего не хватило, видно только тому заходу, который работу вёл. Разбор
|
|
208
218
|
кончается правкой слоя правил или предложением наружу; ведёт его роль разбора закрытой задачи,
|
|
@@ -213,25 +223,21 @@ flowchart TD
|
|
|
213
223
|
- **Находки разбора ждут владельца, а в пакет уезжает только сводка наблюдений.** Предложение —
|
|
214
224
|
заготовка правки чужого дерева, и уехавшая без разбора, она становится работой того, кто её не
|
|
215
225
|
заказывал. Сводка уезжает всегда: она говорит, чем пользовались, и мнением не бывает.
|
|
216
|
-
- **Дешёвый шаг закрытия идёт раньше дорогого, а прогон — после вливания.** Вливание
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
в главную ветку не поедет.
|
|
226
|
+
- **Дешёвый шаг закрытия идёт раньше дорогого, а прогон — после вливания.** Вливание договорённости
|
|
227
|
+
и приведение текстов стоят минуты, прогон — окно захода. Идущий после вливания, он проверяет и его
|
|
228
|
+
самого: идущий до, он смотрит то, что в главную не поедет.
|
|
220
229
|
- **Договорённость вливается в спек домена одним из последних коммитов ветки, до открытия PR.**
|
|
221
230
|
К этому моменту код написан, привязки известны, и в главной ветке директория `proposed/` не
|
|
222
231
|
появляется вовсе. Готовые к вливанию перечисляет `npm run check:specs`.
|
|
223
|
-
- **Папка закрытой задачи разбирается, а не переносится целиком.** В `docs/archive/` уезжает то,
|
|
224
|
-
|
|
225
|
-
- **Открытие PR и снятие черновика отбиваются, пока ветка везёт папку своей задачи.**
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
ветки, а не рабочее дерево.
|
|
230
|
-
- **Ветка, снёсшая папку, обязана прибавить запись в архив.** Снести дешевле, чем разобрать, и
|
|
232
|
+
- **Папка закрытой задачи разбирается, а не переносится целиком.** В `docs/archive/` уезжает то, что
|
|
233
|
+
объясняет решение; остальное удаляется. Неразобранную ловит сверка очереди.
|
|
234
|
+
- **Открытие PR и снятие черновика отбиваются, пока ветка везёт папку своей задачи.** Слияние
|
|
235
|
+
нажимает человек на хостинге, где гардов нет: снятый черновик он читает как приглашение влить и
|
|
236
|
+
кнопку нажимает, не дожидаясь коммита уборки. Судится содержимое ветки, а не рабочее дерево.
|
|
237
|
+
- **Ветка, снёсшая папку, обязана прибавить запись в архив.** Снести дешевле, чем разобрать, а
|
|
231
238
|
первым уходит разбор просьбы — единственная запись слов владельца.
|
|
232
|
-
- **Обход — строка `Task-folder-skip: <причина>` в PR или в самой команде.** Пустая причина
|
|
233
|
-
|
|
234
|
-
через месяц становится рабочим путём.
|
|
239
|
+
- **Обход — строка `Task-folder-skip: <причина>` в PR или в самой команде.** Пустая причина обходом
|
|
240
|
+
не считается, а сам обход снимает отказ, но не гасит строку сверки очереди.
|
|
235
241
|
|
|
236
242
|
## Чего из закона здесь нет
|
|
237
243
|
|
package/assets/rules/testing.md
CHANGED
|
@@ -90,6 +90,11 @@ flowchart TD
|
|
|
90
90
|
того, кто её не трогал. Ни линтер, ни сборка, ни сверка спеков времени не знают.
|
|
91
91
|
- **Процедура Connect проверяется вызовом своего метода с рукописным двойником базы.** Контейнер и
|
|
92
92
|
роутер поднимать не надо: спека проверяет решение, а не раскладку полей.
|
|
93
|
+
- **Процедуру зовёт и сквозной набор, а не только тест рядом с ней.** У сквозного набора есть
|
|
94
|
+
свой помощник прямого вызова, и спека берёт ответ сервера оттуда, а не поднимает экран ради
|
|
95
|
+
одного поля. Поэтому «тестов на процедуру нет» утверждается после поиска её имени по всему
|
|
96
|
+
дереву, каталоги сквозных наборов включая, а не после того, как рядом с её файлом не нашлось
|
|
97
|
+
файла проверки: шесть отметок покрытия подряд объявили непокрытым закрытое.
|
|
93
98
|
- **Сид заводит то, без чего экран не открыть, и ничего, что гость примет за настоящее.**
|
|
94
99
|
Содержимое, у которого есть автор, — отзывы, вопросы, обсуждения — гость читает как написанное
|
|
95
100
|
людьми, а стенд собирается из той же базы, что и проверка глазами. Настройки владельца —
|
|
@@ -160,6 +165,17 @@ flowchart TD
|
|
|
160
165
|
в заголовке стоит — сценарий числится покрытым, а что именно утверждается, не спрашивает никто.
|
|
161
166
|
Тело читается вместе с заголовком: обещание в заголовке и утверждение в теле — два разных
|
|
162
167
|
текста, и расходятся они молча.
|
|
168
|
+
- **Успешный ответ команды перечитывается отдельным запросом.** Код возврата говорит, что вызов
|
|
169
|
+
прошёл, и молчит о том, наступило ли нужное состояние: заведение задачи, отметка записи и
|
|
170
|
+
постановка ревьювера отвечают нулём и тогда, когда сделали не то. В отчёт идёт прочитанное, а
|
|
171
|
+
не заказанное.
|
|
172
|
+
- **Служба считается поднятой по выполненному заданию, а не по открытому порту.** Ответ на порту
|
|
173
|
+
говорит, что кто-то там слушает, и неотличим от прошлой сборки, оставшейся с прежнего захода:
|
|
174
|
+
проверяются обе стороны связи — что заказчик выбирает именно её и что задание через неё прошло.
|
|
175
|
+
- **Эталоны снимочного набора лежат рядом со спекой, а обновляются отдельным вызовом и читаются
|
|
176
|
+
глазами.** Обновление «на всякий случай» вместе с прогоном стирает разницу между починенным
|
|
177
|
+
видом и сломанным: обновлённый эталон делает зелёным любой кадр. Где эталоны и чем они
|
|
178
|
+
обновляются, называет компаньон правила.
|
|
163
179
|
- **Растр браузера называется явно, иначе кадр не сходится сам с собой.** Профиль цвета, взятый у
|
|
164
180
|
дисплея машины, ускоритель, считающий растр, и дорисовка кусками — каждый из трёх двигает цвет
|
|
165
181
|
на единицу-другую по каналу, и видно это только там, где смешение стоит на границе округления:
|
|
@@ -176,9 +192,19 @@ flowchart TD
|
|
|
176
192
|
Полнота теста не проверяется: сверка судит путь — сквозной он или юнит, — но не то, сколько
|
|
177
193
|
из обещанного тест на этом пути закрыл. Признак пути читается из слов «Тогда» и нарочно
|
|
178
194
|
молчалив: сценарий, чьё обещание человека не называет, под него не подпадает вовсе, и
|
|
179
|
-
отметку неполноты там по-прежнему ставит рука.
|
|
195
|
+
отметку неполноты там по-прежнему ставит рука.
|
|
196
|
+
|
|
197
|
+
Отметка покрытия стареет молча. Сверка знает идентификатор сценария против заголовка теста, а
|
|
198
|
+
текст отметки под ним для неё проза: он читается как действующее описание и через полгода после
|
|
199
|
+
того, как долг закрыли. Перечитывается отметка вместе с той правкой, которая трогает её
|
|
200
|
+
предмет, — иначе не перечитывает её никто. Договорённостей о подмене модулей тоже нет:
|
|
180
201
|
`vi.mock` в дереве не встречается ни разу, и двойник пишется руками.
|
|
181
202
|
|
|
203
|
+
Наблюдения за тем, как пользуются правилами, это правило не ведёт вовсе: род события, место
|
|
204
|
+
записи и то, что уходит наружу, — предмет закона о наблюдаемости и правила под ним. Здесь оно
|
|
205
|
+
названо затем, чтобы наблюдение не путали с покрытием: покрытие говорит, что проверено, а
|
|
206
|
+
наблюдение — чем пользовались.
|
|
207
|
+
|
|
182
208
|
## Паттерны
|
|
183
209
|
|
|
184
210
|
- `testing-unit` — тест на чистую функцию, на процедуру Connect и разовый тест-доказательство,
|
|
@@ -105,24 +105,25 @@ flowchart TD
|
|
|
105
105
|
начатой работой лучше всякого другого обещания — она точна, её видно, и по ней не отличить
|
|
106
106
|
сделанного от собранного. Ответ владельцу пишется после вызова, а не вместо него: реплика
|
|
107
107
|
посреди хода отвечается вместе с начатым действием.
|
|
108
|
+
- **Слово о своей же работе судится сделанным в том же ходе.** «Не стою — продолжаю» к концу
|
|
109
|
+
хода подтверждается работой, а не намерением: иначе владелец читает пару «обещал — не сделал»
|
|
110
|
+
как ложь. Это требование к слову о дереве, обращённое на себя.
|
|
108
111
|
- **Вариант, поданный владельцу, назван ценой для человека.** Сколько шагов, где человек окажется
|
|
109
|
-
и что ему
|
|
110
|
-
|
|
111
|
-
негодным, пишется в сам вариант, а не остаётся у того, кто его составил.
|
|
112
|
+
и что ему нужно — без этого варианты выглядят равными, и выбор идёт по доводам со стороны кода.
|
|
113
|
+
Знание, которое делает вариант негодным, пишется в сам вариант.
|
|
112
114
|
- **Названное владельцем состояние дерева снимается вызовом раньше объяснения.** «Конфликты»,
|
|
113
115
|
«прогон красный», «ветка отстала» — указание на то, что надо снять, а не тема для разбора.
|
|
114
116
|
Причина называется после починки и только если её спрашивали: объяснение выглядит работой, не
|
|
115
|
-
трогая
|
|
116
|
-
состояние не отменяет — он идёт вторым.
|
|
117
|
+
трогая ни одной ветки. Вопрос «почему» в том же сообщении идёт вторым.
|
|
117
118
|
- **Пересказ действующего порядка без оценки читается как одобрение.** На прямой вопрос владельца
|
|
118
119
|
«как это работает» ответ фактами верен и недостаточен: устройство, названное спокойно, звучит
|
|
119
120
|
принятым. Годность порядка для того, кто им пользуется, называется вместе с ним.
|
|
120
|
-
- **Путь к файлу заданием не бывает.** Строка с адресом называет файл, а не
|
|
121
|
-
|
|
122
|
-
|
|
121
|
+
- **Путь к файлу заданием не бывает.** Строка с адресом называет файл, а не действие: прочитанная
|
|
122
|
+
как поручение, она даёт заходу задание, которого владелец не давал. То же с любой репликой без
|
|
123
|
+
глагола — уточнить дешевле, чем написать полсотни файлов мимо просьбы.
|
|
123
124
|
- **Прерывание работы владельцем называется вслух.** Пришло задание, останавливающее начатое, —
|
|
124
|
-
исполнитель говорит, что стоит, на чём остановлено и что будет с
|
|
125
|
-
|
|
125
|
+
исполнитель говорит, что стоит, на чём остановлено и что будет с прежним, и только потом берётся
|
|
126
|
+
за новое. Молчание об этом владелец читает как «прежнее кончилось».
|
|
126
127
|
- **Остановка называется отдельной репликой.** Не строкой в конце отчёта: там она тонет — владелец
|
|
127
128
|
читает отчёт как рассказ о сделанном. Называются три вещи: что стоит, чего оно ждёт и что
|
|
128
129
|
владелец может решить.
|
|
@@ -130,12 +131,10 @@ flowchart TD
|
|
|
130
131
|
и то, что за ход по ней сделано: правку файла или команду, меняющую дерево. Ход, в котором не
|
|
131
132
|
было ни того ни другого, возвращается исполнителю вместе со следующим шагом из хода работы.
|
|
132
133
|
Отданную и влитую работу страж не судит: она уже дождалась чужого шага.
|
|
133
|
-
- **Снятая папка задачи снимает требование состояния, а ход не кончает.** Ход работы уезжает
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
видит никто, кроме того, кто её сделал. Дальше ход судится вторым признаком, как всякий другой;
|
|
138
|
-
ход, в котором заявку открыли или прочитали, второй признак пропускает сам.
|
|
134
|
+
- **Снятая папка задачи снимает требование состояния, а ход не кончает.** Ход работы уезжает вместе
|
|
135
|
+
с папкой, а папка разбирается до открытия заявки: с этой минуты и до слияния строки состояния нет
|
|
136
|
+
вовсе. Отпускать по этому признаку ход нельзя — снятая папка означает середину отдачи, а не её
|
|
137
|
+
конец. Дальше ход судится вторым признаком; ход, в котором заявку открыли, его пропускает сам.
|
|
139
138
|
- **Работа без ветки и без папки задачи судится тем же стражем по второму признаку.** Состояния у
|
|
140
139
|
неё нет, и первый признак взять неоткуда, — но ход, в котором не было ни одной правки дерева, не
|
|
141
140
|
кончается и здесь.
|
|
@@ -192,24 +191,25 @@ flowchart TD
|
|
|
192
191
|
заведения задачи, ни ветки, ни папки, ни перевода колонки. Чужой шаг он узнаёт по двум
|
|
193
192
|
признакам: в ходе открыт PR либо в ходе прочитан красный прогон. Слова «беру следующую задачу»
|
|
194
193
|
гард действием не считает — ровно потому, что их и произносят вместо неё.
|
|
195
|
-
- **Ход, отдавший работу, доводит её до снятого черновика.**
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
194
|
+
- **Ход, отдавший работу, доводит её до снятого черновика.** У черновика кнопка слияния
|
|
195
|
+
заблокирована хостингом, и по списку заявок готовое от недоделанного не отличить. Следующая
|
|
196
|
+
задача берётся сверх этого, а не вместо. Стережёт это гард ожидания: ход, открывший заявку, не
|
|
197
|
+
кончается, пока состояние отданной работы не спрошено командой того же хода.
|
|
198
|
+
- **Отказ гарда ожидания снимается обоими действиями сразу.** Взятая следующая задача уносит
|
|
199
|
+
признак открытой заявки с собой, и требование спросить состояние отданной работы после неё не
|
|
200
|
+
прозвучит уже никогда.
|
|
201
|
+
- **Работа, оставшаяся в рабочем дереве, ход не кончает.** Ветка впереди удалённой ссылки без
|
|
202
|
+
открытой заявки — сделанное, которого не видит никто; страж читает это без сети.
|
|
201
203
|
- **«Жду прогона» — утверждение о чужом шаге, а не состояние работы.** Прогон бывает зелёным час,
|
|
202
204
|
а бывает не встав вовсе — и второе само не чинится. Слово это требует команды того же хода,
|
|
203
205
|
которая прогон показывает, и без неё не говорится: сказанное без команды владелец читает как
|
|
204
206
|
«работа ещё идёт» и ждёт напрасно. Держит это гард утверждения, а не память исполнителя.
|
|
205
|
-
- **Конец прогона узнаётся возвратом фоновой команды, а не взглядом на страницу.**
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
повторяется вовсе, и оба исхода со стороны выглядят одинаково — работа не двигается.
|
|
207
|
+
- **Конец прогона узнаётся возвратом фоновой команды, а не взглядом на страницу.** Ожидание в
|
|
208
|
+
фоне возвращает исполнителя к заявке само; взгляд на страницу либо повторяется вхолостую, либо
|
|
209
|
+
не повторяется вовсе, и оба исхода выглядят одинаково — работа не двигается.
|
|
209
210
|
- **Ожидание своего же замера ведётся одним ожиданием, а не уведомлением на каждый шаг.**
|
|
210
|
-
Уведомление ставится там, где на каждое
|
|
211
|
-
одно ожидание, кончающееся вместе с замером.
|
|
212
|
-
шаг, а наполнить их нечем.
|
|
211
|
+
Уведомление ставится там, где надо действовать на каждое событие; где значим только итог —
|
|
212
|
+
одно ожидание, кончающееся вместе с замером.
|
|
213
213
|
- **Отказ гарда кончает ход.** Другого пути к отбитой правке не ищут: ни командой оболочки, ни
|
|
214
214
|
соседним инструментом, ни правкой самого гарда. Отбитая правка либо делается после того, как
|
|
215
215
|
условие отказа выполнено, либо не делается вовсе — и тогда владельцу называется отказ, а не
|
|
@@ -242,30 +242,29 @@ flowchart TD
|
|
|
242
242
|
заменяет: её назначает тот, кому она в эту минуту удобна, и она плывёт.
|
|
243
243
|
- **У отказа от необратимого действия есть безопасная часть, и она делается.** Требование спросить
|
|
244
244
|
владельца относится к действию, а не к ходу: работа, у которой отделима часть без последствий,
|
|
245
|
-
делится, а не откладывается целиком. Список
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
его словом, — а не выбор из вариантов вместо и того и другого.
|
|
245
|
+
делится, а не откладывается целиком. Список вариантов вместо работы читается как работа — тем
|
|
246
|
+
полнее, чем аккуратнее составлен: пронумерован, с цифрами, и пустота хода за ним не видна.
|
|
247
|
+
Владельцу называется, что уже сделано и что осталось за его словом.
|
|
249
248
|
- **Признак необратимости берётся из списка, а не выводится доводом.** Список составлен тем, кто
|
|
250
|
-
обратимость уже взвесил. Довод
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
списке нет, исполнитель на слово владельца не гейтит, даже если оно уходит наружу; шаг, снятый
|
|
254
|
-
разбором прошлого промаха, — тем более.
|
|
249
|
+
обратимость уже взвесил. Довод «уходит наружу и не откатывается» приходит всегда, а список —
|
|
250
|
+
только когда его прочитали, и довод поверх списка отменяет его молча: со стороны это выглядит
|
|
251
|
+
осторожностью, а не пропуском шага. Действия вне списка исполнитель не гейтит.
|
|
255
252
|
- **Ход, в котором исполнитель признал промах, не заканчивается, пока записи о происшествии нет.**
|
|
256
|
-
Отбивает гард происшествия — на завершении хода: к моменту признания промах уже
|
|
257
|
-
|
|
258
|
-
|
|
253
|
+
Отбивает гард происшествия — на завершении хода: к моменту признания промах уже случился.
|
|
254
|
+
Каталог записей называет компаньон правила, имя файла — дата и чем был промах, форму держит
|
|
255
|
+
образец раскладки. Признание ловится набором образцов: промах, признанный словами вне набора,
|
|
256
|
+
гард пропускает.
|
|
259
257
|
- **Заход, начатый с передачи, входит в работу тем же правилом, что и всякий другой.** Передача
|
|
260
258
|
лежит вне дерева, её не читает ни одна проверка, и написана она вчера: всё, что в ней стоит,
|
|
261
259
|
проверяется деревом. Порядок входа — четыре шага в паттерне возвращения; стережёт его гард, а не
|
|
262
|
-
|
|
260
|
+
память.
|
|
263
261
|
- **Состояние незаконченной работы приходит в контекст на запуске сессии.** Замысел и ход работы
|
|
264
262
|
отдаются целиком, разбор просьбы — путём. Ветка вида `<КЛЮЧ>-*` без папки даёт предупреждение с
|
|
265
263
|
готовой командой, но сессию не рвёт.
|
|
266
264
|
- **Заполненное окно кончает ход только там, где сжатия нет.** Где оно объявлено, окно —
|
|
267
265
|
продолжение хода: заход сжимается и работает дальше, а порог остановки срабатывает лишь тогда,
|
|
268
|
-
когда сжатие не пришло.
|
|
266
|
+
когда сжатие не пришло. Ход, закрытый ниже порога, теряет остаток окна, за
|
|
267
|
+
который дерево заплатило настройкой, и ловит это один владелец.
|
|
269
268
|
- **Заполнение окна захода стережёт гард, а не память исполнителя.** На первом пороге он
|
|
270
269
|
напоминает выбирать точку остановки, на втором отбивает всё, кроме записи хода работы, передачи
|
|
271
270
|
и команд поставки. Размер окна и оба порога дерево задаёт само; не задавшее размера стража не
|
|
@@ -279,6 +278,10 @@ flowchart TD
|
|
|
279
278
|
сделанное, следующий шаг и особенности захода. В историю она не едет — иначе рядом с ходом
|
|
280
279
|
работы заводится вторая запись об одном и том же.
|
|
281
280
|
|
|
281
|
+
- **Вариант, глушащий проверку, в меню не ставится вовсе.** Выключенное правило линтера, строка
|
|
282
|
+
в списке известного, выведенный из-под проверки файл — все они чинят показание, а не то, на что
|
|
283
|
+
она указала, и вариант этот в меню самый дешёвый. Меню собирается после того, как он вычеркнут.
|
|
284
|
+
|
|
282
285
|
## Чего из закона здесь нет
|
|
283
286
|
|
|
284
287
|
Полноту сказанного владельцу не проверяет ничто: гард утверждения ловит слово-утверждение и
|
|
@@ -273,3 +273,12 @@ npx agent-kit propose # отправить груз в приём: сво
|
|
|
273
273
|
совпадение текста. Признак один, и он читается, а не ищется: до того как в своей проверке
|
|
274
274
|
заводится разбор списка, чтение настройки или сравнение с накопленным, смотрят, что
|
|
275
275
|
экспортирует модуль настройки проверок и чем живут соседние проверки.
|
|
276
|
+
- **Правило, загруженное инструментом, бывает показано не целиком, и обрыв ничем не помечен.**
|
|
277
|
+
Длинный файл приезжает в контекст обрезанным по строке, а снаружи это выглядит концом: показанное
|
|
278
|
+
кончается осмысленным пунктом, и число разделов с оглавлением никто не сверяет. Бьёт обрыв ровно
|
|
279
|
+
по хвосту, а хвост — то место, где дерево отменяет умолчания пакета: разделы надстройки сливаются
|
|
280
|
+
по совпавшему заголовку и новыми уходят в конец. Заход, читавший правило до конца по своему
|
|
281
|
+
ощущению, исполнил пакетный образец буквально и открыл заявку черновиком там, где дерево
|
|
282
|
+
черновиков не держит вовсе. Отсюда порядок: решение о порядке работы принимается только после
|
|
283
|
+
того, как показанные строки сверены с длиной файла — одной командой, — а расходятся они, файл
|
|
284
|
+
дочитывается чтением.
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|