@rt-tools/agent-kit 0.16.1 → 0.17.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-paths.github.mjs +88 -0
- package/assets/checks/board-runs.github.mjs +8 -0
- package/assets/checks/board-titles.github.mjs +66 -0
- package/assets/checks/check-board.github.mjs +17 -4
- package/assets/checks/check-file-size.mjs +10 -2
- package/assets/checks/check-glossary.mjs +170 -0
- package/assets/checks/check-push-gate.mjs +59 -1
- package/assets/checks/check-schema-drift.mjs +12 -5
- package/assets/checks/spec-contract.mjs +9 -0
- package/assets/defaults/gate-map.sh +13 -4
- package/assets/defaults/project.sh +22 -3
- package/assets/docs/GLOSSARY.md +1 -1
- package/assets/hooks/browser-device-id.sh +20 -4
- package/assets/hooks/browser-guard-device-id.sh +5 -2
- package/assets/hooks/git-guard-delivery-folder.sh +19 -0
- package/assets/hooks/git-guard-delivery.sh +39 -0
- package/assets/hooks/git-guard-push-tests.sh +21 -1
- package/assets/hooks/grill-gate-ask.sh +25 -0
- package/assets/hooks/grill-gate.sh +12 -5
- package/assets/hooks/lint-after-edit.sh +44 -16
- package/assets/hooks/skill-gate-layers.sh +7 -0
- package/assets/hooks/skill-gate.sh +29 -0
- package/assets/hooks/task-context-load.sh +10 -0
- package/assets/hooks/task-flow-context.sh +185 -0
- package/assets/hooks/task-flow-draft-guard.sh +92 -0
- package/assets/hooks/task-flow-guard.sh +27 -159
- package/assets/hooks/turn-exit-guard.sh +8 -1
- package/assets/hooks/window-fill-guard.sh +5 -1
- package/assets/laws/delivery.md +19 -0
- package/assets/laws/frontend-application.md +4 -0
- package/assets/laws/verifiability.md +21 -0
- package/assets/laws/work-conduct.md +15 -0
- package/assets/patterns/browser-verification-stand.md +7 -2
- package/assets/patterns/doc-style-write.md +41 -1
- package/assets/patterns/git-workflow-commit.github.md +15 -2
- package/assets/patterns/git-workflow-docker.md +14 -0
- package/assets/patterns/git-workflow-merge.md +18 -0
- package/assets/patterns/git-workflow-migration.md +11 -0
- package/assets/patterns/git-workflow-pr.github.md +6 -1
- package/assets/patterns/git-workflow-secrets.md +14 -0
- package/assets/patterns/git-workflow-stack.md +63 -1
- package/assets/patterns/spec-driven-domain.md +34 -1
- package/assets/patterns/spec-driven-rule.md +11 -0
- package/assets/patterns/spec-driven-sweep.md +57 -0
- package/assets/patterns/task-flow-archive.md +46 -14
- package/assets/patterns/task-flow-close.md +78 -2
- package/assets/patterns/task-flow-resume.md +17 -5
- package/assets/patterns/task-flow-start.md +42 -4
- package/assets/pitfalls/agent-kit.md +73 -3
- package/assets/pitfalls/doc-style.md +5 -0
- package/assets/pitfalls/git-workflow.github.md +68 -0
- package/assets/pitfalls/spec-driven.md +16 -0
- package/assets/pitfalls/task-flow.md +93 -0
- package/assets/pitfalls/turn-conduct.md +14 -0
- package/assets/rules/browser-verification.md +39 -0
- package/assets/rules/deploy-flow.azure.md +8 -0
- package/assets/rules/deploy-flow.github.md +18 -0
- package/assets/rules/deploy-flow.gitlab.md +8 -0
- package/assets/rules/doc-style.md +14 -0
- package/assets/rules/git-workflow.azure.md +5 -0
- package/assets/rules/git-workflow.github.md +85 -75
- package/assets/rules/git-workflow.gitlab.md +5 -0
- package/assets/rules/reuse-first.md +8 -0
- package/assets/rules/shared-code.md +5 -0
- package/assets/rules/spec-driven.md +14 -0
- package/assets/rules/task-flow.md +112 -112
- package/assets/rules/testing.md +14 -1
- package/assets/rules/turn-conduct.md +40 -27
- package/assets/rules/turn-entry.md +6 -0
- package/assets/samples/tasks/_template/grill.md +5 -0
- package/assets/samples/tasks/_template/plan.md +3 -0
- package/assets/skills/agent-kit.md +99 -76
- package/assets/templates/postmortem.md +5 -1
- package/bin/agent-kit.d.ts.map +1 -1
- package/bin/agent-kit.js +30 -6
- package/bin/agent-kit.js.map +1 -1
- package/lib/catalog.d.ts.map +1 -1
- package/lib/catalog.js +2 -1
- package/lib/catalog.js.map +1 -1
- package/lib/commands.d.ts.map +1 -1
- package/lib/commands.js +96 -7
- package/lib/commands.js.map +1 -1
- package/lib/hooks-map.d.ts +26 -0
- package/lib/hooks-map.d.ts.map +1 -1
- package/lib/hooks-map.js +58 -2
- package/lib/hooks-map.js.map +1 -1
- package/lib/sections.d.ts +6 -0
- package/lib/sections.d.ts.map +1 -1
- package/lib/sections.js +19 -0
- package/lib/sections.js.map +1 -1
- package/lib/shipment.d.ts +2 -0
- package/lib/shipment.d.ts.map +1 -1
- package/lib/shipment.fixture.d.ts +5 -0
- package/lib/shipment.fixture.d.ts.map +1 -1
- package/lib/shipment.fixture.js +7 -0
- package/lib/shipment.fixture.js.map +1 -1
- package/lib/shipment.js +13 -1
- package/lib/shipment.js.map +1 -1
- package/lib/sync.d.ts +35 -3
- package/lib/sync.d.ts.map +1 -1
- package/lib/sync.js +59 -8
- package/lib/sync.js.map +1 -1
- package/package.json +1 -1
- package/rt-tools-agent-kit-0.17.0.tgz +0 -0
- package/rt-tools-agent-kit-0.16.1.tgz +0 -0
|
@@ -15,7 +15,7 @@ description: Правило под «Закон о ведении работы»
|
|
|
15
15
|
Грузится по требованию, а не вместе с правилом: при обычном решении она не нужна — она нужна
|
|
16
16
|
тому, кто разбирает промах или спорит с гардом.
|
|
17
17
|
|
|
18
|
-
**Требует:** `hooks/task-flow-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`
|
|
19
19
|
|
|
20
20
|
## Как это называется здесь
|
|
21
21
|
|
|
@@ -26,8 +26,8 @@ description: Правило под «Закон о ведении работы»
|
|
|
26
26
|
| замысел | `docs/tasks/<ветка>/plan.md` — след задачи и этапы с признаками готовности; после написания не правится |
|
|
27
27
|
| ход работы | `docs/tasks/<ветка>/progress.md` — «Где стоим», решения по ходу, записи заходов; единственное место, где отмечается сделанное |
|
|
28
28
|
| договорённость о продукте, записанная до кода | `docs/specs/<домен>/proposed/<фича>/` — спек фичи; переживает мерж и вливается в спек домена |
|
|
29
|
-
| эпик — работа шире одной ветки | карточка в очереди работ с меткой эпика и замысел
|
|
30
|
-
| замысел эпика | запись вне папки
|
|
29
|
+
| эпик — работа шире одной ветки | карточка в очереди работ с меткой эпика и замысел рядом с ней: возможность, состав задач и порядок |
|
|
30
|
+
| замысел эпика | запись вне папки задачи: та умирает с мержем, а эпик её переживает; каталог называет компаньон правила |
|
|
31
31
|
| папка задачи до заведения задачи | `docs/tasks/_draft-<slug>/` — вне истории, пока номера нет |
|
|
32
32
|
| разведка | заход `Explore` или `general-purpose` до первого вопроса владельцу |
|
|
33
33
|
| разбор замысла ролями | `.claude/workflows/plan.js` — нужность, договорённость, критика, замысел |
|
|
@@ -55,28 +55,27 @@ description: Правило под «Закон о ведении работы»
|
|
|
55
55
|
| `задача-взята` | задача в колонке работы, ветка по номеру, папка | написать замысел | `task-flow-start` |
|
|
56
56
|
| `замысел-записан` | замысел лежит и после записи не правится | делать первый этап | `task-flow-start` |
|
|
57
57
|
| `этап-идёт` | этап начат | доделать этап и отметить в ходе работы | `task-flow-resume` |
|
|
58
|
-
| `этапы-кончились` | все этапы отмечены |
|
|
58
|
+
| `этапы-кончились` | все этапы отмечены | влить договорённость, привести тексты, прогнать набор | `task-flow-close` |
|
|
59
59
|
| `разбор-кончился` | набор зелёный, тексты приведены | разобрать папку последним коммитом | `task-flow-archive` |
|
|
60
60
|
| `папка-разобрана` | папки в ветке нет, запись в архиве есть | открыть PR черновиком | `task-flow-close` |
|
|
61
61
|
| `работа-отдана` | PR открыт черновиком | взять следующую задачу | `task-flow-resume` |
|
|
62
62
|
| `влито` | PR слит человеком | разбор работы правилами и сверка очереди | `task-flow-archive` |
|
|
63
63
|
|
|
64
64
|
Ни у одного состояния обязательное действие не звучит как «ждать»: ожидание чужого шага
|
|
65
|
-
состоянием работы не
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
Последние два состояния объявить на диске уже нечем: ход работы уезжает вместе с папкой, а
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
прогона, снять черновик, попросить влить — держится паттерном, а не объявлением.
|
|
65
|
+
состоянием работы не является, поэтому в `работа-отдана` обязательное действие смотрит на
|
|
66
|
+
следующую задачу, а не на открытый PR. Блокированная задача следующей при этом не считается: она
|
|
67
|
+
начнётся после чужого шага, то есть это то же ожидание, названное именем работы. Следующая
|
|
68
|
+
берётся из очереди работ, а очередь спрашивается командой: «задач нет» — утверждение о дереве, и
|
|
69
|
+
подтверждается оно выводом, а не памятью о том, что заводил сам исполнитель. Заполнение окна
|
|
70
|
+
захода состоянием тоже не бывает: заход кончается передачей, а работа остаётся там, где стояла.
|
|
71
|
+
Чем ход кончается — правило `turn-conduct` под тем же законом.
|
|
72
|
+
|
|
73
|
+
Перечень показывается владельцу в начале работы, и на нём же отмечается, где стоим.
|
|
74
|
+
|
|
75
|
+
Последние два состояния объявить на диске уже нечем: ход работы уезжает вместе с папкой, а папка
|
|
76
|
+
разбирается раньше, чем открывается PR. Признак у них поэтому в истории ветки — коммит разбора
|
|
77
|
+
папки, — и читает его гард, а не строка в файле. Цена: с этой минуты и до слияния состояние
|
|
78
|
+
работы виду не подлежит, и хвост из четырёх шагов держится паттерном, а не объявлением.
|
|
80
79
|
|
|
81
80
|
## Ход
|
|
82
81
|
|
|
@@ -99,7 +98,7 @@ flowchart TD
|
|
|
99
98
|
H --> I{Этап сделан}
|
|
100
99
|
I -->|Да| J[Отметка в ходе работы — единственном месте, где отмечается сделанное]
|
|
101
100
|
J --> I
|
|
102
|
-
I -->|Этапы кончились| T[
|
|
101
|
+
I -->|Этапы кончились| T[Договорённость вливается в спек домена, тексты приводятся к сделанному, следом прогоняется набор]
|
|
103
102
|
T --> N[Папка задачи разбирается последним коммитом: разбор просьбы — в описание прошлого, находки — к замыслу эпика, замысел — прочь]
|
|
104
103
|
N --> S[Сверка очереди работ]
|
|
105
104
|
S --> K[PR открывается черновиком; исполнитель называет номер, чего ждёт и что сделает следом]
|
|
@@ -113,45 +112,52 @@ flowchart TD
|
|
|
113
112
|
|
|
114
113
|
## Как закон применяется здесь
|
|
115
114
|
- **Правка кода приложения отбивается, пока работа не дошла до состояния, в котором код
|
|
116
|
-
правится.** Гард требует
|
|
117
|
-
в ходе работы
|
|
115
|
+
правится.** Гард хода работы требует три вещи: папку задачи по имени ветки, замысел в ней и
|
|
116
|
+
объявленное в ходе работы состояние. Договорённость о продукте требует свой гард на те же
|
|
117
|
+
события.
|
|
118
118
|
- **Гард судит объявленный переход, а не наличие файлов.** Пустой замысел, положенный ради
|
|
119
119
|
снятия отказа, лежит так же, как написанный, поэтому отказ снимает объявленное состояние —
|
|
120
120
|
`этап-идёт`, `этапы-кончились`, `разбор-кончился`. Четвёртый путь не состояние, а история
|
|
121
121
|
ветки: папка, разобранная её коммитом, означает отданную работу, и правка по замечаниям идёт
|
|
122
122
|
без замысла на диске.
|
|
123
|
+
- **Строка состояния, переведённая вперёд, — то же объявление намерения, только
|
|
124
|
+
машиночитаемое.** Она точнее всякого обещания, и пустоты за ней не видно никому. Состояние
|
|
125
|
+
объявляется тем ходом, в котором его обязательное действие начато делом, а не тем, в котором о
|
|
126
|
+
нём отчитались.
|
|
123
127
|
- **Отказ по состоянию называет обязательное действие того состояния, которое объявлено.**
|
|
124
128
|
Исполнитель, которому сказано только «не в том состоянии», перепишет строку состояния вместо
|
|
125
129
|
того, чтобы сделать шаг.
|
|
126
130
|
- **Именем состояния считается только слово из перечня.** Своё слово не говорит ни о входе, ни о
|
|
127
131
|
выходе, ни об обязательном действии, а перечень называет все три.
|
|
128
|
-
-
|
|
129
|
-
|
|
132
|
+
- **Два требования — два гарда, и снять одно можно, не теряя второго.** Одним файлом отказ от
|
|
133
|
+
требования договорённости снимал заодно папку задачи — то, о чём дерево не просило. Судят
|
|
134
|
+
порознь: строка о неизменном поведении снимает договорённость, а не требование дойти до
|
|
135
|
+
правки кода.
|
|
130
136
|
- **Влитая договорённость ветку не запирает.** После вливания директории «предложено» на диске
|
|
131
137
|
нет, а замысел на неё ссылается до конца работы: гард отличает влитое от незаведённого по
|
|
132
|
-
истории ветки. Иначе
|
|
138
|
+
истории ветки. Иначе правкам по замечаниям не было бы дороги.
|
|
133
139
|
- **Договорённость требуется по путям правки, а не по оценке задачи.** `apps/**` и `libs/**` —
|
|
134
140
|
признак; правила, тексты, обвязка и зависимости под него не подпадают. Обход — строка
|
|
135
141
|
`**Поведение:** не меняется — <причина владельца>` в замысле; пустая причина не принимается.
|
|
142
|
+
- **Что требует слова владельца, берётся списком, а не оценкой на месте.** Оценку «это
|
|
143
|
+
безопасно» назначает тот, кому она в эту минуту удобна, и меняется она вместе с настроением
|
|
144
|
+
разговора, а не со свойствами команды: за один заход одна и та же команда была сначала слишком
|
|
145
|
+
опасной, чтобы её позвать, а через два хода — достаточно безопасной, чтобы позвать без спроса.
|
|
146
|
+
Недовольство владельца простоем разрешением не бывает: оно говорит, что стоять не следовало, а
|
|
147
|
+
не что можно то, чего нельзя было ходом раньше.
|
|
136
148
|
- **Папка задачи заводится под любую работу, без исключений.** Исключение, у которого есть хоть
|
|
137
|
-
одна законная форма, исполняется как разрешение. Заводится она
|
|
138
|
-
|
|
139
|
-
- **Папка задачи едет в ветку коммитом, а не живёт в одном рабочем дереве.**
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
черновик без номера: заводить в неё нечего, пока нет имени.
|
|
147
|
-
- **Папка задачи разбирается последним коммитом до открытия PR, а не после одобрения.** Кнопку
|
|
148
|
-
слияния нажимает человек на хостинге, куда гард не достаёт, и вливает он, как только видит
|
|
149
|
-
зелёное, — закрывающему коммиту места не остаётся вовсе. Цена перестановки: замысла с этой
|
|
150
|
-
минуты на диске нет, и признак отданной работы гард берёт из истории ветки.
|
|
149
|
+
одна законная форма, исполняется как разрешение. Заводится она до первой правки: сколько
|
|
150
|
+
заходов уйдёт на работу, заранее не знает никто.
|
|
151
|
+
- **Папка задачи едет в ветку коммитом, а не живёт в одном рабочем дереве.** Незакоммиченная,
|
|
152
|
+
она проходит все правки без отказа, а признак отданной работы берётся из истории: отказ придёт
|
|
153
|
+
в последней точке, когда замысел уже снят своими руками. Вне истории законен один черновик без
|
|
154
|
+
номера.
|
|
155
|
+
- **Папка задачи разбирается последним коммитом до открытия PR, а не после одобрения.** Человек
|
|
156
|
+
вливает, как только видит зелёное, и закрывающему коммиту места не остаётся вовсе. Цена:
|
|
157
|
+
замысла с этой минуты на диске нет, и признак отданной работы гард берёт из истории ветки.
|
|
151
158
|
- **Открыв PR, исполнитель называет владельцу три вещи: номер, чего ждёт и что сделает следом.**
|
|
152
|
-
Ждёт он прогона, следом идёт снятие черновика. Зелёный прогон
|
|
153
|
-
|
|
154
|
-
заблокирована.
|
|
159
|
+
Ждёт он прогона, следом идёт снятие черновика. Зелёный прогон однозначным не бывает: он
|
|
160
|
+
говорит, что не сломано, и молчит о заблокированной у черновика кнопке слияния.
|
|
155
161
|
- **Просьба о слиянии — отдельный ход, и раньше зелёного прогона её не бывает.** Порядок один:
|
|
156
162
|
папка разобрана и запушена → PR открыт черновиком → прогон зелёный → черновик снят →
|
|
157
163
|
исполнитель просит влить, называя номер.
|
|
@@ -163,9 +169,10 @@ flowchart TD
|
|
|
163
169
|
становится разрешением работать без замысла везде, куда он не смотрит.
|
|
164
170
|
- **Взятая задача ходом не кончается.** Заведение задачи, ветки, колонки и папки — подготовка, а
|
|
165
171
|
не работа: они переводят её в состояние записанного замысла, где обязательное действие уже
|
|
166
|
-
другое.
|
|
167
|
-
|
|
168
|
-
|
|
172
|
+
другое. Держит это страж выхода хода, называя в отказе первый этап замысла.
|
|
173
|
+
- **Ожидание одной части этапа остановкой этапа не бывает.** Части, которые от ожидаемого не
|
|
174
|
+
зависят, делаются тем же ходом. Владельцу называется, что уже сделано и что осталось на его
|
|
175
|
+
шаг, — этим ожидание и отличается от остановки.
|
|
169
176
|
- **Сделанное отмечается только в ходе работы.** «Где стоим» перезаписывается каждым заходом, а
|
|
170
177
|
не дописывается: это первое, что читает следующий заход.
|
|
171
178
|
- **Слово для нового понятия ищется в словаре дерева.** Общую часть везёт пакет, предметную
|
|
@@ -174,97 +181,90 @@ flowchart TD
|
|
|
174
181
|
- **Папка задачи заводится черновиком и получает номер командой.** До конца разбора неизвестно,
|
|
175
182
|
сколько задач из него выйдет, поэтому номер не может быть первым. Команда заведения
|
|
176
183
|
переименовывает черновик, проставляет шапку замысла и собирает папку с образца, снимая с копий
|
|
177
|
-
шапку
|
|
178
|
-
- **Брошенный разбор виден.** Черновик старше недели перечисляет сверка очереди
|
|
179
|
-
за ним ещё нет, и спросить о нём некого.
|
|
184
|
+
шапку раскладки.
|
|
185
|
+
- **Брошенный разбор виден.** Черновик старше недели перечисляет сверка очереди работ.
|
|
180
186
|
- **Следующая задача берётся из замысла эпика, а список очереди работ спрашивается только там,
|
|
181
|
-
где эпика нет.**
|
|
182
|
-
|
|
183
|
-
ходом, которым берётся работа вне его.
|
|
187
|
+
где эпика нет.** По списку, отсортированному номером, первая задача чужого эпика неотличима от
|
|
188
|
+
своей. Кончившийся эпик называется владельцу тем же ходом, которым берётся работа вне его.
|
|
184
189
|
- **Эпик не закрывается по признаку, подтверждённому только чтением.** Признак, проверяемый
|
|
185
190
|
глазами, называется проверенным лишь вместе с командой или замером и их выводом. Пометка
|
|
186
191
|
«подтверждается живым замером» — обещание проверки, а не проверка.
|
|
187
192
|
- **Задачи эпика заводятся все разом, тем же ходом, что и сам эпик.** Заведение по одной прячет
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
предыдущих.
|
|
193
|
+
объём. Номера возвращаются в раздел порядка той же правкой — без них «взять следующую»
|
|
194
|
+
отвечает названием, а не карточкой. Метку эпика несёт только его карточка.
|
|
195
|
+
|
|
196
|
+
- **Замысел эпика лежит там, где его найдут без сети и после мержа.** Карточка порядка задач не
|
|
197
|
+
держит, а папка задачи держала бы его до слияния первой из них; каталог называет компаньон
|
|
198
|
+
правила. Имя, адрес и способ, названные владельцем по ходу, дописываются туда же тем ходом,
|
|
199
|
+
каким приняты.
|
|
196
200
|
- **Сборка по образцу начинается с чтения самого образца, а не пересказа о нём.** Пересказ лежит
|
|
197
|
-
в разборе просьбы и в замысле эпика; они
|
|
198
|
-
|
|
201
|
+
в разборе просьбы и в замысле эпика; образцом они не считаются. Повторяемая часть открывается
|
|
202
|
+
целиком — обходом каталогов, а не одним файлом, за которым пришли.
|
|
199
203
|
- **Путь к образцу лежит вне дерева и приходит в заход хуком запуска сессии.** Имя чужого дерева
|
|
200
204
|
в файлы репозитория не пишется: там законна ссылка без имени. Каталог для записи — тот же, где
|
|
201
205
|
лежит передача захода. Не записанный так, образец теряется на первой же чистке контекста.
|
|
202
206
|
- **Закрытая работа разбирается правилами, и это шаг закрытия, а не отдельная просьба.** Что
|
|
203
|
-
грузилось, что помогло и чего не хватило, видно только тому заходу, который работу
|
|
204
|
-
|
|
205
|
-
|
|
207
|
+
грузилось, что помогло и чего не хватило, видно только тому заходу, который работу вёл. Разбор
|
|
208
|
+
кончается правкой слоя правил или предложением наружу; ведёт его роль разбора закрытой задачи,
|
|
209
|
+
если дерево её разложило.
|
|
206
210
|
- **Разбор закрытой работы уходит в фон, а исполнитель берёт следующую задачу.** Роль работает
|
|
207
|
-
своим ходом и ничего не
|
|
208
|
-
|
|
211
|
+
своим ходом и ничего не спрашивает. Сводку собирают до запуска, вернувшиеся находки принимают
|
|
212
|
+
одним ходом.
|
|
209
213
|
- **Находки разбора ждут владельца, а в пакет уезжает только сводка наблюдений.** Предложение —
|
|
210
214
|
заготовка правки чужого дерева, и уехавшая без разбора, она становится работой того, кто её не
|
|
211
|
-
заказывал. Сводка
|
|
212
|
-
|
|
215
|
+
заказывал. Сводка уезжает всегда: она говорит, чем пользовались, и мнением не бывает.
|
|
216
|
+
- **Дешёвый шаг закрытия идёт раньше дорогого, а прогон — после вливания.** Вливание
|
|
217
|
+
договорённости и приведение текстов стоят минуты, прогон — окно захода. Прогон, идущий после
|
|
218
|
+
вливания, вдобавок проверяет и его самого: идущий до, он смотрит то состояние дерева, которое
|
|
219
|
+
в главную ветку не поедет.
|
|
213
220
|
- **Договорённость вливается в спек домена одним из последних коммитов ветки, до открытия PR.**
|
|
214
221
|
К этому моменту код написан, привязки известны, и в главной ветке директория `proposed/` не
|
|
215
222
|
появляется вовсе. Готовые к вливанию перечисляет `npm run check:specs`.
|
|
216
223
|
- **Папка закрытой задачи разбирается, а не переносится целиком.** В `docs/archive/` уезжает то,
|
|
217
224
|
что объясняет состоявшееся решение; остальное удаляется. Неразобранную ловит сверка очереди.
|
|
218
|
-
- **Открытие PR
|
|
219
|
-
на слиянии: слияние нажимает человек на хостинге, где гардов нет, и его отказ
|
|
220
|
-
доходит.
|
|
225
|
+
- **Открытие PR и снятие черновика отбиваются, пока ветка везёт папку своей задачи.** Требование
|
|
226
|
+
стоит здесь, а не на слиянии: слияние нажимает человек на хостинге, где гардов нет, и его отказ
|
|
227
|
+
до владельца не доходит. Снятый черновик он читает как приглашение влить и нажимает кнопку, не
|
|
228
|
+
дожидаясь коммита уборки, — три работы подряд уехали в главную именно так. Судится содержимое
|
|
229
|
+
ветки, а не рабочее дерево.
|
|
221
230
|
- **Ветка, снёсшая папку, обязана прибавить запись в архив.** Снести дешевле, чем разобрать, и
|
|
222
|
-
первым уходит разбор просьбы — единственная запись слов владельца.
|
|
223
|
-
|
|
224
|
-
- **Обход — строка `Task-folder-skip: <причина>` в PR или в самой команде.** Работа, вливаемая
|
|
225
|
-
частями, папку до конца не разбирает. Чтение из команды работает и без сети. Пустая причина
|
|
231
|
+
первым уходит разбор просьбы — единственная запись слов владельца.
|
|
232
|
+
- **Обход — строка `Task-folder-skip: <причина>` в PR или в самой команде.** Пустая причина
|
|
226
233
|
обходом не считается, а сам обход снимает отказ, но не гасит строку сверки очереди — иначе он
|
|
227
234
|
через месяц становится рабочим путём.
|
|
228
235
|
|
|
229
236
|
## Чего из закона здесь нет
|
|
230
237
|
|
|
231
|
-
Полноту записанного понимания не проверяет
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
спек правятся в ветке, закон — нет: его статья приносится владельцу текстом, а работа идёт
|
|
262
|
-
дальше без неё.
|
|
263
|
-
|
|
264
|
-
Что именно перенесли в архив, не проверяется. Гард видит, что папка уезжает в главную ветку и
|
|
265
|
-
что ветка что-то в архив добавила, но не может судить, то ли это и стоило ли переносить именно
|
|
266
|
-
это. Сверять содержимое машине нечем — смотрит владелец на ревью. Отсюда же и обход: если
|
|
267
|
-
работа вливается частями, папку до конца не разбирают, а причина остаётся в PR.
|
|
238
|
+
Полноту записанного понимания не проверяет ничто: машине видно наличие записи, но не то, что в
|
|
239
|
+
ней закрыты все пробелы. То же с вопросом, который стоило задать и не задали, — следа он не
|
|
240
|
+
оставляет. Судит оба владелец.
|
|
241
|
+
|
|
242
|
+
Гард судит по путям правки, а не по тому, меняет ли работа поведение на самом деле. Своего
|
|
243
|
+
признака рефакторингу не заводится: оценку «поведение не меняется» назначал бы тот, кому она
|
|
244
|
+
мешает.
|
|
245
|
+
|
|
246
|
+
Ничто из самого разбора не проверяется. Разговор с владельцем инструментом не является: гард
|
|
247
|
+
видит правку файла и не знает ни о разведке до первого вопроса, ни о шести обязательных, ни об
|
|
248
|
+
ответах на них — пустая таблица проходит так же, как заполненная.
|
|
249
|
+
|
|
250
|
+
Гард разговора судит завершение хода, а не отправку вопроса: к моменту отказа вопрос уже у
|
|
251
|
+
владельца. Отсюда порядок — правило читается первым движением захода, а не по отказу гарда.
|
|
252
|
+
|
|
253
|
+
Неизменность замысла не стережёт ничто: правка по ходу отличима от первоначальной записи только
|
|
254
|
+
по истории.
|
|
255
|
+
|
|
256
|
+
Приведение текстов к сделанному не проверяет ничто: что устарело в правиле и в спеке, машине не
|
|
257
|
+
видно. Держится это шагом закрытия и следом задачи в замысле — там названо, что перечитать.
|
|
258
|
+
Правило и спек правятся в ветке, закон — нет: его статья приносится владельцу текстом, а работа
|
|
259
|
+
идёт дальше без неё.
|
|
260
|
+
|
|
261
|
+
Что именно перенесли в архив, не проверяется: гард видит, что папка уехала и что ветка что-то в
|
|
262
|
+
архив добавила, а то ли это — судит владелец на ревью.
|
|
263
|
+
|
|
264
|
+
Гард папки задачи судит вызов исполнителя, а не кнопку хостинга: человек, вливающий работу со
|
|
265
|
+
своей стороны, проходит мимо него молча, и папка уезжает в главную ветку целой. Гард закрывает ту
|
|
266
|
+
половину случаев, где вливает исполнитель; на второй требование держится оставшимся шагом,
|
|
267
|
+
который стоит разделом в теле заявки и произносится вслух.
|
|
268
268
|
|
|
269
269
|
Порядок отдачи работы дерево вправе перевернуть надстройкой, и тогда часть шагов пакета
|
|
270
270
|
перестаёт исполняться. Какие именно — не считает ничто: перечень отменяемого пишется руками, а
|
package/assets/rules/testing.md
CHANGED
|
@@ -73,7 +73,10 @@ flowchart TD
|
|
|
73
73
|
Юнит на тот же расчёт остаётся долгом: между верным решением и тем, что человек его видит, лежит
|
|
74
74
|
всё, чего юнит не касался.
|
|
75
75
|
- **Сквозной тест, погашенный переменной окружения, покрытием не считается.** Выключатель по
|
|
76
|
-
состоянию стенда — пропуск случая, выключатель по переменной — невыполненный тест.
|
|
76
|
+
состоянию стенда — пропуск случая, выключатель по переменной — невыполненный тест. Состоянием
|
|
77
|
+
стенда при этом считается то, чего на нём не бывает по устройству, а не то, что оставил на
|
|
78
|
+
экране соседний тест: снятие по чужому следу закон покрытием не считает, и от законного
|
|
79
|
+
пропуска оно отличается только причиной.
|
|
77
80
|
- **Упоминание в тесте сценария, которого в спеках нет, роняет проверку.** Так ловится
|
|
78
81
|
переименованный или выкинутый сценарий: тесты при этом остаются зелёными.
|
|
79
82
|
- **Решение выносится в чистую функцию и проверяется вызовом.** Компонент и сервис остаются тонкой
|
|
@@ -139,6 +142,16 @@ flowchart TD
|
|
|
139
142
|
проверки и с тех пор только сокращается: дописанная строка гасит сигнал, а не причину, и в
|
|
140
143
|
истории выглядит так же, как починка. Место, где проверка права по букве и не права по существу,
|
|
141
144
|
разбирает владелец, а до его ответа верна проверка.
|
|
145
|
+
- **Обмен принимается прочитанным с обеих сторон, а не по успеху вызовов.** Отправка и правка
|
|
146
|
+
состояния отвечают успехом и тогда, когда прочитать результат нечем: две с лишним сотни записей
|
|
147
|
+
простояли новыми, потому что забрать их было некому, а отметились только те, чей файл ещё лежал
|
|
148
|
+
на диске у отправителя. Заводя сторону обмена, называют вторую: чем читают, кто читает и что
|
|
149
|
+
будет, если её нет. Ответ «нечем» пишется словом — молчание о ней читается как рабочий обмен.
|
|
150
|
+
- **Значение, общее двум сторонам обмена, берётся у объявившей стороны, а не считается заново.**
|
|
151
|
+
Признак записи, форма груза, способ счёта ключа — своя копия любого из них расходится с
|
|
152
|
+
оригиналом молча, и обе стороны при этом зелены: одна пишет под своим значением, другая ищет
|
|
153
|
+
под своим. Проверяется это сценарием, который считает значение обоими путями и сверяет их между
|
|
154
|
+
собой, а не по одному на каждой стороне.
|
|
142
155
|
- **Тест, утверждающий отсутствие, зелен и тогда, когда ищет не то.** Совпадения нет ни у верного
|
|
143
156
|
текста, ни у опечатки в образце, ни у переименованного ключа — отличить их по цвету прогона
|
|
144
157
|
нечем. Отрицательное утверждение поэтому идёт в паре с положительным: сначала проверяется, что
|
|
@@ -43,6 +43,10 @@ description: Правило под «Закон о ведении работы»
|
|
|
43
43
|
назначенном порядке, объявление намерения и названная, но не запущенная команда. Что при этом
|
|
44
44
|
должно быть верно — ниже, в статьях о применении закона.
|
|
45
45
|
|
|
46
|
+
Ход, кончающийся при идущем эпике, показывает владельцу его положение — той же таблицей, какой
|
|
47
|
+
оно уходит в передаче: порядок задач лежит записанным, а тому, ради кого исполнитель по нему
|
|
48
|
+
идёт, состояние очереди иначе не видно ни на одном ходу.
|
|
49
|
+
|
|
46
50
|
## Где это лежит
|
|
47
51
|
|
|
48
52
|
В этом дереве — таблица в `implementation.md` рядом. Пути живут там, а не здесь: правило
|
|
@@ -80,10 +84,16 @@ flowchart TD
|
|
|
80
84
|
быстрее не становятся. Ход, кончившийся такой сводкой, владелец читает как работу: она полна, в
|
|
81
85
|
ней названы номера и состояния, и пустоты за ней не видно. О чужом шаге говорят вместе с начатым
|
|
82
86
|
своим, а не вместо него.
|
|
87
|
+
- **Чужой шаг бывает двух родов, и второй не кончится сам.** Прогон и разбор идут без
|
|
88
|
+
исполнителя и кончатся без него; отбитое разрешение не кончится никогда — его ждут. Работа,
|
|
89
|
+
упершаяся в разрешение, доводится до конца без той части, которую разрешение открывает, а
|
|
90
|
+
непройденное называется в теле заявки, где его читает ревьювер: реплика живёт до следующего
|
|
91
|
+
сообщения, тело заявки — до слияния.
|
|
83
92
|
- **Свой незакрытый шаг владельцу не передаётся.** Список остатков, названный аккуратно, читается
|
|
84
|
-
как рассказ о
|
|
85
|
-
|
|
86
|
-
|
|
93
|
+
как рассказ о работе, и владелец разбирает то, что мог доделать сам исполнитель. Чужой шаг
|
|
94
|
+
сводкой называют, свой — делают. Формой вопроса это не чинится: вопрос законен там, где ответа
|
|
95
|
+
нет ни в правилах, ни в дереве. Список остатков пишется после того, как из него вычеркнуто всё,
|
|
96
|
+
что исполнитель мог закрыть сам.
|
|
87
97
|
- **Меню при назначенном порядке.** Выбор, предложенный владельцу, пока эпик не кончился, — это
|
|
88
98
|
просьба назначить порядок заново. Работы в эпике не осталось — так и говорится: эпик кончился, —
|
|
89
99
|
а не «чем займёмся».
|
|
@@ -99,9 +109,17 @@ flowchart TD
|
|
|
99
109
|
и что ему для этого нужно — без этого варианты выглядят равными, и выбор идёт по доводам со
|
|
100
110
|
стороны кода: «меньше путей», «строку запуска не трогаем». Знание, которое делает вариант
|
|
101
111
|
негодным, пишется в сам вариант, а не остаётся у того, кто его составил.
|
|
112
|
+
- **Названное владельцем состояние дерева снимается вызовом раньше объяснения.** «Конфликты»,
|
|
113
|
+
«прогон красный», «ветка отстала» — указание на то, что надо снять, а не тема для разбора.
|
|
114
|
+
Причина называется после починки и только если её спрашивали: объяснение выглядит работой, не
|
|
115
|
+
трогая при этом ни одной ветки. Вопрос «почему», стоящий в том же сообщении, требования снять
|
|
116
|
+
состояние не отменяет — он идёт вторым.
|
|
102
117
|
- **Пересказ действующего порядка без оценки читается как одобрение.** На прямой вопрос владельца
|
|
103
118
|
«как это работает» ответ фактами верен и недостаточен: устройство, названное спокойно, звучит
|
|
104
119
|
принятым. Годность порядка для того, кто им пользуется, называется вместе с ним.
|
|
120
|
+
- **Путь к файлу заданием не бывает.** Строка с адресом называет файл, а не действие;
|
|
121
|
+
прочитанная как поручение, она даёт заходу задание, которого владелец не давал. То же и с
|
|
122
|
+
любой репликой, где нет глагола: уточнить дешевле, чем написать полсотни файлов мимо просьбы.
|
|
105
123
|
- **Прерывание работы владельцем называется вслух.** Пришло задание, останавливающее начатое, —
|
|
106
124
|
исполнитель говорит, что стоит, на чём остановлено и что будет с прежней работой, и только потом
|
|
107
125
|
берётся за новое. Молчание об этом владелец читает как «прежнее кончилось».
|
|
@@ -121,22 +139,16 @@ flowchart TD
|
|
|
121
139
|
- **Работа без ветки и без папки задачи судится тем же стражем по второму признаку.** Состояния у
|
|
122
140
|
неё нет, и первый признак взять неоткуда, — но ход, в котором не было ни одной правки дерева, не
|
|
123
141
|
кончается и здесь.
|
|
124
|
-
- **Взятая задача — ещё не начатая работа, и ход на ней не кончается.**
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
объявленного состояния». Отчёт при этом встаёт ровно на место следующего действия и выглядит
|
|
130
|
-
завершённым куском лучше всякой другой вехи. Судит это страж отдельным ярусом; ветка без номера
|
|
131
|
-
задачи под него не подпадает, а собранный шаблон папки его снимает — заполненность замысла
|
|
132
|
-
машине не видна.
|
|
142
|
+
- **Взятая задача — ещё не начатая работа, и ход на ней не кончается.** Заведение ветки, перевод
|
|
143
|
+
колонки и названный владельцу номер — подготовка: обязательное действие состояния
|
|
144
|
+
«задача-взята» не сделано ни строкой, а работы в ходе много, и признак «была ли работа» его
|
|
145
|
+
отпускает. Судит это страж отдельным ярусом; ветка без номера задачи под него не подпадает, а
|
|
146
|
+
собранный шаблон папки его снимает.
|
|
133
147
|
- **Разведка ходом не кончается, сколько бы её ни было.** Переключение ветки, подтягивание,
|
|
134
148
|
просмотр истории и чтение заявок — не работа, а подготовка к ней; ход, собранный из них одних,
|
|
135
|
-
оставляет работу там же, где она стояла.
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
ответы, — поэтому ход, набитый ею, читается полным и заходом, и владельцем. Судятся части
|
|
139
|
-
составной команды по одной: чтение, соединённое с правкой, работой остаётся.
|
|
149
|
+
оставляет работу там же, где она стояла. Выглядит она работой лучше всего остального — в ней
|
|
150
|
+
команды, точные числа и проверяемые ответы. Судятся части составной команды по одной: чтение,
|
|
151
|
+
соединённое с правкой, работой остаётся.
|
|
140
152
|
- **Ответ владельцу действием не работает и последним в ходе не стоит.** Порядок внутри хода
|
|
141
153
|
один: работа, потом первый шаг следующей, и только потом текст. Обратный порядок — работа,
|
|
142
154
|
отчёт, конец — стоит за каждой остановкой, которую разбирали: отчёт есть форма завершённости, и
|
|
@@ -170,9 +182,8 @@ flowchart TD
|
|
|
170
182
|
признак «команда была» подтверждал бы одно другим. Прошлый ход не годится: состояние дерева
|
|
171
183
|
меняется, и вчерашний вывод о нынешнем молчит.
|
|
172
184
|
- **Гард утверждения ждёт текст ответа, а не судит запись, какой застал.** Текст ложится в запись
|
|
173
|
-
хода не раньше, чем хост зовёт
|
|
174
|
-
|
|
175
|
-
не «сказать было нечего», а «прочитать нечего».
|
|
185
|
+
хода не раньше, чем хост зовёт хук. Не дождавшись его, гард возвращает ход: пустая запись
|
|
186
|
+
означает не «сказать было нечего», а «прочитать нечего».
|
|
176
187
|
- **Слово-утверждение гард ловит, неверный вывод — нет.** Об образце, судимом по одному его файлу,
|
|
177
188
|
и о пути, которым человек не пойдёт, судить нечем: там нет ни слова, ни команды, с которой
|
|
178
189
|
сверять. Это известная граница гарда, и держат её статьи ниже, а не он.
|
|
@@ -195,6 +206,10 @@ flowchart TD
|
|
|
195
206
|
запущенное в фоне отдельным ходом, возвращает исполнителя к PR само; до тех пор ход занят
|
|
196
207
|
следующей задачей. Взгляд на страницу этого не даёт: он либо повторяется вхолостую, либо не
|
|
197
208
|
повторяется вовсе, и оба исхода со стороны выглядят одинаково — работа не двигается.
|
|
209
|
+
- **Ожидание своего же замера ведётся одним ожиданием, а не уведомлением на каждый шаг.**
|
|
210
|
+
Уведомление ставится там, где на каждое событие надо действовать; где значим только итог —
|
|
211
|
+
одно ожидание, кончающееся вместе с замером. Иначе замер назначает себе ход на каждый свой
|
|
212
|
+
шаг, а наполнить их нечем.
|
|
198
213
|
- **Отказ гарда кончает ход.** Другого пути к отбитой правке не ищут: ни командой оболочки, ни
|
|
199
214
|
соседним инструментом, ни правкой самого гарда. Отбитая правка либо делается после того, как
|
|
200
215
|
условие отказа выполнено, либо не делается вовсе — и тогда владельцу называется отказ, а не
|
|
@@ -232,13 +247,11 @@ flowchart TD
|
|
|
232
247
|
поэтому пустота хода за ним не видна. Владельцу называется, что уже сделано и что осталось за
|
|
233
248
|
его словом, — а не выбор из вариантов вместо и того и другого.
|
|
234
249
|
- **Признак необратимости берётся из списка, а не выводится доводом.** Список составлен тем, кто
|
|
235
|
-
обратимость уже
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
промаха, тем более: довод, которым его туда возвращают, уже разобран и отклонён — и дважды
|
|
241
|
-
подряд готовая работа вставала перед снятым шагом.
|
|
250
|
+
обратимость уже взвесил. Довод «действие уходит наружу и не откатывается» приходит в контекст
|
|
251
|
+
всегда, а список — только когда его прочитали, и применённый поверх списка довод отменяет
|
|
252
|
+
список молча: со стороны это выглядит осторожностью, а не пропуском шага. Действия, которого в
|
|
253
|
+
списке нет, исполнитель на слово владельца не гейтит, даже если оно уходит наружу; шаг, снятый
|
|
254
|
+
разбором прошлого промаха, — тем более.
|
|
242
255
|
- **Ход, в котором исполнитель признал промах, не заканчивается, пока записи о происшествии нет.**
|
|
243
256
|
Отбивает гард происшествия — на завершении хода: к моменту признания промах уже случился, и
|
|
244
257
|
ловить раньше нечего. Признание ловится набором образцов, а не пониманием смысла; промах,
|
|
@@ -97,3 +97,9 @@ flowchart TD
|
|
|
97
97
|
- **Передача пишется для машины, а не для владельца.** Обращение в ней — «спроси у него, чем
|
|
98
98
|
кончилась проба» — уходит в пустоту: к минуте, когда передачу читают, владельца в разговоре
|
|
99
99
|
ещё нет.
|
|
100
|
+
- **Вопрос, записанный передачей, вопросом владельцу не становится.** Адресован он её автору —
|
|
101
|
+
тому же заходу, который его отложил, — и до владельца доходит только после сверки с ходом
|
|
102
|
+
работы: часть таких вопросов закрыта его шагом, и спрашивать по ним значит спрашивать про уже
|
|
103
|
+
назначенное. Унаследованный вопрос тем и опасен, что выглядит заданным раньше и потому
|
|
104
|
+
решённым: меню «зафиксировать, оставить или откатить» уходило владельцу дважды, притом что
|
|
105
|
+
отметка сделанного этапа и его фиксация в ветке — обычный шаг работы.
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Разбор просьбы
|
|
2
2
|
|
|
3
|
+
<Работа, начатая с приехавшего груза, называет здесь его записи — ключами полностью, как их
|
|
4
|
+
печатает чтение приёма. Восьми знаков не хватает: отметка с коротким ключом отбивается строкой
|
|
5
|
+
«такой записи у дерева нет». Этот файл уезжает в описание прошлого, и после разбора папки ключи
|
|
6
|
+
живут только здесь.>
|
|
7
|
+
|
|
3
8
|
## Просьба владельца
|
|
4
9
|
|
|
5
10
|
> <дословно, без пересказа>
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
**Драфт:** `<путь к договорённости о продукте>`
|
|
5
5
|
**Поведение:** меняется
|
|
6
6
|
|
|
7
|
+
Дерево, которое пишет договорённость прямо в спек домена, называет вместо драфта его:
|
|
8
|
+
`**Спек:** `<путь к спеку>``.
|
|
9
|
+
|
|
7
10
|
Работа, не задевающая код приложения, договорённости не требует — тогда вместо строки драфта
|
|
8
11
|
стоит `**Поведение:** не меняется — <причина владельца>`; пустая причина не принимается.
|
|
9
12
|
|